Index: openafs/src/WINNT/afsd/NTMakefile
diff -c openafs/src/WINNT/afsd/NTMakefile:1.46.2.2 openafs/src/WINNT/afsd/NTMakefile:1.46.2.3
*** openafs/src/WINNT/afsd/NTMakefile:1.46.2.2	Tue Jul  4 02:28:23 2006
--- openafs/src/WINNT/afsd/NTMakefile	Mon Jul 24 10:13:16 2006
***************
*** 246,252 ****
  	ole32.lib \
  	adsiid.lib \
  	activeds.lib \
!     userenv.lib
  
  $(LOGON_DLLFILE): $(LOGON_DLLOBJS) $(LOGON_DLLLIBS)
  	$(DLLGUILINK) $(LOGONLINKFLAGS) -def:afslogon.def $(LOGON_DLLSDKLIBS)
--- 246,253 ----
  	ole32.lib \
  	adsiid.lib \
  	activeds.lib \
! 	user32.lib \
!         userenv.lib
  
  $(LOGON_DLLFILE): $(LOGON_DLLOBJS) $(LOGON_DLLLIBS)
  	$(DLLGUILINK) $(LOGONLINKFLAGS) -def:afslogon.def $(LOGON_DLLSDKLIBS)
***************
*** 371,377 ****
  
  # afscpcc.exe
  $(EXEDIR)\afscpcc.exe: $(OUT)\afscpcc.obj $(OUT)\afscpcc.res $(LOGON_DLLLIBS)
! 	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
  
--- 372,378 ----
  
  # afscpcc.exe
  $(EXEDIR)\afscpcc.exe: $(OUT)\afscpcc.obj $(OUT)\afscpcc.res $(LOGON_DLLLIBS)
! 	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib userenv.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
  
Index: openafs/src/WINNT/afsd/afscpcc.c
diff -c openafs/src/WINNT/afsd/afscpcc.c:1.1 openafs/src/WINNT/afsd/afscpcc.c:1.1.6.1
*** openafs/src/WINNT/afsd/afscpcc.c:1.1	Sun May 29 23:52:01 2005
--- openafs/src/WINNT/afsd/afscpcc.c	Mon Jul 24 10:13:16 2006
***************
*** 1,5 ****
  /*
!  * Copyright 2005, Secure Endpoints Inc.
   * All Rights Reserved.
   * 
   * This software has been released under the terms of the MIT License.  
--- 1,5 ----
  /*
!  * Copyright 2005,2006 Secure Endpoints Inc.
   * All Rights Reserved.
   * 
   * This software has been released under the terms of the MIT License.  
***************
*** 15,21 ****
  
      KFW_initialize();
  
!     return KFW_AFS_copy_system_file_to_default_cache(argv[1]);
  }
  
  
--- 15,21 ----
  
      KFW_initialize();
  
!     return KFW_AFS_copy_file_cache_to_default_cache(argv[1]);
  }
  
  
Index: openafs/src/WINNT/afsd/afsd_service.c
diff -c openafs/src/WINNT/afsd/afsd_service.c:1.52.4.1 openafs/src/WINNT/afsd/afsd_service.c:1.52.4.3
*** openafs/src/WINNT/afsd/afsd_service.c:1.52.4.1	Thu Jun  1 11:36:39 2006
--- openafs/src/WINNT/afsd/afsd_service.c	Thu Jul 20 17:46:18 2006
***************
*** 37,46 ****
  HANDLE hAFSDWorkerThread[WORKER_THREADS];
  #endif
  
! /* for the IFS version, set the event DoTerminate, on which all
!    worker threads wait.  they will exit, and then everything else
!    can uninitialize. */
! HANDLE WaitToTerminate, DoTerminate;
  
  int GlobalStatus;
  
--- 37,43 ----
  HANDLE hAFSDWorkerThread[WORKER_THREADS];
  #endif
  
! HANDLE WaitToTerminate;
  
  int GlobalStatus;
  
***************
*** 59,64 ****
--- 56,65 ----
   */
  static void afsd_notifier(char *msgp, char *filep, long line)
  {
+ #ifdef AFSIFS
+     int i;
+ #endif
+ 
      if (filep)
      	LogEvent(EVENTLOG_ERROR_TYPE, MSG_SERVICE_ERROR_STOP_WITH_MSG_AND_LOCATION, 
                   filep, line, msgp);
***************
*** 85,94 ****
      DebugBreak();	
  #endif
  
- #ifndef AFSIFS
      SetEvent(WaitToTerminate);
! #else
!     SetEvent(DoTerminate);
      WaitForMultipleObjects(WORKER_THREADS, hAFSDWorkerThread, TRUE, INFINITE);
      for (i = 0; i < WORKER_THREADS; i++)
          CloseHandle(hAFSDWorkerThread[i]);
--- 86,93 ----
      DebugBreak();	
  #endif
  
      SetEvent(WaitToTerminate);
! #ifdef AFSIFS
      WaitForMultipleObjects(WORKER_THREADS, hAFSDWorkerThread, TRUE, INFINITE);
      for (i = 0; i < WORKER_THREADS; i++)
          CloseHandle(hAFSDWorkerThread[i]);
***************
*** 197,207 ****
          }
  
        doneTrace:
- #ifndef AFSIFS
          SetEvent(WaitToTerminate);
- #else
-         SetEvent(DoTerminate);
- #endif
          break;
  
      case SERVICE_CONTROL_INTERROGATE:
--- 196,202 ----
***************
*** 269,279 ****
          }
  
        doneTrace:
- #ifndef AFSIFS
          SetEvent(WaitToTerminate);
- #else
-         SetEvent(DoTerminate);
- #endif
          dwRet = NO_ERROR;
          break;
  
--- 264,270 ----
***************
*** 384,390 ****
--- 375,383 ----
  #define MAX_RETRIES 30
  static void MountGlobalDrives(void)
  {
+ #ifndef AFSIFS
      char szAfsPath[_MAX_PATH];
+ #endif
      char szDriveToMapTo[5];
      DWORD dwResult;
      char szKeyName[256];
***************
*** 450,465 ****
  
  static void DismountGlobalDrives()
  {
      char szAfsPath[_MAX_PATH];
      char szDriveToMapTo[5];
-     DWORD dwResult;
-     char szKeyName[256];
-     HKEY hKey;
-     DWORD dwIndex = 0;
      DWORD dwDriveSize;
      DWORD dwSubMountSize;
      char szSubMount[256];
      DWORD dwType;
  
      sprintf(szKeyName, "%s\\GlobalAutoMapper", AFSREG_CLT_SVC_PARAM_SUBKEY);
  
--- 443,460 ----
  
  static void DismountGlobalDrives()
  {
+ #ifndef AFSIFS
      char szAfsPath[_MAX_PATH];
      char szDriveToMapTo[5];
      DWORD dwDriveSize;
      DWORD dwSubMountSize;
      char szSubMount[256];
      DWORD dwType;
+ #endif
+     DWORD dwResult;
+     char szKeyName[256];
+     HKEY hKey;
+     DWORD dwIndex = 0;
  
      sprintf(szKeyName, "%s\\GlobalAutoMapper", AFSREG_CLT_SVC_PARAM_SUBKEY);
  
***************
*** 467,473 ****
      if (dwResult != ERROR_SUCCESS)
          return;
  
! #ifndef AFSIFS    
      while (1) {
          dwDriveSize = sizeof(szDriveToMapTo);
          dwSubMountSize = sizeof(szSubMount);
--- 462,470 ----
      if (dwResult != ERROR_SUCCESS)
          return;
  
! #ifdef AFSIFS    
!     /* FIXFIX: implement */
! #else
      while (1) {
          dwDriveSize = sizeof(szDriveToMapTo);
          dwSubMountSize = sizeof(szSubMount);
***************
*** 487,494 ****
          
          afsi_log("Disconnect from GlobalAutoMap of %s to %s %s", szDriveToMapTo, szSubMount, dwResult ? "succeeded" : "failed");
      }        
- #else
- 	/* FIXFIX: implement */
  #endif
  
      RegCloseKey(hKey);
--- 484,489 ----
***************
*** 1033,1038 ****
--- 1028,1036 ----
  #endif /* JUMP */
      HMODULE hHookDll;
      HMODULE hAdvApi32;
+ #ifdef AFSIFS
+     int cnt;
+ #endif
  
  #ifdef _DEBUG
      _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF /*| _CRTDBG_CHECK_ALWAYS_DF*/ | 
***************
*** 1050,1061 ****
      if ( GetLastError() == ERROR_ALREADY_EXISTS )
          afsi_log("Event Object Already Exists: %s", TEXT("afsd_service_WaitToTerminate"));
  
- #ifdef AFSIFS
-     DoTerminate = CreateEvent(NULL, TRUE, FALSE, TEXT("afsd_service_DoTerminate"));
-     if ( GetLastError() == ERROR_ALREADY_EXISTS )
-         afsi_log("Event Object Already Exists: %s", TEXT("afsd_service_DoTerminate"));
- #endif
- 
  #ifndef NOTSERVICE
      hAdvApi32 = LoadLibrary("advapi32.dll");
      if (hAdvApi32 == NULL)
--- 1048,1053 ----
***************
*** 1467,1477 ****
  		
              printf("Hit <Enter> to terminate OpenAFS Client Service\n");
              getchar();  
- #ifndef AFSIFS
              SetEvent(WaitToTerminate);
! #else
!             SetEvent(DoTerminate);
! 			dc_release_hooks();
  #endif
          }
      }
--- 1459,1467 ----
  		
              printf("Hit <Enter> to terminate OpenAFS Client Service\n");
              getchar();  
              SetEvent(WaitToTerminate);
! #ifdef AFSIFS
! 	    dc_release_hooks();
  #endif
          }
      }
Index: openafs/src/WINNT/afsd/afsdifs.c
diff -c openafs/src/WINNT/afsd/afsdifs.c:1.5 openafs/src/WINNT/afsd/afsdifs.c:1.5.4.1
*** openafs/src/WINNT/afsd/afsdifs.c:1.5	Sun Jan 15 03:04:59 2006
--- openafs/src/WINNT/afsd/afsdifs.c	Thu Jul 20 17:46:18 2006
***************
*** 83,91 ****
  
  CRITICAL_SECTION mapLock, scp_list_lock;
  
- /* an event set by the controlling program to cause worker threads to terminate */
- extern HANDLE DoTerminate;
- 
  scp_status_t *scp_list_head = NULL;
  
  
--- 83,88 ----
***************
*** 404,410 ****
  /****************************/
  /* upcalls                  */
  /****************************/
! uc_namei(WCHAR *name, ULONG *fid)	/* performs name<->fid mapping, and enters it into table */
  {
      char *buffer;				/* we support semi-infinite path lengths */
      long code;
--- 401,407 ----
  /****************************/
  /* upcalls                  */
  /****************************/
! long uc_namei(WCHAR *name, ULONG *fid)	/* performs name<->fid mapping, and enters it into table */
  {
      char *buffer;				/* we support semi-infinite path lengths */
      long code;
***************
*** 472,478 ****
  /* this should only be called right after open, so we do not need to stat file.
   * we only check the server's restrictions.  sharing violations are handled in the
   * kernel. the access mode we grant sticks with the file_object until its death. */
! uc_check_access(ULONG fid, ULONG access, ULONG *granted)
  {
      ULONG afs_acc, afs_gr;
      cm_scache_t *scp;
--- 469,475 ----
  /* this should only be called right after open, so we do not need to stat file.
   * we only check the server's restrictions.  sharing violations are handled in the
   * kernel. the access mode we grant sticks with the file_object until its death. */
! long uc_check_access(ULONG fid, ULONG access, ULONG *granted)
  {
      ULONG afs_acc, afs_gr;
      cm_scache_t *scp;
***************
*** 537,543 ****
      return 0;
  }
  
! uc_create(WCHAR *name, ULONG attribs, LARGE_INTEGER alloc, ULONG access, ULONG *granted, ULONG *fid)
  {
      char *buffer;					/* we support semi-infinite path lengths */
      long code;
--- 534,540 ----
      return 0;
  }
  
! long uc_create(WCHAR *name, ULONG attribs, LARGE_INTEGER alloc, ULONG access, ULONG *granted, ULONG *fid)
  {
      char *buffer;					/* we support semi-infinite path lengths */
      long code;
***************
*** 610,616 ****
  
  /* this does not fill the attribs member completely.  additional flags must
     be added in the kernel, such as read-only. */
! uc_stat(ULONG fid, ULONG *attribs, LARGE_INTEGER *size, LARGE_INTEGER *creation,
  		LARGE_INTEGER *access, LARGE_INTEGER *change, LARGE_INTEGER *written)
  {
      cm_scache_t *scp;
--- 607,613 ----
  
  /* this does not fill the attribs member completely.  additional flags must
     be added in the kernel, such as read-only. */
! long uc_stat(ULONG fid, ULONG *attribs, LARGE_INTEGER *size, LARGE_INTEGER *creation,
  		LARGE_INTEGER *access, LARGE_INTEGER *change, LARGE_INTEGER *written)
  {
      cm_scache_t *scp;
***************
*** 640,646 ****
  }
  
  /* set atime, mtime, etc. */
! uc_setinfo(ULONG fid, ULONG attribs, LARGE_INTEGER creation, LARGE_INTEGER access,
  		   LARGE_INTEGER change, LARGE_INTEGER written)
  {
      return IFSL_GENERIC_FAILURE;
--- 637,643 ----
  }
  
  /* set atime, mtime, etc. */
! long uc_setinfo(ULONG fid, ULONG attribs, LARGE_INTEGER creation, LARGE_INTEGER access,
  		   LARGE_INTEGER change, LARGE_INTEGER written)
  {
      return IFSL_GENERIC_FAILURE;
***************
*** 722,728 ****
  /* FIXFIX: this does not catch all overquota errors, because the file
   * is not necessarily written to the server when this returns. */
  /* write data to a file */
! uc_write(ULONG fid, LARGE_INTEGER offset, ULONG length, ULONG *written, char *data)
  {
      ULONG code;
      cm_scache_t *scp;
--- 719,725 ----
  /* FIXFIX: this does not catch all overquota errors, because the file
   * is not necessarily written to the server when this returns. */
  /* write data to a file */
! long uc_write(ULONG fid, LARGE_INTEGER offset, ULONG length, ULONG *written, char *data)
  {
      ULONG code;
      cm_scache_t *scp;
***************
*** 739,751 ****
      return 0;
  }
  
! uc_rename(ULONG fid, WCHAR *curr, WCHAR *new_dir, WCHAR *new_name, ULONG *new_fid)
  {
      int code;
      cm_req_t req;
      char *curdir, *curfile, *newdir, *newfile;
      cm_scache_t *dscp1, *dscp2, *scp;
      char b1[MAX_PATH], b2[MAX_PATH], b3[MAX_PATH];
  
      code = !(scp = ifs_FindScp(fid));
      if (!code)
--- 736,749 ----
      return 0;
  }
  
! long uc_rename(ULONG fid, WCHAR *curr, WCHAR *new_dir, WCHAR *new_name, ULONG *new_fid)
  {
      int code;
      cm_req_t req;
      char *curdir, *curfile, *newdir, *newfile;
      cm_scache_t *dscp1, *dscp2, *scp;
      char b1[MAX_PATH], b2[MAX_PATH], b3[MAX_PATH];
+     wchar_t b3_w[MAX_PATH];
  
      code = !(scp = ifs_FindScp(fid));
      if (!code)
***************
*** 778,785 ****
              {
                  strcat(b3, "\\");
                  strcat(b3, b2);
! 		// TODO: Must convert b3 to type WCHAR*
!                 uc_namei(b3, new_fid);
              }
              else
              {
--- 776,783 ----
              {
                  strcat(b3, "\\");
                  strcat(b3, b2);
! 		mbstowcs(b3_w, b3, MAX_PATH);
!                 uc_namei(b3_w, new_fid);
              }
              else
              {
***************
*** 904,910 ****
      ULONG code;
      char buffer[2048];
      cm_req_t req;
!     cm_scache_t *scp, *child_scp;
      readdir_context_t context;
      LARGE_INTEGER cookie;
  
--- 902,908 ----
      ULONG code;
      char buffer[2048];
      cm_req_t req;
!     cm_scache_t *scp;
      readdir_context_t context;
      LARGE_INTEGER cookie;
  
***************
*** 947,953 ****
      return code;
  }
  
! uc_close(ULONG fid)
  {
      cm_scache_t *scp;
      cm_req_t req;
--- 945,951 ----
      return code;
  }
  
! long uc_close(ULONG fid)
  {
      cm_scache_t *scp;
      cm_req_t req;
***************
*** 988,994 ****
      return 0;
  }
  
! uc_unlink(WCHAR *name)
  {
      char buffer[2048];
      long code;
--- 986,992 ----
      return 0;
  }
  
! long uc_unlink(WCHAR *name)
  {
      char buffer[2048];
      long code;
***************
*** 1020,1026 ****
  }
  
  
! int uc_ioctl_write(ULONG length, char *data, ULONG_PTR *key)
  {
      smb_ioctl_t *iop;
  
--- 1018,1024 ----
  }
  
  
! long uc_ioctl_write(ULONG length, char *data, ULONG_PTR *key)
  {
      smb_ioctl_t *iop;
  
***************
*** 1035,1045 ****
      return 0;
  }
  
! int uc_ioctl_read(ULONG_PTR key, ULONG *length, char *data)
  {
      smb_ioctl_t *iop;
  
!     iop = key;
      osi_assert(iop);
  
      cm_HoldUser(userp);
--- 1033,1043 ----
      return 0;
  }
  
! long uc_ioctl_read(ULONG_PTR key, ULONG *length, char *data)
  {
      smb_ioctl_t *iop;
  
!     iop = (smb_ioctl_t *)key;
      osi_assert(iop);
  
      cm_HoldUser(userp);
***************
*** 1130,1137 ****
      while (1)
      {
  	/* just check if the event is already signalled, do not wait */
! 	if (WaitForSingleObject(DoTerminate, 0) == WAIT_OBJECT_0)
! 		break;
  
  	/* read request... */
  	st = ReadFile(pipe, bufIn, TRANSFER_BUF_SIZE, &lenIn, NULL);
--- 1128,1135 ----
      while (1)
      {
  	/* just check if the event is already signalled, do not wait */
! 	if (WaitForSingleObject(WaitToTerminate, 0) == WAIT_OBJECT_0)
! 	    break;
  
  	/* read request... */
  	st = ReadFile(pipe, bufIn, TRANSFER_BUF_SIZE, &lenIn, NULL);
Index: openafs/src/WINNT/afsd/afskfw-int.h
diff -c openafs/src/WINNT/afsd/afskfw-int.h:1.3 openafs/src/WINNT/afsd/afskfw-int.h:1.3.14.1
*** openafs/src/WINNT/afsd/afskfw-int.h:1.3	Thu Jul 22 18:41:27 2004
--- openafs/src/WINNT/afsd/afskfw-int.h	Mon Jul 24 10:13:17 2006
***************
*** 1,5 ****
  /*
!  * Copyright (c) 2003 SkyRope, LLC
   * All rights reserved.
   * 
   * Redistribution and use in source and binary forms, with or without 
--- 1,6 ----
  /*
! * Copyright (c) 2004, 2005, 2006 Secure Endpoints Inc.
! * Copyright (c) 2003 SkyRope, LLC
   * All rights reserved.
   * 
   * Redistribution and use in source and binary forms, with or without 
***************
*** 103,108 ****
--- 104,110 ----
  #define KRB5_DEFAULT_LIFE            60*60*10 /* 10 hours */
  #define LSA_CCNAME                   "MSLSA:"
  
+ #ifndef KTC_ERROR
  #define KTC_ERROR      11862784L
  #define KTC_TOOBIG     11862785L
  #define KTC_INVAL      11862786L
***************
*** 111,116 ****
--- 113,119 ----
  #define KTC_NOPIOCTL   11862789L
  #define KTC_NOCELL     11862790L
  #define KTC_NOCM       11862791L
+ #endif
  
  /* User Query data structures and functions */
  
Index: openafs/src/WINNT/afsd/afskfw.c
diff -c openafs/src/WINNT/afsd/afskfw.c:1.28.4.1 openafs/src/WINNT/afsd/afskfw.c:1.28.4.3
*** openafs/src/WINNT/afsd/afskfw.c:1.28.4.1	Sun Jul  2 21:03:13 2006
--- openafs/src/WINNT/afsd/afskfw.c	Wed Jul 26 08:51:21 2006
***************
*** 1,5 ****
  /*
!  * Copyright (c) 2004, 2005 Secure Endpoints Inc.
   * Copyright (c) 2003 SkyRope, LLC
   * All rights reserved.
   * 
--- 1,5 ----
  /*
!  * Copyright (c) 2004, 2005, 2006 Secure Endpoints Inc.
   * Copyright (c) 2003 SkyRope, LLC
   * All rights reserved.
   * 
***************
*** 60,65 ****
--- 60,68 ----
  #undef  USE_KRB4
  #include "afskfw-int.h"
  #include "afskfw.h"
+ #include <userenv.h>
+ #include <Sddl.h>
+ #include <Aclapi.h>
  
  #include <osilog.h>
  #include <afs/ptserver.h>
***************
*** 3492,3510 ****
      return success;
  }
  
  void
  KFW_AFS_copy_cache_to_system_file(char * user, char * szLogonId)
  {
!     char filename[256];
      DWORD count;
!     char cachename[264] = "FILE:";
      krb5_context		ctx = 0;
      krb5_error_code		code;
      krb5_principal              princ = 0;
      krb5_ccache			cc  = 0;
      krb5_ccache                 ncc = 0;
  
!     if (!pkrb5_init_context)
          return;
  
      count = GetEnvironmentVariable("TEMP", filename, sizeof(filename));
--- 3495,3637 ----
      return success;
  }
  
+ int 
+ KFW_AFS_set_file_cache_dacl(char *filename, HANDLE hUserToken)
+ {
+     // SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_SID_AUTHORITY;
+     PSID pSystemSID = NULL;
+     DWORD SystemSIDlength = 0, UserSIDlength = 0;
+     PACL ccacheACL = NULL;
+     DWORD ccacheACLlength = 0;
+     PTOKEN_USER pTokenUser = NULL;
+     DWORD retLen;
+     DWORD gle;
+     int ret = 0;  
+ 
+     if (!filename) {
+ 	return 1;
+     }
+ 
+     /* Get System SID */
+     if (!ConvertStringSidToSid("S-1-5-18", &pSystemSID)) {
+ 	ret = 1;
+ 	goto cleanup;
+     }
+ 
+     /* Create ACL */
+     SystemSIDlength = GetLengthSid(pSystemSID);
+     ccacheACLlength = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE)
+         + SystemSIDlength - sizeof(DWORD);
+ 
+     if (hUserToken) {
+ 	if (!GetTokenInformation(hUserToken, TokenUser, NULL, 0, &retLen))
+ 	{
+ 	    if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER ) {
+ 		pTokenUser = (PTOKEN_USER) LocalAlloc(LPTR, retLen);
+ 
+ 		GetTokenInformation(hUserToken, TokenUser, pTokenUser, retLen, &retLen);
+ 	    }		 
+ 	}
+ 
+ 	if (pTokenUser) {
+ 	    UserSIDlength = GetLengthSid(pTokenUser->User.Sid);
+ 
+ 	    ccacheACLlength += sizeof(ACCESS_ALLOWED_ACE) + UserSIDlength 
+ 		- sizeof(DWORD);
+ 	}
+     }
+ 
+     ccacheACL = (PACL) LocalAlloc(LPTR, ccacheACLlength);
+     if (!ccacheACL) {
+  	ret = 1;
+  	goto cleanup;
+      }
+     InitializeAcl(ccacheACL, ccacheACLlength, ACL_REVISION);
+     AddAccessAllowedAceEx(ccacheACL, ACL_REVISION, 0,
+                          STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
+                          pSystemSID);
+     if (pTokenUser) {
+ 	AddAccessAllowedAceEx(ccacheACL, ACL_REVISION, 0,
+ 			     STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
+ 			     pTokenUser->User.Sid);
+ 	if (!SetNamedSecurityInfo( filename, SE_FILE_OBJECT,
+ 				   DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
+ 				   NULL,
+ 				   NULL, 
+ 				   ccacheACL,
+ 				   NULL)) {
+  	    gle = GetLastError();
+  	    if (gle != ERROR_NO_TOKEN)
+ 		ret = 1;
+ 	}
+ 	if (!SetNamedSecurityInfo( filename, SE_FILE_OBJECT,
+ 				   OWNER_SECURITY_INFORMATION,
+ 				   pTokenUser->User.Sid,
+ 				   NULL, 
+ 				   NULL,
+ 				   NULL)) {
+  	    gle = GetLastError();
+  	    if (gle != ERROR_NO_TOKEN)
+ 		ret = 1;
+ 	}
+     } else {
+ 	if (!SetNamedSecurityInfo( filename, SE_FILE_OBJECT,
+ 				   DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
+ 				   NULL,
+ 				   NULL, 
+ 				   ccacheACL,
+ 				   NULL)) {
+  	    gle = GetLastError();
+  	    if (gle != ERROR_NO_TOKEN)
+ 		ret = 1;
+ 	}
+     }
+ 
+   cleanup:
+     if (pSystemSID)
+ 	LocalFree(pSystemSID);
+     if (pTokenUser)
+ 	LocalFree(pTokenUser);
+     if (ccacheACL)
+ 	LocalFree(ccacheACL);
+     return ret;
+ }
+ 
+ int 
+ KFW_AFS_obtain_user_temp_directory(HANDLE hUserToken, char *newfilename, int size)
+ {
+     int  retval = 0;
+     DWORD dwSize = size-1;	/* leave room for nul */
+     DWORD dwLen  = 0;
+  
+     if (!hUserToken || !newfilename || size <= 0)
+  	return;
+  
+      *newfilename = '\0';
+  
+      dwLen = ExpandEnvironmentStringsForUser(hUserToken, "%TEMP%", newfilename, dwSize);
+      if ( !dwLen || dwLen > dwSize )
+  	dwLen = ExpandEnvironmentStringsForUser(hUserToken, "%TMP%", newfilename, dwSize);
+      if ( !dwLen || dwLen > dwSize )
+  	return 1;
+  
+      newfilename[dwSize] = '\0';
+     return 0;
+ }
+ 
  void
  KFW_AFS_copy_cache_to_system_file(char * user, char * szLogonId)
  {
!     char filename[MAX_PATH] = "";
      DWORD count;
!     char cachename[MAX_PATH + 8] = "FILE:";
      krb5_context		ctx = 0;
      krb5_error_code		code;
      krb5_principal              princ = 0;
      krb5_ccache			cc  = 0;
      krb5_ccache                 ncc = 0;
  
!     if (!pkrb5_init_context || !user || !szLogonId)
          return;
  
      count = GetEnvironmentVariable("TEMP", filename, sizeof(filename));
***************
*** 3537,3542 ****
--- 3664,3672 ----
      code = pkrb5_cc_initialize(ctx, ncc, princ);
      if (code) goto cleanup;
  
+     code = KFW_AFS_set_file_cache_dacl(filename, NULL);
+     if (code) goto cleanup;
+ 
      code = pkrb5_cc_copy_creds(ctx,cc,ncc);
  
    cleanup:
***************
*** 3558,3566 ****
  }
  
  int
! KFW_AFS_copy_system_file_to_default_cache(char * filename)
  {
!     char cachename[264] = "FILE:";
      krb5_context		ctx = 0;
      krb5_error_code		code;
      krb5_principal              princ = 0;
--- 3688,3696 ----
  }
  
  int
! KFW_AFS_copy_file_cache_to_default_cache(char * filename)
  {
!     char cachename[MAX_PATH + 8] = "FILE:";
      krb5_context		ctx = 0;
      krb5_error_code		code;
      krb5_principal              princ = 0;
***************
*** 3568,3577 ****
      krb5_ccache                 ncc = 0;
      int retval = 1;
  
!     if (!pkrb5_init_context)
          return 1;
  
!     if ( strlen(filename) + 6 > sizeof(cachename) )
          return 1;
  
      strcat(cachename, filename);
--- 3698,3707 ----
      krb5_ccache                 ncc = 0;
      int retval = 1;
  
!     if (!pkrb5_init_context || !filename)
          return 1;
  
!     if ( strlen(filename) + sizeof("FILE:") > sizeof(cachename) )
          return 1;
  
      strcat(cachename, filename);
Index: openafs/src/WINNT/afsd/afskfw.h
diff -c openafs/src/WINNT/afsd/afskfw.h:1.4.4.1 openafs/src/WINNT/afsd/afskfw.h:1.4.4.2
*** openafs/src/WINNT/afsd/afskfw.h:1.4.4.1	Sun Jul  2 21:03:13 2006
--- openafs/src/WINNT/afsd/afskfw.h	Mon Jul 24 10:13:17 2006
***************
*** 1,5 ****
  /*
!  * Copyright (c) 2003 SkyRope, LLC
   * All rights reserved.
   * 
   * Redistribution and use in source and binary forms, with or without 
--- 1,6 ----
  /*
! * Copyright (c) 2004, 2005, 2006 Secure Endpoints Inc.
! * Copyright (c) 2003 SkyRope, LLC
   * All rights reserved.
   * 
   * Redistribution and use in source and binary forms, with or without 
***************
*** 62,67 ****
--- 63,72 ----
  int  KFW_AFS_get_cellconfig(char *, struct afsconf_cell *, char *);
  void KFW_import_windows_lsa(void);
  BOOL KFW_AFS_get_lsa_principal(char *, DWORD *);
+ int  KFW_AFS_set_file_cache_dacl(char *filename, HANDLE hUserToken);
+ int  KFW_AFS_obtain_user_temp_directory(HANDLE hUserToken, char *newfilename, int size);
+ int  KFW_AFS_copy_file_cache_to_default_cache(char * filename);
+ 
  
  /* These functions are only to be used in the afslogon.dll */
  void KFW_AFS_copy_cache_to_system_file(char *, char *);
Index: openafs/src/WINNT/afsd/afslogon.c
diff -c openafs/src/WINNT/afsd/afslogon.c:1.45.2.1 openafs/src/WINNT/afsd/afslogon.c:1.45.2.3
*** openafs/src/WINNT/afsd/afslogon.c:1.45.2.1	Sun Jul  2 21:03:13 2006
--- openafs/src/WINNT/afsd/afslogon.c	Wed Jul 26 08:51:21 2006
***************
*** 670,677 ****
          lpszOutputString[min(uInputString.Length/2,nOutStringLen-1)] = '\0';
          return TRUE;
      }
!     else
!         lpszOutputString[0] = '\0';
      return FALSE;
  }  // UnicodeStringToANSI
  
--- 670,677 ----
          lpszOutputString[min(uInputString.Length/2,nOutStringLen-1)] = '\0';
          return TRUE;
      }
!       
!     lpszOutputString[0] = '\0';
      return FALSE;
  }  // UnicodeStringToANSI
  
***************
*** 750,758 ****
      /* Convert from Unicode to ANSI */
  
      /*TODO: Use SecureZeroMemory to erase passwords */
!     UnicodeStringToANSI(IL->UserName, uname, MAX_USERNAME_LENGTH);
!     UnicodeStringToANSI(IL->Password, password, MAX_PASSWORD_LENGTH);
!     UnicodeStringToANSI(IL->LogonDomainName, logonDomain, MAX_DOMAIN_LENGTH);
  
      /* Make sure AD-DOMANS sent from login that is sent to us is striped */
      ctemp = strchr(uname, '@');
--- 750,759 ----
      /* Convert from Unicode to ANSI */
  
      /*TODO: Use SecureZeroMemory to erase passwords */
!     if (!UnicodeStringToANSI(IL->UserName, uname, MAX_USERNAME_LENGTH) ||
! 	 !UnicodeStringToANSI(IL->Password, password, MAX_PASSWORD_LENGTH) ||
! 	 !UnicodeStringToANSI(IL->LogonDomainName, logonDomain, MAX_DOMAIN_LENGTH))
!  	return 0;
  
      /* Make sure AD-DOMANS sent from login that is sent to us is striped */
      ctemp = strchr(uname, '@');
***************
*** 1294,1303 ****
      char szPath[MAX_PATH] = "";
      char szLogonId[128] = "";
      DWORD count;
!     char filename[256];
!     char commandline[512];
      STARTUPINFO startupinfo;
      PROCESS_INFORMATION procinfo;
  
      LUID LogonId = {0, 0};
      PSECURITY_LOGON_SESSION_DATA pLogonSessionData = NULL;
--- 1295,1306 ----
      char szPath[MAX_PATH] = "";
      char szLogonId[128] = "";
      DWORD count;
!     char filename[MAX_PATH] = "";
!     char newfilename[MAX_PATH] = "";
!     char commandline[MAX_PATH+256] = "";
      STARTUPINFO startupinfo;
      PROCESS_INFORMATION procinfo;
+     HANDLE hf = INVALID_HANDLE_VALUE;
  
      LUID LogonId = {0, 0};
      PSECURITY_LOGON_SESSION_DATA pLogonSessionData = NULL;
***************
*** 1327,1340 ****
          GetWindowsDirectory(filename, sizeof(filename));
      }
  
!     if ( strlen(filename) + strlen(szLogonId) + 2 <= sizeof(filename) ) {
!         strcat(filename, "\\");
!         strcat(filename, szLogonId);    
  
!         sprintf(commandline, "afscpcc.exe \"%s\"", filename);
  
!         GetStartupInfo(&startupinfo);
!         if (CreateProcessAsUser( pInfo->hToken,
                               "afscpcc.exe",
                               commandline,
                               NULL,
--- 1330,1385 ----
          GetWindowsDirectory(filename, sizeof(filename));
      }
  
!     count = GetEnvironmentVariable("TEMP", filename, sizeof(filename));
!     if ( count > sizeof(filename) || count == 0 ) {
!         GetWindowsDirectory(filename, sizeof(filename));
!     }
! 
!     if ( strlen(filename) + strlen(szLogonId) + 2 > sizeof(filename) ) {
!         DebugEvent0("KFW_Logon_Event - filename too long");
! 	return;
!     }
  
!     strcat(filename, "\\");
!     strcat(filename, szLogonId);    
  
!     hf = CreateFile(filename, FILE_ALL_ACCESS, 0, NULL, OPEN_EXISTING, 
! 		     FILE_ATTRIBUTE_NORMAL, NULL);
!     if (hf == INVALID_HANDLE_VALUE) {
! 	DebugEvent0("KFW_Logon_Event - file cannot be opened");
!  	return;
!     }
!     CloseHandle(hf);
!  
!     if (KFW_AFS_set_file_cache_dacl(filename, pInfo->hToken)) {
! 	DebugEvent0("KFW_Logon_Event - unable to set dacl");
!  	DeleteFile(filename);
!  	return;
!     }
!  
!     if (KFW_AFS_obtain_user_temp_directory(pInfo->hToken, newfilename, sizeof(newfilename))) {
! 	DebugEvent0("KFW_Logon_Event - unable to obtain temp directory");
!  	return;
!     }
! 
!     if ( strlen(newfilename) + strlen(szLogonId) + 2 > sizeof(newfilename) ) {
!         DebugEvent0("KFW_Logon_Event - new filename too long");
! 	return;
!     }
! 
!     strcat(newfilename, "\\");
!     strcat(newfilename, szLogonId);    
! 
!     if (!MoveFileEx(filename, newfilename, 
! 		     MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH)) {
!         DebugEvent("KFW_Logon_Event - MoveFileEx failed GLE = 0x%x", GetLastError());
! 	return;
!     }
! 
!     sprintf(commandline, "afscpcc.exe \"%s\"", newfilename);
! 
!     GetStartupInfo(&startupinfo);
!     if (CreateProcessAsUser( pInfo->hToken,
                               "afscpcc.exe",
                               commandline,
                               NULL,
***************
*** 1345,1356 ****
                               NULL,
                               &startupinfo,
                               &procinfo)) 
!         {
!             WaitForSingleObject(procinfo.hProcess, 30000);
  
!             CloseHandle(procinfo.hThread);
!             CloseHandle(procinfo.hProcess);
!         }
      }
  
      DeleteFile(filename);
--- 1390,1404 ----
                               NULL,
                               &startupinfo,
                               &procinfo)) 
!     {
! 	DebugEvent("KFW_Logon_Event - CommandLine %s", commandline);
  
! 	WaitForSingleObject(procinfo.hProcess, 30000);
! 
! 	CloseHandle(procinfo.hThread);
! 	CloseHandle(procinfo.hProcess);
!     } else {
! 	DebugEvent0("KFW_Logon_Event - CreateProcessFailed");
      }
  
      DeleteFile(filename);
Index: openafs/src/WINNT/afsd/cm_conn.c
diff -c openafs/src/WINNT/afsd/cm_conn.c:1.49.2.3 openafs/src/WINNT/afsd/cm_conn.c:1.49.2.4
*** openafs/src/WINNT/afsd/cm_conn.c:1.49.2.3	Tue Jun 27 11:40:33 2006
--- openafs/src/WINNT/afsd/cm_conn.c	Mon Jul 10 15:27:30 2006
***************
*** 47,53 ****
  	HKEY parmKey;
          
      if (osi_Once(&once)) {
! 		lock_InitializeRWLock(&cm_connLock, "connection global lock");
  
          /* keisa - read timeout value for lanmanworkstation  service.
           * jaltman - as per 
--- 47,53 ----
  	HKEY parmKey;
          
      if (osi_Once(&once)) {
! 	lock_InitializeRWLock(&cm_connLock, "connection global lock");
  
          /* keisa - read timeout value for lanmanworkstation  service.
           * jaltman - as per 
***************
*** 56,84 ****
           * I believe that the default should not be short.  Instead, we should wait until
           * RX times out before reporting a timeout to the SMB client.
           */
! 		code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LANMAN_WKS_PARAM_KEY,
!                             0, KEY_QUERY_VALUE, &parmKey);
! 		if (code == ERROR_SUCCESS)
          {
! 		    DWORD dummyLen = sizeof(sessTimeout);
! 		    code = RegQueryValueEx(parmKey, LANMAN_WKS_SESSION_TIMEOUT, NULL, NULL, 
!                                    (BYTE *) &sessTimeout, &dummyLen);
! 		    if (code == ERROR_SUCCESS)
              {
-                 afsi_log("lanmanworkstation : SessTimeout %d", sessTimeout);
                  RDRtimeout = sessTimeout;
!                 if ( ConnDeadtimeout < RDRtimeout + 15 ) {
!                     ConnDeadtimeout = RDRtimeout + 15;
!                     afsi_log("ConnDeadTimeout increased to %d", ConnDeadtimeout);
!                 }
!                 if ( HardDeadtimeout < 2 * ConnDeadtimeout ) {
!                     HardDeadtimeout = 2 * ConnDeadtimeout;
!                     afsi_log("HardDeadTimeout increased to %d", HardDeadtimeout);
!                 }
!             }
          }
  
!         osi_EndOnce(&once);
      }
  }
  
--- 56,85 ----
           * I believe that the default should not be short.  Instead, we should wait until
           * RX times out before reporting a timeout to the SMB client.
           */
! 	code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LANMAN_WKS_PARAM_KEY,
! 			    0, KEY_QUERY_VALUE, &parmKey);
! 	if (code == ERROR_SUCCESS)
          {
! 	    DWORD dummyLen = sizeof(sessTimeout);
! 	    code = RegQueryValueEx(parmKey, LANMAN_WKS_SESSION_TIMEOUT, NULL, NULL, 
! 				   (BYTE *) &sessTimeout, &dummyLen);
! 	    if (code == ERROR_SUCCESS)
              {
                  RDRtimeout = sessTimeout;
! 	    }
          }
  
! 	afsi_log("lanmanworkstation : SessTimeout %d", sessTimeout);
! 	if ( ConnDeadtimeout < RDRtimeout + 15 ) {
! 	    ConnDeadtimeout = RDRtimeout + 15;
! 	    afsi_log("ConnDeadTimeout increased to %d", ConnDeadtimeout);
! 	}
! 	if ( HardDeadtimeout < 2 * ConnDeadtimeout ) {
! 	    HardDeadtimeout = 2 * ConnDeadtimeout;
! 	    afsi_log("HardDeadTimeout increased to %d", HardDeadtimeout);
! 	}
! 
! 	osi_EndOnce(&once);
      }
  }
  
***************
*** 181,187 ****
      if (reqp->flags & CM_REQ_NORETRY)
          goto out;
  
!     /* if timeout - check that it did not exceed the SMB timeout
       * and retry */
      
      /* timeleft - get if from reqp the same way as cmXonnByMServers does */
--- 182,188 ----
      if (reqp->flags & CM_REQ_NORETRY)
          goto out;
  
!     /* if timeout - check that it did not exceed the HardDead timeout
       * and retry */
      
      /* timeleft - get if from reqp the same way as cmXonnByMServers does */
***************
*** 193,199 ****
  #endif
  	    
      /* leave 5 seconds margin for sleep */
!     timeLeft = RDRtimeout - timeUsed;
  
      if (errorCode == CM_ERROR_TIMEDOUT) {
          if (timeLeft > 5 ) {
--- 194,200 ----
  #endif
  	    
      /* leave 5 seconds margin for sleep */
!     timeLeft = HardDeadtimeout - timeUsed;
  
      if (errorCode == CM_ERROR_TIMEDOUT) {
          if (timeLeft > 5 ) {
Index: openafs/src/WINNT/afsd/cm_daemon.c
diff -c openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.2 openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.3
*** openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.2	Sat Jun 24 16:41:54 2006
--- openafs/src/WINNT/afsd/cm_daemon.c	Wed Jul 26 09:04:08 2006
***************
*** 278,287 ****
      lastTokenCacheCheck = now - cm_daemonTokenCheckInterval/2 + (rand() % cm_daemonTokenCheckInterval);
  
      while (daemon_ShutdownFlag == 0) {
- 	thrd_Sleep(30 * 1000);		/* sleep 30 seconds */
-         if (daemon_ShutdownFlag == 1)
-             return;
- 
  	if (configureFirewall) {
  	    /* Open Microsoft Firewall to allow in port 7001 */
  	    switch (icf_CheckAndAddAFSPorts(AFS_PORTSET_CLIENT)) {
--- 278,283 ----
***************
*** 364,369 ****
--- 360,369 ----
                  SetEvent(WaitToTerminate);
              }
          }
+ 
+ 	thrd_Sleep(30 * 1000);		/* sleep 30 seconds */
+         if (daemon_ShutdownFlag == 1)
+             return;
      }
  }       
  
Index: openafs/src/WINNT/afsd/cm_ioctl.c
diff -c openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.3 openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.4
*** openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.3	Tue Jun 27 18:53:42 2006
--- openafs/src/WINNT/afsd/cm_ioctl.c	Thu Jul 20 17:46:19 2006
***************
*** 216,229 ****
  	cm_scache_t **scpp)
  {
      long code;
      cm_scache_t *substRootp;
-     char * relativePath = ioctlp->inDatap;
- #ifdef AFSIFS
-     char * absRoot[MAX_PATH];
-     long length;
-     wchar_t absRoot_w[MAX_PATH];
-     HANDLE rootDir;
  #endif
      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. */
--- 216,226 ----
  	cm_scache_t **scpp)
  {
      long code;
+ #ifndef AFSIFS
      cm_scache_t *substRootp;
  #endif
+     char * relativePath = ioctlp->inDatap;
+ 
      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. */
***************
*** 237,262 ****
  
  #ifdef AFSIFS
      /* we have passed the whole path, including the afs prefix.
! 	   when the pioctl call is made, we perform an ioctl to afsrdr
! 	   and it returns the correct (full) path.  therefore, there is
! 	   no drive letter, and the path is absolute. */
      code = cm_NameI(cm_data.rootSCachep, relativePath,
                       CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                       userp, "", reqp, scpp);
  
      if (code)
          return code;
! 
!     /* # of bytes of path */
!     code = strlen(ioctlp->inDatap) + 1;
!     ioctlp->inDatap += code;
! 
!     /* This is usually nothing, but for StatMountPoint it is the file name. */
!     TranslateExtendedChars(ioctlp->inDatap);
! 
!     return 0;
! #endif /* AFSIFS */
! 
      if (relativePath[0] == relativePath[1] &&
           relativePath[1] == '\\' && 
           !_strnicmp(cm_NetbiosName,relativePath+2,strlen(cm_NetbiosName))) 
--- 234,249 ----
  
  #ifdef AFSIFS
      /* we have passed the whole path, including the afs prefix.
!        when the pioctl call is made, we perform an ioctl to afsrdr
!        and it returns the correct (full) path.  therefore, there is
!        no drive letter, and the path is absolute. */
      code = cm_NameI(cm_data.rootSCachep, relativePath,
                       CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                       userp, "", reqp, scpp);
  
      if (code)
          return code;
! #else /* AFSIFS */
      if (relativePath[0] == relativePath[1] &&
           relativePath[1] == '\\' && 
           !_strnicmp(cm_NetbiosName,relativePath+2,strlen(cm_NetbiosName))) 
***************
*** 336,341 ****
--- 323,329 ----
          if (code) 
              return code;
      }
+ #endif /* AFSIFS */
  
      /* # of bytes of path */
      code = (long)strlen(ioctlp->inDatap) + 1;
***************
*** 2001,2007 ****
--- 1989,1997 ----
      afs_uuid_t uuid;
      int flags;
      char sessionKey[8];
+ #ifndef AFSIFS
      char *smbname;
+ #endif
      int release_userp = 0;
      char * wdir = NULL;
  
***************
*** 2048,2054 ****
          uname = tp;
          tp += strlen(tp) + 1;
  
! #ifndef AFSIFS			/* no SMB username, so we cannot log based on this */
          if (flags & PIOCTL_LOGON) {
              /* SMB user name with which to associate tokens */
              smbname = tp;
--- 2038,2044 ----
          uname = tp;
          tp += strlen(tp) + 1;
  
! #ifndef AFSIFS	/* no SMB username, so we cannot logon based on this */
          if (flags & PIOCTL_LOGON) {
              /* SMB user name with which to associate tokens */
              smbname = tp;
***************
*** 2058,2064 ****
              tp += strlen(tp) + 1;
          } else {
              osi_Log1(smb_logp,"cm_IoctlSetToken for user [%s]",
!                      osi_LogSaveString(smb_logp,uname));
          }
  #endif
  
--- 2048,2054 ----
              tp += strlen(tp) + 1;
          } else {
              osi_Log1(smb_logp,"cm_IoctlSetToken for user [%s]",
!                      osi_LogSaveString(smb_logp, uname));
          }
  #endif
  
***************
*** 2073,2083 ****
--- 2063,2075 ----
          osi_Log0(smb_logp,"cm_IoctlSetToken - no name specified");
      }
  
+ #ifndef AFSIFS
      if (flags & PIOCTL_LOGON) {
          userp = smb_FindCMUserByName(smbname, ioctlp->fidp->vcp->rname,
  				     SMB_FLAG_CREATE|SMB_FLAG_AFSLOGON);
  	release_userp = 1;
      }
+ #endif /* AFSIFS */
  
      /* store the token */
      lock_ObtainMutex(&userp->mx);
Index: openafs/src/WINNT/afsd/cm_memmap.c
diff -c openafs/src/WINNT/afsd/cm_memmap.c:1.7 openafs/src/WINNT/afsd/cm_memmap.c:1.7.2.1
*** openafs/src/WINNT/afsd/cm_memmap.c:1.7	Mon Feb  6 02:06:34 2006
--- openafs/src/WINNT/afsd/cm_memmap.c	Mon Jul 24 10:13:17 2006
***************
*** 161,167 ****
      psa = GlobalAlloc(GMEM_FIXED, sizeof(SECURITY_ATTRIBUTES));
      psa->nLength = sizeof(SECURITY_ATTRIBUTES);
      psa->lpSecurityDescriptor = psd;
!     psa->bInheritHandle = TRUE;
  
      return psa;
  }       
--- 161,167 ----
      psa = GlobalAlloc(GMEM_FIXED, sizeof(SECURITY_ATTRIBUTES));
      psa->nLength = sizeof(SECURITY_ATTRIBUTES);
      psa->lpSecurityDescriptor = psd;
!     psa->bInheritHandle = FALSE;
  
      return psa;
  }       
Index: openafs/src/WINNT/afsd/cm_scache.c
diff -c openafs/src/WINNT/afsd/cm_scache.c:1.35.2.12 openafs/src/WINNT/afsd/cm_scache.c:1.35.2.13
*** openafs/src/WINNT/afsd/cm_scache.c:1.35.2.12	Wed Jun 28 11:01:21 2006
--- openafs/src/WINNT/afsd/cm_scache.c	Thu Jul 27 22:10:15 2006
***************
*** 1080,1091 ****
          /* ensure that the buffer isn't already in the I/O list */
          for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
              tbufp = osi_GetQData(qdp);
!             if (tbufp == bufp) break;
          }
!         osi_assert(qdp != NULL);
!         osi_assert(osi_GetQData(qdp) == bufp);
!         osi_QRemove((osi_queue_t **) &scp->bufReadsp, &qdp->q);
!         osi_QDFree(qdp);
          if (bufp) {
              bufp->cmFlags &= ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED);
              if (bufp->flags & CM_BUF_WAITING) {
--- 1080,1092 ----
          /* ensure that the buffer isn't already in the I/O list */
          for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
              tbufp = osi_GetQData(qdp);
!             if (tbufp == bufp) 
! 		break;
          }
! 	if (qdp) {
! 	    osi_QRemove((osi_queue_t **) &scp->bufReadsp, &qdp->q);
! 	    osi_QDFree(qdp);
! 	}
          if (bufp) {
              bufp->cmFlags &= ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED);
              if (bufp->flags & CM_BUF_WAITING) {
***************
*** 1101,1112 ****
          /* ensure that the buffer isn't already in the I/O list */
          for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
              tbufp = osi_GetQData(qdp);
!             if (tbufp == bufp) break;
          }
!         osi_assert(qdp != NULL);
!         osi_assert(osi_GetQData(qdp) == bufp);
!         osi_QRemove((osi_queue_t **) &scp->bufWritesp, &qdp->q);
!         osi_QDFree(qdp);
          if (bufp) {
              bufp->cmFlags &= ~CM_BUF_CMSTORING;
              if (bufp->flags & CM_BUF_WAITING) {
--- 1102,1114 ----
          /* ensure that the buffer isn't already in the I/O list */
          for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
              tbufp = osi_GetQData(qdp);
!             if (tbufp == bufp) 
! 		break;
          }
! 	if (qdp) {
! 	    osi_QRemove((osi_queue_t **) &scp->bufWritesp, &qdp->q);
! 	    osi_QDFree(qdp);
! 	}
          if (bufp) {
              bufp->cmFlags &= ~CM_BUF_CMSTORING;
              if (bufp->flags & CM_BUF_WAITING) {
Index: openafs/src/WINNT/afsd/cm_vnodeops.c
diff -c openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.8 openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.9
*** openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.8	Wed Jun 28 11:01:21 2006
--- openafs/src/WINNT/afsd/cm_vnodeops.c	Thu Jul 20 17:46:19 2006
***************
*** 664,673 ****
              }
  
  #ifdef AFSIFS
! 			/* for the IFS version, we bulkstat the dirents because this
! 			   routine is used in place of smb_ReceiveCoreSearchDir.  our
! 			   other option is to modify smb_ReceiveCoreSearchDir itself, 
! 			   but this seems to be the proper use for cm_ApplyDir. */
              lock_ObtainMutex(&scp->mx);
              if ((scp->flags & CM_SCACHEFLAG_BULKSTATTING) == 0
                   && (scp->bulkStatProgress.QuadPart <= thyper.QuadPart))
--- 664,673 ----
              }
  
  #ifdef AFSIFS
! 	    /* for the IFS version, we bulkstat the dirents because this
! 	       routine is used in place of smb_ReceiveCoreSearchDir.  our
! 	       other option is to modify smb_ReceiveCoreSearchDir itself, 
! 	       but this seems to be the proper use for cm_ApplyDir. */
              lock_ObtainMutex(&scp->mx);
              if ((scp->flags & CM_SCACHEFLAG_BULKSTATTING) == 0
                   && (scp->bulkStatProgress.QuadPart <= thyper.QuadPart))
Index: openafs/src/WINNT/afsd/fs.c
diff -c openafs/src/WINNT/afsd/fs.c:1.32.4.1 openafs/src/WINNT/afsd/fs.c:1.32.4.2
*** openafs/src/WINNT/afsd/fs.c:1.32.4.1	Tue Jun 27 18:19:35 2006
--- openafs/src/WINNT/afsd/fs.c	Fri Jul 28 09:38:13 2006
***************
*** 2280,2286 ****
  {
      afs_int32 code;
      struct ViceIoctl blob;
!     afs_int32 parms[MAXGCSIZE];
  
      memset(parms, 0, sizeof(parms));
      blob.in = NULL;
--- 2280,2286 ----
  {
      afs_int32 code;
      struct ViceIoctl blob;
!     afs_uint64 parms[MAXGCSIZE];
  
      memset(parms, 0, sizeof(parms));
      blob.in = NULL;
Index: openafs/src/WINNT/afsd/smb.c
diff -c openafs/src/WINNT/afsd/smb.c:1.118.2.11 openafs/src/WINNT/afsd/smb.c:1.118.2.16
*** openafs/src/WINNT/afsd/smb.c:1.118.2.11	Tue Jul  4 18:43:24 2006
--- openafs/src/WINNT/afsd/smb.c	Mon Jul 31 11:51:38 2006
***************
*** 415,439 ****
      default:
          return "unknown SMB op-2";
      case 0:
!         return "S(00)CreateFile";
      case 1:
!         return "S(01)FindFirst";
      case 2:
!         return "S(02)FindNext";	/* FindNext */
      case 3:
          return "S(03)QueryFileSystem_ReceiveTran2QFSInfo";
      case 4:
!         return "S(04)??";
      case 5:
!         return "S(05)QueryFileInfo_ReceiveTran2QPathInfo";
      case 6:
!         return "S(06)SetFileInfo_ReceiveTran2SetPathInfo";
      case 7:
!         return "S(07)SetInfoHandle_ReceiveTran2QFileInfo";
      case 8:
!         return "S(08)??_ReceiveTran2SetFileInfo";
      case 9:
!         return "S(09)??_ReceiveTran2FSCTL";
      case 10:
          return "S(0a)_ReceiveTran2IOCTL";
      case 11:
--- 415,439 ----
      default:
          return "unknown SMB op-2";
      case 0:
!         return "S(00)CreateFile_ReceiveTran2Open";
      case 1:
!         return "S(01)FindFirst_ReceiveTran2SearchDir";
      case 2:
!         return "S(02)FindNext_ReceiveTran2SearchDir";	/* FindNext */
      case 3:
          return "S(03)QueryFileSystem_ReceiveTran2QFSInfo";
      case 4:
!         return "S(04)SetFileSystem_ReceiveTran2SetFSInfo";
      case 5:
!         return "S(05)QueryPathInfo_ReceiveTran2QPathInfo";
      case 6:
!         return "S(06)SetPathInfo_ReceiveTran2SetPathInfo";
      case 7:
!         return "S(07)QueryFileInfo_ReceiveTran2QFileInfo";
      case 8:
!         return "S(08)SetFileInfo_ReceiveTran2SetFileInfo";
      case 9:
!         return "S(09)_ReceiveTran2FSCTL";
      case 10:
          return "S(0a)_ReceiveTran2IOCTL";
      case 11:
***************
*** 444,449 ****
--- 444,451 ----
          return "S(0d)_ReceiveTran2CreateDirectory";
      case 14:
          return "S(0e)_ReceiveTran2SessionSetup";
+     case 15:
+ 	return "S(0f)_QueryFileSystemInformationFid";
      case 16:
          return "S(10)_ReceiveTran2GetDfsReferral";
      case 17:
***************
*** 1505,1510 ****
--- 1507,1531 ----
      return fidp;
  }
  
+ smb_fid_t *smb_FindFIDByScache(smb_vc_t *vcp, cm_scache_t * scp)
+ {
+     smb_fid_t *fidp = NULL;
+     int newFid = 0;
+         
+     if (!scp)
+         return NULL;
+ 
+     lock_ObtainWrite(&smb_rctLock);
+     for(fidp = vcp->fidsp; fidp; fidp = (smb_fid_t *) osi_QNext(&fidp->q)) {
+         if (scp == fidp->scp) {
+             fidp->refCount++;
+             break;
+         }
+     }
+     lock_ReleaseWrite(&smb_rctLock);
+     return fidp;
+ }
+ 
  void smb_HoldFIDNoLock(smb_fid_t *fidp)
  {
      fidp->refCount++;
***************
*** 2336,2341 ****
--- 2357,2388 ----
  }
  
  /* return the parm'th parameter in the smbp packet */
+ unsigned int smb_GetSMBParmLong(smb_packet_t *smbp, int parm)
+ {
+     int parmCount;
+     unsigned char *parmDatap;
+ 
+     parmCount = *smbp->wctp;
+ 
+     if (parm + 1 >= parmCount) {
+ 	char s[100];
+ 
+ 	sprintf(s, "Bad SMB param %d out of %d, ncb len %d",
+                 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;
+         
+     return parmDatap[0] + (parmDatap[1] << 8) + (parmDatap[2] << 16) + (parmDatap[3] << 24);
+ }
+ 
+ /* return the parm'th parameter in the smbp packet */
  unsigned int smb_GetSMBOffsetParm(smb_packet_t *smbp, int parm, int offset)
  {
      int parmCount;
***************
*** 2386,2392 ****
      *parmDatap++ = parmValue & 0xff;
      *parmDatap++ = (parmValue>>8) & 0xff;
      *parmDatap++ = (parmValue>>16) & 0xff;
!     *parmDatap++ = (parmValue>>24) & 0xff;
  }
  
  void smb_SetSMBParmDouble(smb_packet_t *smbp, int slot, char *parmValuep)
--- 2433,2439 ----
      *parmDatap++ = parmValue & 0xff;
      *parmDatap++ = (parmValue>>8) & 0xff;
      *parmDatap++ = (parmValue>>16) & 0xff;
!     *parmDatap   = (parmValue>>24) & 0xff;
  }
  
  void smb_SetSMBParmDouble(smb_packet_t *smbp, int slot, char *parmValuep)
***************
*** 3188,3198 ****
      }
  
      lock_ObtainMutex(&vcp->mx);
      if (VistaProtoIndex != -1) {
          protoIndex = VistaProtoIndex;
          vcp->flags |= (SMB_VCFLAG_USENT | SMB_VCFLAG_USEV3);
!     }
!     if (NTProtoIndex != -1) {
          protoIndex = NTProtoIndex;
          vcp->flags |= (SMB_VCFLAG_USENT | SMB_VCFLAG_USEV3);
      }
--- 3235,3247 ----
      }
  
      lock_ObtainMutex(&vcp->mx);
+ #if 0
      if (VistaProtoIndex != -1) {
          protoIndex = VistaProtoIndex;
          vcp->flags |= (SMB_VCFLAG_USENT | SMB_VCFLAG_USEV3);
!     } else 
! #endif	
! 	if (NTProtoIndex != -1) {
          protoIndex = NTProtoIndex;
          vcp->flags |= (SMB_VCFLAG_USENT | SMB_VCFLAG_USEV3);
      }
***************
*** 3209,3215 ****
  
      if (protoIndex == -1)
          return CM_ERROR_INVAL;
!     else if (NTProtoIndex != -1) {
          smb_SetSMBParm(outp, 0, protoIndex);
          if (smb_authType != SMB_AUTH_NONE) {
              smb_SetSMBParmByte(outp, 1,
--- 3258,3264 ----
  
      if (protoIndex == -1)
          return CM_ERROR_INVAL;
!     else if (VistaProtoIndex != 1 || NTProtoIndex != -1) {
          smb_SetSMBParm(outp, 0, protoIndex);
          if (smb_authType != SMB_AUTH_NONE) {
              smb_SetSMBParmByte(outp, 1,
***************
*** 4655,4666 ****
          attr.mask |= CM_ATTRMASK_CLIENTMODTIME;
          smb_UnixTimeFromDosUTime(&attr.clientModTime, dosTime);
      }
!     if ((newScp->unixModeBits & 0222) && (attribute & 1) != 0) {
          /* we're told to make a writable file read-only */
          attr.unixModeBits = newScp->unixModeBits & ~0222;
          attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
      }
!     else if ((newScp->unixModeBits & 0222) == 0 && (attribute & 1) == 0) {
          /* we're told to make a read-only file writable */
          attr.unixModeBits = newScp->unixModeBits | 0222;
          attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
--- 4704,4715 ----
          attr.mask |= CM_ATTRMASK_CLIENTMODTIME;
          smb_UnixTimeFromDosUTime(&attr.clientModTime, dosTime);
      }
!     if ((newScp->unixModeBits & 0222) && (attribute & SMB_ATTR_READONLY) != 0) {
          /* we're told to make a writable file read-only */
          attr.unixModeBits = newScp->unixModeBits & ~0222;
          attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
      }
!     else if ((newScp->unixModeBits & 0222) == 0 && (attribute & SMB_ATTR_READONLY) == 0) {
          /* we're told to make a read-only file writable */
          attr.unixModeBits = newScp->unixModeBits | 0222;
          attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
***************
*** 6388,6396 ****
  
  long smb_ReceiveCoreWrite(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
-     osi_hyper_t offset;
-     long count, written = 0, total_written = 0;
      unsigned short fd;
      unsigned pid;
      smb_fid_t *fidp;
      long code = 0;
--- 6437,6447 ----
  
  long smb_ReceiveCoreWrite(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short fd;
+     unsigned short count;
+     osi_hyper_t offset;
+     unsigned short hint;
+     long written = 0, total_written = 0;
      unsigned pid;
      smb_fid_t *fidp;
      long code = 0;
***************
*** 6402,6408 ****
      fd = smb_GetSMBParm(inp, 0);
      count = smb_GetSMBParm(inp, 1);
      offset.HighPart = 0;	/* too bad */
!     offset.LowPart = smb_GetSMBParm(inp, 2) | (smb_GetSMBParm(inp, 3) << 16);
  
      op = smb_GetSMBData(inp, NULL);
      op = smb_ParseDataBlock(op, NULL, &inDataBlockCount);
--- 6453,6460 ----
      fd = smb_GetSMBParm(inp, 0);
      count = smb_GetSMBParm(inp, 1);
      offset.HighPart = 0;	/* too bad */
!     offset.LowPart = smb_GetSMBParmLong(inp, 2);
!     hint = smb_GetSMBParm(inp, 4);
  
      op = smb_GetSMBData(inp, NULL);
      op = smb_ParseDataBlock(op, NULL, &inDataBlockCount);
***************
*** 6412,6448 ****
          
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp)
          return CM_ERROR_BADFD;
          
      lock_ObtainMutex(&fidp->mx);
      if (fidp->flags & SMB_FID_IOCTL) {
  	lock_ReleaseMutex(&fidp->mx);
          code = smb_IoctlWrite(fidp, vcp, inp, outp);
  	smb_ReleaseFID(fidp);
  	return code;
      }
      lock_ReleaseMutex(&fidp->mx);
      userp = smb_GetUserFromVCP(vcp, inp);
  
-     /* special case: 0 bytes transferred means truncate to this position */
-     if (count == 0) {
-         cm_req_t req;
- 
-         cm_InitReq(&req);
- 
-         truncAttr.mask = CM_ATTRMASK_LENGTH;
-         truncAttr.length.LowPart = offset.LowPart;
-         truncAttr.length.HighPart = 0;
-         lock_ObtainMutex(&fidp->mx);
-         code = cm_SetAttr(fidp->scp, &truncAttr, userp, &req);
- 	fidp->flags |= SMB_FID_LENGTHSETDONE;
-         lock_ReleaseMutex(&fidp->mx);
-         smb_SetSMBParm(outp, 0, /* count */ 0);
-         smb_SetSMBDataLength(outp, 0);
-         goto done;
-     }
- 
      {
          cm_key_t key;
          LARGE_INTEGER LOffset;
--- 6464,6485 ----
          
      fd = smb_ChainFID(fd, inp);
      fidp = smb_FindFID(vcp, fd, 0);
!     if (!fidp) {
! 	osi_Log0(smb_logp, "smb_ReceiveCoreWrite fid not found");
          return CM_ERROR_BADFD;
+     }
          
      lock_ObtainMutex(&fidp->mx);
      if (fidp->flags & SMB_FID_IOCTL) {
  	lock_ReleaseMutex(&fidp->mx);
          code = smb_IoctlWrite(fidp, vcp, inp, outp);
  	smb_ReleaseFID(fidp);
+ 	osi_Log1(smb_logp, "smb_ReceiveCoreWrite ioctl code 0x%x", code);
  	return code;
      }
      lock_ReleaseMutex(&fidp->mx);
      userp = smb_GetUserFromVCP(vcp, inp);
  
      {
          cm_key_t key;
          LARGE_INTEGER LOffset;
***************
*** 6460,6467 ****
          code = cm_LockCheckWrite(fidp->scp, LOffset, LLength, key);
          lock_ReleaseMutex(&fidp->scp->mx);
  
!         if (code)
              goto done;
      }
  
      /*
--- 6497,6526 ----
          code = cm_LockCheckWrite(fidp->scp, LOffset, LLength, key);
          lock_ReleaseMutex(&fidp->scp->mx);
  
!         if (code) {
! 	    osi_Log1(smb_logp, "smb_ReceiveCoreWrite lock check failure 0x%x", code);
              goto done;
+ 	}
+     }
+ 
+     /* special case: 0 bytes transferred means truncate to this position */
+     if (count == 0) {
+         cm_req_t req;
+ 
+ 	osi_Log1(smb_logp, "smb_ReceiveCoreWrite truncation to length 0x%x", offset.LowPart);
+         
+         cm_InitReq(&req);
+ 
+         truncAttr.mask = CM_ATTRMASK_LENGTH;
+         truncAttr.length.LowPart = offset.LowPart;
+         truncAttr.length.HighPart = 0;
+         lock_ObtainMutex(&fidp->mx);
+         code = cm_SetAttr(fidp->scp, &truncAttr, userp, &req);
+ 	fidp->flags |= SMB_FID_LENGTHSETDONE;
+         lock_ReleaseMutex(&fidp->mx);
+ 	smb_SetSMBParm(outp, 0, 0 /* count */);
+ 	smb_SetSMBDataLength(outp, 0);
+ 	goto done;
      }
  
      /*
***************
*** 6498,6507 ****
--- 6557,6571 ----
          written = 0;
      }
      
+     osi_Log2(smb_logp, "smb_ReceiveCoreWrite total written 0x%x code 0x%x",
+              total_written, code);
+         
      /* set the packet data length to 3 bytes for the data block header,
       * plus the size of the data.
       */
      smb_SetSMBParm(outp, 0, total_written);
+     smb_SetSMBParmLong(outp, 1, offset.LowPart);
+     smb_SetSMBParm(outp, 3, hint);
      smb_SetSMBDataLength(outp, 0);
  
    done:
***************
*** 7009,7015 ****
          
      /* compute initial mode bits based on read-only flag in attributes */
      initialModeBits = 0666;
!     if (attributes & 1) initialModeBits &= ~0222;
          
      tp = smb_GetSMBData(inp, NULL);
      pathp = smb_ParseASCIIBlock(tp, &tp);
--- 7073,7080 ----
          
      /* compute initial mode bits based on read-only flag in attributes */
      initialModeBits = 0666;
!     if (attributes & SMB_ATTR_READONLY) 
! 	initialModeBits &= ~0222;
          
      tp = smb_GetSMBData(inp, NULL);
      pathp = smb_ParseASCIIBlock(tp, &tp);
***************
*** 8734,8739 ****
--- 8799,8805 ----
      smb_tran2DispatchTable[12].procp = smb_ReceiveTran2FindNotifyNext;
      smb_tran2DispatchTable[13].procp = smb_ReceiveTran2CreateDirectory;
      smb_tran2DispatchTable[14].procp = smb_ReceiveTran2SessionSetup;
+     smb_tran2DispatchTable[15].procp = smb_ReceiveTran2QFSInfoFid;
      smb_tran2DispatchTable[16].procp = smb_ReceiveTran2GetDFSReferral;
      smb_tran2DispatchTable[17].procp = smb_ReceiveTran2ReportDFSInconsistency;
  
Index: openafs/src/WINNT/afsd/smb.h
diff -c openafs/src/WINNT/afsd/smb.h:1.41.2.4 openafs/src/WINNT/afsd/smb.h:1.41.2.7
*** openafs/src/WINNT/afsd/smb.h:1.41.2.4	Tue Jul  4 18:43:24 2006
--- openafs/src/WINNT/afsd/smb.h	Fri Jul 28 09:38:13 2006
***************
*** 83,92 ****
--- 83,113 ----
  #define SMB_QUERY_FILE_UNIX_LINK        0x201
  #define SMB_INFO_PASSTHROUGH           0x1000
  
+ #define SMB_SET_FILE_BASIC_INFO         0x101
+ #define SMB_SET_FILE_DISPOSITION_INFO   0x102
+ #define SMB_SET_FILE_ALLOCATION_INFO    0x103
+ #define SMB_SET_FILE_END_OF_FILE_INFO   0x104
  #define SMB_SET_FILE_UNIX_BASIC         0x200
  #define SMB_SET_FILE_UNIX_LINK          0x201
  #define SMB_SET_FILE_UNIX_HLINK         0x203
  
+ #define SMB_INFO_ALLOCATION 		1
+ #define SMB_INFO_VOLUME			2
+ #define SMB_QUERY_FS_LABEL_INFO         0x101
+ #define SMB_QUERY_FS_VOLUME_INFO 	0x102
+ #define SMB_QUERY_FS_SIZE_INFO		0x103
+ #define SMB_QUERY_FS_DEVICE_INFO	0x104
+ #define SMB_QUERY_FS_ATTRIBUTE_INFO	0x105
+ #define SMB_QUERY_FS_QUOTA_INFO         0x106
+ #define SMB_QUERY_FS_CONTROL_INFO       0x107
+ #define SMB_INFO_UNIX			0x200
+ #define SMB_INFO_MACOS			0x301
+ 
+ #define SMB_FIND_FILE_DIRECTORY_INFO      0x101
+ #define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102
+ #define SMB_FIND_FILE_NAMES_INFO	  0x103
+ #define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104
+ 
  /* more defines */
  #define SMB_NOPCODES		256	/* # of opcodes in the dispatch table */
  
***************
*** 386,392 ****
  #define SMB_FID_QLOCK_PID               0
  
  /*
!  * SMB file attributes (32-bit)
   */
  #define SMB_ATTR_READONLY       0x0001
  #define SMB_ATTR_HIDDEN         0x0002 /* hidden file for the purpose of dir listings */
--- 407,413 ----
  #define SMB_FID_QLOCK_PID               0
  
  /*
!  * SMB file attributes (16-bit)
   */
  #define SMB_ATTR_READONLY       0x0001
  #define SMB_ATTR_HIDDEN         0x0002 /* hidden file for the purpose of dir listings */
***************
*** 395,400 ****
--- 416,423 ----
  #define SMB_ATTR_DIRECTORY      0x0010
  #define SMB_ATTR_ARCHIVE        0x0020
  #define SMB_ATTR_DEVICE         0x0040
+ 
+ /* the following are Extended File Attributes (32-bit) */
  #define SMB_ATTR_NORMAL         0x0080 /* normal file. Only valid if used alone */
  #define SMB_ATTR_TEMPORARY      0x0100
  #define SMB_ATTR_SPARSE_FILE    0x0200 /* used with dfs links */
***************
*** 403,408 ****
--- 426,438 ----
  #define SMB_ATTR_OFFLINE        0x1000
  #define SMB_ATTR_NOT_CONTENT_INDEXED 0x2000
  #define SMB_ATTR_ENCRYPTED      0x4000
+ #define SMB_ATTR_POSIX_SEMANTICS	0x01000000
+ #define SMB_ATTR_BACKUP_SEMANTICS	0x02000000
+ #define SMB_ATTR_DELETE_ON_CLOSE	0x04000000
+ #define SMB_ATTR_SEQUENTIAL_SCAN	0x08000000
+ #define SMB_ATTR_RANDOM_ACCESS		0x10000000
+ #define SMB_ATTR_NO_BUFFERING		0x20000000
+ #define SMB_ATTR_WRITE_THROUGH		0x80000000
  
  #define LOCKING_ANDX_SHARED_LOCK        0x01 /* Read-only lock */
  #define LOCKING_ANDX_OPLOCK_RELEASE     0x02 /* Oplock break notification */
***************
*** 545,550 ****
--- 575,582 ----
  
  extern smb_fid_t *smb_FindFID(smb_vc_t *vcp, unsigned short fid, int flags);
  
+ extern smb_fid_t *smb_FindFIDByScache(smb_vc_t *vcp, cm_scache_t * scp);
+ 
  extern void smb_HoldFIDNoLock(smb_fid_t *fidp);
  
  extern void smb_ReleaseFID(smb_fid_t *fidp);
***************
*** 576,581 ****
--- 608,615 ----
  
  extern unsigned int smb_GetSMBParm(smb_packet_t *smbp, int parm);
  
+ extern unsigned int smb_GetSMBParmLong(smb_packet_t *smbp, int parm);
+ 
  extern unsigned int smb_GetSMBOffsetParm(smb_packet_t *smbp, int parm, int offset);
  
  extern void smb_SetSMBParm(smb_packet_t *smbp, int slot, unsigned int parmValue);
***************
*** 672,681 ****
  
  extern int smb_ChainFID(int fid, smb_packet_t *inp);
  
- extern smb_fid_t *smb_FindFID(smb_vc_t *vcp, unsigned short fid, int flags);
- 
- extern void smb_ReleaseFID(smb_fid_t *fidp);
- 
  extern unsigned char *smb_ParseDataBlock(unsigned char *inp, char **chainpp, int *lengthp);
  
  extern unsigned char *smb_ParseASCIIBlock(unsigned char *inp, char **chainpp);
--- 706,711 ----
Index: openafs/src/WINNT/afsd/smb3.c
diff -c openafs/src/WINNT/afsd/smb3.c:1.95.2.11 openafs/src/WINNT/afsd/smb3.c:1.95.2.14
*** openafs/src/WINNT/afsd/smb3.c:1.95.2.11	Tue Jul  4 18:43:24 2006
--- openafs/src/WINNT/afsd/smb3.c	Fri Jul 28 09:38:13 2006
***************
*** 2092,2098 ****
          
      /* compute initial mode bits based on read-only flag in attributes */
      initialModeBits = 0666;
!     if (attributes & 1) 
          initialModeBits &= ~0222;
          
      pathp = (char *) (&p->parmsp[14]);
--- 2092,2098 ----
          
      /* compute initial mode bits based on read-only flag in attributes */
      initialModeBits = 0666;
!     if (attributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
          
      pathp = (char *) (&p->parmsp[14]);
***************
*** 2433,2465 ****
      return CM_ERROR_BADOP;
  }
  
  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;
!     osi_hyper_t temp;
!     static char FSname[6] = {'A', 0, 'F', 0, 'S', 0};
          
      osi_Log1(smb_logp, "T2 QFSInfo type 0x%x", p->parmsp[0]);
  
      switch (p->parmsp[0]) {
!     case 1: responseSize = sizeof(qi.u.allocInfo); break;
!     case 2: responseSize = sizeof(qi.u.volumeInfo); break;
!     	break;
!     case 0x102: responseSize = sizeof(qi.u.FSvolumeInfo); break;
!     case 0x103: responseSize = sizeof(qi.u.FSsizeInfo); break;
!     case 0x104: responseSize = sizeof(qi.u.FSdeviceInfo); break;
!     case 0x105: responseSize = sizeof(qi.u.FSattributeInfo); break;
!     case 0x200: /* CIFS Unix Info */
!     case 0x301: /* Mac FS Info */
      default: 
! 	return CM_ERROR_INVAL;
      }
  
      outp = smb_GetTran2ResponsePacket(vcp, p, op, 0, responseSize);
      switch (p->parmsp[0]) {
!     case 1:
          /* alloc info */
          qi.u.allocInfo.FSID = 0;
          qi.u.allocInfo.sectorsPerAllocUnit = 1;
--- 2433,2487 ----
      return CM_ERROR_BADOP;
  }
  
+ long smb_ReceiveTran2QFSInfoFid(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
+ {
+     unsigned short fid;
+     unsigned short infolevel;
+ 
+     infolevel = p->parmsp[0];
+     fid = p->parmsp[1];
+     osi_Log2(smb_logp, "T2 QFSInfoFid InfoLevel 0x%x fid 0x%x - NOT_SUPPORTED", infolevel, fid);
+     
+     return CM_ERROR_BADOP;
+ }
+ 
  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;
***************
*** 2468,2474 ****
          qi.u.allocInfo.bytesPerSector = 1024;
          break;
  
!     case 2:
          /* volume info */
          qi.u.volumeInfo.vsn = 1234;
          qi.u.volumeInfo.vnCount = 4;
--- 2490,2496 ----
          qi.u.allocInfo.bytesPerSector = 1024;
          break;
  
!     case SMB_INFO_VOLUME: 
          /* volume info */
          qi.u.volumeInfo.vsn = 1234;
          qi.u.volumeInfo.vnCount = 4;
***************
*** 2477,2521 ****
          memcpy(qi.u.volumeInfo.label, "AFS", 4);
          break;
  
!     case 0x102:
          /* FS volume info */
!         memset((char *)&qi.u.FSvolumeInfo.vct, 0, sizeof(FILETIME));
          qi.u.FSvolumeInfo.vsn = 1234;
          qi.u.FSvolumeInfo.vnCount = 8;
!         memcpy(qi.u.FSvolumeInfo.label, "A\0F\0S\0\0", 8);
          break;
  
!     case 0x103:
          /* FS size info */
!         temp.HighPart = 0;
!         temp.LowPart = 0x7fffffff;
!         qi.u.FSsizeInfo.totalAllocUnits = temp;
!         temp.LowPart = 0x3fffffff;
!         qi.u.FSsizeInfo.availAllocUnits = temp;
          qi.u.FSsizeInfo.sectorsPerAllocUnit = 1;
          qi.u.FSsizeInfo.bytesPerSector = 1024;
          break;
  
!     case 0x104:
          /* FS device info */
!         qi.u.FSdeviceInfo.devType = 0;	/* don't have a number */
          qi.u.FSdeviceInfo.characteristics = 0x50; /* remote, virtual */
          break;
  
! 	case 0x105:
          /* FS attribute info */
          /* attributes, defined in WINNT.H:
           *	FILE_CASE_SENSITIVE_SEARCH	0x1
           *	FILE_CASE_PRESERVED_NAMES	0x2
           *	<no name defined>		0x4000
           *	   If bit 0x4000 is not set, Windows 95 thinks
           *	   we can't handle long (non-8.3) names,
           *	   despite our protestations to the contrary.
           */
          qi.u.FSattributeInfo.attributes = 0x4003;
!         qi.u.FSattributeInfo.maxCompLength = 255;
!         qi.u.FSattributeInfo.FSnameLength = 6;
!         memcpy(qi.u.FSattributeInfo.FSname, FSname, 6);
          break;
      }   
          
--- 2499,2543 ----
          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;
! 	qi.u.FSsizeInfo.availAllocUnits.LowPart= 0x3fffffff;
          qi.u.FSsizeInfo.sectorsPerAllocUnit = 1;
          qi.u.FSsizeInfo.bytesPerSector = 1024;
          break;
  
!     case SMB_QUERY_FS_DEVICE_INFO: 
          /* FS device info */
!         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
+ 	 *      FILE_VOLUME_QUOTAS              0x10
           *	<no name defined>		0x4000
           *	   If bit 0x4000 is not set, Windows 95 thinks
           *	   we can't handle long (non-8.3) names,
           *	   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;
      }   
          
***************
*** 2618,2624 ****
      afs_uint32 dosTime;
      FILETIME ft;
      unsigned short infoLevel;
!     int nbytesRequired;
      unsigned short attributes;
      unsigned long extAttributes;
      char shortName[13];
--- 2640,2647 ----
      afs_uint32 dosTime;
      FILETIME ft;
      unsigned short infoLevel;
!     smb_tran2QPathInfo_t qpi;
!     int responseSize;
      unsigned short attributes;
      unsigned long extAttributes;
      char shortName[13];
***************
*** 2626,2633 ****
      cm_user_t *userp;
      cm_space_t *spacep;
      cm_scache_t *scp, *dscp;
      long code = 0;
-     char *op;
      char *pathp;
      char *tidPathp;
      char *lastComp;
--- 2649,2656 ----
      cm_user_t *userp;
      cm_space_t *spacep;
      cm_scache_t *scp, *dscp;
+     int delonclose = 0;
      long code = 0;
      char *pathp;
      char *tidPathp;
      char *lastComp;
***************
*** 2637,2679 ****
  
      infoLevel = p->parmsp[0];
      if (infoLevel == SMB_INFO_IS_NAME_VALID) 
!         nbytesRequired = 0;
      else if (infoLevel == SMB_INFO_STANDARD) 
!         nbytesRequired = 22;
      else if (infoLevel == SMB_INFO_QUERY_EA_SIZE) 
!         nbytesRequired = 26;
!     else if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
! #ifdef COMMENT
!         nbytesRequired = 40;
! #else
!         nbytesRequired = 34;
! #endif
!     }
!     else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
! #ifdef COMMENT
! 	nbytesRequired = 24;
! #else
! 	nbytesRequired = 22;
! #endif
!     }
!     else if (infoLevel == SMB_QUERY_FILE_EA_INFO) 
!         nbytesRequired = 4;
! #if 0
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) 
!         nbytesRequired = ???;
      else if (infoLevel == SMB_QUERY_FILE_ALL_INFO) 
!         nbytesRequired = ???;
! #endif
      else if (infoLevel == SMB_QUERY_FILE_ALT_NAME_INFO) 
!         nbytesRequired = 30;
      else {
          osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
                    p->opcode, infoLevel);
- #ifdef COMMENT
-         smb_SendTran2Error(vcp, p, opx, CM_ERROR_INVAL);
- #else
          smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP);
- #endif
          return 0;
      }
  
--- 2660,2686 ----
  
      infoLevel = p->parmsp[0];
      if (infoLevel == SMB_INFO_IS_NAME_VALID) 
!         responseSize = 0;
      else if (infoLevel == SMB_INFO_STANDARD) 
!         responseSize = sizeof(qpi.u.QPstandardInfo);
      else if (infoLevel == SMB_INFO_QUERY_EA_SIZE) 
!         responseSize = sizeof(qpi.u.QPeaSizeInfo);
!     else if (infoLevel == SMB_QUERY_FILE_BASIC_INFO)
!         responseSize = sizeof(qpi.u.QPfileBasicInfo);
!     else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO)
! 	responseSize = sizeof(qpi.u.QPfileStandardInfo);
!     else if (infoLevel == SMB_QUERY_FILE_EA_INFO)
!         responseSize = sizeof(qpi.u.QPfileEaInfo);
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) 
!         responseSize = sizeof(qpi.u.QPfileNameInfo);
      else if (infoLevel == SMB_QUERY_FILE_ALL_INFO) 
!         responseSize = sizeof(qpi.u.QPfileAllInfo);
      else if (infoLevel == SMB_QUERY_FILE_ALT_NAME_INFO) 
!         responseSize = sizeof(qpi.u.QPfileAltNameInfo);
      else {
          osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
                    p->opcode, infoLevel);
          smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP);
          return 0;
      }
  
***************
*** 2683,2695 ****
      osi_Log2(smb_logp, "T2 QPathInfo type 0x%x path %s", infoLevel,
                osi_LogSaveString(smb_logp, pathp));
  
!     outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, nbytesRequired);
  
      if (infoLevel > 0x100)
          outp->totalParms = 2;
      else
          outp->totalParms = 0;
!     outp->totalData = nbytesRequired;
          
      /* now, if we're at infoLevel 6, we're only being asked to check
       * the syntax, so we just OK things now.  In particular, we're *not*
--- 2690,2702 ----
      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);
  
      if (infoLevel > 0x100)
          outp->totalParms = 2;
      else
          outp->totalParms = 0;
!     outp->totalData = responseSize;
          
      /* now, if we're at infoLevel 6, we're only being asked to check
       * the syntax, so we just OK things now.  In particular, we're *not*
***************
*** 2809,2817 ****
      /* now we have the status in the cache entry, and everything is locked.
       * Marshall the output data.
       */
-     op = outp->datap;
      /* for info level 108, figure out short name */
!     if (infoLevel == 0x108) {
          code = cm_GetShortName(pathp, userp, &req,
                                  tidPathp, scp->fid.vnode, shortName,
                                  (size_t *) &len);
--- 2816,2823 ----
      /* now we have the status in the cache entry, and everything is locked.
       * Marshall the output data.
       */
      /* for info level 108, figure out short name */
!     if (infoLevel == SMB_QUERY_FILE_ALT_NAME_INFO) {
          code = cm_GetShortName(pathp, userp, &req,
                                  tidPathp, scp->fid.vnode, shortName,
                                  (size_t *) &len);
***************
*** 2819,2898 ****
              goto done;
          }
  
!         op = outp->datap;
!         *((u_long *)op) = len * 2; op += 4;
!         mbstowcs((unsigned short *)op, shortName, len);
!         op += (len * 2);
  
          goto done;
      }
!     if (infoLevel == SMB_INFO_STANDARD || infoLevel == SMB_INFO_QUERY_EA_SIZE) {
          smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime);
!         *((u_long *)op) = dosTime; op += 4;	/* creation time */
!         *((u_long *)op) = dosTime; op += 4;	/* access time */
!         *((u_long *)op) = dosTime; op += 4;	/* write time */
!         *((u_long *)op) = scp->length.LowPart; op += 4;	/* length */
!         *((u_long *)op) = scp->length.LowPart; op += 4;	/* alloc size */
          attributes = smb_Attributes(scp);
!         *((u_short *)op) = attributes; op += 2;	/* attributes */
! 
! 	/* now, if we are being asked about extended attrs, return a 0 size */
! 	if (infoLevel == SMB_INFO_QUERY_EA_SIZE) {
! 	    *((u_long *)op) = 0; op += 4;
! 	}
      }
      else if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
!         *((FILETIME *)op) = ft; op += 8;	/* creation time */
!         *((FILETIME *)op) = ft; op += 8;	/* last access time */
!         *((FILETIME *)op) = ft; op += 8;	/* last write time */
!         *((FILETIME *)op) = ft; op += 8;	/* last change time */
          extAttributes = smb_ExtAttributes(scp);
! #ifdef COMMENT
!         *((u_long *)op) = extAttributes; op += 4; /* extended attribs */
!         *((u_long *)op) = 0; op += 4;	/* don't know what this is */
! #else
! 	/* The CIFS Specs say */
!         *((u_short *)op) = extAttributes; op += 2; /* extended attributes */
! #endif 
      }
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
!         *((LARGE_INTEGER *)op) = scp->length; op += 8;	/* alloc size */
!         *((LARGE_INTEGER *)op) = scp->length; op += 8;	/* EOF */
!         *((u_long *)op) = scp->linkCount; op += 4;	/* Link count */
!         *op++ = 0;					/* Delete Pending */
!         *op++ = ((scp->fileType == CM_SCACHETYPE_DIRECTORY || 
! 		  scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
! 		  scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0);
! #ifdef COMMENT
!         *op++ = 0;
!         *op++ = 0;
! #endif
      }
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO) {
!         memset(op, 0, 4); op += 4;	/* EA size */
      }
- 
- 
  
      /* send and free the packets */
    done:
      lock_ReleaseMutex(&scp->mx);
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
!     if (code == 0) 
!         smb_SendTran2Packet(vcp, outp, opx);
!     else 
          smb_SendTran2Error(vcp, p, opx, code);
      smb_FreeTran2Packet(outp);
  
      return 0;
  }
  
! long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
      osi_Log0(smb_logp,"ReceiveTran2SetPathInfo - NOT_SUPPORTED");
      return CM_ERROR_BADOP;
  }
  
  long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
--- 2825,3151 ----
              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 = strlen(lastComp);
! 	qpi.u.QPfileNameInfo.fileNameLength = (len + 1) * 2;
!         mbstowcs((unsigned short *)qpi.u.QPfileNameInfo.fileName, lastComp, len + 1);
! 
!         goto done;
!     }
!     else if (infoLevel == SMB_INFO_STANDARD || infoLevel == SMB_INFO_QUERY_EA_SIZE) {
          smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime);
! 	qpi.u.QPstandardInfo.creationDateTime = dosTime;
! 	qpi.u.QPstandardInfo.lastAccessDateTime = dosTime;
! 	qpi.u.QPstandardInfo.lastWriteDateTime = dosTime;
!         qpi.u.QPstandardInfo.dataSize = scp->length.LowPart;
!         qpi.u.QPstandardInfo.allocationSize = scp->length.LowPart;
          attributes = smb_Attributes(scp);
!         qpi.u.QPstandardInfo.attributes = attributes;
! 	qpi.u.QPstandardInfo.eaSize = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
!         qpi.u.QPfileBasicInfo.creationTime = ft;
!         qpi.u.QPfileBasicInfo.lastAccessTime = ft;
!         qpi.u.QPfileBasicInfo.lastWriteTime = ft;
!         qpi.u.QPfileBasicInfo.changeTime = ft;
          extAttributes = smb_ExtAttributes(scp);
! 	qpi.u.QPfileBasicInfo.attributes = extAttributes;
! 	qpi.u.QPfileBasicInfo.reserved = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
! 	smb_fid_t *fidp = smb_FindFIDByScache(vcp, scp);
! 	if (fidp) {
! 	    lock_ObtainMutex(&fidp->mx);
! 	    delonclose = fidp->flags & SMB_FID_DELONCLOSE;
! 	    lock_ReleaseMutex(&fidp->mx);
! 	    smb_ReleaseFID(fidp);
! 	}
! 
!         qpi.u.QPfileStandardInfo.allocationSize = scp->length;
!         qpi.u.QPfileStandardInfo.endOfFile = scp->length;
!         qpi.u.QPfileStandardInfo.numberOfLinks = scp->linkCount;
!         qpi.u.QPfileStandardInfo.deletePending = (delonclose ? 1 : 0);
!         qpi.u.QPfileStandardInfo.directory = 
! 	    ((scp->fileType == CM_SCACHETYPE_DIRECTORY ||
! 	      scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
! 	      scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0);
!         qpi.u.QPfileStandardInfo.reserved = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO) {
!         qpi.u.QPfileEaInfo.eaSize = 0;
!     }
!     else if (infoLevel == SMB_QUERY_FILE_ALL_INFO) {
!         smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
!         qpi.u.QPfileAllInfo.creationTime = ft;
!         qpi.u.QPfileAllInfo.lastAccessTime = ft;
!         qpi.u.QPfileAllInfo.lastWriteTime = ft;
!         qpi.u.QPfileAllInfo.changeTime = ft;
!         extAttributes = smb_ExtAttributes(scp);
! 	qpi.u.QPfileAllInfo.attributes = extAttributes;
!         qpi.u.QPfileAllInfo.allocationSize = scp->length;
!         qpi.u.QPfileAllInfo.endOfFile = scp->length;
!         qpi.u.QPfileAllInfo.numberOfLinks = scp->linkCount;
!         qpi.u.QPfileAllInfo.deletePending = 0;
!         qpi.u.QPfileAllInfo.directory = 
! 	    ((scp->fileType == CM_SCACHETYPE_DIRECTORY ||
! 	      scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
! 	      scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0);
! 	qpi.u.QPfileAllInfo.indexNumber.HighPart = scp->fid.cell;
! 	qpi.u.QPfileAllInfo.indexNumber.LowPart  = scp->fid.volume;
! 	qpi.u.QPfileAllInfo.eaSize = 0;
! 	qpi.u.QPfileAllInfo.accessFlags = 0;
! 	qpi.u.QPfileAllInfo.indexNumber2.HighPart = scp->fid.vnode;
! 	qpi.u.QPfileAllInfo.indexNumber2.LowPart  = scp->fid.unique;
! 	qpi.u.QPfileAllInfo.currentByteOffset.HighPart = 0;
! 	qpi.u.QPfileAllInfo.currentByteOffset.LowPart = 0;
! 	qpi.u.QPfileAllInfo.mode = 0;
! 	qpi.u.QPfileAllInfo.alignmentRequirement = 0;
! 	len = strlen(lastComp);
! 	qpi.u.QPfileAllInfo.fileNameLength = (len + 1) * 2;
!         mbstowcs((unsigned short *)qpi.u.QPfileAllInfo.fileName, lastComp, len + 1);
      }
  
      /* send and free the packets */
    done:
      lock_ReleaseMutex(&scp->mx);
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
!     if (code == 0) {
! 	memcpy(outp->datap, &qpi, responseSize);
! 	smb_SendTran2Packet(vcp, outp, opx);
!     } else {
          smb_SendTran2Error(vcp, p, opx, code);
+     }
      smb_FreeTran2Packet(outp);
  
      return 0;
  }
  
! long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
+ #if 0
      osi_Log0(smb_logp,"ReceiveTran2SetPathInfo - NOT_SUPPORTED");
      return CM_ERROR_BADOP;
+ #else
+     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);
+ 
+     infoLevel = p->parmsp[0];
+     osi_Log1(smb_logp,"ReceiveTran2SetPathInfo type 0x%x", infoLevel);
+     if (infoLevel != SMB_INFO_STANDARD && 
+ 	infoLevel != SMB_INFO_QUERY_EA_SIZE &&
+ 	infoLevel != SMB_INFO_QUERY_ALL_EAS) {
+         osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
+                   p->opcode, infoLevel);
+         smb_SendTran2Error(vcp, p, opx, CM_ERROR_INVAL);
+         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) {
+     	osi_Log1(smb_logp,"ReceiveTran2SetPathInfo unable to resolve user [%d]", p->uid);
+     	code = CM_ERROR_BADSMB;
+     	goto done;
+     }   
+ 
+     code = smb_LookupTIDPath(vcp, p->tid, &tidPathp);
+     if (code == CM_ERROR_TIDIPC) {
+         /* Attempt to use a TID allocated for IPC.  The client
+          * is probably looking for DCE RPC end points which we
+          * don't support OR it could be looking to make a DFS
+          * referral request. 
+          */
+         osi_Log0(smb_logp, "Tran2Open received IPC TID");
+         cm_ReleaseUser(userp);
+         return CM_ERROR_NOSUCHPATH;
+     }
+ 
+     /*
+     * XXX Strange hack XXX
+     *
+     * As of Patch 7 (13 January 98), we are having the following problem:
+     * In NT Explorer 4.0, whenever we click on a directory, AFS gets
+     * requests to look up "desktop.ini" in all the subdirectories.
+     * This can cause zillions of timeouts looking up non-existent cells
+     * and volumes, especially in the top-level directory.
+     *
+     * We have not found any way to avoid this or work around it except
+     * to explicitly ignore the requests for mount points that haven't
+     * yet been evaluated and for directories that haven't yet been
+     * fetched.
+     */
+     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,
+                                  userp, tidPathp, &req, &dscp);
+                 if (code == 0) {
+ #ifdef DFS_SUPPORT
+                     if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
+                         if ( WANTS_DFS_PATHNAMES(p) )
+                             code = CM_ERROR_PATH_NOT_COVERED;
+                         else
+                             code = CM_ERROR_BADSHARENAME;
+                     } else
+ #endif /* DFS_SUPPORT */
+                     if (dscp->fileType == CM_SCACHETYPE_MOUNTPOINT && !dscp->mountRootFid.volume)
+                         code = CM_ERROR_NOSUCHFILE;
+                     else if (dscp->fileType == CM_SCACHETYPE_DIRECTORY) {
+                         cm_buf_t *bp = buf_Find(dscp, &hzero);
+                         if (bp)
+                             buf_Release(bp);
+                         else
+                             code = CM_ERROR_NOSUCHFILE;
+                     }
+                     cm_ReleaseSCache(dscp);
+                     if (code) {
+                         cm_FreeSpace(spacep);
+                         cm_ReleaseUser(userp);
+                         smb_SendTran2Error(vcp, p, opx, code);
+                         return 0;
+                     }
+                 }
+             }
+         }
+ #endif /* SPECIAL_FOLDERS */
+ 
+         cm_FreeSpace(spacep);
+     }
+ 
+     /* now do namei and stat, and copy out the info */
+     code = cm_NameI(cm_data.rootSCachep, pathp,
+                      CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD, userp, tidPathp, &req, &scp);
+     if (code) {
+         cm_ReleaseUser(userp);
+         smb_SendTran2Error(vcp, p, opx, code);
+         return 0;
+     }
+ 
+     fidp = smb_FindFIDByScache(vcp, scp);
+     if (!fidp) {
+         cm_ReleaseUser(userp);
+         cm_ReleaseSCache(scp);
+ 	smb_SendTran2Error(vcp, p, opx, code);
+         return 0;
+     }
+ 
+     lock_ObtainMutex(&fidp->mx);
+     if (!(fidp->flags & SMB_FID_OPENWRITE)) {
+ 	lock_ReleaseMutex(&fidp->mx);
+         smb_ReleaseFID(fidp);
+         cm_ReleaseUser(userp);
+         cm_ReleaseSCache(scp);
+         smb_SendTran2Error(vcp, p, opx, CM_ERROR_NOACCESS);
+         return 0;
+     }
+     lock_ReleaseMutex(&fidp->mx);
+ 
+     outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, 0);
+ 
+     outp->totalParms = 2;
+     outp->totalData = 0;
+ 
+     spi = (smb_tran2QPathInfo_t *)p->datap;
+     if (infoLevel == SMB_INFO_STANDARD || infoLevel == SMB_INFO_QUERY_EA_SIZE) {
+         cm_attr_t attr;
+ 
+         /* lock the vnode with a callback; we need the current status
+          * to determine what the new status is, in some cases.
+          */
+         lock_ObtainMutex(&scp->mx);
+         code = cm_SyncOp(scp, NULL, userp, &req, 0,
+                           CM_SCACHESYNC_GETSTATUS
+                          | CM_SCACHESYNC_NEEDCALLBACK);
+ 	lock_ReleaseMutex(&scp->mx);
+         if (code) {
+             goto done;
+         }
+ 
+ 	lock_ObtainMutex(&fidp->mx);
+ 	lock_ObtainMutex(&scp->mx);
+ 
+         /* prepare for setattr call */
+         attr.mask = CM_ATTRMASK_LENGTH;
+         attr.length.LowPart = spi->u.QPstandardInfo.dataSize;
+         attr.length.HighPart = 0;
+ 
+ 	if (spi->u.QPstandardInfo.lastWriteDateTime != 0) {
+ 	    smb_UnixTimeFromSearchTime(&attr.clientModTime, spi->u.QPstandardInfo.lastWriteDateTime);
+             attr.mask |= CM_ATTRMASK_CLIENTMODTIME;
+             fidp->flags |= SMB_FID_MTIMESETDONE;
+         }
+ 		
+         if (spi->u.QPstandardInfo.attributes != 0) {
+             if ((scp->unixModeBits & 0222)
+                  && (spi->u.QPstandardInfo.attributes & SMB_ATTR_READONLY) != 0) {
+                 /* make a writable file read-only */
+                 attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
+                 attr.unixModeBits = scp->unixModeBits & ~0222;
+             }
+             else if ((scp->unixModeBits & 0222) == 0
+                       && (spi->u.QPstandardInfo.attributes & SMB_ATTR_READONLY) == 0) {
+                 /* make a read-only file writable */
+                 attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
+                 attr.unixModeBits = scp->unixModeBits | 0222;
+             }
+         }
+         lock_ReleaseMutex(&scp->mx);
+ 	lock_ReleaseMutex(&fidp->mx);
+ 
+         /* call setattr */
+         if (attr.mask)
+             code = cm_SetAttr(scp, &attr, userp, &req);
+         else
+             code = 0;
+     }               
+     else if (infoLevel == SMB_INFO_QUERY_ALL_EAS) {
+ 	/* we don't support EAs */
+ 	code = CM_ERROR_INVAL;
+     }       
+ 
+   done:
+     cm_ReleaseSCache(scp);
+     cm_ReleaseUser(userp);
+     smb_ReleaseFID(fidp);
+     if (code == 0) 
+         smb_SendTran2Packet(vcp, outp, opx);
+     else 
+         smb_SendTran2Error(vcp, p, opx, code);
+     smb_FreeTran2Packet(outp);
+ 
+     return 0;
+ #endif
  }
  
  long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
***************
*** 2901,2913 ****
      FILETIME ft;
      unsigned long attributes;
      unsigned short infoLevel;
!     int nbytesRequired;
      unsigned short fid;
      int delonclose = 0;
      cm_user_t *userp;
      smb_fid_t *fidp;
      cm_scache_t *scp;
!     char *op;
      long code = 0;
      cm_req_t req;
  
--- 3154,3166 ----
      FILETIME ft;
      unsigned long attributes;
      unsigned short infoLevel;
!     int responseSize;
      unsigned short fid;
      int delonclose = 0;
      cm_user_t *userp;
      smb_fid_t *fidp;
      cm_scache_t *scp;
!     smb_tran2QFileInfo_t qfi;
      long code = 0;
      cm_req_t req;
  
***************
*** 2923,2951 ****
  
      infoLevel = p->parmsp[1];
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) 
!         nbytesRequired = 40;
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) 
!         nbytesRequired = 24;
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO)
!         nbytesRequired = 4;
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) 
!         nbytesRequired = 6;
      else {
          osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
                    p->opcode, infoLevel);
!         smb_SendTran2Error(vcp, p, opx, CM_ERROR_INVAL);
          smb_ReleaseFID(fidp);
          return 0;
      }
      osi_Log2(smb_logp, "T2 QFileInfo type 0x%x fid %d", infoLevel, fid);
  
!     outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, nbytesRequired);
  
      if (infoLevel > 0x100)
          outp->totalParms = 2;
      else
          outp->totalParms = 0;
!     outp->totalData = nbytesRequired;
  
      userp = smb_GetTran2User(vcp, p);
      if (!userp) {
--- 3176,3204 ----
  
      infoLevel = p->parmsp[1];
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) 
!         responseSize = sizeof(qfi.u.QFbasicInfo);
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) 
!         responseSize = sizeof(qfi.u.QFstandardInfo);
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO)
!         responseSize = sizeof(qfi.u.QFeaInfo);
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) 
!         responseSize = sizeof(qfi.u.QFfileNameInfo);
      else {
          osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
                    p->opcode, infoLevel);
!         smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP);
          smb_ReleaseFID(fidp);
          return 0;
      }
      osi_Log2(smb_logp, "T2 QFileInfo type 0x%x fid %d", infoLevel, fid);
  
!     outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, responseSize);
  
      if (infoLevel > 0x100)
          outp->totalParms = 2;
      else
          outp->totalParms = 0;
!     outp->totalData = responseSize;
  
      userp = smb_GetTran2User(vcp, p);
      if (!userp) {
***************
*** 2968,2997 ****
      /* now we have the status in the cache entry, and everything is locked.
       * Marshall the output data.
       */
-     op = outp->datap;
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
!         *((FILETIME *)op) = ft; op += 8;	/* creation time */
!         *((FILETIME *)op) = ft; op += 8;	/* last access time */
!         *((FILETIME *)op) = ft; op += 8;	/* last write time */
!         *((FILETIME *)op) = ft; op += 8;	/* last change time */
          attributes = smb_ExtAttributes(scp);
!         *((u_long *)op) = attributes; op += 4;
!         *((u_long *)op) = 0; op += 4;
      }
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
!         *((LARGE_INTEGER *)op) = scp->length; op += 8;	/* alloc size */
!         *((LARGE_INTEGER *)op) = scp->length; op += 8;	/* EOF */
!         *((u_long *)op) = scp->linkCount; op += 4;	/* Link count */
!         *op++ = (delonclose ? 1 : 0);			/* Delete Pending */
!         *op++ = ((scp->fileType == CM_SCACHETYPE_DIRECTORY || 
! 		  scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
! 		  scp->fileType == CM_SCACHETYPE_INVALID)? 1 : 0);
!         *op++ = 0;
!         *op++ = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO) {
!         *((u_long *)op) = 0; op += 4;
      }
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
          unsigned long len;
--- 3221,3247 ----
      /* now we have the status in the cache entry, and everything is locked.
       * Marshall the output data.
       */
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
!         qfi.u.QFbasicInfo.creationTime = ft;
!         qfi.u.QFbasicInfo.lastAccessTime = ft;
!         qfi.u.QFbasicInfo.lastWriteTime = ft;
!         qfi.u.QFbasicInfo.lastChangeTime = ft;
          attributes = smb_ExtAttributes(scp);
!         qfi.u.QFbasicInfo.attributes = attributes;
      }
      else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
! 	qfi.u.QFstandardInfo.allocationSize = scp->length;
! 	qfi.u.QFstandardInfo.endOfFile = scp->length;
!         qfi.u.QFstandardInfo.numberOfLinks = scp->linkCount;
!         qfi.u.QFstandardInfo.deletePending = (delonclose ? 1 : 0);
!         qfi.u.QFstandardInfo.directory = 
! 	    ((scp->fileType == CM_SCACHETYPE_DIRECTORY ||
! 	      scp->fileType == CM_SCACHETYPE_MOUNTPOINT ||
! 	      scp->fileType == CM_SCACHETYPE_INVALID)? 1 : 0);
      }
      else if (infoLevel == SMB_QUERY_FILE_EA_INFO) {
!         qfi.u.QFeaInfo.eaSize = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
          unsigned long len;
***************
*** 3006,3014 ****
              name = "\\";	/* probably can't happen */
  	lock_ReleaseMutex(&fidp->mx);
          len = (unsigned long)strlen(name);
!         outp->totalData = (len*2) + 4;	/* this is actually what we want to return */
!         *((u_long *)op) = len * 2; op += 4;
!         mbstowcs((unsigned short *)op, name, len); op += (len * 2);
      }
  
      /* send and free the packets */
--- 3256,3264 ----
              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 */
***************
*** 3017,3032 ****
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
      smb_ReleaseFID(fidp);
!     if (code == 0) 
          smb_SendTran2Packet(vcp, outp, opx);
!     else 
          smb_SendTran2Error(vcp, p, opx, code);
      smb_FreeTran2Packet(outp);
  
      return 0;
  }       
  
! long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
      long code = 0;
      unsigned short fid;
--- 3267,3284 ----
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
      smb_ReleaseFID(fidp);
!     if (code == 0) {
! 	memcpy(outp->datap, &qfi, responseSize);
          smb_SendTran2Packet(vcp, outp, opx);
!     } else {
          smb_SendTran2Error(vcp, p, opx, code);
+     }
      smb_FreeTran2Packet(outp);
  
      return 0;
  }       
  
! long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      long code = 0;
      unsigned short fid;
***************
*** 3043,3074 ****
      fidp = smb_FindFID(vcp, fid, 0);
  
      if (fidp == NULL) {
!         smb_SendTran2Error(vcp, p, op, CM_ERROR_BADFD);
          return 0;
      }
  
      infoLevel = p->parmsp[1];
      osi_Log2(smb_logp,"ReceiveTran2SetFileInfo type 0x%x fid %d", infoLevel, fid);
!     if (infoLevel > 0x104 || infoLevel < 0x101) {
          osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
                    p->opcode, infoLevel);
!         smb_SendTran2Error(vcp, p, op, CM_ERROR_INVAL);
          smb_ReleaseFID(fidp);
          return 0;
      }
  
      lock_ObtainMutex(&fidp->mx);
!     if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO && !(fidp->flags & SMB_FID_OPENDELETE)) {
  	lock_ReleaseMutex(&fidp->mx);
          smb_ReleaseFID(fidp);
!         smb_SendTran2Error(vcp, p, op, CM_ERROR_NOACCESS);
          return 0;
      }
!     if ((infoLevel == SMB_QUERY_FILE_EA_INFO || infoLevel == SMB_QUERY_FILE_NAME_INFO)
           && !(fidp->flags & SMB_FID_OPENWRITE)) {
  	lock_ReleaseMutex(&fidp->mx);
          smb_ReleaseFID(fidp);
!         smb_SendTran2Error(vcp, p, op, CM_ERROR_NOACCESS);
          return 0;
      }
  
--- 3295,3327 ----
      fidp = smb_FindFID(vcp, fid, 0);
  
      if (fidp == NULL) {
!         smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADFD);
          return 0;
      }
  
      infoLevel = p->parmsp[1];
      osi_Log2(smb_logp,"ReceiveTran2SetFileInfo type 0x%x fid %d", infoLevel, fid);
!     if (infoLevel > SMB_SET_FILE_END_OF_FILE_INFO || infoLevel < SMB_SET_FILE_BASIC_INFO) {
          osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x",
                    p->opcode, infoLevel);
!         smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP);
          smb_ReleaseFID(fidp);
          return 0;
      }
  
      lock_ObtainMutex(&fidp->mx);
!     if (infoLevel == SMB_SET_FILE_DISPOSITION_INFO && !(fidp->flags & SMB_FID_OPENDELETE)) {
  	lock_ReleaseMutex(&fidp->mx);
          smb_ReleaseFID(fidp);
!         smb_SendTran2Error(vcp, p, opx, CM_ERROR_NOACCESS);
          return 0;
      }
!     if ((infoLevel == SMB_SET_FILE_ALLOCATION_INFO || 
! 	 infoLevel == SMB_SET_FILE_END_OF_FILE_INFO)
           && !(fidp->flags & SMB_FID_OPENWRITE)) {
  	lock_ReleaseMutex(&fidp->mx);
          smb_ReleaseFID(fidp);
!         smb_SendTran2Error(vcp, p, opx, CM_ERROR_NOACCESS);
          return 0;
      }
  
***************
*** 3076,3084 ****
      cm_HoldSCache(scp);
      lock_ReleaseMutex(&fidp->mx);
  
!     osi_Log1(smb_logp, "T2 SFileInfo type 0x%x", infoLevel);
! 
!     outp = smb_GetTran2ResponsePacket(vcp, p, op, 2, 0);
  
      outp->totalParms = 2;
      outp->totalData = 0;
--- 3329,3335 ----
      cm_HoldSCache(scp);
      lock_ReleaseMutex(&fidp->mx);
  
!     outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, 0);
  
      outp->totalParms = 2;
      outp->totalData = 0;
***************
*** 3090,3101 ****
      	goto done;
      }   
  
!     if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          FILETIME lastMod;
          unsigned int attribute;
          cm_attr_t attr;
  
!         /* lock the vnode with a callback; we need the current status
           * to determine what the new status is, in some cases.
           */
          lock_ObtainMutex(&scp->mx);
--- 3341,3355 ----
      	goto done;
      }   
  
!     if (infoLevel == SMB_SET_FILE_BASIC_INFO) {
          FILETIME lastMod;
          unsigned int attribute;
          cm_attr_t attr;
+ 	smb_tran2QFileInfo_t *sfi;
  
! 	sfi = (smb_tran2QFileInfo_t *)p->datap;
! 
! 	/* lock the vnode with a callback; we need the current status
           * to determine what the new status is, in some cases.
           */
          lock_ObtainMutex(&scp->mx);
***************
*** 3103,3111 ****
                            CM_SCACHESYNC_GETSTATUS
                           | CM_SCACHESYNC_NEEDCALLBACK);
  	lock_ReleaseMutex(&scp->mx);
!         if (code) {
              goto done;
-         }
  
  	lock_ObtainMutex(&fidp->mx);
  	lock_ObtainMutex(&scp->mx);
--- 3357,3364 ----
                            CM_SCACHESYNC_GETSTATUS
                           | CM_SCACHESYNC_NEEDCALLBACK);
  	lock_ReleaseMutex(&scp->mx);
!         if (code)
              goto done;
  
  	lock_ObtainMutex(&fidp->mx);
  	lock_ObtainMutex(&scp->mx);
***************
*** 3113,3119 ****
          /* prepare for setattr call */
          attr.mask = 0;
  
!         lastMod = *((FILETIME *)(p->datap + 16));
          /* when called as result of move a b, lastMod is (-1, -1). 
           * If the check for -1 is not present, timestamp
           * of the resulting file will be 1969 (-1)
--- 3366,3372 ----
          /* prepare for setattr call */
          attr.mask = 0;
  
!         lastMod = sfi->u.QFbasicInfo.lastWriteTime;
          /* when called as result of move a b, lastMod is (-1, -1). 
           * If the check for -1 is not present, timestamp
           * of the resulting file will be 1969 (-1)
***************
*** 3125,3140 ****
              fidp->flags |= SMB_FID_MTIMESETDONE;
          }
  		
!         attribute = *((u_long *)(p->datap + 32));
          if (attribute != 0) {
              if ((scp->unixModeBits & 0222)
!                  && (attribute & 1) != 0) {
                  /* make a writable file read-only */
                  attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
                  attr.unixModeBits = scp->unixModeBits & ~0222;
              }
              else if ((scp->unixModeBits & 0222) == 0
!                       && (attribute & 1) == 0) {
                  /* make a read-only file writable */
                  attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
                  attr.unixModeBits = scp->unixModeBits | 0222;
--- 3378,3393 ----
              fidp->flags |= SMB_FID_MTIMESETDONE;
          }
  		
!         attribute = sfi->u.QFbasicInfo.attributes;
          if (attribute != 0) {
              if ((scp->unixModeBits & 0222)
!                  && (attribute & SMB_ATTR_READONLY) != 0) {
                  /* make a writable file read-only */
                  attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
                  attr.unixModeBits = scp->unixModeBits & ~0222;
              }
              else if ((scp->unixModeBits & 0222) == 0
!                       && (attribute & SMB_ATTR_READONLY) == 0) {
                  /* make a read-only file writable */
                  attr.mask |= CM_ATTRMASK_UNIXMODEBITS;
                  attr.unixModeBits = scp->unixModeBits | 0222;
***************
*** 3148,3165 ****
              code = cm_SetAttr(scp, &attr, userp, &req);
          else
              code = 0;
!     }               
!     else if (infoLevel == SMB_QUERY_FILE_EA_INFO || infoLevel == SMB_QUERY_FILE_NAME_INFO) {
!         LARGE_INTEGER size = *((LARGE_INTEGER *)(p->datap));
!         cm_attr_t attr;
! 
!         attr.mask = CM_ATTRMASK_LENGTH;
!         attr.length.LowPart = size.LowPart;
!         attr.length.HighPart = size.HighPart;
!         code = cm_SetAttr(scp, &attr, userp, &req);
!     }       
!     else if (infoLevel == SMB_QUERY_FILE_STANDARD_INFO) {
!         if (*((char *)(p->datap))) {
              code = cm_CheckNTDelete(fidp->NTopen_dscp, scp, userp,
                                       &req);
              if (code == 0) {
--- 3401,3409 ----
              code = cm_SetAttr(scp, &attr, userp, &req);
          else
              code = 0;
!     }
!     else if (infoLevel == SMB_SET_FILE_DISPOSITION_INFO) {
!         if (*((char *)(p->datap))) {	/* File is Deleted */
              code = cm_CheckNTDelete(fidp->NTopen_dscp, scp, userp,
                                       &req);
              if (code == 0) {
***************
*** 3175,3189 ****
  	    lock_ReleaseMutex(&fidp->mx);
          }
      }       
  
    done:
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
      smb_ReleaseFID(fidp);
      if (code == 0) 
!         smb_SendTran2Packet(vcp, outp, op);
      else 
!         smb_SendTran2Error(vcp, p, op, code);
      smb_FreeTran2Packet(outp);
  
      return 0;
--- 3419,3451 ----
  	    lock_ReleaseMutex(&fidp->mx);
          }
      }       
+     else if (infoLevel == SMB_SET_FILE_ALLOCATION_INFO) {
+         LARGE_INTEGER size = *((LARGE_INTEGER *)(p->datap));
+         cm_attr_t attr;
+ 
+         attr.mask = CM_ATTRMASK_LENGTH;
+         attr.length.LowPart = size.LowPart;
+         attr.length.HighPart = size.HighPart;
+         code = cm_SetAttr(scp, &attr, userp, &req);
+     }       
+     else if (infoLevel == SMB_SET_FILE_END_OF_FILE_INFO) {
+         unsigned short size = *((unsigned short *)(p->datap));
+         cm_attr_t attr;
+ 
+         attr.mask = CM_ATTRMASK_LENGTH;
+ 		attr.length.HighPart = 0;
+         attr.length.LowPart = size;
+         code = cm_SetAttr(scp, &attr, userp, &req);
+     }       
  
    done:
      cm_ReleaseSCache(scp);
      cm_ReleaseUser(userp);
      smb_ReleaseFID(fidp);
      if (code == 0) 
!         smb_SendTran2Packet(vcp, outp, opx);
      else 
!         smb_SendTran2Error(vcp, p, opx, code);
      smb_FreeTran2Packet(outp);
  
      return 0;
***************
*** 3393,3399 ****
  
              /* Plug in fake timestamps. A time stamp of 0 causes 'invalid parameter'
                 errors in the client. */
!             if (infoLevel >= 0x101) {
                  /* 1969-12-31 23:59:59 +00 */
                  ft.dwHighDateTime = 0x19DB200;
                  ft.dwLowDateTime = 0x5BB78980;
--- 3655,3661 ----
  
              /* 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;
***************
*** 3483,3489 ****
  
          dptr = patchp->dptr;
  
!         if (infoLevel >= 0x101) {
              /* get filetime */
              smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
  
--- 3745,3751 ----
  
          dptr = patchp->dptr;
  
!         if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
              /* get filetime */
              smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
  
***************
*** 3912,3917 ****
--- 4174,4180 ----
      int fileType;
      cm_fid_t fid;
      cm_req_t req;
+     char * s;
  
      cm_InitReq(&req);
  
***************
*** 3956,3969 ****
          starPattern = 1;	/* assume, since required a Find Next */
      }
  
      osi_Log4(smb_logp,
!               "T2 search dir attr 0x%x, info level %d, max count %d, flags 0x%x",
                attribute, infoLevel, maxCount, searchFlags);
  
      osi_Log3(smb_logp, "...T2 search op %d, id %d, nextCookie 0x%x",
                p->opcode, dsp->cookie, nextCookie);
  
!     if (infoLevel >= 0x101)
          searchFlags &= ~4;	/* no resume keys */
  
      dirListPatchesp = NULL;
--- 4219,4260 ----
          starPattern = 1;	/* assume, since required a Find Next */
      }
  
+     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, "T2 search dir info level: %s", s);
+ 
      osi_Log4(smb_logp,
!               "T2 search dir attr 0x%x, info level 0x%x, max count %d, flags 0x%x",
                attribute, infoLevel, maxCount, searchFlags);
  
      osi_Log3(smb_logp, "...T2 search op %d, id %d, nextCookie 0x%x",
                p->opcode, dsp->cookie, nextCookie);
  
!     if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO)
          searchFlags &= ~4;	/* no resume keys */
  
      dirListPatchesp = NULL;
***************
*** 4267,4273 ****
  
          /* Need 8.3 name? */
          NeedShortName = 0;
!         if (infoLevel == SMB_QUERY_FILE_NAME_INFO
               && dep->fid.vnode != 0
               && !cm_Is8Dot3(dep->name)) {
              cm_Gen8Dot3Name(dep, shortName, &shortNameEnd);
--- 4558,4564 ----
  
          /* Need 8.3 name? */
          NeedShortName = 0;
!         if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO
               && dep->fid.vnode != 0
               && !cm_Is8Dot3(dep->name)) {
              cm_Gen8Dot3Name(dep, shortName, &shortNameEnd);
***************
*** 4316,4336 ****
              /* standard dir entry stuff */
              if (infoLevel < 0x101)
                  ohbytes = 23;	/* pre-NT */
!             else if (infoLevel == SMB_QUERY_FILE_EA_INFO)
                  ohbytes = 12;	/* NT names only */
              else
                  ohbytes = 64;	/* NT */
  
!             if (infoLevel == SMB_QUERY_FILE_NAME_INFO)
                  ohbytes += 26;	/* Short name & length */
  
              if (searchFlags & 4) {
                  ohbytes += 4;	/* if resume key required */
              }   
  
!             if (infoLevel != 1
!                  && infoLevel != 0x101
!                  && infoLevel != 0x103)
                  ohbytes += 4;	/* EASIZE */
  
              /* add header to name & term. null */
--- 4607,4627 ----
              /* 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 & 4) {
                  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 */
***************
*** 4342,4348 ****
               * about an * overflow when we pad things out below).
               * That's the reason for the alignment arithmetic below.
               */
!             if (infoLevel >= 0x101)
                  align = (4 - (orbytes & 3)) & 3;
              else
                  align = 0;
--- 4633,4639 ----
               * about an * overflow when we pad things out below).
               * That's the reason for the alignment arithmetic below.
               */
!             if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO)
                  align = (4 - (orbytes & 3)) & 3;
              else
                  align = 0;
***************
*** 4359,4367 ****
              /* First zero everything else */
              memset(origOp, 0, ohbytes);
  
!             if (infoLevel <= 0x101)
                  *(origOp + ohbytes - 1) = (unsigned char) onbytes;
!             else if (infoLevel == SMB_QUERY_FILE_EA_INFO)
                  *((u_long *)(op + 8)) = onbytes;
              else
                  *((u_long *)(op + 60)) = onbytes;
--- 4650,4658 ----
              /* 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;
***************
*** 4370,4376 ****
                  CharToOem(origOp+ohbytes, origOp+ohbytes);
  
              /* Short name if requested and needed */
!             if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
                  if (NeedShortName) {
                      strcpy(op + 70, shortName);
                      if (smb_StoreAnsiFilenames)
--- 4661,4667 ----
                  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)
***************
*** 4383,4389 ****
              returnedNames++;
  
              /* NextEntryOffset and FileIndex */
!             if (infoLevel >= 101) {
                  int entryOffset = orbytes + align;
                  *((u_long *)op) = entryOffset;
                  *((u_long *)(op+4)) = nextEntryCookie;
--- 4674,4680 ----
              returnedNames++;
  
              /* NextEntryOffset and FileIndex */
!             if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
                  int entryOffset = orbytes + align;
                  *((u_long *)op) = entryOffset;
                  *((u_long *)(op+4)) = nextEntryCookie;
***************
*** 4402,4413 ****
               * later.  The replay will happen at a time when it is
               * safe to unlock the directory.
               */
!             if (infoLevel != 0x103) {
                  curPatchp = malloc(sizeof(*curPatchp));
                  osi_QAdd((osi_queue_t **) &dirListPatchesp,
                            &curPatchp->q);
                  curPatchp->dptr = op;
!                 if (infoLevel >= 0x101)
                      curPatchp->dptr += 8;
  
                  if (smb_hideDotFiles && smb_IsDotFile(dep->name)) {
--- 4693,4704 ----
               * later.  The replay will happen at a time when it is
               * 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)) {
***************
*** 4603,4609 ****
  
                                  /* compute initial mode bits based on read-only flag in attributes */
      initialModeBits = 0666;
!     if (attributes & 1) initialModeBits &= ~0222;
          
      pathp = smb_GetSMBData(inp, NULL);
      if (smb_StoreAnsiFilenames)
--- 4894,4901 ----
  
                                  /* compute initial mode bits based on read-only flag in attributes */
      initialModeBits = 0666;
!     if (attributes & SMB_ATTR_READONLY) 
! 	initialModeBits &= ~0222;
          
      pathp = smb_GetSMBData(inp, NULL);
      if (smb_StoreAnsiFilenames)
***************
*** 6437,6443 ****
       * extended attributes
       */
      initialModeBits = 0666;
!     if (extAttributes & 1) 
          initialModeBits &= ~0222;
  
      pathp = parmp + (13 * sizeof(ULONG)) + sizeof(UCHAR);
--- 6729,6735 ----
       * extended attributes
       */
      initialModeBits = 0666;
!     if (extAttributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
  
      pathp = parmp + (13 * sizeof(ULONG)) + sizeof(UCHAR);
Index: openafs/src/WINNT/afsd/smb3.h
diff -c openafs/src/WINNT/afsd/smb3.h:1.12.2.1 openafs/src/WINNT/afsd/smb3.h:1.12.2.3
*** openafs/src/WINNT/afsd/smb3.h:1.12.2.1	Sat Jun 24 16:41:55 2006
--- openafs/src/WINNT/afsd/smb3.h	Fri Jul 28 09:38:14 2006
***************
*** 52,71 ****
          } allocInfo;
  #pragma pack(pop)
          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 {
!             osi_hyper_t totalAllocUnits;	/* on the disk */
!             osi_hyper_t availAllocUnits;	/* free blocks */
              unsigned long sectorsPerAllocUnit;
              unsigned long bytesPerSector;	/* bytes per sector */
          } FSsizeInfo;
--- 52,71 ----
          } allocInfo;
  #pragma pack(pop)
          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 */
!             LARGE_INTEGER availAllocUnits;	/* free blocks */
              unsigned long sectorsPerAllocUnit;
              unsigned long bytesPerSector;	/* bytes per sector */
          } FSsizeInfo;
***************
*** 82,87 ****
--- 82,211 ----
      } u;
  } smb_tran2QFSInfo_t;
  
+ typedef struct {
+     union {
+ 	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;
+ 	    unsigned long  eaSize;
+ 	} QPstandardInfo;
+ 	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;
+ 	    unsigned long  eaSize;
+ 	} QPeaSizeInfo;
+ 	struct {
+ 	    unsigned short maxDataCount;
+ 	    unsigned short eaErrorOffset;
+ 	    unsigned long  listLength;
+ 	    unsigned char  eaList[128];
+ 	} QPeasFromListInfo;
+ 	struct {
+ 	    unsigned short maxDataCount;
+ 	    unsigned short eaErrorOffset;
+ 	    unsigned long  listLength;
+ 	    unsigned char  eaList[128];
+ 	} QPallEasInfo;
+ 	struct {
+ 	    FILETIME       creationTime;
+ 	    FILETIME       lastAccessTime;
+ 	    FILETIME       lastWriteTime;
+ 	    FILETIME       changeTime;
+ 	    unsigned long  attributes;
+ 	    unsigned long  reserved;
+ 	} QPfileBasicInfo;
+ 	struct {
+ 	    LARGE_INTEGER  allocationSize;
+ 	    LARGE_INTEGER  endOfFile;
+ 	    unsigned long  numberOfLinks;
+ 	    unsigned char  deletePending;
+ 	    unsigned char  directory;
+ 	    unsigned short reserved;
+ 	} QPfileStandardInfo;
+ 	struct {
+ 	    unsigned long  eaSize;
+ 	} QPfileEaInfo;
+ 	struct {
+ 	    unsigned long  fileNameLength;
+ 	    unsigned char  fileName[512];
+ 	} QPfileNameInfo;
+ 	struct {
+ 	    FILETIME       creationTime;
+ 	    FILETIME       lastAccessTime;
+ 	    FILETIME       lastWriteTime;
+ 	    FILETIME       changeTime;
+ 	    unsigned long  attributes;
+ 	    LARGE_INTEGER  allocationSize;
+ 	    LARGE_INTEGER  endOfFile;
+ 	    unsigned long  numberOfLinks;
+ 	    unsigned char  deletePending;
+ 	    unsigned char  directory;
+ 	    LARGE_INTEGER  indexNumber;
+ 	    unsigned long  eaSize;
+ 	    unsigned long  accessFlags;
+ 	    LARGE_INTEGER  indexNumber2;
+ 	    LARGE_INTEGER  currentByteOffset;
+ 	    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;
+ 	    unsigned short compressionFormat;
+ 	    unsigned char  compressionUnitShift;
+ 	    unsigned char  chuckShift;
+ 	    unsigned char  clusterShift;
+ 	    unsigned char  reserved[3];
+ 	} QPfileCompressionInfo;
+     } u;
+ } smb_tran2QPathInfo_t;
+ 
+ typedef struct {
+     union {
+ 	struct {
+ 	    FILETIME 	   creationTime;
+ 	    FILETIME       lastAccessTime;
+ 	    FILETIME	   lastWriteTime;
+ 	    FILETIME	   lastChangeTime;
+ 	    unsigned long  attributes;
+ 	} QFbasicInfo;
+ 	struct {
+ 	    LARGE_INTEGER  allocationSize;
+ 	    LARGE_INTEGER  endOfFile;
+ 	    unsigned long  numberOfLinks;
+ 	    unsigned char  deletePending;
+ 	    unsigned char  directory;
+ 	} QFstandardInfo;
+ 	struct {
+ 	    unsigned long  eaSize;
+ 	} QFeaInfo;
+ 	struct {	
+ 	    unsigned long  fileNameLength;
+ 	    unsigned char  fileName[512];
+ 	} QFfileNameInfo;
+     } u;
+ } smb_tran2QFileInfo_t;
+ 
  /* more than enough opcodes for today, anyway */
  #define SMB_TRAN2_NOPCODES		20
  
***************
*** 125,130 ****
--- 249,257 ----
  extern long smb_ReceiveTran2SetFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
  	smb_packet_t *outp);
  
+ extern long smb_ReceiveTran2QFSInfoFid(smb_vc_t *vcp, smb_tran2Packet_t *p,
+ 	smb_packet_t *outp);
+ 
  extern long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
  	smb_packet_t *outp);
  
Index: openafs/src/WINNT/afsd/smb_iocons.h
diff -c openafs/src/WINNT/afsd/smb_iocons.h:1.10.4.1 openafs/src/WINNT/afsd/smb_iocons.h:1.10.4.2
*** openafs/src/WINNT/afsd/smb_iocons.h:1.10.4.1	Tue Jun 27 18:19:35 2006
--- openafs/src/WINNT/afsd/smb_iocons.h	Thu Jul 20 17:46:19 2006
***************
*** 43,49 ****
  
  #define CM_IOCTLCACHEPARMS		16
  typedef struct cm_cacheParms {
! 	long parms[CM_IOCTLCACHEPARMS];
  } cm_cacheParms_t;
  
  /* set cell flags */
--- 43,49 ----
  
  #define CM_IOCTLCACHEPARMS		16
  typedef struct cm_cacheParms {
!         afs_uint64 parms[CM_IOCTLCACHEPARMS];
  } cm_cacheParms_t;
  
  /* set cell flags */
Index: openafs/src/WINNT/afsd/smb_ioctl.c
diff -c openafs/src/WINNT/afsd/smb_ioctl.c:1.25.2.2 openafs/src/WINNT/afsd/smb_ioctl.c:1.25.2.3
*** openafs/src/WINNT/afsd/smb_ioctl.c:1.25.2.2	Tue Jun 27 18:19:35 2006
--- openafs/src/WINNT/afsd/smb_ioctl.c	Thu Jul 20 17:46:19 2006
***************
*** 138,148 ****
              return CM_ERROR_TOOBIG;
  
          /* check for no such proc */
! 	if (fidp->flags & SMB_FID_IOCTL)
! 	    procp = smb_ioctlProcsp[opcode];
! 	else
! 	    procp = NULL;
! 
          if (procp == NULL) 
              return CM_ERROR_BADOP;
  
--- 138,144 ----
              return CM_ERROR_TOOBIG;
  
          /* check for no such proc */
! 	procp = smb_ioctlProcsp[opcode];
          if (procp == NULL) 
              return CM_ERROR_BADOP;
  
Index: openafs/src/WINNT/afsrdr/afsrdr.c
diff -c openafs/src/WINNT/afsrdr/afsrdr.c:1.3 openafs/src/WINNT/afsrdr/afsrdr.c:1.3.4.2
*** openafs/src/WINNT/afsrdr/afsrdr.c:1.3	Thu Aug  4 12:32:39 2005
--- openafs/src/WINNT/afsrdr/afsrdr.c	Thu Jul 20 17:46:21 2006
***************
*** 298,304 ****
      }
      StringCbCatN(str, len, IrpSp->FileObject->FileName.Buffer, IrpSp->FileObject->FileName.Length);
  
!     /* request to open heirarchical parent of specified path */
      /* remove last path component */
      if (IrpSp->Flags & SL_OPEN_TARGET_DIRECTORY)
      {
--- 298,304 ----
      }
      StringCbCatN(str, len, IrpSp->FileObject->FileName.Buffer, IrpSp->FileObject->FileName.Length);
  
!     /* request to open hierarchical parent of specified path */
      /* remove last path component */
      if (IrpSp->Flags & SL_OPEN_TARGET_DIRECTORY)
      {
***************
*** 1655,1660 ****
--- 1655,1661 ----
      SYNC_FAIL(STATUS_UNSUCCESSFUL);
  }       
  
+ long
  dc_break_callback(ULONG fid)
  {
      afs_fcb_t *fcb;
***************
*** 1699,1707 ****
      return 0;
  }
  
! dc_release_hooks()
  {
      KeSetEvent(&comExt->cancelEvent, 0, FALSE);
  }
  
  /**********************************************************
--- 1700,1710 ----
      return 0;
  }
  
! long
! dc_release_hooks(void)
  {
      KeSetEvent(&comExt->cancelEvent, 0, FALSE);
+     return 0;
  }
  
  /**********************************************************
Index: openafs/src/WINNT/afsrdr/ifs_rpc.c
diff -c openafs/src/WINNT/afsrdr/ifs_rpc.c:1.3 openafs/src/WINNT/afsrdr/ifs_rpc.c:1.3.4.2
*** openafs/src/WINNT/afsrdr/ifs_rpc.c:1.3	Thu Aug  4 12:32:39 2005
--- openafs/src/WINNT/afsrdr/ifs_rpc.c	Thu Jul 20 17:46:21 2006
***************
*** 241,247 ****
  {
      ULONG size;
      rpc_t *rpc;
-     ULONG status;
  
      size = sizeof(rpc_t) + 2*RPC_BUF_SIZE;
      rpc = malloc(size);
--- 241,246 ----
***************
*** 268,277 ****
  
  rpc_transact(rpc_t *rpc)
  {
-     HANDLE hf;
-     int ret;
      ULONG header_len;
!     DWORD err, read = 0;
  
      if (!rpc)
          return IFSL_GENERIC_FAILURE;
--- 267,274 ----
  
  rpc_transact(rpc_t *rpc)
  {
      ULONG header_len;
!     DWORD read = 0;
  
      if (!rpc)
          return IFSL_GENERIC_FAILURE;
***************
*** 286,291 ****
--- 283,289 ----
  
  /* upcall stubs */
  #ifdef RPC_KERN
+ long
  uc_namei(WCHAR *name, ULONG *fid)
  {
      rpc_t *rpc;
***************
*** 317,322 ****
--- 315,321 ----
      return status;
  }
  
+ long
  uc_check_access(ULONG fid, ULONG access, ULONG *granted)
  {
      rpc_t *rpc;
***************
*** 345,350 ****
--- 344,350 ----
      return status;
  }
  
+ long
  uc_create(WCHAR *name, ULONG attribs, LARGE_INTEGER alloc, ULONG access, ULONG *granted, ULONG *fid)
  {
      rpc_t *rpc;
***************
*** 375,380 ****
--- 375,381 ----
      return status;
  }
  
+ long
  uc_stat(ULONG fid, ULONG *attribs, LARGE_INTEGER *size, LARGE_INTEGER *creation, LARGE_INTEGER *access, LARGE_INTEGER *change, LARGE_INTEGER *written)
  {
      rpc_t *rpc;
***************
*** 407,412 ****
--- 408,414 ----
      return status;
  }
  
+ long
  uc_setinfo(ULONG fid, ULONG attribs, LARGE_INTEGER creation, LARGE_INTEGER access, LARGE_INTEGER change, LARGE_INTEGER written)
  {
      rpc_t *rpc;
***************
*** 439,444 ****
--- 441,447 ----
      return status;
  }
  
+ long
  uc_trunc(ULONG fid, LARGE_INTEGER size)
  {
      rpc_t *rpc;
***************
*** 466,471 ****
--- 469,475 ----
      return status;
  }
  
+ long
  uc_read(ULONG fid, LARGE_INTEGER offset, ULONG length, ULONG *read, char *data)
  {
      rpc_t *rpc;
***************
*** 495,500 ****
--- 499,505 ----
      return status;
  }
  
+ long
  uc_write(ULONG fid, LARGE_INTEGER offset, ULONG length, ULONG *written, char *data)
  {
      rpc_t *rpc;
***************
*** 524,529 ****
--- 529,535 ----
      return status;
  }
  
+ long
  uc_readdir(ULONG fid, LARGE_INTEGER cookie_in, WCHAR *filter, ULONG *count, char *data, ULONG *len)
  {
      rpc_t *rpc;
***************
*** 555,560 ****
--- 561,567 ----
      return status;
  }
  
+ long
  uc_close(ULONG fid)
  {
      rpc_t *rpc;
***************
*** 581,586 ****
--- 588,594 ----
      return status;
  }
  
+ long
  uc_unlink(WCHAR *name)
  {
      rpc_t *rpc;
***************
*** 607,612 ****
--- 615,621 ----
      return status;
  }
  
+ long
  uc_ioctl_write(ULONG length, char *data, ULONG *key)
  {
      rpc_t *rpc;
***************
*** 634,639 ****
--- 643,649 ----
      return status;
  }
  
+ long
  uc_ioctl_read(ULONG key, ULONG *length, char *data)
  {
      rpc_t *rpc;
***************
*** 661,666 ****
--- 671,677 ----
      return status;
  }
  
+ long
  uc_rename(ULONG fid, WCHAR *curr, WCHAR *new_dir, WCHAR *new_name, ULONG *new_fid)
  {
      rpc_t *rpc;
***************
*** 691,696 ****
--- 702,708 ----
      return status;
  }
  
+ long
  uc_flush(ULONG fid)
  {
      rpc_t *rpc;
***************
*** 721,727 ****
  
  /* downcall stubs */
  #ifndef RPC_KERN
! dc_break_callback(ULONG fid)
  {
      rpc_t *rpc;
      ULONG status;
--- 733,739 ----
  
  /* downcall stubs */
  #ifndef RPC_KERN
! long dc_break_callback(ULONG fid)
  {
      rpc_t *rpc;
      ULONG status;
***************
*** 742,748 ****
      return status;
  }
  
! dc_release_hooks()
  {
      rpc_t *rpc;
      ULONG status;
--- 754,760 ----
      return status;
  }
  
! long dc_release_hooks(void)
  {
      rpc_t *rpc;
      ULONG status;
***************
*** 1225,1231 ****
          break;
      case RPC_UNLINK:
          {
-             ULONG fid, unlink;
              rpc_unmarshal_wstr(rpc, name);
              status = uc_unlink(name);
              rpc_marshal_long(rpc, status);
--- 1237,1242 ----
Index: openafs/src/WINNT/afsrdr/ifs_rpc.h
diff -c openafs/src/WINNT/afsrdr/ifs_rpc.h:1.3 openafs/src/WINNT/afsrdr/ifs_rpc.h:1.3.4.1
*** openafs/src/WINNT/afsrdr/ifs_rpc.h:1.3	Thu Aug  4 12:32:39 2005
--- openafs/src/WINNT/afsrdr/ifs_rpc.h	Thu Jul 20 17:46:21 2006
***************
*** 39,49 ****
  
  
  /* maximum number of users, based on SID, that can access AFS at one time */
! #define MAX_AFS_USERS			20
  
  /* maximum number of threads that can make simultaneous calls into afsrdr,
     because we maintain a credential set for each thread in a single table. */
! #define MAX_CRED_MAPS			32
  
  /* size if outgoing/incoming RPC buffer (for parameters only, not bulk data) */
  #define RPC_BUF_SIZE			2048
--- 39,49 ----
  
  
  /* maximum number of users, based on SID, that can access AFS at one time */
! #define MAX_AFS_USERS			256
  
  /* maximum number of threads that can make simultaneous calls into afsrdr,
     because we maintain a credential set for each thread in a single table. */
! #define MAX_CRED_MAPS			64
  
  /* size if outgoing/incoming RPC buffer (for parameters only, not bulk data) */
  #define RPC_BUF_SIZE			2048
Index: openafs/src/WINNT/afsrdr/kif.h
diff -c openafs/src/WINNT/afsrdr/kif.h:1.4 openafs/src/WINNT/afsrdr/kif.h:1.4.4.2
*** openafs/src/WINNT/afsrdr/kif.h:1.4	Sat Nov  5 01:47:48 2005
--- openafs/src/WINNT/afsrdr/kif.h	Thu Jul 20 17:46:21 2006
***************
*** 30,52 ****
  
  
  /* this is based on BUF_FILEHASH, but we were not getting unique hashes */
! #define FID_HASH_FN(fidp)		((((fidp)->vnode + \
! 					   ((fidp)->unique << 13) + ((fidp)->unique >> (32-13))	+ \
! 					   (fidp)->volume + \
! 					   (fidp)->cell)))
  
  
  /* dirent information */
  struct readdir_data
! 	{
! 	LARGE_INTEGER cookie;
! 	long offset;
! 	LARGE_INTEGER creation, access, write, change, size;
! 	ULONG attribs, name_length;			/* chars */
! 	CCHAR short_name_length;			/* chars */
! 	WCHAR short_name[14];
! 	WCHAR name[];
! 	};
  typedef struct readdir_data readdir_data_t;
  
  
--- 30,53 ----
  
  
  /* this is based on BUF_FILEHASH, but we were not getting unique hashes */
! #define FID_HASH_FN(fidp) \
!     ((((fidp)->vnode + \
!     ((fidp)->unique << 13) + ((fidp)->unique >> (32-13)) + \
!     (fidp)->volume + \
!     (fidp)->cell)))
  
  
  /* dirent information */
  struct readdir_data
! {
!     LARGE_INTEGER cookie;
!     long offset;
!     LARGE_INTEGER creation, access, write, change, size;
!     ULONG attribs, name_length;			/* chars */
!     CCHAR short_name_length;			/* chars */
!     WCHAR short_name[14];
!     WCHAR name[];
! };
  typedef struct readdir_data readdir_data_t;
  
  
***************
*** 56,90 ****
  
  #define IFSL_SUCCESS				(IFSL_SUCCESS_BASE + 0)
  #define IFSL_DOES_NOT_EXIST			(IFSL_FAIL_BASE + 1)
! #define IFSL_NOT_IMPLEMENTED		(IFSL_FAIL_BASE + 2)
  #define IFSL_END_OF_ENUM			(IFSL_SUCCESS_BASE + 3)
  #define IFSL_CANNOT_MAKE			(IFSL_FAIL_BASE + 4)
  #define IFSL_END_OF_FILE			(IFSL_SUCCESS_BASE + 5)
  #define IFSL_NO_ACCESS				(IFSL_FAIL_BASE + 6)
! #define IFSL_BUFFER_TOO_SMALL		(IFSL_FAIL_BASE + 7)
! #define IFSL_SHARING_VIOLATION		(IFSL_FAIL_BASE + 8)
  #define IFSL_BAD_INPUT				(IFSL_FAIL_BASE + 9)
! #define IFSL_GENERIC_FAILURE		(IFSL_FAIL_BASE + 10)
  #define IFSL_OPEN_CREATED			(IFSL_SUCCESS_BASE + 11)
  #define IFSL_OPEN_EXISTS			(IFSL_FAIL_BASE + 12)
  #define IFSL_OPEN_OPENED			(IFSL_SUCCESS_BASE + 13)
! #define IFSL_OPEN_OVERWRITTEN		(IFSL_SUCCESS_BASE + 14)
! #define IFSL_OPEN_SUPERSCEDED		(IFSL_SUCCESS_BASE + 15)
  #define IFSL_BADFILENAME			(IFSL_FAIL_BASE + 16)
  #define IFSL_READONLY				(IFSL_FAIL_BASE + 17)
  #define IFSL_IS_A_DIR				(IFSL_FAIL_BASE + 18)
! #define IFSL_PATH_DOES_NOT_EXIST	(IFSL_FAIL_BASE + 19)
  #define IFSL_IS_A_FILE				(IFSL_FAIL_BASE + 20)
  #define IFSL_NO_FILE				(IFSL_FAIL_BASE + 21)
  #define IFSL_NOT_EMPTY				(IFSL_FAIL_BASE + 22)
  #define IFSL_RPC_TIMEOUT			(IFSL_FAIL_BASE + 23)
  #define IFSL_OVERQUOTA				(IFSL_FAIL_BASE + 24)
! #define IFSL_MEMORY					(IFSL_FAIL_BASE + 25)
! #define IFSL_UNSPEC					(IFSL_FAIL_BASE + 26)
  
  
  /* ioctl codes */
! #define IOCTL_AFSRDR_IOCTL		CTL_CODE(IOCTL_DISK_BASE, 0x007, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  #define IOCTL_AFSRDR_DOWNCALL	CTL_CODE(IOCTL_DISK_BASE, 0x008, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  #define IOCTL_AFSRDR_GET_PATH	CTL_CODE(IOCTL_DISK_BASE, 0x009, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  
--- 57,91 ----
  
  #define IFSL_SUCCESS				(IFSL_SUCCESS_BASE + 0)
  #define IFSL_DOES_NOT_EXIST			(IFSL_FAIL_BASE + 1)
! #define IFSL_NOT_IMPLEMENTED			(IFSL_FAIL_BASE + 2)
  #define IFSL_END_OF_ENUM			(IFSL_SUCCESS_BASE + 3)
  #define IFSL_CANNOT_MAKE			(IFSL_FAIL_BASE + 4)
  #define IFSL_END_OF_FILE			(IFSL_SUCCESS_BASE + 5)
  #define IFSL_NO_ACCESS				(IFSL_FAIL_BASE + 6)
! #define IFSL_BUFFER_TOO_SMALL			(IFSL_FAIL_BASE + 7)
! #define IFSL_SHARING_VIOLATION			(IFSL_FAIL_BASE + 8)
  #define IFSL_BAD_INPUT				(IFSL_FAIL_BASE + 9)
! #define IFSL_GENERIC_FAILURE			(IFSL_FAIL_BASE + 10)
  #define IFSL_OPEN_CREATED			(IFSL_SUCCESS_BASE + 11)
  #define IFSL_OPEN_EXISTS			(IFSL_FAIL_BASE + 12)
  #define IFSL_OPEN_OPENED			(IFSL_SUCCESS_BASE + 13)
! #define IFSL_OPEN_OVERWRITTEN			(IFSL_SUCCESS_BASE + 14)
! #define IFSL_OPEN_SUPERSCEDED			(IFSL_SUCCESS_BASE + 15)
  #define IFSL_BADFILENAME			(IFSL_FAIL_BASE + 16)
  #define IFSL_READONLY				(IFSL_FAIL_BASE + 17)
  #define IFSL_IS_A_DIR				(IFSL_FAIL_BASE + 18)
! #define IFSL_PATH_DOES_NOT_EXIST		(IFSL_FAIL_BASE + 19)
  #define IFSL_IS_A_FILE				(IFSL_FAIL_BASE + 20)
  #define IFSL_NO_FILE				(IFSL_FAIL_BASE + 21)
  #define IFSL_NOT_EMPTY				(IFSL_FAIL_BASE + 22)
  #define IFSL_RPC_TIMEOUT			(IFSL_FAIL_BASE + 23)
  #define IFSL_OVERQUOTA				(IFSL_FAIL_BASE + 24)
! #define IFSL_MEMORY				(IFSL_FAIL_BASE + 25)
! #define IFSL_UNSPEC				(IFSL_FAIL_BASE + 26)
  
  
  /* ioctl codes */
! #define IOCTL_AFSRDR_IOCTL	CTL_CODE(IOCTL_DISK_BASE, 0x007, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  #define IOCTL_AFSRDR_DOWNCALL	CTL_CODE(IOCTL_DISK_BASE, 0x008, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  #define IOCTL_AFSRDR_GET_PATH	CTL_CODE(IOCTL_DISK_BASE, 0x009, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  
***************
*** 109,112 ****
  
  /* downcalls */
  long dc_break_callback(ULONG fid);
! long dc_release_hooks();
--- 110,113 ----
  
  /* downcalls */
  long dc_break_callback(ULONG fid);
! long dc_release_hooks(void);
Index: openafs/src/WINNT/afssvrmgr/NTMakefile
diff -c openafs/src/WINNT/afssvrmgr/NTMakefile:1.10 openafs/src/WINNT/afssvrmgr/NTMakefile:1.10.4.1
*** openafs/src/WINNT/afssvrmgr/NTMakefile:1.10	Sun Nov 20 20:56:12 2005
--- openafs/src/WINNT/afssvrmgr/NTMakefile	Mon Jul 24 10:13:18 2006
***************
*** 90,96 ****
  
  VCLIBS =\
  	comctl32.lib \
! 	shell32.lib
  
  EXELIBS = \
  	$(DESTDIR)\lib\afsauthent.lib \
--- 90,97 ----
  
  VCLIBS =\
  	comctl32.lib \
! 	shell32.lib \
! 	userenv.lib
  
  EXELIBS = \
  	$(DESTDIR)\lib\afsauthent.lib \
Index: openafs/src/WINNT/client_creds/NTMakefile
diff -c openafs/src/WINNT/client_creds/NTMakefile:1.16 openafs/src/WINNT/client_creds/NTMakefile:1.16.4.1
*** openafs/src/WINNT/client_creds/NTMakefile:1.16	Sun Nov 20 20:56:20 2005
--- openafs/src/WINNT/client_creds/NTMakefile	Mon Jul 24 10:13:18 2006
***************
*** 53,65 ****
      $(OUT)\RegistrySupport.obj 
  
  VCLIBS =\
!     iphlpapi.lib \
  	comctl32.lib \
  	shell32.lib \
  	uuid.lib \
  	ole32.lib \
  	mpr.lib \
!     netapi32.lib 
  
  EXELIBS = \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
--- 53,66 ----
      $(OUT)\RegistrySupport.obj 
  
  VCLIBS =\
!     	iphlpapi.lib \
  	comctl32.lib \
  	shell32.lib \
  	uuid.lib \
  	ole32.lib \
  	mpr.lib \
! 	userenv.lib \
!     	netapi32.lib 
  
  EXELIBS = \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/frames.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/frames.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/frames.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/frames.htm:1.1	Sun Sep 25 16:35:13 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/frames.htm	Thu Aug  3 00:43:29 2006
***************
*** 1,130 ****
- <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="frames_files/filelist.xml">
- <title>OpenAFS for Windows 1.4.0 Release Notes</title>
- <!--[if gte mso 9]><xml>
-  <o:DocumentProperties>
-   <o:Author>Jeffrey Altman</o:Author>
-   <o:LastAuthor>Jeffrey Altman</o:LastAuthor>
-   <o:Revision>2</o:Revision>
-   <o:TotalTime>0</o:TotalTime>
-   <o:Created>2005-09-25T20:26:00Z</o:Created>
-   <o:LastSaved>2005-09-25T20:26:00Z</o:LastSaved>
-   <o:Pages>1</o:Pages>
-   <o:Words>9</o:Words>
-   <o:Characters>53</o:Characters>
-   <o:Company>Secure Endpoints Inc.</o:Company>
-   <o:Lines>1</o:Lines>
-   <o:Paragraphs>1</o:Paragraphs>
-   <o:CharactersWithSpaces>61</o:CharactersWithSpaces>
-   <o:Version>11.6408</o:Version>
-  </o:DocumentProperties>
- </xml><![endif]--><!--[if gte mso 9]><xml>
-  <w:WordDocument>
-   <w:View>Normal</w:View>
-   <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/>
-    <w:WrapTextWithPunct/>
-    <w:UseAsianBreakRules/>
-    <w:UseWord2002TableStyleRules/>
-    <w:UseFELayout/>
-   </w:Compatibility>
-   <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
-  </w:WordDocument>
- </xml><![endif]--><!--[if gte mso 9]><xml>
-  <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
-  </w:LatentStyles>
- </xml><![endif]-->
- <style>
- <!--
-  /* Font Definitions */
-  @font-face
- 	{font-family:"MS Mincho";
- 	panose-1:2 2 6 9 4 2 5 8 3 4;
- 	mso-font-alt:"\FF2D\FF33 \660E\671D";
- 	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:-1610612033 1757936891 16 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;}
- -->
- </style>
- <!--[if gte mso 10]>
- <style>
-  /* Style Definitions */
-  table.MsoNormalTable
- 	{mso-style-name:"Table Normal";
- 	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]-->
- </head>
- 
- <frameset cols="275,1*">
-  <frameset rows="160,1*">
-   <frame name=OpenAFS.org src=logo.htm scrolling=no style='mso-linked-frame:
-   auto'>
-   <frame name="Release Notes Table of Contents" src=toc.htm style='mso-linked-frame:
-   auto'>
-  </frameset>
-  <frame name="OpenAFS for Windows Release Notes" src=relnotes.htm
-  style='mso-linked-frame:auto'>
-  <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>
-   </div>
-   </body>
-  </noframes>
- </frameset>
- 
- </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 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.1
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1	Sun Sep 25 16:35:13 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm	Wed Jul 19 00:08:46 2006
***************
*** 1,161 ****
! <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">
  
  <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="logo_files/filelist.xml">
! <link rel=Edit-Time-Data href="logo_files/editdata.mso">
! <!--[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]-->
! <title>OpenAFS for Windows Logo</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>0</o:TotalTime>
!   <o:Created>2005-09-25T20:09:00Z</o:Created>
!   <o:LastSaved>2005-09-25T20:09:00Z</o:LastSaved>
!   <o:Pages>1</o:Pages>
!   <o:Characters>1</o:Characters>
!   <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>1</o:Lines>
!   <o:Paragraphs>1</o:Paragraphs>
!   <o:CharactersWithSpaces>1</o:CharactersWithSpaces>
!   <o:Version>11.6408</o:Version>
!  </o:DocumentProperties>
! </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:WordDocument>
!   <w:SpellingState>Clean</w:SpellingState>
!   <w:GrammarState>Clean</w:GrammarState>
!   <w:ValidateAgainstSchemas/>
!   <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
!   <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
!   <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
!   <w:Compatibility>
!    <w:BreakWrappedTables/>
!    <w:SnapToGridInCell/>
!    <w:WrapTextWithPunct/>
!    <w:UseAsianBreakRules/>
!    <w:UseWord2002TableStyleRules/>
!    <w:UseFELayout/>
!   </w:Compatibility>
!   <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
!  </w:WordDocument>
! </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
!  </w:LatentStyles>
! </xml><![endif]-->
  <style>
  <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;
! 	mso-font-alt:"\FF2D\FF33 \660E\671D";
! 	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:-1610612033 1757936891 16 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;}
  -->
  </style>
! <!--[if gte mso 10]>
! <style>
!  /* Style Definitions */
!  table.MsoNormalTable
! 	{mso-style-name:"Table Normal";
! 	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]--><!--[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 style='tab-interval:36.0pt'>
  
  <div class=Section1>
  
! <p class=MsoNormal><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
!  o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
!  stroked="f">
!  <v:stroke joinstyle="miter"/>
!  <v:formulas>
!   <v:f eqn="if lineDrawn pixelLineWidth 0"/>
!   <v:f eqn="sum @0 1 0"/>
!   <v:f eqn="sum 0 0 @1"/>
!   <v:f eqn="prod @2 1 2"/>
!   <v:f eqn="prod @3 21600 pixelWidth"/>
!   <v:f eqn="prod @3 21600 pixelHeight"/>
!   <v:f eqn="sum @0 0 1"/>
!   <v:f eqn="prod @6 1 2"/>
!   <v:f eqn="prod @7 21600 pixelWidth"/>
!   <v:f eqn="sum @8 21600 0"/>
!   <v:f eqn="prod @7 21600 pixelHeight"/>
!   <v:f eqn="sum @10 21600 0"/>
!  </v:formulas>
!  <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
!  <o:lock v:ext="edit" aspectratio="t"/>
! </v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75"
!  href="http://www.openafs.org/" style='position:absolute;margin-left:0;
!  margin-top:0;width:150.4pt;height:104.2pt;z-index:1;mso-position-horizontal:left;
!  mso-position-vertical:top;mso-position-vertical-relative:line' o:allowoverlap="f"
!  o:button="t">
!  <v:fill o:detectmouseclick="t"/>
!  <v:imagedata src="logo_files/image001.jpg" o:title="openafswindowslarge"/>
!  <w:wrap type="square"/>
! </v:shape><![endif]--><![if !vml]><a href="http://www.openafs.org/"><img
! border=0 width=201 height=139 src="logo_files/image002.jpg" align=left
! hspace=12 v:shapes="_x0000_s1026"></a><![endif]></p>
  
  </div>
  
--- 1,41 ----
! <html>
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
! <meta name=Generator content="Microsoft Word 11 (filtered)">
! <title>OpenAFS for Windows 1.4.2 Release Notes</title>
  <style>
  <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;}
  @font-face
  	{font-family:"\@MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{margin:0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  @page Section1
  	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
  div.Section1
  	{page:Section1;}
  -->
  </style>
! 
  </head>
  
! <body lang=EN-US>
  
  <div class=Section1>
  
! <p class=MsoNormal><a href="http://www.openafs.org/windows.html"><span
! style='color:windowtext;text-decoration:none'><img border=0 width=184
! height=127 src="logo_files/image001.jpg"></span></a></p>
  
  </div>
  
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm
diff -c /dev/null openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:29 2006
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm	Wed Jul 19 00:15:17 2006
***************
*** 0 ****
--- 1,48 ----
+ <html>
+ 
+ <head>
+ <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+ <meta name=Generator content="Microsoft Word 11 (filtered)">
+ <title>OpenAFS for Windows 1.5.3 Release Notes</title>
+ <style>
+ <!--
+  /* Font Definitions */
+  @font-face
+ 	{font-family:"MS Mincho";
+ 	panose-1:2 2 6 9 4 2 5 8 3 4;}
+ @font-face
+ 	{font-family:"\@MS Mincho";
+ 	panose-1:2 2 6 9 4 2 5 8 3 4;}
+  /* Style Definitions */
+  p.MsoNormal, li.MsoNormal, div.MsoNormal
+ 	{margin:0pt;
+ 	margin-bottom:.0001pt;
+ 	font-size:12.0pt;
+ 	font-family:"Times New Roman";}
+ @page Section1
+ 	{size:612.0pt 792.0pt;
+ 	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
+ div.Section1
+ 	{page:Section1;}
+ -->
+ </style>
+ 
+ </head>
+ 
+ <frameset cols="216,1*">
+  <frameset rows="14%,1*">
+   <frame name=logo src=logo.htm>
+   <frame name="Table of Contents" src=toc.htm>
+  </frameset>
+  <frame name=Frame1 src=relnotes.htm>
+  <noframes>
+   <body lang=EN-US>
+   <div class=Section1>
+   <p class=MsoNormal>This page uses frames, but your browser doesn't support
+   them.</p>
+   </div>
+   </body>
+  </noframes>
+ </frameset>
+ 
+ </html>
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 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.1
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6	Sat Oct  8 10:13:25 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm	Wed Jul 19 00:08:46 2006
***************
*** 1,3011 ****
! <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:contacts"
! xmlns:st2="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 11">
! <meta name=Originator content="Microsoft Word 11">
! <link rel=File-List href="relnotes_files/filelist.xml">
! <link rel=Preview href="relnotes_files/preview.wmf">
! <title>OpenAFS for Windows 1.4.0 Release Notes</title>
! <o:SmartTagType namespaceuri="urn:schemas:contacts" name="GivenName"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="address"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="PostalCode"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="State"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="City"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="Street"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="country-region"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="PlaceType"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="PlaceName"/>
! <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
!  name="place"/>
! <!--[if gte mso 9]><xml>
!  <o:DocumentProperties>
!   <o:Author>Jeffrey Altman</o:Author>
!   <o:Keywords>OpenAFS 1.4.0</o:Keywords>
!   <o:LastAuthor>Jeffrey Altman</o:LastAuthor>
!   <o:Revision>6</o:Revision>
!   <o:TotalTime>48</o:TotalTime>
!   <o:LastPrinted>2005-09-26T23:55:00Z</o:LastPrinted>
!   <o:Created>2005-09-25T20:12:00Z</o:Created>
!   <o:LastSaved>2005-10-08T14:11:00Z</o:LastSaved>
!   <o:Pages>1</o:Pages>
!   <o:Words>14555</o:Words>
!   <o:Characters>82969</o:Characters>
!   <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>691</o:Lines>
!   <o:Paragraphs>194</o:Paragraphs>
!   <o:CharactersWithSpaces>97330</o:CharactersWithSpaces>
!   <o:Version>11.6568</o:Version>
!  </o:DocumentProperties>
! </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:WordDocument>
!   <w:DrawingGridHorizontalSpacing>0 pt</w:DrawingGridHorizontalSpacing>
!   <w:DrawingGridVerticalSpacing>0 pt</w:DrawingGridVerticalSpacing>
!   <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
!   <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery>
!   <w:UseMarginsForDrawingGridOrigin/>
!   <w:ValidateAgainstSchemas/>
!   <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
!   <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
!   <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
!   <w:DrawingGridHorizontalOrigin>0 pt</w:DrawingGridHorizontalOrigin>
!   <w:DrawingGridVerticalOrigin>0 pt</w:DrawingGridVerticalOrigin>
!   <w:Compatibility>
!    <w:NoLeading/>
!    <w:SpaceForUL/>
!    <w:BalanceSingleByteDoubleByteWidth/>
!    <w:DoNotLeaveBackslashAlone/>
!    <w:ULTrailSpace/>
!    <w:DoNotExpandShiftReturn/>
!    <w:AdjustLineHeightInTable/>
!    <w:SelectEntireFieldWithStartOrEnd/>
!    <w:UseWord2002TableStyleRules/>
!    <w:UseFELayout/>
!   </w:Compatibility>
!   <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
!  </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>
! <style>
! st1\:*{behavior:url(#ieooui) }st2\:*{behavior:url(#ieooui) }
! </style>
! <![endif]-->
  <style>
  <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;
! 	mso-font-alt:"\FF2D\FF33 \660E\671D";
! 	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:Thorndale;
! 	panose-1:2 2 6 3 5 4 5 2 3 4;
! 	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:"Andale Sans UI";
! 	panose-1:2 11 5 2 0 0 0 0 0 1;
! 	mso-font-charset:0;
! 	mso-generic-font-family:swiss;
! 	mso-font-pitch:variable;
! 	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:Albany;
! 	panose-1:2 11 6 4 2 2 2 2 2 4;
! 	mso-font-charset:0;
! 	mso-generic-font-family:swiss;
! 	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;
! 	mso-font-charset:0;
! 	mso-generic-font-family:modern;
! 	mso-font-pitch:fixed;
! 	mso-font-signature:647 0 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:-1610612033 1757936891 16 0 131231 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:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  h1
! 	{mso-style-parent:Heading;
! 	mso-style-next:"Body Text";
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-indent:0pt;
- 	mso-pagination:none;
  	page-break-after:avoid;
- 	mso-outline-level:1;
- 	mso-list:l11 level1 lfo2;
- 	mso-hyphenate:none;
- 	tab-stops:list 0pt;
  	font-size:16.0pt;
! 	font-family:Albany;
! 	mso-bidi-font-family:Tahoma;
! 	mso-font-kerning:0pt;}
  h2
! 	{mso-style-parent:Heading;
! 	mso-style-next:"Body Text";
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-indent:0pt;
- 	mso-pagination:none;
  	page-break-after:avoid;
- 	mso-outline-level:2;
- 	mso-list:l11 level2 lfo2;
- 	mso-hyphenate:none;
- 	tab-stops:list 0pt;
  	font-size:14.0pt;
  	font-family:Albany;
- 	mso-bidi-font-family:Tahoma;
  	font-style:italic;}
  h3
! 	{mso-style-parent:Heading;
! 	mso-style-link:"Heading 3 Char";
! 	mso-style-next:"Body Text";
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-indent:0pt;
- 	mso-pagination:none;
  	page-break-after:avoid;
- 	mso-outline-level:3;
- 	mso-list:l11 level3 lfo2;
- 	mso-hyphenate:none;
- 	tab-stops:list 0pt;
  	font-size:14.0pt;
! 	font-family:Albany;
! 	mso-bidi-font-family:Tahoma;}
  h4
! 	{mso-style-link:"Heading 4 Char";
! 	mso-style-next:Normal;
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:3.0pt;
  	margin-left:0pt;
- 	mso-pagination:none;
  	page-break-after:avoid;
- 	mso-outline-level:4;
- 	mso-hyphenate:none;
  	font-size:14.0pt;
! 	font-family:"Times New Roman";
! 	mso-fareast-font-family:"Andale Sans UI";}
  h5
! 	{mso-style-next:Normal;
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:3.0pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-outline-level:5;
- 	mso-hyphenate:none;
  	font-size:13.0pt;
  	font-family:Thorndale;
- 	mso-fareast-font-family:"Andale Sans UI";
  	font-style:italic;}
  h6
! 	{mso-style-next:Normal;
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:3.0pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-outline-level:6;
- 	mso-hyphenate:none;
  	font-size:11.0pt;
! 	font-family:"Times New Roman";
! 	mso-fareast-font-family:"Andale Sans UI";}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
! 	{mso-style-noshow:yes;
! 	mso-style-parent:Index;
! 	margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
- 	mso-pagination:no-line-numbers;
- 	mso-hyphenate:none;
- 	tab-stops:right dotted 432.0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:Tahoma;}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
! 	{mso-style-noshow:yes;
! 	mso-style-parent:Index;
! 	margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:14.15pt;
- 	mso-pagination:no-line-numbers;
- 	mso-hyphenate:none;
- 	tab-stops:right dotted 432.0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:Tahoma;}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
! 	{mso-style-noshow:yes;
! 	mso-style-parent:Index;
! 	margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:28.3pt;
- 	mso-pagination:no-line-numbers;
- 	mso-hyphenate:none;
- 	tab-stops:right dotted 432.0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:Tahoma;}
  p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
! 	{mso-style-noshow:yes;
! 	margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:10.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoHeader, li.MsoHeader, div.MsoHeader
  	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
- 	tab-stops:center 216.0pt right 432.0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoFooter, li.MsoFooter, div.MsoFooter
  	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
- 	tab-stops:center 216.0pt right 432.0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	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:none;
- 	mso-hyphenate:none;
- 	mso-element:frame;
- 	mso-element-frame-width:396.0pt;
- 	mso-element-frame-height:99.0pt;
- 	mso-element-frame-hspace:9.0pt;
- 	mso-element-wrap:auto;
- 	mso-element-anchor-horizontal:page;
- 	mso-element-left:center;
- 	mso-element-top:bottom;
  	font-size:12.0pt;
! 	font-family:Arial;
! 	mso-fareast-font-family:"Andale Sans UI";}
  span.MsoFootnoteReference
! 	{mso-style-noshow:yes;
! 	vertical-align:super;}
  p.MsoList, li.MsoList, div.MsoList
! 	{mso-style-parent:"Body Text";
! 	margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:Tahoma;}
  p.MsoTitle, li.MsoTitle, div.MsoTitle
! 	{mso-style-parent:Heading;
! 	mso-style-next:Subtitle;
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-align:center;
- 	mso-pagination:none;
  	page-break-after:avoid;
- 	mso-hyphenate:none;
  	font-size:18.0pt;
  	font-family:Albany;
- 	mso-fareast-font-family:"MS Mincho";
- 	mso-bidi-font-family:Tahoma;
  	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:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
! 	{mso-style-parent:"Body Text";
! 	margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:14.15pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
! 	{margin-top:7.2pt;
  	margin-right:0pt;
! 	margin-bottom:3.0pt;
  	margin-left:0pt;
  	text-align:center;
! 	mso-pagination:none;
! 	mso-outline-level:2;
! 	mso-hyphenate:none;
! 	font-size:12.0pt;
! 	font-family:Arial;
! 	mso-fareast-font-family:"Andale Sans UI";}
  a:link, span.MsoHyperlink
! 	{mso-style-parent:"";
! 	color:navy;
! 	text-decoration:underline;
! 	text-underline:single;}
  a:visited, span.MsoHyperlinkFollowed
! 	{mso-style-parent:"";
! 	color:maroon;
! 	text-decoration:underline;
! 	text-underline:single;}
! span.Heading4Char
! 	{mso-style-name:"Heading 4 Char";
! 	mso-style-locked:yes;
! 	mso-style-link:"Heading 4";
! 	mso-ansi-font-size:14.0pt;
! 	mso-bidi-font-size:14.0pt;
! 	font-family:"Andale Sans UI";
! 	mso-ascii-font-family:"Andale Sans UI";
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-hansi-font-family:"Andale Sans UI";
! 	mso-ansi-language:EN-US;
! 	mso-bidi-language:AR-SA;
! 	font-weight:bold;}
! 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:"Andale Sans UI";
! 	mso-hansi-font-family:Thorndale;
! 	mso-ansi-language:EN-US;
! 	mso-bidi-language:AR-SA;}
! span.HeadingChar
! 	{mso-style-name:"Heading Char";
! 	mso-style-locked:yes;
! 	mso-style-link:Heading;
! 	mso-ansi-font-size:14.0pt;
! 	mso-bidi-font-size:14.0pt;
! 	font-family:Albany;
! 	mso-ascii-font-family:Albany;
! 	mso-fareast-font-family:"MS Mincho";
! 	mso-hansi-font-family:Albany;
! 	mso-bidi-font-family:Tahoma;
! 	mso-ansi-language:EN-US;
! 	mso-bidi-language:AR-SA;}
  p.Heading, li.Heading, div.Heading
! 	{mso-style-name:Heading;
! 	mso-style-link:"Heading Char";
! 	mso-style-next:"Body Text";
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
- 	mso-pagination:none;
  	page-break-after:avoid;
- 	mso-hyphenate:none;
  	font-size:14.0pt;
! 	font-family:Albany;
! 	mso-fareast-font-family:"MS Mincho";
! 	mso-bidi-font-family:Tahoma;}
  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:no-line-numbers;
- 	mso-hyphenate:none;
  	font-size:10.0pt;
  	font-family:Thorndale;
- 	mso-fareast-font-family:"Andale Sans UI";
- 	mso-bidi-font-family:Tahoma;
  	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:no-line-numbers;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:Tahoma;}
  p.ContentsHeading, li.ContentsHeading, div.ContentsHeading
! 	{mso-style-name:"Contents Heading";
! 	mso-style-parent:Heading;
! 	margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
- 	mso-pagination:no-line-numbers;
  	page-break-after:avoid;
- 	mso-hyphenate:none;
  	font-size:16.0pt;
  	font-family:Albany;
- 	mso-fareast-font-family:"MS Mincho";
- 	mso-bidi-font-family:Tahoma;
  	font-weight:bold;}
  p.PreformattedText, li.PreformattedText, div.PreformattedText
! 	{mso-style-name:"Preformatted Text";
! 	margin:0pt;
  	margin-bottom:.0001pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:10.0pt;
! 	font-family:Cumberland;
! 	mso-fareast-font-family:Cumberland;
! 	mso-bidi-font-family:Cumberland;}
  p.ListContents, li.ListContents, div.ListContents
! 	{mso-style-name:"List Contents";
! 	margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:28.35pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.ListHeading, li.ListHeading, div.ListHeading
! 	{mso-style-name:"List Heading";
! 	mso-style-next:"List Contents";
! 	margin-top:4.3pt;
  	margin-right:0pt;
  	margin-bottom:4.3pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.Header5, li.Header5, div.Header5
! 	{mso-style-name:"Header 5";
! 	margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
- 	mso-pagination:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	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:none;
- 	mso-hyphenate:none;
  	font-size:12.0pt;
! 	font-family:Thorndale;
! 	mso-fareast-font-family:"Andale Sans UI";
! 	mso-bidi-font-family:"Times New Roman";}
  p.Default, li.Default, div.Default
! 	{mso-style-name:Default;
! 	mso-style-parent:"";
! 	margin:0pt;
  	margin-bottom:.0001pt;
- 	mso-pagination:widow-orphan;
- 	mso-layout-grid-align:none;
  	text-autospace:none;
  	font-size:12.0pt;
  	font-family:Arial;
- 	mso-fareast-font-family:"MS Mincho";
  	color:black;}
! span.NumberingSymbols
! 	{mso-style-name:"Numbering Symbols";
! 	mso-style-parent:"";}
! span.Bullets
! 	{mso-style-name:Bullets;
! 	mso-style-parent:"";
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	font-family:StarSymbol;
! 	mso-ascii-font-family:StarSymbol;
! 	mso-fareast-font-family:StarSymbol;
! 	mso-hansi-font-family:StarSymbol;
! 	mso-bidi-font-family:StarSymbol;}
! span.FootnoteCharacters
! 	{mso-style-name:"Footnote Characters";
! 	mso-style-parent:"";}
! span.EndnoteCharacters
! 	{mso-style-name:"Endnote Characters";
! 	mso-style-parent:"";}
! span.Heading3Char
! 	{mso-style-name:"Heading 3 Char";
! 	mso-style-locked:yes;
! 	mso-style-parent:"Heading Char";
! 	mso-style-link:"Heading 3";
! 	mso-ansi-font-size:14.0pt;
! 	mso-bidi-font-size:14.0pt;
! 	font-family:Albany;
! 	mso-ascii-font-family:Albany;
! 	mso-fareast-font-family:"MS Mincho";
! 	mso-hansi-font-family:Albany;
! 	mso-bidi-font-family:Tahoma;
! 	mso-ansi-language:EN-US;
! 	mso-bidi-language:AR-SA;
! 	font-weight:bold;}
   /* Page Definitions */
!  @page
! 	{mso-footnote-separator:url("relnotes_files/header.htm") fs;
! 	mso-footnote-continuation-separator:url("relnotes_files/header.htm") fcs;
! 	mso-endnote-separator:url("relnotes_files/header.htm") es;
! 	mso-endnote-continuation-separator:url("relnotes_files/header.htm") ecs;
! 	mso-footnote-position:beneath-text;}
! @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;
! 	mso-footnote-position:beneath-text;}
  @page Section2
  	{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-header:url("relnotes_files/header.htm") h2;
! 	mso-paper-source:0;}
  div.Section2
! 	{page:Section2;
! 	mso-footnote-position:beneath-text;}
   /* List Definitions */
!  @list l0
! 	{mso-list-id:1;
! 	mso-list-template-ids:1148726518;}
! @list l0:level1
! 	{mso-level-tab-stop:18.0pt;
! 	mso-level-number-position:left;
! 	margin-left:18.0pt;
! 	text-indent:-18.0pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;}
! @list l0:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l0:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1
! 	{mso-list-id:2;
! 	mso-list-template-ids:2;}
! @list l1:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l1:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2
! 	{mso-list-id:3;
! 	mso-list-template-ids:3;}
! @list l2:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l2:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3
! 	{mso-list-id:4;
! 	mso-list-template-ids:4;}
! @list l3:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l3:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4
! 	{mso-list-id:5;
! 	mso-list-template-ids:5;}
! @list l4:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l4:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5
! 	{mso-list-id:6;
! 	mso-list-template-ids:6;}
! @list l5:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l5:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6
! 	{mso-list-id:7;
! 	mso-list-template-ids:7;}
! @list l6:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l6:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7
! 	{mso-list-id:8;
! 	mso-list-template-ids:8;}
! @list l7:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l7:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8
! 	{mso-list-id:9;
! 	mso-list-template-ids:9;}
! @list l8:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l8:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9
! 	{mso-list-id:10;
! 	mso-list-template-ids:10;}
! @list l9:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l9:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10
! 	{mso-list-id:11;
! 	mso-list-template-ids:11;}
! @list l10:level1
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:14.15pt;
! 	mso-level-number-position:left;
! 	margin-left:14.15pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l10:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l11
! 	{mso-list-id:12;
! 	mso-list-template-ids:12;}
! @list l11:level1
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level2
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level3
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level4
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level5
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level6
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level7
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level8
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l11:level9
! 	{mso-level-number-format:none;
! 	mso-level-text:"";
! 	mso-level-tab-stop:0pt;
! 	mso-level-number-position:left;
! 	margin-left:0pt;
! 	text-indent:0pt;}
! @list l12
! 	{mso-list-id:116531205;
! 	mso-list-template-ids:-1288027304;}
! @list l12:level1
! 	{mso-level-text:"%1\)";
! 	mso-level-tab-stop:36.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level2
! 	{mso-level-tab-stop:72.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level3
! 	{mso-level-tab-stop:108.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level4
! 	{mso-level-tab-stop:144.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level5
! 	{mso-level-tab-stop:180.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level6
! 	{mso-level-tab-stop:216.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level7
! 	{mso-level-tab-stop:252.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level8
! 	{mso-level-tab-stop:288.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l12:level9
! 	{mso-level-tab-stop:324.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l13
! 	{mso-list-id:276641855;
! 	mso-list-template-ids:67698719;}
! @list l13:level1
! 	{mso-level-tab-stop:18.0pt;
! 	mso-level-number-position:left;
! 	margin-left:18.0pt;
! 	text-indent:-18.0pt;}
! @list l13:level2
! 	{mso-level-text:"%1\.%2\.";
! 	mso-level-tab-stop:39.6pt;
! 	mso-level-number-position:left;
! 	margin-left:39.6pt;
! 	text-indent:-21.6pt;}
! @list l13:level3
! 	{mso-level-text:"%1\.%2\.%3\.";
! 	mso-level-tab-stop:72.0pt;
! 	mso-level-number-position:left;
! 	margin-left:61.2pt;
! 	text-indent:-25.2pt;}
! @list l13:level4
! 	{mso-level-text:"%1\.%2\.%3\.%4\.";
! 	mso-level-tab-stop:90.0pt;
! 	mso-level-number-position:left;
! 	margin-left:86.4pt;
! 	text-indent:-32.4pt;}
! @list l13:level5
! 	{mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
! 	mso-level-tab-stop:126.0pt;
! 	mso-level-number-position:left;
! 	margin-left:111.6pt;
! 	text-indent:-39.6pt;}
! @list l13:level6
! 	{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
! 	mso-level-tab-stop:144.0pt;
! 	mso-level-number-position:left;
! 	margin-left:136.8pt;
! 	text-indent:-46.8pt;}
! @list l13:level7
! 	{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
! 	mso-level-tab-stop:180.0pt;
! 	mso-level-number-position:left;
! 	margin-left:162.0pt;
! 	text-indent:-54.0pt;}
! @list l13:level8
! 	{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
! 	mso-level-tab-stop:198.0pt;
! 	mso-level-number-position:left;
! 	margin-left:187.2pt;
! 	text-indent:-61.2pt;}
! @list l13:level9
! 	{mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
! 	mso-level-tab-stop:234.0pt;
! 	mso-level-number-position:left;
! 	margin-left:216.0pt;
! 	text-indent:-72.0pt;}
! @list l14
! 	{mso-list-id:858816198;
! 	mso-list-template-ids:1148726518;}
! @list l14:level1
! 	{mso-level-tab-stop:18.0pt;
! 	mso-level-number-position:left;
! 	margin-left:18.0pt;
! 	text-indent:-18.0pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;}
! @list l14:level2
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:28.35pt;
! 	mso-level-number-position:left;
! 	margin-left:28.35pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level3
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:42.5pt;
! 	mso-level-number-position:left;
! 	margin-left:42.5pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level4
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:56.7pt;
! 	mso-level-number-position:left;
! 	margin-left:56.7pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level5
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:70.85pt;
! 	mso-level-number-position:left;
! 	margin-left:70.85pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level6
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:85.05pt;
! 	mso-level-number-position:left;
! 	margin-left:85.05pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level7
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:99.2pt;
! 	mso-level-number-position:left;
! 	margin-left:99.2pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level8
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:113.4pt;
! 	mso-level-number-position:left;
! 	margin-left:113.4pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l14:level9
! 	{mso-level-number-format:bullet;
! 	mso-level-text:\F0B7;
! 	mso-level-tab-stop:127.55pt;
! 	mso-level-number-position:left;
! 	margin-left:127.55pt;
! 	text-indent:-14.15pt;
! 	mso-ansi-font-size:9.0pt;
! 	mso-bidi-font-size:9.0pt;
! 	mso-ascii-font-family:Symbol;
! 	mso-hansi-font-family:Symbol;
! 	mso-bidi-font-family:StarSymbol;}
! @list l15
! 	{mso-list-id:865482897;
! 	mso-list-type:hybrid;
! 	mso-list-template-ids:-2013987438 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
! @list l15:level1
! 	{mso-level-tab-stop:36.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level2
! 	{mso-level-tab-stop:72.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level3
! 	{mso-level-tab-stop:108.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level4
! 	{mso-level-tab-stop:144.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level5
! 	{mso-level-tab-stop:180.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level6
! 	{mso-level-tab-stop:216.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level7
! 	{mso-level-tab-stop:252.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level8
! 	{mso-level-tab-stop:288.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l15:level9
! 	{mso-level-tab-stop:324.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16
! 	{mso-list-id:1082213354;
! 	mso-list-type:hybrid;
! 	mso-list-template-ids:1622673204 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
! @list l16:level1
! 	{mso-level-tab-stop:36.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level2
! 	{mso-level-tab-stop:72.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level3
! 	{mso-level-tab-stop:108.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level4
! 	{mso-level-tab-stop:144.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level5
! 	{mso-level-tab-stop:180.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level6
! 	{mso-level-tab-stop:216.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level7
! 	{mso-level-tab-stop:252.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level8
! 	{mso-level-tab-stop:288.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l16:level9
! 	{mso-level-tab-stop:324.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17
! 	{mso-list-id:1281301046;
! 	mso-list-type:hybrid;
! 	mso-list-template-ids:1985279396 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
! @list l17:level1
! 	{mso-level-tab-stop:36.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level2
! 	{mso-level-tab-stop:72.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level3
! 	{mso-level-tab-stop:108.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level4
! 	{mso-level-tab-stop:144.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level5
! 	{mso-level-tab-stop:180.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level6
! 	{mso-level-tab-stop:216.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level7
! 	{mso-level-tab-stop:252.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17:level8
! 	{mso-level-tab-stop:288.0pt;
! 	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
! @list l17: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]>
! <style>
!  /* Style Definitions */
!  table.MsoNormalTable
! 	{mso-style-name:"Table Normal";
! 	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-fareast-font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
! table.MsoTable3DFx1
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-tstyle-rowband-size:0;
! 	mso-tstyle-colband-size:0;
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-tstyle-shading:white;
! 	mso-tstyle-pattern:solid silver;
! 	mso-para-margin-top:7.2pt;
! 	mso-para-margin-right:0pt;
! 	mso-para-margin-bottom:7.2pt;
! 	mso-para-margin-left:0pt;
! 	mso-pagination:none;
! 	mso-hyphenate:none;
! 	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
! table.MsoTable3DFx1FirstRow
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:first-row;
! 	mso-tstyle-border-bottom:.75pt solid gray;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;
! 	color:purple;
! 	mso-ansi-font-weight:bold;
! 	mso-bidi-font-weight:bold;}
! table.MsoTable3DFx1LastRow
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:last-row;
! 	mso-tstyle-border-top:.75pt solid white;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;}
! table.MsoTable3DFx1FirstCol
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:first-column;
! 	mso-tstyle-border-right:.75pt solid gray;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;
! 	mso-ansi-font-weight:bold;
! 	mso-bidi-font-weight:bold;}
! table.MsoTable3DFx1LastCol
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:last-column;
! 	mso-tstyle-border-left:.75pt solid white;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;}
! table.MsoTable3DFx1NECell
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:ne-cell;
! 	mso-tstyle-border-left:0pt none windowtext;
! 	mso-tstyle-border-bottom:0pt none windowtext;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;}
! table.MsoTable3DFx1NWCell
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:nw-cell;
! 	mso-tstyle-border-bottom:0pt none windowtext;
! 	mso-tstyle-border-right:0pt none windowtext;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;}
! table.MsoTable3DFx1SECell
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:se-cell;
! 	mso-tstyle-border-top:0pt none windowtext;
! 	mso-tstyle-border-left:0pt none windowtext;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;}
! table.MsoTable3DFx1SWCell
! 	{mso-style-name:"Table 3D effects 1";
! 	mso-table-condition:sw-cell;
! 	mso-tstyle-border-top:0pt none windowtext;
! 	mso-tstyle-border-right:0pt none windowtext;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;
! 	color:navy;}
! table.MsoTableWeb1
! 	{mso-style-name:"Table Web 1";
! 	mso-tstyle-rowband-size:0;
! 	mso-tstyle-colband-size:0;
! 	mso-cellspacing:2.0pt;
! 	border:outset 1.0pt;
! 	mso-border-alt:outset windowtext .75pt;
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-border-insideh:.75pt outset windowtext;
! 	mso-border-insidev:.75pt outset windowtext;
! 	mso-para-margin-top:7.2pt;
! 	mso-para-margin-right:0pt;
! 	mso-para-margin-bottom:7.2pt;
! 	mso-para-margin-left:0pt;
! 	mso-pagination:none;
! 	mso-hyphenate:none;
! 	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
! table.MsoTableWeb1FirstRow
! 	{mso-style-name:"Table Web 1";
! 	mso-table-condition:first-row;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;
! 	color:windowtext;}
! table.MsoTableWeb3
! 	{mso-style-name:"Table Web 3";
! 	mso-tstyle-rowband-size:0;
! 	mso-tstyle-colband-size:0;
! 	mso-cellspacing:2.0pt;
! 	border:outset 3.0pt;
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-border-insideh:.75pt outset windowtext;
! 	mso-border-insidev:.75pt outset windowtext;
! 	mso-para-margin-top:7.2pt;
! 	mso-para-margin-right:0pt;
! 	mso-para-margin-bottom:7.2pt;
! 	mso-para-margin-left:0pt;
! 	mso-pagination:none;
! 	mso-hyphenate:none;
! 	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
! table.MsoTableWeb3FirstRow
! 	{mso-style-name:"Table Web 3";
! 	mso-table-condition:first-row;
! 	mso-tstyle-diagonal-down:0pt none windowtext;
! 	mso-tstyle-diagonal-up:0pt none windowtext;
! 	color:windowtext;}
! table.MsoTableGrid
! 	{mso-style-name:"Table Grid";
! 	mso-tstyle-rowband-size:0;
! 	mso-tstyle-colband-size:0;
! 	border:solid windowtext 1.0pt;
! 	mso-border-alt:solid windowtext .5pt;
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-border-insideh:.5pt solid windowtext;
! 	mso-border-insidev:.5pt solid windowtext;
! 	mso-para-margin-top:7.2pt;
! 	mso-para-margin-right:0pt;
! 	mso-para-margin-bottom:7.2pt;
! 	mso-para-margin-left:0pt;
! 	mso-pagination:none;
! 	mso-hyphenate:none;
! 	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
! </style>
! <![endif]--><!--[if gte mso 9]><xml>
!  <o:shapedefaults v:ext="edit" spidmax="6146"/>
! </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:35.45pt;line-break:
! strict'>
  
  <div class=Section1>
  
! <p class=MsoTitle>OpenAFS for Windows 1.4.0<br>
  Release Notes</p>
  
  <p class=MsoBodyText>The Andrew File System (AFS) is a location-independent
! file system that uses a local cache to increase its performance.<span
! style='mso-spacerun:yes'>  </span>An AFS client accesses files anonymously or
! via a Kerberos authentication.<span style='mso-spacerun:yes'>  </span>The
! global AFS is partitioned into cells.<span style='mso-spacerun:yes'> 
! </span>The AFS cell is a collection of AFS volumes that are administered by a
! common entity.<span style='mso-spacerun:yes'>   </span>AFS cells can be
! administered by a department even when the Kerberos realm used for local
! authentication is managed by a much larger organization.<span
! style='mso-spacerun:yes'>  </span>AFS clients and servers take advantage of
! Kerberos cross realm authentication to enable authenticated access by entities
! located outside the local realm.<span style='mso-spacerun:yes'> 
! </span>Authorization is enforced by the use of directory level access control
! lists which can consist of individual or group identities.<span
! style='mso-spacerun:yes'>  </span></p>
! 
! <p class=MsoBodyText>The AFS volume is a tree of files and
! sub-directories.<span style='mso-spacerun:yes'>  </span>AFS volumes are created
! by administrators and are joined to an AFS cell via the use of a mount
! point.<span style='mso-spacerun:yes'>   </span>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.<span
! style='mso-spacerun:yes'>  </span>Administrators can move the volume to another
! server as necessary without the need to notify users.<span
! style='mso-spacerun:yes'>   </span>In fact, the volume move can occur while
! files in the volume are in use.<span style='mso-spacerun:yes'>  </span></p>
! 
! <p class=MsoBodyText>AFS volumes can be replicated to read-only copies.<span
! style='mso-spacerun:yes'>   </span>When accessing files from a read-only
! replica, clients will read all of the data from a single replica.<span
! style='mso-spacerun:yes'>   </span>If that replica becomes unavailable, the
! clients will failover to any replica that is reachable.<span
! style='mso-spacerun:yes'>  </span>Users of the data are unaware of where the
! replicas are stored or which one is being accessed.<span
! style='mso-spacerun:yes'>   </span>The contents of the replicas can be updated
! at any time by <i style='mso-bidi-font-style:normal'>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.<span style='mso-spacerun:yes'>  </span>It
! strives to maintain transparency such that the user is unaware of the
! distinction between the use of AFS and Microsoft Windows file shares.<span
! style='mso-spacerun:yes'>   </span>OAFW can be part of a single sign-on
! solution by allowing credentials for a Kerberos principal to be obtained at
! logon and for that principal to be used to obtain AFS tokens for one or more
! cells.<span style='mso-spacerun:yes'>   </span>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">\\AFS</a> UNC server name.</p>
  
  <p class=MsoBodyText>OpenAFS is the product of an open source development
! effort begun in July 2001.<span style='mso-spacerun:yes'>  </span>OpenAFS is
! maintained and developed by a group of volunteers with the support of the user
! community.<span style='mso-spacerun:yes'>   </span>If you use OpenAFS as part
! of your computing infrastructure please contribute to its continued growth.</p>
! 
! <p class=MsoToc1><!--[if supportFields]><span style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>TOC \o &quot;1-1&quot; \h \z \u <span
! style='mso-element:field-separator'></span><![endif]--><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a href="#_Toc115417109">1.
! Installer Options<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417109 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>1<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100300039000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417110">2. System Requirements<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417110 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>2<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310030000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417111">3. Operational Notes<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417111 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>2<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310031000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417112">4. How to Debug Problems with OpenAFS for Windows:<span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417112 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>11<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310032000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417113">5. Reporting Bugs:<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417113 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>13<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310033000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417114">6. How to Contribute to the Development of OpenAFS for
! Windows<span style='color:windowtext;display:none;mso-hide:screen;text-decoration:
! none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF _Toc115417114
! \h </span><span style='color:windowtext;text-decoration:none;text-underline:
! none'><span style='display:none;mso-hide:screen'><span style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>14<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310034000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417115">7. MSI Deployment Guide<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417115 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>15<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310035000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><span style='mso-no-proof:yes'><a
! href="#_Toc115417116">Appendix A: Registry Values<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
! _Toc115417116 \h </span><span style='color:windowtext;text-decoration:none;
! text-underline:none'><span style='display:none;mso-hide:screen'><span
! style='mso-element:field-separator'></span></span></span><![endif]--><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>26<!--[if gte mso 9]><xml>
!  <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100310035003400310037003100310036000000</w:data>
! </xml><![endif]--></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><a name="_Toc115417109"></a><a
! name="_Toc115417037"></a><a name="_Toc115416098"><span style='mso-bookmark:
! _Toc115417037'><span style='mso-bookmark:_Toc115417109'>1. Installer Options</span></span></a></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.<span style='mso-spacerun:yes'>  </span>Installers are provided in two
! forms:</p>
! 
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo4;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='font-size:9.0pt;
! mso-fareast-font-family:Thorndale;mso-bidi-font-family:Thorndale'><span
! style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>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;mso-list:l0 level1 lfo4;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='font-size:9.0pt;
! mso-fareast-font-family:Thorndale;mso-bidi-font-family:Thorndale'><span
! style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>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">MSI Deployment Guide</a>)</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417110"></a><a
! name="_Toc115417038"></a><a name="_Toc115416099"><span style='mso-bookmark:
! _Toc115417038'><span style='mso-bookmark:_Toc115417110'>2. System Requirements</span></span></a></h1>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417039"></a><a
! name="_Toc115416100"><span style='mso-bookmark:_Toc115417039'>2.1 Supported
! Operating Systems</span></a></h2>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l1 level1 lfo6;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 2000 Workstation</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l1 level1 lfo6;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 2000 Server</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l1 level1 lfo6;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows XP Home</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l1 level1 lfo6;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows XP Professional</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l1 level1 lfo6;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 2003 Server</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l1 level1 lfo6;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 2003 R2 Server</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416101">2.1.1
! Unsupported Operating Systems</a></h3>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 95</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 98</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows 98 OSR2</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows ME</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! NT</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Microsoft
! Windows Vista (as of Beta 1 bugs in Windows prevent its use)</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l2 level1 lfo8;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>All
! 64-bit versions of Microsoft Windows on Itanium and x86-64 chipsets.</p>
  
  <p class=MsoNormal>Older releases of OpenAFS are available for download if
! those operating systems must be supported.<span style='mso-spacerun:yes'> 
! </span>The last version of OpenAFS with support for Win9x is 1.2.2b.<span
! style='mso-spacerun:yes'>  </span>The last version with support for Windows NT
! 4.0 is 1.2.10.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417040"></a><a
! name="_Toc115416102"><span style='mso-bookmark:_Toc115417040'>2.2 Disk Space</span></a></h2>
  
  <p class=MsoNormal>Up to 60mb required for the OpenAFS binaries plus 100MB for
! the default AFSCache file.<span style='mso-spacerun:yes'>   </span>(The size of
! the AFSCache file may be adjusted via the Registry after installation.)</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417041"></a><a
! name="_Toc115416103"><span style='mso-bookmark:_Toc115417041'>2.3 Additional
! Software</span></a></h2>
  
  <p class=MsoNormal><a href="http://web.mit.edu/kerberos/dist/index.html">MIT
! Kerberos for Windows</a> 2.6.x if Kerberos 5 authentication support is desired.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417111"></a><a
! name="_Toc115417042"></a><a name="_Toc115416104"><span style='mso-bookmark:
! _Toc115417042'><span style='mso-bookmark:_Toc115417111'>3. Operational Notes</span></span></a></h1>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417043"></a><a
! name="_Toc115416105"><span style='mso-bookmark:_Toc115417043'>3.1. Requirements
! for Kerberos 5 Authentication</span></a></h2>
  
  <p class=MsoNormal>The Kerberos 4 infrastructure on which the OpenAFS 1.2
! series is reliant is no longer secure.<span style='mso-spacerun:yes'> 
! </span>Cross-realm Kerberos is very important in the AFS context and most sites
! have or are migrating to Kerberos 5 environments.<span
! style='mso-spacerun:yes'>  </span>The OpenAFS 1.4 series integrates with MIT
! Kerberos for Windows 2.6.5 to support Kerberos 5 authentication including
! automatic renewal of AFS tokens and single sign-on via the Microsoft Windows
! Kerberos Logon Service.</p>
  
  <p class=MsoNormal>When KFW is installed, the OpenAFS 1.4 client will obtain
! Kerberos 5 tickets and use them as tokens without modification.<span
! style='mso-spacerun:yes'>  </span>The OpenAFS 1.4 client requires that all of
! the AFS Servers with which it communicates support the use of Kerberos 5
! tickets as tokens. If Kerberos 5 based tokens are presented to an AFS server
! that does not understand them, the server will be unable to communicate with
! the client when tokens are present. Kerberos 5 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 5.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;Kerberos 5&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416106">3.1.1.
! Active Directory</a></h3>
  
  <p class=MsoNormal>There are two things to consider when using a Microsoft
  Windows Active Directory as the Kerberos realm that issues the AFS service
! ticket.<span style='mso-spacerun:yes'>  </span>First, the Kerberos 5 tickets
! issued by Active Directory can be quite large when compared to tickets issued
! by a traditional KDC due to the incorporation of authorization data in the <st2:place
! w:st="on">PAC.</st2:place><span style='mso-spacerun:yes'>  </span>If the issued
! tickets become larger than 344 bytes OpenAFS 1.2 servers will be unable to
! process them.<span style='mso-spacerun:yes'>  </span>OpenAFS 1.4 servers can
! support the largest tickets that Active Directory can issue.<span
! style='mso-spacerun:yes'>  </span>Second, the Kerberos 5 tickets issued by
! Windows 2003 Active Directory are encrypted with the DES-CBC-MD5 enctype.<span
! style='mso-spacerun:yes'>  </span>OpenAFS 1.2 servers only support the
! DES-CBC-CRC enctype.<!--[if supportFields]><span style='mso-element:field-begin'></span>
! XE &quot;Active Directory&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;DES enctypes&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416107">3.1.2.
! Using the krb524 service</a></h3>
  
  <p class=MsoNormal>Some organizations which have AFS cell names and Kerberos
  realm names which differ by more then just lower and upper case rely on a
  modification to krb524d which maps a Kerberos 5 ticket from realm FOO to a
! Kerberos 4 ticket in realm BAR.<span style='mso-spacerun:yes'>  </span>This
! allows user@FOO to appear to be user@bar for the purposes of accessing the AFS
! cell.<span style='mso-spacerun:yes'>  </span>As of OpenAFS 1.2.8, support was
  added to allow the immediate use of Kerberos 5 tickets as AFS (2b) tokens. This
  is the first building block necessary to break away from the limitations of
! Kerberos 4 with AFS.<span style='mso-spacerun:yes'>  </span>By using Kerberos 5
! directly we avoid the security holes inherent in Kerberos 4 cross-realm.<span
! style='mso-spacerun:yes'>  </span>We also gain access to cryptographically
! stronger algorithms for authentication and encryption. </p>
  
  <p class=MsoNormal>Another reason for using Kerberos 5 directly is because the
  krb524 service runs on a port (4444) which has become increasingly blocked by
! ISPs.<span style='mso-spacerun:yes'>  </span>The port was used to spread a worm
! which attacked Microsoft Windows in the summer of 2003.<span
! style='mso-spacerun:yes'>  </span>When the port is blocked users find that they
! are unable to authenticate.</p>
  
  <p class=MsoNormal>Replacing the Kerberos 4 ticket with a Kerberos 5 ticket is
  a win in all situations except when the cell name does not match the realm name
  and the principal names placed into the ACL’s are not the principal names from
! the Kerberos 5 ticket.<span style='mso-spacerun:yes'>  </span>To support this
! transition, OpenAFS for Windows 1.4 adds a new registry value, <i><a
! href="#_Value___:_Use524">Use524</a></i>, to force the use of krb524d.<span
! style='mso-spacerun:yes'>  </span>However, the availability of this option
! should only be used by individuals until such time as their organizations can
! provide a more permanent solution.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;Kerberos 5&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;krb524&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417044"></a><a
! name="_Toc115416108"><span style='mso-bookmark:_Toc115417044'>3.2. Use of the
! Microsoft Loopback Adapter</span></a></h2>
  
  <p class=MsoNormal>By itself the OpenAFS Client Service does not provide robust
! behavior in a plug-n-play network environment.<span style='mso-spacerun:yes'> 
! </span>Changes to the number of network adapters or their assigned IP addresses
! will cause the service to terminate unexpectedly.<span
! style='mso-spacerun:yes'>  </span>To avoid this behavior OpenAFS for Windows
! installs a single instance of the Microsoft Loopback Adapter (MLA) on the
! machine.<span style='mso-spacerun:yes'>  </span>With the MLA installed, the
! OpenAFS Client Service will not be affected by the configuration changes of
! other network adapters installed on the system.<span style='mso-spacerun:yes'> 
! </span></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.<span style='mso-spacerun:yes'> 
! </span>The MLA is bound to the “Client for Microsoft Networks” service and not
! bound to the “File and Printer Sharing for Microsoft Networks”.<span
! style='mso-spacerun:yes'>  </span>If the MLA is unbound to &quot;Client
! Microsoft Networks&quot;, the OpenAFS Client Service will become inaccessible
! when the machine is disconnected from the network.<span
! style='mso-spacerun:yes'>  </span>If the MLA is bound to &quot;File and Printer
! Sharing ...&quot; there will be a service type collision between the name
! &quot;AFS&quot; and the name of the machine on the MLA's IP Address that will
! result in the OpenAFS client service becoming inaccessible and the &quot;NET
! VIEW \\AFS&quot; command will return a &quot;System Error 52&quot;
! message.<span style='mso-spacerun:yes'>  </span>To correct the problem:</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l3 level1 lfo10;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
! style='mso-spacerun:yes'> </span>stop the AFS Client Service</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l3 level1 lfo10;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
! style='mso-spacerun:yes'> </span>bind the &quot;Client for Microsoft
! Networks&quot; to the MLA</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l3 level1 lfo10;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
! style='mso-spacerun:yes'> </span>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;mso-list:
! l3 level1 lfo10;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
! style='mso-spacerun:yes'> </span>Disable and then re-enable the MLA</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l3 level1 lfo10;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
! style='mso-spacerun:yes'> </span>start the AFS Client Service</p>
  
  <p class=MsoNormal>When the MLA is not installed the unique NETBIOS name
! published by OpenAFS SMB server is &quot;<i>MACHINE</i>-AFS&quot;.<span
! style='mso-spacerun:yes'>  </span>One of the benefits of using the MLA is that
! the NETBIOS name does not have to be published on any adapter other than the
! MLA.<span style='mso-spacerun:yes'>  </span>Therefore the chosen name is no
! longer required to be unique.<span style='mso-spacerun:yes'>  </span>Instead
! the NETBIOS name associated with the AFS Client Service is simply
! &quot;AFS&quot; and portable UNC paths of the form \\AFS\cellname\path can now
! be used on all machines.<!--[if supportFields]><span style='mso-element:field-begin'></span>
! XE &quot;loopback&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;UNC paths&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;NETBIOS&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417045"></a><a
! name="_Toc115416109"><span style='mso-bookmark:_Toc115417045'>3.3. Using
! Freelance (Dynamic Root) Mode to Improve Mobility</span></a></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
! cell.<span style='mso-spacerun:yes'>  </span>The &quot;root.afs&quot; volume
! contains the set of mount points to the &quot;root.cell&quot; volumes of
! various cells the administrator of the default cell believes should be
! accessible.<span style='mso-spacerun:yes'>  </span>If the &quot;root.afs&quot;
! volume is inaccessible when the client service is started, the service will
! terminate unexpectedly.<span style='mso-spacerun:yes'>  </span>Since many users
! now use laptops or otherwise operate in disconnected environments in which a
! VPN may be required to access the cell's servers, it is often the case that the
! &quot;root.afs&quot; volume for the default cell is not reachable and the
! OpenAFS Client Service will not successfully start. </p>
  
  <p class=MsoNormal>To allow the OpenAFS Client Service to operate in these
  environments, a fake &quot;root.afs&quot; volume is dynamically constructed
! from mount points and symlinks stored in the local registry.<span
! style='mso-spacerun:yes'>  </span>This method of operation is referred to as
! Freelance mode.</p>
  
  <p class=MsoNormal>The content of the fake “root.afs” volume is dynamically
! modified as cells are accessed.<span style='mso-spacerun:yes'>  </span>When the
! fake &quot;root.afs&quot; volume is initially constructed it will only contain
! two mount points: a <i>regular path </i>and <i>read-write path </i>mount point
! used to access the &quot;root.cell&quot; volume of the default AFS cell.<span
! style='mso-spacerun:yes'>  </span>Any attempt to access a valid cell name will
  result in a new mount point being created in the fake &quot;root.afs&quot;
! volume.<span style='mso-spacerun:yes'>  </span>If the cellname begins with a
! &quot;.&quot; the mount point will be a <i>read-write path</i>; otherwise the
! mount point will be a <i>regular path</i>.<span style='mso-spacerun:yes'> 
! </span>These mount points are preserved in the registry at key:</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'><a
! href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie">HKLM\SOFTWARE\OpenAFS\Client\Freelance</a></p>
  
  <p class=MsoNormal>Additional mount points may be manually created using the
! &quot;fs mkmount&quot; command.<span style='mso-spacerun:yes'>  </span>Mount
! points may be removed using the &quot;fs rmmount&quot; command.</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'>&gt;fs mkmount
  \\AFS\athena.mit.edu root.cell athena.mit.edu</p>
--- 1,671 ----
! <html>
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
! <meta name=Generator content="Microsoft Word 11 (filtered)">
! <title>OpenAFS for Windows 1.5.3 Release Notes</title>
! 
  <style>
  <!--
   /* Font Definitions */
   @font-face
+ 	{font-family:Wingdings;
+ 	panose-1:5 0 0 0 0 0 0 0 0 0;}
+ @font-face
  	{font-family:"MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;}
  @font-face
  	{font-family:Tahoma;
! 	panose-1:2 11 6 4 3 5 4 4 2 4;}
  @font-face
! 	{font-family:Albany;
! 	panose-1:2 11 6 4 2 2 2 2 2 4;}
  @font-face
  	{font-family:StarSymbol;
! 	panose-1:5 0 0 0 0 0 0 0 0 0;}
  @font-face
! 	{font-family:Thorndale;
! 	panose-1:2 2 6 3 5 4 5 2 3 4;}
  @font-face
  	{font-family:Cumberland;
! 	panose-1:2 7 3 9 2 2 5 2 4 4;}
! @font-face
! 	{font-family:"Andale Sans UI";
! 	panose-1:2 11 5 2 0 0 0 0 0 1;}
  @font-face
  	{font-family:"\@MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  h1
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-indent:0pt;
  	page-break-after:avoid;
  	font-size:16.0pt;
! 	font-family:Albany;}
  h2
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-indent:0pt;
  	page-break-after:avoid;
  	font-size:14.0pt;
  	font-family:Albany;
  	font-style:italic;}
  h3
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-indent:0pt;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:Albany;}
  h4
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:3.0pt;
  	margin-left:0pt;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:"Times New Roman";}
  h5
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:3.0pt;
  	margin-left:0pt;
  	font-size:13.0pt;
  	font-family:Thorndale;
  	font-style:italic;}
  h6
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:3.0pt;
  	margin-left:0pt;
  	font-size:11.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:14.15pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:28.3pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:10.0pt;
! 	font-family:Thorndale;}
  p.MsoHeader, li.MsoHeader, div.MsoHeader
  	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoFooter, li.MsoFooter, div.MsoFooter
  	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoEnvelopeAddress, li.MsoEnvelopeAddress, div.MsoEnvelopeAddress
  	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:144.0pt;
  	font-size:12.0pt;
! 	font-family:Arial;}
  span.MsoFootnoteReference
! 	{vertical-align:super;}
  p.MsoList, li.MsoList, div.MsoList
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoTitle, li.MsoTitle, div.MsoTitle
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-align:center;
  	page-break-after:avoid;
  	font-size:18.0pt;
  	font-family:Albany;
  	font-weight:bold;}
  p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:14.15pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
! 	{margin-top:12.0pt;
  	margin-right:0pt;
! 	margin-bottom:6.0pt;
  	margin-left:0pt;
  	text-align:center;
! 	page-break-after:avoid;
! 	font-size:14.0pt;
! 	font-family:Albany;
! 	font-style:italic;}
  a:link, span.MsoHyperlink
! 	{color:navy;
! 	text-decoration:underline;}
  a:visited, span.MsoHyperlinkFollowed
! 	{color:maroon;
! 	text-decoration:underline;}
! pre
! 	{margin:0pt;
! 	margin-bottom:.0001pt;
! 	font-size:10.0pt;
! 	font-family:"Courier New";}
! span.Bullets
! 	{font-family:StarSymbol;}
  p.Heading, li.Heading, div.Heading
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:Albany;}
  p.Caption1, li.Caption1, div.Caption1
! 	{margin-top:6.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	font-size:10.0pt;
  	font-family:Thorndale;
  	font-style:italic;}
  p.Index, li.Index, div.Index
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.ContentsHeading, li.ContentsHeading, div.ContentsHeading
! 	{margin-top:12.0pt;
  	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:0pt;
  	page-break-after:avoid;
  	font-size:16.0pt;
  	font-family:Albany;
  	font-weight:bold;}
  p.PreformattedText, li.PreformattedText, div.PreformattedText
! 	{margin:0pt;
  	margin-bottom:.0001pt;
  	font-size:10.0pt;
! 	font-family:Cumberland;}
  p.ListContents, li.ListContents, div.ListContents
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:28.35pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.ListHeading, li.ListHeading, div.ListHeading
! 	{margin-top:4.3pt;
  	margin-right:0pt;
  	margin-bottom:4.3pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
! span.HeadingChar
! 	{font-family:Albany;}
! span.Heading3Char
! 	{font-family:Albany;
! 	font-weight:bold;}
  p.Header5, li.Header5, div.Header5
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
  p.Heading3, li.Heading3, div.Heading3
! 	{margin-top:7.2pt;
  	margin-right:0pt;
  	margin-bottom:7.2pt;
  	margin-left:0pt;
  	font-size:12.0pt;
! 	font-family:Thorndale;}
! span.Heading4Char
! 	{font-family:"Andale Sans UI";
! 	font-weight:bold;}
  p.Default, li.Default, div.Default
! 	{margin:0pt;
  	margin-bottom:.0001pt;
  	text-autospace:none;
  	font-size:12.0pt;
  	font-family:Arial;
  	color:black;}
! span.BodyTextChar
! 	{font-family:Thorndale;}
   /* Page Definitions */
!  @page Section1
  	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
  div.Section1
! 	{page:Section1;}
  @page Section2
  	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
  div.Section2
! 	{page:Section2;}
   /* List Definitions */
!  ol
  	{margin-bottom:0pt;}
  ul
  	{margin-bottom:0pt;}
  -->
  </style>
! 
  </head>
  
! <body lang=EN-US link=navy vlink=maroon style='line-break:strict'>
  
  <div class=Section1>
  
! <p class=MsoTitle>OpenAFS for Windows 1.5.3<br>
  Release Notes</p>
  
  <p class=MsoBodyText>The Andrew File System (AFS) is a location-independent
! file system that uses a local cache to increase its performance.  An AFS client
! accesses files anonymously or via a Kerberos authentication.  The global AFS is
! partitioned into cells.  The AFS cell is a collection of AFS volumes that are
! administered by a common entity.   AFS cells can be administered by a
! department even when the Kerberos realm used for local authentication is
! managed by a much larger organization.  AFS clients and servers take advantage
! of Kerberos cross realm authentication to enable authenticated access by
! entities located outside the local realm.  Authorization is enforced by the use
! of directory level access control lists which can consist of individual or
! group identities.  </p>
! 
! <p class=MsoBodyText>The AFS volume is a tree of files and sub-directories. 
! AFS volumes are created by administrators and are joined to an AFS cell via the
! use of a mount point.   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.  Administrators can move the
! volume to another server as necessary without the need to notify users.   In
! fact, the volume move can occur while files in the volume are in use.  </p>
! 
! <p class=MsoBodyText>AFS volumes can be replicated to read-only copies.   When
! accessing files from a read-only replica, clients will read all of the data
! from a single replica.   If that replica becomes unavailable, the clients will
! failover to any replica that is reachable.  Users of the data are unaware of
! where the replicas are stored or which one is being accessed.   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.  It strives to maintain transparency such
! that the user is unaware of the distinction between the use of AFS and
! Microsoft Windows file shares.   OAFW can be part of a single sign-on solution
! by allowing credentials for a Kerberos principal to be obtained at logon and
! for that principal to be used to obtain AFS tokens for one or more cells.  
! 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">\\AFS</a>
! UNC server name.</p>
  
  <p class=MsoBodyText>OpenAFS is the product of an open source development
! effort begun on October 31 2000.  OpenAFS is maintained and developed by a
! group of volunteers with the support of the user community.   If you use
! OpenAFS as part of your computing infrastructure please contribute to its
! continued growth.</p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417109">1. Installer Options<span
! style='color:windowtext;display:none;text-decoration:none'>. </span><span
! style='color:windowtext;display:none;text-decoration:none'>1</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417110">2. System Requirements<span
! style='color:windowtext;display:none;text-decoration:none'>. </span><span
! style='color:windowtext;display:none;text-decoration:none'>2</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417111">3. Operational Notes<span
! style='color:windowtext;display:none;text-decoration:none'>. </span><span
! style='color:windowtext;display:none;text-decoration:none'>2</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417112">4. How to Debug Problems
! with OpenAFS for Windows:<span style='color:windowtext;display:none;text-decoration:
! none'> </span><span
! style='color:windowtext;display:none;text-decoration:none'>11</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417113">5. Reporting Bugs:<span
! style='color:windowtext;display:none;text-decoration:none'> </span><span
! style='color:windowtext;display:none;text-decoration:none'>13</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417114">6. How to Contribute to
! the Development of OpenAFS for Windows<span style='color:windowtext;display:
! none;text-decoration:none'>. </span><span
! style='color:windowtext;display:none;text-decoration:none'>14</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417115">7. MSI Deployment Guide<span
! style='color:windowtext;display:none;text-decoration:none'>. </span><span
! style='color:windowtext;display:none;text-decoration:none'>15</span></a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../../oafw-1-4-release-notes.doc#_Toc115417116">Appendix A: Registry
! Values<span style='color:windowtext;display:none;text-decoration:none'>. </span><span
! style='color:windowtext;display:none;text-decoration:none'>26</span></a></span></p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993082"></a><a
! name="_Toc126872163"></a><a name="_Toc115417109"></a><a name="_Toc115417037"></a><a
! name="_Toc115416098">1. Installer Options</a></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. 
! 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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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="../../oafw-1-4-release-notes.doc#_MSI_Deployment_Guide">MSI Deployment
! Guide</a>)</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993083"></a><a
! name="_Toc126872164"></a><a name="_Toc115417110"></a><a name="_Toc115417038"></a><a
! name="_Toc115416099">2. System Requirements</a></h1>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993084"></a><a
! name="_Toc126872165"></a><a name="_Toc115417039"></a><a name="_Toc115416100">2.1
! Supported Operating Systems</a></h2>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Microsoft Windows Vista Beta 2 (32-bit and 64-bit Intel)  (not
! for production use)</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993085"></a><a
! name="_Toc126872166"></a><a name="_Toc115416101">2.1.1 Unsupported Operating
! Systems</a></h3>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Microsoft NT</p>
  
  <p class=MsoNormal>Older releases of OpenAFS are available for download if
! unsupported operating systems must be used.  The last version of OpenAFS with
! support for Win9x is 1.2.2b.  The last version with support for Windows NT 4.0
! is 1.2.10.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993086"></a><a
! name="_Toc126872167"></a><a name="_Toc115417040"></a><a name="_Toc115416102">2.2
! Disk Space</a></h2>
  
  <p class=MsoNormal>Up to 60mb required for the OpenAFS binaries plus 100MB for
! the default AFSCache file.   (The size of the AFSCache file may be adjusted via
! the Registry after installation.)</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993087"></a><a
! name="_Toc126872168"></a><a name="_Toc115417041"></a><a name="_Toc115416103">2.3
! Additional Software</a> Packages</h2>
  
  <p class=MsoNormal><a href="http://web.mit.edu/kerberos/dist/index.html">MIT
! Kerberos for Windows</a> 2.6.x or 3.x.x if Kerberos 5 authentication support is
! desired.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993088"></a><a
! name="_Toc126872169"></a><a name="_Toc115417111"></a><a name="_Toc115417042"></a><a
! name="_Toc115416104">3. Operational Notes</a></h1>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993089"></a><a
! name="_Toc126872170"></a><a name="_Toc115417043"></a><a name="_Toc115416105">3.1.
! Requirements for Kerberos 5 Authentication</a></h2>
  
  <p class=MsoNormal>The Kerberos 4 infrastructure on which the OpenAFS 1.2
! series is reliant is no longer secure.  Cross-realm Kerberos is very important
! in the AFS context and most sites have or are migrating to Kerberos 5
! environments.  The OpenAFS 1.4 series integrates with MIT Kerberos for Windows
! 2.6.5 and above to support Kerberos 5 authentication including automatic
! renewal of AFS tokens and single sign-on via the Microsoft Windows Kerberos
! Logon Service.</p>
  
  <p class=MsoNormal>When KFW is installed, the OpenAFS 1.4 client will obtain
! Kerberos 5 tickets and use them as tokens without modification.  The OpenAFS
! 1.4 client requires that all of the AFS Servers with which it communicates
! support the use of Kerberos 5 tickets as tokens. If Kerberos 5 based tokens are
! presented to an AFS server that does not understand them, the server will be
! unable to communicate with the client when tokens are present. Kerberos 5 based
! tokens are supported by OpenAFS release 1.2.8 or later.  IBM Transarc servers
! do not support Kerberos 5.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993090"></a><a
! name="_Toc126872171"></a><a name="_Toc115416106">3.1.1. Active Directory</a></h3>
  
  <p class=MsoNormal>There are two things to consider when using a Microsoft
  Windows Active Directory as the Kerberos realm that issues the AFS service
! ticket.  First, the Kerberos 5 tickets issued by Active Directory can be quite
! large when compared to tickets issued by a traditional KDC due to the
! incorporation of authorization data in the PAC.  If the issued tickets become
! larger than 344 bytes OpenAFS 1.2 servers will be unable to process them. 
! OpenAFS 1.4 servers can support the largest tickets that Active Directory can
! issue.  Second, the Kerberos 5 tickets issued by Windows 2003 Active Directory
! are encrypted with the DES-CBC-MD5 enctype.  OpenAFS 1.2 servers only support
! the DES-CBC-CRC enctype.</p>
! 
! <p class=MsoNormal>Microsoft has documented in <a
! href="http://support.microsoft.com/kb/832572/">Knowledge Base article 832572</a>
! a new NO_AUTH_REQUIRED flag that can be set on the account mapped to the AFS
! service principal which will prevent the generation of a PAC.</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993091"></a><a
! name="_Toc126872172"></a><a name="_Toc115416107">3.1.2. Using the krb524
! service</a></h3>
  
  <p class=MsoNormal>Some organizations which have AFS cell names and Kerberos
  realm names which differ by more then just lower and upper case rely on a
  modification to krb524d which maps a Kerberos 5 ticket from realm FOO to a
! Kerberos 4 ticket in realm BAR.  This allows user@FOO to appear to be user@bar
! for the purposes of accessing the AFS cell.  As of OpenAFS 1.2.8, support was
  added to allow the immediate use of Kerberos 5 tickets as AFS (2b) tokens. This
  is the first building block necessary to break away from the limitations of
! Kerberos 4 with AFS.  By using Kerberos 5 directly we avoid the security holes
! inherent in Kerberos 4 cross-realm.  We also gain access to cryptographically stronger
! algorithms for authentication and encryption. </p>
  
  <p class=MsoNormal>Another reason for using Kerberos 5 directly is because the
  krb524 service runs on a port (4444) which has become increasingly blocked by
! ISPs.  The port was used to spread a worm which attacked Microsoft Windows in
! the summer of 2003.  When the port is blocked users find that they are unable
! to authenticate.</p>
  
  <p class=MsoNormal>Replacing the Kerberos 4 ticket with a Kerberos 5 ticket is
  a win in all situations except when the cell name does not match the realm name
  and the principal names placed into the ACL’s are not the principal names from
! the Kerberos 5 ticket.  To support this transition, OpenAFS for Windows 1.4
! adds a new registry value, <i><a
! href="../../oafw-1-4-release-notes.doc#_Value___: Use524">Use524</a></i>, to
! force the use of krb524d.  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>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993092"></a><a
! name="_Toc126872173"></a><a name="_Toc115417044"></a><a name="_Toc115416108">3.2.
! Use of the Microsoft Loopback Adapter</a></h2>
  
  <p class=MsoNormal>By itself the OpenAFS Client Service does not provide robust
! behavior in a plug-n-play network environment.  Changes to the number of
! network adapters or their assigned IP addresses will cause the service to
! terminate unexpectedly.  To avoid this behavior OpenAFS for Windows installs a
! single instance of the Microsoft Loopback Adapter (MLA) on the machine.  With
! the MLA installed, the OpenAFS Client Service will not be affected by the
! configuration changes of other network adapters installed on the system.  </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.  The MLA is bound to the “Client
! for Microsoft Networks” service and not bound to the “File and Printer Sharing
! for Microsoft Networks”.  If the MLA is unbound to &quot;Client Microsoft
! Networks&quot;, the OpenAFS Client Service will become inaccessible when the
! machine is disconnected from the network.  If the MLA is bound to &quot;File
! and Printer Sharing ...&quot; there will be a service type collision between
! the name &quot;AFS&quot; and the name of the machine on the MLA's IP Address
! that will result in the OpenAFS client service becoming inaccessible and the
! &quot;NET VIEW \\AFS&quot; command will return a &quot;System Error 52&quot;
! message.  To correct the problem:</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span> 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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span> 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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span> 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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span> 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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span> start the AFS Client Service</p>
  
  <p class=MsoNormal>When the MLA is not installed the unique NETBIOS name
! published by OpenAFS SMB server is &quot;<i>MACHINE</i>-AFS&quot;.  One of the
! benefits of using the MLA is that the NETBIOS name does not have to be
! published on any adapter other than the MLA.  Therefore the chosen name is no
! longer required to be unique.  Instead the NETBIOS name associated with the AFS
! Client Service is simply &quot;AFS&quot; and portable UNC paths of the form \\AFS\cellname\path
! can now be used on all machines.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993093"></a><a
! name="_Toc126872174"></a><a name="_Toc115417045"></a><a name="_Toc115416109">3.3.
! Using Freelance (Dynamic Root) Mode to Improve Mobility</a></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 cell. 
! The &quot;root.afs&quot; volume contains the set of mount points to the
! &quot;root.cell&quot; volumes of various cells the administrator of the default
! cell believes should be accessible.  If the &quot;root.afs&quot; volume is
! inaccessible when the client service is started, the service will terminate
! unexpectedly.  Since many users now use laptops or otherwise operate in
! disconnected environments in which a VPN may be required to access the cell's
! servers, it is often the case that the &quot;root.afs&quot; volume for the
! default cell is not reachable and the OpenAFS Client Service will not
! successfully start. </p>
  
  <p class=MsoNormal>To allow the OpenAFS Client Service to operate in these
  environments, a fake &quot;root.afs&quot; volume is dynamically constructed
! from mount points and symlinks stored in the local registry.  This method of
! operation is referred to as Freelance mode.</p>
  
  <p class=MsoNormal>The content of the fake “root.afs” volume is dynamically
! modified as cells are accessed.  When the fake &quot;root.afs&quot; volume is
! initially constructed it will only contain two mount points: a <i>regular path </i>and
! <i>read-write path </i>mount point used to access the &quot;root.cell&quot;
! volume of the default AFS cell.  Any attempt to access a valid cell name will
  result in a new mount point being created in the fake &quot;root.afs&quot;
! volume.  If the cellname begins with a &quot;.&quot; the mount point will be a <i>read-write
! path</i>; otherwise the mount point will be a <i>regular path</i>.  These mount
! points are preserved in the registry at key:</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'><a
! href="../../oafw-1-4-release-notes.doc#_Regkey:_[HKLMSOFTWAREOpenAFSClie">HKLM\SOFTWARE\OpenAFS\Client\Freelance</a></p>
  
  <p class=MsoNormal>Additional mount points may be manually created using the
! &quot;fs mkmount&quot; command.  Mount points may be removed using the &quot;fs
! rmmount&quot; command.</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'>&gt;fs mkmount
  \\AFS\athena.mit.edu root.cell athena.mit.edu</p>
***************
*** 3022,3157 ****
  <p class=MsoNormal>Symlinks may also be created within the Freelance “root.afs”
  volume.</p>
  
! <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><span style='mso-tab-count:1'>      </span>&gt;symlink
! list \\afs\link</p>
  
! <p class=PreformattedText><span style='mso-tab-count:1'>      </span>'\\afs\link'
! is a symlink to 'athena.mit.edu\user\j\a\jaltman'</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'>&gt;symlink rm \\afs\link</p>
  
  <p class=MsoNormal>The symlinks are stored in the registry at:</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'><a
! href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie_1">HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks</a><!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;Freelance Mode&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;Dynamic Root&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;fs.exe&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;symlink.exe&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;root.afs&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><span
! style='mso-spacerun:yes'> </span></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417046"></a><a
! name="_Toc115416110"><span style='mso-bookmark:_Toc115417046'>3.4. Locating AFS
! Volume Database Servers</span></a> </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 are not
  present in the client's CellServDB file
! (\%PROGRAMFILES%\OpenAFS\Client\CellServDB).<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;dns&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;afsdb&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417047"></a><a
! name="_Toc115416111"><span style='mso-bookmark:_Toc115417047'>3.5. Obtaining
! AFS Tokens as a Part of Windows Logon</span></a></h2>
  
  <p class=MsoNormal>OpenAFS for Windows installs a WinLogon Network Provider to
! provide Single Sign-on functionality (aka Integrated Logon.)<span
! style='mso-spacerun:yes'>  </span>Integrated Logon can be used when the Windows
! username and password match the username and password associated with the
! default cell's Kerberos realm.<span style='mso-spacerun:yes'>  </span>For
! example, if the Windows username is &quot;jaltman&quot; and the default cell is
  &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">jaltman@ATHENA.MIT.EDU</a>&quot;.<span
! style='mso-spacerun:yes'>  </span>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>
  
  <p class=MsoNormal>Integrated Logon is required if you desire the ability to
! store roaming user profiles within the AFS file system.<span
! style='mso-spacerun:yes'>  </span>OpenAFS does not provide tools for
! synchronizing the Windows and Kerberos user accounts and passwords.</p>
  
  <p class=MsoNormal>When KFW is configured, Integrated Logon will use it to
! obtain tokens.<span style='mso-spacerun:yes'>  </span>The Kerberos 5 tickets
! obtained during the process of generating AFS tokens are preserved and stored
! into the default ccache within the user logon session.</p>
  
  <p class=MsoNormal>Integrated Logon does not have the ability to cache the
! user's username and password for the purpose of obtaining tokens if the Kerberos
! KDC is inaccessible at logon time.</p>
  
  <p class=MsoNormal>Integrated Login supports the ability to obtain tokens for
! multiple cells.<span style='mso-spacerun:yes'>  </span>For further information
! on how to configure this feature read the <a
! href="relnotes.htm#_Value:_TheseCells">TheseCells</a> value in <a
! href="#_Appendix_A:_Registry_Values">Appendix A</a>.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;integrated login&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417048"></a><a
! name="_Toc115416112"><span style='mso-bookmark:_Toc115417048'>3.6. AFS System
! Tray Command Line Options</span></a></h2>
  
  <p class=MsoNormal>The AFS System Tray tool (afscreds.exe) supports several
  command line options: </p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-A =
! autoinit </p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-E = force
! existing afscreds to exit</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-I =
! install startup shortcut</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-M = renew
! drive maps </p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-N = IP
! address change detection </p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-Q = quiet
! mode.<span style='mso-spacerun:yes'>  </span>do not display start service
  dialog</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>         </span>if
! afsd_service is not already running</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-S = show
! tokens dialog on startup</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-U =
! uninstall startup shortcut</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-X = test
! and do map share</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>-Z = unmap
! drives</p>
  
  <p class=MsoNormal>autoinit will result in automated attempts to acquire AFS
! tokens when afscreds.exe is started.<span style='mso-spacerun:yes'> 
! </span>afscreds.exe will attempt to utilize tickets stored in the MSLSA credentials
! cache; any existing CCAPI credentials cache; and finally display an Obtain
! Tokens dialog to the user.<span style='mso-spacerun:yes'>  </span>When used in
  combination with IP address change detection, afscreds.exe will attempt to
  acquire AFS tokens whenever the IP address list changes and the Kerberos KDC is
  accessible.</p>
--- 682,779 ----
  <p class=MsoNormal>Symlinks may also be created within the Freelance “root.afs”
  volume.</p>
  
! <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>      &gt;symlink list \\afs\link</p>
  
! <p class=PreformattedText>      '\\afs\link' is a symlink to
! 'athena.mit.edu\user\j\a\jaltman'</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'>&gt;symlink rm \\afs\link</p>
  
  <p class=MsoNormal>The symlinks are stored in the registry at:</p>
  
  <p class=PreformattedText style='margin-left:35.45pt'><a
! href="../../oafw-1-4-release-notes.doc#_Regkey:_[HKLMSOFTWAREOpenAFSClie_1">HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks</a> </p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993094"></a><a
! name="_Toc126872175"></a><a name="_Toc115417046"></a><a name="_Toc115416110">3.4.
! Locating AFS Volume Database Servers</a> </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 are not
  present in the client's CellServDB file
! (\%PROGRAMFILES%\OpenAFS\Client\CellServDB).</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993095"></a><a
! name="_Toc126872176"></a><a name="_Toc115417047"></a><a name="_Toc115416111">3.5.
! Obtaining AFS Tokens as a Part of Windows Logon</a></h2>
  
  <p class=MsoNormal>OpenAFS for Windows installs a WinLogon Network Provider to
! provide Single Sign-On functionality (aka Integrated Logon.)  Integrated Logon
! can be used when the Windows username and password match the username and
! password associated with the default cell's Kerberos realm.  For example, if
! the Windows username is &quot;jaltman&quot; and the default cell is
  &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">jaltman@ATHENA.MIT.EDU</a>&quot;. 
! 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>
  
  <p class=MsoNormal>Integrated Logon is required if you desire the ability to
! store roaming user profiles within the AFS file system.  OpenAFS does not
! provide tools for synchronizing the Windows and Kerberos user accounts and
! passwords.</p>
  
  <p class=MsoNormal>When KFW is configured, Integrated Logon will use it to
! obtain tokens.  The Kerberos 5 tickets obtained during the process of
! generating AFS tokens are preserved and stored into the default ccache within
! the user logon session.</p>
  
  <p class=MsoNormal>Integrated Logon does not have the ability to cache the
! user's username and password for the purpose of obtaining tokens if the
! Kerberos KDC is inaccessible at logon time.</p>
  
  <p class=MsoNormal>Integrated Login supports the ability to obtain tokens for
! multiple cells.  For further information on how to configure this feature read
! the <a href="../relnotes.htm#_Value:_TheseCells">TheseCells</a> value in <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993096"></a><a
! name="_Toc126872177"></a><a name="_Toc115417048"></a><a name="_Toc115416112">3.6.
! AFS System Tray Command Line Options</a></h2>
  
  <p class=MsoNormal>The AFS System Tray tool (afscreds.exe) supports several
  command line options: </p>
  
! <p class=PreformattedText>    -A = autoinit </p>
  
! <p class=PreformattedText>    -E = force existing afscreds to exit</p>
  
! <p class=PreformattedText>    -I = install startup shortcut</p>
  
! <p class=PreformattedText>    -M = renew drive maps </p>
  
! <p class=PreformattedText>    -N = IP address change detection </p>
  
! <p class=PreformattedText>    -Q = quiet mode.  do not display start service
  dialog</p>
  
! <p class=PreformattedText>         if afsd_service is not already running</p>
  
! <p class=PreformattedText>    -S = show tokens dialog on startup</p>
  
! <p class=PreformattedText>    -U = uninstall startup shortcut</p>
  
! <p class=PreformattedText>    -X = test and do map share</p>
  
! <p class=PreformattedText>    -Z = unmap drives</p>
  
  <p class=MsoNormal>autoinit will result in automated attempts to acquire AFS
! tokens when afscreds.exe is started.  afscreds.exe will attempt to utilize
! tickets stored in the MSLSA credentials cache; any existing CCAPI credentials
! cache; and finally display an Obtain Tokens dialog to the user.  When used in
  combination with IP address change detection, afscreds.exe will attempt to
  acquire AFS tokens whenever the IP address list changes and the Kerberos KDC is
  accessible.</p>
***************
*** 3161,3256 ****
  each time afscreds.exe is started.</p>
  
  <p class=MsoNormal>By default afscreds.exe is configured by the OpenAFS.org
! installers to use “-A -N -M -Q” as startup options.<span
! style='mso-spacerun:yes'>  </span>Currently, there is 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.<span
! style='mso-spacerun:yes'>  </span>See <span style='mso-bidi-font-style:italic'><a
! href="#_Value___:_AfscredsShortcutParams">AfscredsShortcutParams</a></span> in <a
! href="#_Appendix_A:_Registry_Values">Appendix A</a>.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;afscreds.exe&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417049"></a><a
! name="_Toc115416113"><span style='mso-bookmark:_Toc115417049'>3.7. The “AFS
! Client Admins” Authorization Group</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows 1.4 client supports a local Windows
! authorization group named &quot;AFS Client Admins&quot;.<span
! style='mso-spacerun:yes'>  </span>This group is used in place of the
! &quot;Administrators&quot; group to determine which users are allowed to modify
! the AFS Client Service configuration via the AFS Control Panel (afs_config.exe)
! or fs.exe command line tool.<span style='mso-spacerun:yes'>  </span>The
! following fs.exe commands are now restricted to members of the &quot;AFS Client
! Admins&quot; group:</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>checkservers
! with a non-zero timer value</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setcachesize</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>newcell</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>sysname
! with a new sysname list</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>exportafs</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setcell</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setserverprefs</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>storebehind</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setcrypt</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>cscpolicy</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt;
! mso-list:l4 level1 lfo12;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>trace</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
--- 783,855 ----
  each time afscreds.exe is started.</p>
  
  <p class=MsoNormal>By default afscreds.exe is configured by the OpenAFS.org
! installers to use “-A -N -M -Q” as startup options.  Currently, there is 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.  See <a
! href="../../oafw-1-4-release-notes.doc#_Value___: AfscredsShortcutParams">AfscredsShortcutParams</a>
! in <a href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix
! A</a>.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993097"></a><a
! name="_Toc126872178"></a><a name="_Toc115417049"></a><a name="_Toc115416113">3.7.
! The “AFS Client Admins” Authorization Group</a></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows 1.4 client supports a local Windows
! authorization group named &quot;AFS Client Admins&quot;.  This group is used in
! place of the &quot;Administrators&quot; group to determine which users are
! allowed to modify the AFS Client Service configuration via the AFS Control
! Panel (afs_config.exe) or fs.exe command line tool.  The following fs.exe
! commands are now restricted to members of the &quot;AFS Client Admins&quot;
! group:</p>
! 
! <p class=PreformattedText style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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
***************
*** 3258,4301 ****
  
  <p class=MsoNormal>The initial membership of the &quot;AFS Client Admins&quot;
  group when created by the installer is equivalent to the local
! &quot;Administrators&quot; group.<span style='mso-spacerun:yes'>  </span>If a
! user is added to the &quot;Administrators&quot; group after the creation of the
! &quot;AFS Client Admin&quot; group, that user will not be an AFS Client
! Administrator.<span style='mso-spacerun:yes'>  </span>Only users that are
! members of the &quot;AFS Client Admins&quot; group are AFS Client
! Administrators.<span style='mso-spacerun:yes'>  </span>The local
! &quot;SYSTEM&quot; account is an implicit member of the &quot;AFS Client
! Admins&quot; group.</p>
  
  <p class=MsoNormal>Setting the default sysname for a machine should be done via
! the <a href="#_Value_:_SysName">registry</a> and not via &quot;fs
! sysname&quot;.<!--[if supportFields]><span style='mso-element:field-begin'></span>
! XE &quot;AFS Client Admins&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;fs.exe&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417050"></a><a
! name="_Toc115416114"><span style='mso-bookmark:_Toc115417050'>3.8. OpenAFS
! support for UNC paths</span></a> </h2>
! 
! <p class=MsoNormal>The OpenAFS 1.4 client supports UNC paths everywhere.<span
! style='mso-spacerun:yes'>  </span>UNC paths provide a canonical name for
! resources stored within AFS.<span style='mso-spacerun:yes'>  </span>UNC paths
! should be used instead of drive letter mappings whenever possible.<span
! style='mso-spacerun:yes'>   </span>This is especially true when specifying the
! location of roaming profiles and redirected folders.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;UNC paths&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><span
! style='mso-spacerun:yes'>  </span></p>
  
  <p class=MsoNormal>Power users that make extensive use of the command line
  shell, cmd.exe, should consider using JP Software's 4NT or Take Command command
! processors.<span style='mso-spacerun:yes'>  </span>Unlike cmd.exe, the
! JPSoftware shells fully support UNC paths as the current directory.<span
! style='mso-spacerun:yes'>  </span>With the release of version 4NT 7.0 and Take
! Command 7.0, JPSoftware is adding special recognition of OpenAFS.<span
! style='mso-spacerun:yes'>  </span>AFS paths can be entered in UNIX notation
! (e.g., <a href="file:///\\afs\openafs.org\software">/afs/openafs.org/software</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=MsoHyperlink>http://www.jpsoft.com</span>.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;JP Software&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>XE &quot;4nt.exe&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417051"></a><a
! name="_Toc115416115"><span style='mso-bookmark:_Toc115417051'>3.9. OpenAFS
! includes aklog.exe</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS 1.4 Client ships with its own version of
  aklog.exe which should be used in preference to those obtained by third party
! sources.<span style='mso-spacerun:yes'>  </span>The OpenAFS aklog.exe supports
! Kerberos 5 as well as the ability to auto-generate pts IDs for user's obtaining
! tokens<span style='mso-spacerun:yes'>  </span>for access to foreign cells.</p>
  
  <p class=PreformattedText>Usage: aklog [-d] [[-cell | -c] cell [-k krb_realm]]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>             </span>[[-p
! | -path] pathname]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>            
! </span>[-noprdb] [-force]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>            
! </span>[-5 [-m]| -4]</p>
  
! <p class=PreformattedText><o:p>&nbsp;</o:p></p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>-d = output
! debugging information.</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>cell = zero
! or more cells for which tokens will be obtained</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>krb_realm =
! the kerberos realm of the cell.</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>pathname =
! the directory for which authentication is required</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>-noprdb =
! don't try to determine AFS ID.</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>-5 or -4 =
! use Kerberos V (default) or Kerberos IV tickets</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>-m = use
! krb524d to convert Kerberos V tickets to Kerberos IV<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;aklog.exe&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417052"></a><a
! name="_Toc115416116"><span style='mso-bookmark:_Toc115417052'>3.10. OpenAFS
! Servers on Windows are Unsupported</span></a></h2>
  
  <p class=MsoNormal>The AFS Server functionality provided with OpenAFS 1.4 might
! work but should be considered highly experimental.<span
! style='mso-spacerun:yes'>  </span>It has not been thoroughly tested.<span
! style='mso-spacerun:yes'>  </span>Any data which would cause pain if lost
! should not be stored in an OpenAFS Server on Windows.</p>
  
  <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;mso-list:
! l5 level1 lfo14;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>When
! installed on the same machine as the AFS Server, Freelance mode must be turned
! off.<span style='mso-spacerun:yes'>  </span>Otherwise, you will be unable to
! manipulate the contents of the root.afs volume for the hosted cell.</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l5 level1 lfo14;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>The
! AFS Server and related tools only support the built in kaserver (Kerberos
! IV).<span style='mso-spacerun:yes'>  </span>If the AFS Server is being used,
! MIT Kerberos for Windows should not be installed or must be disabled.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;AFS Servers&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417053"></a><a
! name="_Toc115416117"><span style='mso-bookmark:_Toc115417053'>3.11. OpenAFS
! Debugging Symbol files</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows installers now include Debugging
  Symbol files which should be installed if you are experiencing problems and
! need to send crash reports.<span style='mso-spacerun:yes'>  </span>This is true
! for both the release and the debug versions of the installers.<span
! style='mso-spacerun:yes'>  </span>The difference between the release and debug
  versions are:</p>
  
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l6 level1 lfo16;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>whether
! or not the binaries were compiled with optimization</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l6 level1 lfo16;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>whether
! the debug symbols are installed by default</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l6 level1 lfo16;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>whether
! additional debug statements were compiled into the binaries<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;Symbol files&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417054"></a><a
! name="_Toc115416118"><span style='mso-bookmark:_Toc115417054'>3.12. Maximum
! File Size is 2GB</span></a></h2>
! 
! <p class=MsoNormal>OpenAFS for Windows does not support files larger than
! 2GB.<span style='mso-spacerun:yes'>  </span>The version of the SMB/CIFS
! protocol implemented imposes this limitation.<span style='mso-spacerun:yes'> 
! </span>Upgrading the SMB/CIFS implementation or replacing it with an Installable
! File System will allow larger files to be supported.<!--[if supportFields]><span
! style='mso-element:field-begin'></span> XE &quot;large file support&quot; <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417055"></a><a
! name="_Toc115416119"><span style='mso-bookmark:_Toc115417055'>3.13. Encrypted
! AFS File Access</span></a></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.<span
! style='mso-spacerun:yes'>  </span>This is often referred to as
! &quot;fcrypt&quot; mode.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417056"></a><a
! name="_Toc115416120"><span style='mso-bookmark:_Toc115417056'>3.14.
! Authenticated Access to the OpenAFS Client Service</span></a></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 supports authenticated SMB connections using
! either NTLM or GSS SPNEGO (NTLM).<span style='mso-spacerun:yes'>  </span>In
! previous versions of OpenAFS, the SMB connections were unauthenticated which
! opened the door for several attacks which could be used to obtain access to
! another user's tokens on shared machines.<span style='mso-spacerun:yes'>   
! </span></p>
  
  <p class=MsoNormal>When GSS SPNEGO attempts a Kerberos 5 authentication, the
  Windows SMB client will attempt to retrieve service tickets for
  &quot;cifs/afs@REALM&quot; (if the loopback adapter is in use) or
  &quot;cifs/machine-afs@REALM&quot; (if the loopback adapter is not being
! used).<span style='mso-spacerun:yes'>  </span>It is extremely important that
! this service principal not exist in the KDC database as the Kerberos
! authentication must fail allowing automatic fallback to NTLM.<span
! style='mso-spacerun:yes'>  </span>When NTLM is used a special local
! authentication mode will be used that does not require access to the user's
! password.<span style='mso-spacerun:yes'>  </span>Instead, Windows will
! internally recognize the request as coming from a local logon session.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417057"></a><a
! name="_Toc115416121"><span style='mso-bookmark:_Toc115417057'>3.15. No More INI
! Files</span></a></h2>
  
  <p class=MsoNormal>Previous AFS clients for Windows stored configuration data
! in Windows .INI files.<span style='mso-spacerun:yes'>   </span>OpenAFS 1.4 does
! not use Windows .INI files for the storage of configuration data.<span
! style='mso-spacerun:yes'>   </span>All settings are now stored in the registry
! (see <a href="#_Appendix_A:_Registry_Values">Appendix A</a>).<span
! style='mso-spacerun:yes'>  </span>The CellServDB file is now stored in the
! %PROGRAMFILES%\OpenAFS\Client directory.<span style='mso-spacerun:yes'>  
! </span>The <i style='mso-bidi-font-style:normal'><a
! href="#_Value___:_CellServDBDir">CellServDBDir</a></i> registry value can be
! used to specify an alternative location.</p>
  
  <p class=MsoNormal>OpenAFS 1.4 will relocate the contents of the “afsdcell.ini”
! file to the new CellServDB file.<span style='mso-spacerun:yes'>  </span>OpenAFS
! 1.4 will also import the contents of the “afs_freelance.ini” file to the
! Windows registry.<span style='mso-spacerun:yes'>   </span>OpenAFS 1.4 will not
  process the contents of the “afsddbmt.ini”.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417058"></a><a
! name="_Toc115416122"><span style='mso-bookmark:_Toc115417058'>3.16. Microsoft
! Windows Internet Connection Firewall</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS 1.4 Client is compatible with the Internet
! Connection Firewall that debuted with Windows XP SP2 and Windows 2003 SP1.<span
! style='mso-spacerun:yes'>  </span>The Internet Connection Firewall will be
! automatically adjusted to allow the receipt of incoming callback messages from
! the AFS file server.<span style='mso-spacerun:yes'>  </span>In addition, the
! appropriate <i>Back Connection</i> registry entries are added to allow SMB
  authentication to be performed across the Microsoft Loopback Adapter.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417059"></a><a
! name="_Toc115416123"><span style='mso-bookmark:_Toc115417059'>3.17. Browsing AFS
! from the Explorer Shell and Office</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS 1.4 Client Service implements the CIFS Remote
  Admin Protocol which allows Explorer to browse server and share information.
  This significantly enhances the interoperability of AFS volumes within the
  Explorer Shell and Microsoft Office applications.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417060"></a><a
! name="_Toc115416124"><span style='mso-bookmark:_Toc115417060'>3.18. No Support
! for </span></a><st2:place w:st="on"><st2:PlaceName w:st="on"><span
!   style='mso-bookmark:_Toc115417060'><span style='mso-bookmark:_Toc115416124'>Byte</span></span></st2:PlaceName><span
!  style='mso-bookmark:_Toc115417060'><span style='mso-bookmark:_Toc115416124'> <st2:PlaceType
!  w:st="on">Range</st2:PlaceType></span></span></st2:place><span
! style='mso-bookmark:_Toc115417060'><span style='mso-bookmark:_Toc115416124'>
! Locking</span></span></h2>
! 
! <p class=MsoBodyText>Many applications on Windows (e.g. Microsoft Office)
! require the use of byte range locks applied to a file either to protect against
! simultaneous file access or as a signaling mechanism.<span
! style='mso-spacerun:yes'>   </span>OpenAFS does not currently support byte
! range locks.<span style='mso-spacerun:yes'>   </span>It is strongly recommended
! that files not be edited within AFS if they might be accessed by multiple users
! or multiple processes on a single machine.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417061"></a><a
! name="_Toc115416125"><span style='mso-bookmark:_Toc115417061'>3.19. Automatic
! Discarding of AFS Tokens at Logoff</span></a></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 will automatically forget a user's tokens upon
! Logoff unless the user's profile was loaded from an AFS volume.<span
! style='mso-spacerun:yes'>  </span>In this situation there is no mechanism to
! determine when the profile has been successfully written back to the network.<span
! style='mso-spacerun:yes'>  </span>It is therefore unsafe to release the user's
! tokens.<span style='mso-spacerun:yes'>  </span>Whether or not the profile has
! been loaded from the registry can be determined for Local Accounts, Active
! Directory accounts and NT4 accounts.</p>
! 
! <p class=MsoNormal>If there is a need to disable this functionality, the <span
! style='mso-bidi-font-style:italic'><a href="#_Value_:_LogoffPreserveTokens">LogoffPreserveTokens</a></span>
! registry value can be used. (see <a href="#_Appendix_A:_Registry_Values">Appendix
! A</a>.)</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417062"></a><a
! name="_Toc115416126"><span style='mso-bookmark:_Toc115417062'>3.20. Terminal
! Server installations</span></a></h2>
  
  <p class=MsoNormal>When installing the NSIS (.exe) installer under Terminal
! Server, you must execute it from within the Add/Remove Programs Control
! Panel.<span style='mso-spacerun:yes'>  </span>Failure to do so will result in
! AFS not running properly.<span style='mso-spacerun:yes'>  </span>The AFS Server
  should not be installed on a machine with Terminal Server installed.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417063"></a><a
! name="_Toc115416127"><span style='mso-bookmark:_Toc115417063'>3.21. Hidden Dot
! Files</span></a></h2>
! 
! <p class=MsoNormal>AFS is a UNIX native file system.<span
! style='mso-spacerun:yes'>  </span>The OpenAFS client attempts to treat the
! files stored in AFS as they would be on UNIX.<span style='mso-spacerun:yes'> 
! </span>File and directory names beginning with a &quot;.&quot; are
! automatically given the Hidden attribute so they will not normally be
! displayed.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417064"></a><a
! name="_Toc115416128"><span style='mso-bookmark:_Toc115417064'>3.22. Status
! Cache Limits</span></a></h2>
  
  <p class=MsoNormal>The Status Cache (AFS Configuration Control Panel: Advanced
! Page) is defined to have a maximum number of entries.<span
! style='mso-spacerun:yes'>  </span>Each entry represents a single file or
! directory entry accessed within the AFS file system.<span
! style='mso-spacerun:yes'>  </span>When the maximum number of entries are
! allocated, entries will begin to be reused according to a least recently used
! (LRU) algorithm.<span style='mso-spacerun:yes'>  </span>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.<span style='mso-spacerun:yes'> 
! </span>Each entry requires approximately 1.2K.<span style='mso-spacerun:yes'> 
! </span>In OpenAFS 1.4, the default number of Status Cache entries is 10,000.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417065"></a><a
! name="_Toc115416129"><span style='mso-bookmark:_Toc115417065'>3.23. NETBIOS
! over TCP/IP must be enabled</span></a></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 succeed.<span
! style='mso-spacerun:yes'>  </span>If &quot;Netbios over TCP/IP&quot; is disabled
! on the machine, then communication with the AFS Client Service will be
! impossible.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417066"></a><a
! name="_Toc115416130"><span style='mso-bookmark:_Toc115417066'>3.24. OpenAFS
! binaries are digitally signed</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS Client Service and related binaries distributed
! by OpenAFS.org are digitally signed by &quot;Secure Endpoints Inc.&quot;.<span
! style='mso-spacerun:yes'>  </span>The OpenAFS Client Service will perform a
! run-time verification check to ensure that all OpenAFS related DLLs loaded by
! the service match the same file version number and were signed by the same
! entity.<span style='mso-spacerun:yes'>  </span>This check has been added to
  prevent the stability problems caused by more than one AFS installation present
! on a machine at the same time.<span style='mso-spacerun:yes'>  </span>Many
! hours of support time have been wasted tracking down problems caused by the
! mixture of files from different releases.<span style='mso-spacerun:yes'> 
! </span></p>
! 
! <p class=MsoNormal><a href="#_Appendix_A:_Registry_Values">Appendix A</a>
! documents the &quot;<a href="#_Value___:_VerifyServiceSignature">VerifyServiceSignature</a>&quot;
! registry value which can be used to disable the signature check.<span
! style='mso-spacerun:yes'>  </span>The file version check cannot be disabled.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417067"></a><a
! name="_Toc115416131"><span style='mso-bookmark:_Toc115417067'>3.25. Maximum
! Size of the AFSCache File</span></a></h2>
! 
! <p class=MsoNormal>The maximum cache size is approximately 1.3GB.<span
! style='mso-spacerun:yes'>  </span>This is the largest contiguous block of
! memory in the 2GB process address space which can be used for constructing a
! memory mapped file.<span style='mso-spacerun:yes'>  </span>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.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417068"></a><a
! name="_Toc115416132"><span style='mso-bookmark:_Toc115417068'>3.26. Filename
! Character Sets</span></a></h2>
  
  <p class=MsoNormal>OpenAFS for Windows implements an SMB server which is used
! as a gateway to the AFS filesystem.<span style='mso-spacerun:yes'> 
! </span>Because of limitations of the SMB implementation, Windows stores all
! files into AFS using OEM code pages such as CP437 (United States) or CP850
! (Western Europe).<span style='mso-spacerun:yes'>  </span>These code pages are
  incompatible with the ISO Latin-1 character set typically used as the default
! on UNIX systems in both the <st2:country-region w:st="on">United States</st2:country-region>
! and <st2:place w:st="on">Western Europe</st2:place>.<span
! style='mso-spacerun:yes'>  </span>Filenames stored by OpenAFS for Windows are
! therefore unreadable on UNIX systems if they include any of the following
! characters:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
!  mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;mso-border-insideh:
!  .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <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;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt;height:399.5pt'>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Ç]<span
!   style='mso-spacerun:yes'>  </span>128<span style='mso-spacerun:yes'> 
!   </span>08/00<span style='mso-spacerun:yes'>  </span>200<span
!   style='mso-spacerun:yes'>  </span>80<span style='mso-spacerun:yes'>  </span>C
!   cedilla</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ü]<span
!   style='mso-spacerun:yes'>  </span>129<span style='mso-spacerun:yes'> 
!   </span>08/01<span style='mso-spacerun:yes'>  </span>201<span
!   style='mso-spacerun:yes'>  </span>81<span style='mso-spacerun:yes'>  </span>u
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[é]<span
!   style='mso-spacerun:yes'>  </span>130<span style='mso-spacerun:yes'> 
!   </span>08/02<span style='mso-spacerun:yes'>  </span>202<span
!   style='mso-spacerun:yes'>  </span>82<span style='mso-spacerun:yes'>  </span>e
!   acute</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[â]<span
!   style='mso-spacerun:yes'>  </span>131<span style='mso-spacerun:yes'> 
!   </span>08/03<span style='mso-spacerun:yes'>  </span>203<span
!   style='mso-spacerun:yes'>  </span>83<span style='mso-spacerun:yes'>  </span>a
!   circumflex</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ä]<span
!   style='mso-spacerun:yes'>  </span>132<span style='mso-spacerun:yes'> 
!   </span>08/04<span style='mso-spacerun:yes'>  </span>204<span
!   style='mso-spacerun:yes'>  </span>84<span style='mso-spacerun:yes'>  </span>a
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[à]<span
!   style='mso-spacerun:yes'>  </span>133<span style='mso-spacerun:yes'> 
!   </span>08/05<span style='mso-spacerun:yes'>  </span>205<span
!   style='mso-spacerun:yes'>  </span>85<span style='mso-spacerun:yes'>  </span>a
!   grave</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[å]<span
!   style='mso-spacerun:yes'>  </span>134<span style='mso-spacerun:yes'> 
!   </span>08/06<span style='mso-spacerun:yes'>  </span>206<span
!   style='mso-spacerun:yes'>  </span>86<span style='mso-spacerun:yes'>  </span>a
!   ring</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ç]<span
!   style='mso-spacerun:yes'>  </span>135<span style='mso-spacerun:yes'> 
!   </span>08/07<span style='mso-spacerun:yes'>  </span>207<span
!   style='mso-spacerun:yes'>  </span>87<span style='mso-spacerun:yes'>  </span>c
!   cedilla</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ê]<span
!   style='mso-spacerun:yes'>  </span>136<span style='mso-spacerun:yes'> 
!   </span>08/08<span style='mso-spacerun:yes'>  </span>210<span
!   style='mso-spacerun:yes'>  </span>88<span style='mso-spacerun:yes'>  </span>e
!   circumflex</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ë]<span
!   style='mso-spacerun:yes'>  </span>137<span style='mso-spacerun:yes'> 
!   </span>08/09<span style='mso-spacerun:yes'>  </span>211<span
!   style='mso-spacerun:yes'>  </span>89<span style='mso-spacerun:yes'>  </span>e
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[è]<span
!   style='mso-spacerun:yes'>  </span>138<span style='mso-spacerun:yes'> 
!   </span>08/10<span style='mso-spacerun:yes'>  </span>212<span
!   style='mso-spacerun:yes'>  </span>8A<span style='mso-spacerun:yes'>  </span>e
!   grave</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ï]<span
!   style='mso-spacerun:yes'>  </span>139<span style='mso-spacerun:yes'> 
!   </span>08/11<span style='mso-spacerun:yes'>  </span>213<span
!   style='mso-spacerun:yes'>  </span>8B<span style='mso-spacerun:yes'>  </span>i
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[î]<span
!   style='mso-spacerun:yes'>  </span>140<span style='mso-spacerun:yes'> 
!   </span>08/12<span style='mso-spacerun:yes'>  </span>214<span
!   style='mso-spacerun:yes'>  </span>8C<span style='mso-spacerun:yes'>  </span>i
!   circumflex</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ì]<span
!   style='mso-spacerun:yes'>  </span>141<span style='mso-spacerun:yes'> 
!   </span>08/13<span style='mso-spacerun:yes'>  </span>215<span
!   style='mso-spacerun:yes'>  </span>8D<span style='mso-spacerun:yes'>  </span>i
!   grave</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Ä]<span
!   style='mso-spacerun:yes'>  </span>142<span style='mso-spacerun:yes'> 
!   </span>08/14<span style='mso-spacerun:yes'>  </span>216<span
!   style='mso-spacerun:yes'>  </span>8E<span style='mso-spacerun:yes'>  </span>A
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Å]<span
!   style='mso-spacerun:yes'>  </span>143<span style='mso-spacerun:yes'> 
!   </span>08/15<span style='mso-spacerun:yes'>  </span>217<span
!   style='mso-spacerun:yes'>  </span>8F<span style='mso-spacerun:yes'>  </span>A
!   ring</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[É]<span
!   style='mso-spacerun:yes'>  </span>144<span style='mso-spacerun:yes'> 
!   </span>09/00<span style='mso-spacerun:yes'>  </span>220<span
!   style='mso-spacerun:yes'>  </span>90<span style='mso-spacerun:yes'>  </span>E
!   acute</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[æ]<span
!   style='mso-spacerun:yes'>  </span>145<span style='mso-spacerun:yes'> 
!   </span>09/01<span style='mso-spacerun:yes'>  </span>221<span
!   style='mso-spacerun:yes'>  </span>91<span style='mso-spacerun:yes'> 
!   </span>ae diphthong</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Æ]<span
!   style='mso-spacerun:yes'>  </span>146<span style='mso-spacerun:yes'> 
!   </span>09/02<span style='mso-spacerun:yes'>  </span>222<span
!   style='mso-spacerun:yes'>  </span>92<span style='mso-spacerun:yes'> 
!   </span>AE diphthong</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ô]<span
!   style='mso-spacerun:yes'>  </span>147<span style='mso-spacerun:yes'> 
!   </span>09/03<span style='mso-spacerun:yes'>  </span>223<span
!   style='mso-spacerun:yes'>  </span>93<span style='mso-spacerun:yes'>  </span>o
!   circumflex</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ö]<span
!   style='mso-spacerun:yes'>  </span>148<span style='mso-spacerun:yes'> 
!   </span>09/04<span style='mso-spacerun:yes'>  </span>224<span
!   style='mso-spacerun:yes'>  </span>94<span style='mso-spacerun:yes'>  </span>o
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ò]<span
!   style='mso-spacerun:yes'>  </span>149<span style='mso-spacerun:yes'> 
!   </span>09/05<span style='mso-spacerun:yes'>  </span>225<span
!   style='mso-spacerun:yes'>  </span>95<span style='mso-spacerun:yes'>  </span>o
!   grave</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[û]<span
!   style='mso-spacerun:yes'>  </span>150<span style='mso-spacerun:yes'> 
!   </span>09/06<span style='mso-spacerun:yes'>  </span>226<span
!   style='mso-spacerun:yes'>  </span>96<span style='mso-spacerun:yes'>  </span>u
!   circumflex</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ù]<span
!   style='mso-spacerun:yes'>  </span>151<span style='mso-spacerun:yes'> 
!   </span>09/07<span style='mso-spacerun:yes'>  </span>227<span
!   style='mso-spacerun:yes'>  </span>97<span style='mso-spacerun:yes'>  </span>u
!   grave</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ÿ]<span
!   style='mso-spacerun:yes'>  </span>152<span style='mso-spacerun:yes'> 
!   </span>09/08<span style='mso-spacerun:yes'>  </span>230<span
!   style='mso-spacerun:yes'>  </span>98<span style='mso-spacerun:yes'>  </span>y
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Ö]<span
!   style='mso-spacerun:yes'>  </span>153<span style='mso-spacerun:yes'> 
!   </span>09/09<span style='mso-spacerun:yes'>  </span>231<span
!   style='mso-spacerun:yes'>  </span>99<span style='mso-spacerun:yes'>  </span>O
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Ü]<span
!   style='mso-spacerun:yes'>  </span>154<span style='mso-spacerun:yes'> 
!   </span>09/10<span style='mso-spacerun:yes'>  </span>232<span
!   style='mso-spacerun:yes'>  </span>9A<span style='mso-spacerun:yes'>  </span>U
!   diaeresis</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ø]<span
!   style='mso-spacerun:yes'>  </span>155<span style='mso-spacerun:yes'> 
!   </span>09/11<span style='mso-spacerun:yes'>  </span>233<span
!   style='mso-spacerun:yes'>  </span>9B<span style='mso-spacerun:yes'>  </span>o
!   slash</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[£]<span
!   style='mso-spacerun:yes'>  </span>156<span style='mso-spacerun:yes'> 
!   </span>09/12<span style='mso-spacerun:yes'>  </span>234<span
!   style='mso-spacerun:yes'>  </span>9C<span style='mso-spacerun:yes'> 
!   </span>Pound sterling sign</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[Ø]<span
!   style='mso-spacerun:yes'>  </span>157<span style='mso-spacerun:yes'> 
!   </span>09/13<span style='mso-spacerun:yes'>  </span>235<span
!   style='mso-spacerun:yes'>  </span>9D<span style='mso-spacerun:yes'>  </span>O
!   slash</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[×]<span
!   style='mso-spacerun:yes'>  </span>158<span style='mso-spacerun:yes'> 
!   </span>09/14<span style='mso-spacerun:yes'>  </span>236<span
!   style='mso-spacerun:yes'>  </span>9E<span style='mso-spacerun:yes'> 
!   </span>Multiplication sign</p>
!   <p class=PreformattedText><span style='mso-spacerun:yes'>     </span>[ƒ]<span
!   style='mso-spacerun:yes'>  </span>159<span style='mso-spacerun:yes'> 
!   </span>09/15<span style='mso-spacerun:yes'>  </span>237<span
!   style='mso-spacerun:yes'>  </span>9F<span style='mso-spacerun:yes'>  </span><st2:place
!   w:st="on">Florin</st2:place> sign</p>
    </td>
   </tr>
  </table>
  
! <p class=PreformattedText><o:p>&nbsp;</o:p></p>
  
  <p class=MsoNormal>OpenAFS 1.4 provides an optional registry value, <i><a
! href="#_Value___:_StoreAnsiFilenames">StoreAnsiFilenames</a></i>, that can be
! set to instruct OpenAFS to store filenames using the ANSI Code Page instead of
! the OEM Code Page.<span style='mso-spacerun:yes'>  </span>The ANSI Code Page is
! a compatible superset of Latin-1.<span style='mso-spacerun:yes'>  </span>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>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417069"></a><a
! name="_Toc115416133"><span style='mso-bookmark:_Toc115417069'>3.27. Known
! Character Set Issues with Roaming Profiles</span></a></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 be
! represented in the local OEM character set.<span style='mso-spacerun:yes'> 
! </span>In this case, attempts to write the profile back to AFS will fail.<span
! style='mso-spacerun:yes'>  </span>OpenAFS for Windows does not currently
! support UNICODE.<span style='mso-spacerun:yes'>  </span>To avoid this problem
! some sites run logoff scripts (assigned by group policy) which rename all files
! to use only the supported characters for the locale.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417070"></a><a
! name="_Toc115416134"><span style='mso-bookmark:_Toc115417070'>3.28. The
! AFSCache File</span></a></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.<span
! style='mso-spacerun:yes'>  </span>The persistent nature of the data stored in
! the cache file improves the performance of OpenAFS by reducing the number of
! times data must be read from the AFS file servers.<span
! style='mso-spacerun:yes'>  </span></p>
  
  <p class=MsoNormal>The performance of the AFS Client Service is significantly
! affected by the access times associated with the AFSCache paging file.<span
! style='mso-spacerun:yes'>   </span>When given the choice, the AFSCache file
! should be placed on a fast disk, preferably NTFS, the file should not be
! compressed and should consist of as few fragments as possible.<span
! style='mso-spacerun:yes'>   </span>Significant performance gains can be
! achieved by defragmenting the AFSCache file with Sysinternal's Contig utility.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417071"></a><a
! name="_Toc115416135"><span style='mso-bookmark:_Toc115417071'>3.29. Restricting
! OpenAFS Client Service Start and Stop</span></a></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>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>afsdacl :
! Set or reset the DACL to allow starting or stopping</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>         </span>the
! afsd service by any ordinary user.</p>
  
! <p class=PreformattedText><o:p>&nbsp;</o:p></p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    </span>Usage :
! afsdacl [-set | -reset] [-show]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>         
! </span>-set<span style='mso-spacerun:yes'>   </span>: Sets the DACL</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>         
! </span>-reset : Reset the DACL</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>         
! </span>-show<span style='mso-spacerun:yes'>  </span>: Show current DACL (SDSF)</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417072"></a><a
! name="_Toc115416136"><span style='mso-bookmark:_Toc115417072'>3.30. The @sys
! Name List</span></a></h2>
  
  <p class=MsoNormal>The default @sys name list in OpenAFS 1.4 is set to
! &quot;x86_win32 i386_w2k i386_nt40&quot; for 32-bit x86 systems.<span
! style='mso-spacerun:yes'>  </span>The default for itanium will be
! &quot;ia64_win64&quot; and &quot;amd64_win64&quot; for amd 64-bit processors
! when those platforms are supported.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417073"></a><a
! name="_Toc115416137"><span style='mso-bookmark:_Toc115417073'>3.31. Symlinks to
! AFS UNC paths</span></a></h2>
  
  <p class=MsoNormal>In OpenAFS 1.4, symlinks to AFS UNC paths, \\AFS[\all]\...,
! are treated the same as symlinks to /afs/...<span style='mso-spacerun:yes'> 
! </span>However, please use /afs/... as the Windows UNC form will not work on
! UNIX.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417074"></a><a
! name="_Toc115416138"><span style='mso-bookmark:_Toc115417074'>3.32. Cache
! Manager Debugging Now Supported</span></a></h2>
  
  <p class=MsoNormal>OpenAFS for Windows 1.4 implements the Cache Manager
! Debugging RPC Interface.<span style='mso-spacerun:yes'>  </span>The CM debugger
! can be queried with cmdebug.exe.</p>
  
  <p class=PreformattedText>Usage: cmdebug -servers &lt;server machine&gt; [-port
  &lt;IP port&gt;] [-long]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>              
! </span>[-addrs] [-cache] [-help]</p>
  
! <p class=PreformattedText>Where: -long<span style='mso-spacerun:yes'>  
! </span>print all info</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-addrs<span style='mso-spacerun:yes'>  </span>print only host interfaces</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-cache<span style='mso-spacerun:yes'>  </span>print only cache
! configuration</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417075"></a><a
! name="_Toc115416139"><span style='mso-bookmark:_Toc115417075'>3.33. Windows
! Logon Caching vs. Kerberos Logons</span></a></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
  multi-domain Windows forest, you must enable Windows logon caching unless the
! workstation is Windows Vista Beta 1 or later.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417076"></a><a
! name="_Toc115416140"><span style='mso-bookmark:_Toc115417076'>3.34. Initial
! Server Preferences</span></a></h2>
  
  <p class=MsoNormal>VLDB and File Server Preferences can now be provided initial
! values using registry keys.<span style='mso-spacerun:yes'>  </span>This is
! useful for managed machines in a Windows domain which are centrally located
! (e.g., in a computing lab.)<span style='mso-spacerun:yes'>  </span>See <a
! href="#_Appendix_A:_Registry_Values">Appendix A</a> for details on the &quot;<a
! href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie_2">Server Preferences</a>&quot; keys.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417077"></a><a
! name="_Toc115416141"><span style='mso-bookmark:_Toc115417077'>3.35. File
! Timestamps</span></a></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 reports timestamps on files stored in AFS in UTC
! all year round.<span style='mso-spacerun:yes'>  </span>In locales with daylight
! savings time, previous versions of AFS for Windows reported the time when DST
! is active as UTC+1. <span style='mso-spacerun:yes'> </span>This was done to
! preserve the relative local time for the user.<span style='mso-spacerun:yes'> 
! </span>A file stored at 11:00am EST in January would be reported as having been
! stored at 11:00am EDT in June.<span style='mso-spacerun:yes'> 
! </span>Unfortunately, this has the negative side effect of changing the
! reported timestamp from 16:00UTC to 15:00UTC.<span style='mso-spacerun:yes'> 
! </span>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.<span
! style='mso-spacerun:yes'>  </span>They do preserve the relative local
! time.<span style='mso-spacerun:yes'>  </span>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.<span style='mso-spacerun:yes'> 
! </span>During DST, these two times will no longer agree even though they are in
! fact representing the same moment in time.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417078"></a><a
! name="_Toc115416142"><span style='mso-bookmark:_Toc115417078'>3.36. Windows RPC
! client support must be installed</span></a> </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
  are present and that they refer to the dll &quot;rpcrt4.dll&quot;:</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_np&quot;</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_ip_tcp&quot;</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncadg_ip_udp&quot;</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>   </span>HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_http&quot;</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417079"></a><a
! name="_Toc115416143"><span style='mso-bookmark:_Toc115417079'>3.37. Generating
! Minidumps of the OpenAFS Client Service</span></a></h2>
! 
! <p class=MsoNormal>OpenAFS 1.4 adds a new command, &quot;fs
! minidump&quot;.<span style='mso-spacerun:yes'>  </span>This command can be used
! at any time to generate a mini dump file containing the current stack of the
! afsd_service.exe process.<span style='mso-spacerun:yes'>   </span>This output
! can be very helpful when debugging the AFS Client Service when it is
! unresponsive to SMB/CIFS requests.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417080"></a><a
! name="_Toc115416144"><span style='mso-bookmark:_Toc115417080'>3.38. AFS Client
! Universally Unique Identifiers</span></a></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows 1.4 client implements Universally
! Unique Identifiers (UUIDs).<span style='mso-spacerun:yes'>  </span>They are
! used to provide the server with a method of identifying the client that is
! independent of IP address.<span style='mso-spacerun:yes'>  </span>The UUID is
  generated when the AFSCache file is created and is maintained as long as the
! contents of the AFSCache file are kept intact.<span style='mso-spacerun:yes'> 
! </span>The UUID is stored in the AFSCache file.<span
! style='mso-spacerun:yes'>   </span>When cloning machines that have Windows AFS
! client installed, the AFSCache files must be deleted as part of the cloning
! process.</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417112"></a><a
! name="_Toc115417081"></a><a name="_Toc115416145"><span style='mso-bookmark:
! _Toc115417081'><span style='mso-bookmark:_Toc115417112'>4. How to Debug Problems
! with OpenAFS for Windows:</span></span></a></h1>
  
  <p class=MsoNormal>OpenAFS for Windows provides a wide range of tools to assist
! you in debugging problems.<span style='mso-spacerun:yes'>  </span>The
! techniques available to you are varied because of the wide range of issues that
! have been discovered over the years.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417082"></a><a
! name="_Toc115416146"><span style='mso-bookmark:_Toc115417082'>4.1. pioctl debugging
! (</span></a><a href="#_Value___:_IoctlDebug"><span style='mso-bookmark:_Toc115416146'><span
! style='mso-bookmark:_Toc115417082'>IoctlDebug</span></span><span
! style='mso-bookmark:_Toc115416146'><span style='mso-bookmark:_Toc115417082'></span></span></a><span
! style='mso-bookmark:_Toc115416146'><span style='mso-bookmark:_Toc115417082'>
! registry key)</span></span></h2>
  
  <p class=MsoNormal>pioctl (path-based ioctl) calls are used by various tools to
! communicate with the AFS Client Service.<span style='mso-spacerun:yes'> 
! </span>Some of the operations performed include:</p>
  
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setting/querying
! tokens<span style='mso-spacerun:yes'>  </span>(tokens.exe, aklog.exe,
! afscreds.exe)</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setting/querying
! ACLs </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setting/querying
! cache parameters</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>flushing
! files or volumes</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setting/querying
! server preferences</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>querying
! path location</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>checking
! the status of servers and volumes</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l7 level1 lfo18;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>setting/querying
! the sysname list</p>
  
  <p class=MsoNormal>pioctl calls are implemented by writing to a special UNC
! path that is processed by the AFS Client Service.<span
! style='mso-spacerun:yes'>   </span>If there is a failure to communicate with
! the AFS Client Service via SMB/CIFS, it will be impossible to perform any of
! the above operations.<span style='mso-spacerun:yes'>   </span></p>
  
  <p class=MsoNormal>To assist in debugging these problems, the registry value:</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'> 
! </span>[HKLM\SOFTWARE\OpenAFS\Client]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'> 
! </span>REG_DWORD:<span style='mso-spacerun:yes'>  </span>IoctlDebug<span
! style='mso-spacerun:yes'>   </span>= 0x01</p>
! 
! <p class=MsoNormal>should be set.<span style='mso-spacerun:yes'>  </span>Then
! any of the commands that perform pioctl calls should be executed from the
! command prompt.<span style='mso-spacerun:yes'>  </span>With this key set the
! pioctl library will generate debugging output to stderr.<span
! style='mso-spacerun:yes'>  </span>The output will contain the Win32 API calls
! executed along with their most important parameters and their return code.<span
! style='mso-spacerun:yes'>   </span>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='margin-left:0pt;text-indent:0pt'><a name="_Toc115417083"></a><a
! name="_Toc115416147"><span style='mso-bookmark:_Toc115417083'>4.2. afsd_service
! initialization log (%WinDir%\TEMP\afsd_init.log)</span></a></h2>
  
  <p class=MsoNormal>Every time the AFS Client Service starts it appends data
! about its progress and configuration to a file.<span style='mso-spacerun:yes'> 
! </span>This file provides information crucial to determining why the service
! cannot start when there are problems.<span style='mso-spacerun:yes'> 
! </span>When the process terminates due to a panic condition it will write to
! this file the source code file and line number of the error.<span
! style='mso-spacerun:yes'>  </span>In many cases the panic condition is due to a
! misconfiguration of the machine.<span style='mso-spacerun:yes'>  </span>In
! other cases it might be due to a programming error in the software.<span
! style='mso-spacerun:yes'>  </span>A quick review of the location in the source
! code will quickly reveal the reason for the termination.</p>
! 
! <p class=MsoNormal>The <i style='mso-bidi-font-style:normal'><a
! href="#_Value___:_MaxLogSize">MaxLogSize</a></i> registry value determines the
! maximum size of the %WINDIR%\TEMP\afsd_init.log file.<span
! style='mso-spacerun:yes'>  </span>If the file is larger than this value when
! OpenAFS Client Service starts, the file will be reset to 0 bytes.<span
! style='mso-spacerun:yes'>  </span>If value is set to 0, the file will be allowed
! to grow indefinitely.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417084"></a><a
! name="_Toc115416148"><span style='mso-bookmark:_Toc115417084'>4.3. afsd_service
! debug logs (fs trace {-on, -off, -dump} -&gt;%WinDir%\TEMP\afsd.log)</span></a></h2>
  
  <p class=MsoNormal>When attempting to debug the behavior of the SMB/CIFS Server
  and the Cache Manager it is often useful to examine a log of the operations
! being performed.<span style='mso-spacerun:yes'>  </span>While running the AFS
! Client Service keeps an in memory log of many of its actions.<span
! style='mso-spacerun:yes'>   </span>The default number of actions preserved at
! any one time is 5000.<span style='mso-spacerun:yes'>  </span>This can be
! adjusted with the <a href="#_Value_:_TraceBufferSize">registry value</a>:</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'> </span><span
! style='mso-spacerun:yes'> </span>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'> 
! </span>REG_DWORD<span style='mso-spacerun:yes'>  </span>TraceBufferSize </p>
  
  <p class=MsoNormal>A restart of the service is necessary when adjusting this
! value.<span style='mso-spacerun:yes'>   </span>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='margin-left:0pt;text-indent:0pt'><a name="_Toc115417085"></a><a
! name="_Toc115416149"><span style='mso-bookmark:_Toc115417085'>4.4. Using
! SysInternal’s DbgView and FileMon Tools</span></a></h2>
! 
! <p class=MsoNormal>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 DbgView to capture real-time debugging output.<span
! style='mso-spacerun:yes'>  </span>When the OpenAFS Client Service starts and
! Bit 2 of the <a href="#_Value__:_TraceOption">TraceOption</a> value in the
! registry is set, all trace log events are output using the Windows Debug
! Monitor interface (OutputDebugString).<span style='mso-spacerun:yes'>  </span></p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>  </span>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
  
! <p class=PreformattedText style='text-indent:12.0pt'>REG_DWORD<span
! style='mso-spacerun:yes'>   </span>TraceOption = 0x04</p>
  
  <p class=MsoNormal>Use “fs trace –on” and “fs trace –off” to toggle the
  generation of log messages. </p>
  
! <p class=MsoNormal>Sysinternal’s FileMon utility can be use to monitor the file
! operations requested by applications and their success or failure.<span
! style='mso-spacerun:yes'>   </span>Restrict FileMon to monitor Network Volumes
! only in order to reduce the output to just the CIFS requests.<span
! style='mso-spacerun:yes'>   </span></p>
! 
! <p class=MsoNormal>Turn on the <i style='mso-bidi-font-style:normal'>Clock Time</i>
! option in both tools to make it easier to synchronize the application requests
! and the resulting OpenAFS Client Service operations.<span
! style='mso-spacerun:yes'>   </span>The captured data can be stored to files for
! inclusion in bug reports.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417086"></a><a
! name="_Toc115416150"><span style='mso-bookmark:_Toc115417086'>4.5. Microsoft
  MiniDumps <br>
! (fs minidump -&gt; %WinDir%\TEMP\afsd.dmp)</span></a></h2>
  
  <p class=MsoNormal>If the AFS Client Service become unresponsive to any form of
  communication there may be a serious error that can only be debugged by someone
! with access to the source code and a debugger.<span style='mso-spacerun:yes'>  
! </span>The &quot;fs minidump&quot; command can be used to force the generation
! of a MiniDump file containing the state of all of the threads in the AFS Client
! Service process.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417087"></a><a
! name="_Toc115416151"><span style='mso-bookmark:_Toc115417087'>4.6. Single
! Sign-on (Integrated Logon) debugging</span></a></h2>
  
  <p class=MsoNormal>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.<span style='mso-spacerun:yes'>   </span>Setting Bit 0 of the <a
! href="#_Value__:_TraceOption">TraceOption</a> registry value:</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'> 
! </span>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'> 
! </span>REG_DWORD<span style='mso-spacerun:yes'>   </span>TraceOption = 0x01</p>
  
  <p class=MsoNormal>will instruct the Integrated Logon Network Provider and
  Event Handlers to log information to the Windows Event Log: Application under
  the name “AFS Logon&quot;.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417088"></a><a
! name="_Toc115416152"><span style='mso-bookmark:_Toc115417088'>4.7. RX (AFS RPC)
! debugging (rxdebug)</span></a></h2>
  
  <p class=MsoNormal>The rxdebug.exe tool can be used to query a variety of
! information about the AFS services installed on a given machine.<span
! style='mso-spacerun:yes'>  </span>The port for the AFS Cache Manager is
! 7001.<span style='mso-spacerun:yes'>  </span></p>
  
  <p class=PreformattedText>Usage: rxdebug -servers &lt;server machine&gt; [-port
  &lt;IP port&gt;] [-nodally] </p>
  
! <p class=PreformattedText style='margin-left:35.45pt;text-indent:35.45pt'><span
! style='mso-spacerun:yes'>   </span>[-allconnections] [-rxstats] [-onlyserver]
! [-onlyclient] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'><span
! style='mso-spacerun:yes'>   </span>[-onlyport &lt;show only &lt;port&gt;&gt;] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'><span
! style='mso-spacerun:yes'>   </span>[-onlyhost &lt;show only &lt;host&gt;&gt;] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'><span
! style='mso-spacerun:yes'>   </span>[-onlyauth &lt;show only &lt;auth
! level&gt;&gt;] [-version] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'><span
! style='mso-spacerun:yes'>   </span>[-noconns] [-peers] [-help]</p>
  
! <p class=PreformattedText>Where: -nodally<span
! style='mso-spacerun:yes'>         </span>don't show dallying conns</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-allconnections<span style='mso-spacerun:yes'>  </span>don't filter out
  uninteresting connections</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-rxstats<span style='mso-spacerun:yes'>         </span>show Rx
! statistics</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-onlyserver<span style='mso-spacerun:yes'>      </span>only show server
! conns</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-onlyclient<span style='mso-spacerun:yes'>      </span>only show client
! conns</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-version<span style='mso-spacerun:yes'>         </span>show AFS version
! id</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-noconns<span style='mso-spacerun:yes'>         </span>show no
! connections</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-peers<span style='mso-spacerun:yes'>           </span>show peers</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417089"></a><a
! name="_Toc115416153"><span style='mso-bookmark:_Toc115417089'>4.8. Cache
! Manager debugging (cmdebug)</span></a></h2>
  
  <p class=MsoNormal>The cmdebug.exe tool can be used to query the state of the
  AFS Cache Manager on a given machine.</p>
--- 857,1740 ----
  
  <p class=MsoNormal>The initial membership of the &quot;AFS Client Admins&quot;
  group when created by the installer is equivalent to the local
! &quot;Administrators&quot; group.  If a user is added to the
! &quot;Administrators&quot; group after the creation of the &quot;AFS Client
! Admin&quot; group, that user will not be an AFS Client Administrator.  Only
! users that are members of the &quot;AFS Client Admins&quot; group are AFS
! Client Administrators.  The local &quot;SYSTEM&quot; account is an implicit
! member of the &quot;AFS Client Admins&quot; group.</p>
  
  <p class=MsoNormal>Setting the default sysname for a machine should be done via
! the <a href="../../oafw-1-4-release-notes.doc#_Value_:_SysName">registry</a>
! and not via &quot;fs sysname&quot;.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993098"></a><a
! name="_Toc126872179"></a><a name="_Toc115417050"></a><a name="_Toc115416114">3.8.
! OpenAFS support for UNC paths</a> </h2>
! 
! <p class=MsoNormal>The OpenAFS 1.4 client supports UNC paths everywhere.  UNC
! paths provide a canonical name for resources stored within AFS.  UNC paths
! should be used instead of drive letter mappings whenever possible.   This is
! especially true when specifying the location of roaming profiles and redirected
! folders.  </p>
  
  <p class=MsoNormal>Power users that make extensive use of the command line
  shell, cmd.exe, should consider using JP Software's 4NT or Take Command command
! processors.  Unlike cmd.exe, the JPSoftware shells fully support UNC paths as
! the current directory.  With the release of version 4NT 7.0 and Take Command 7.0,
! JPSoftware is adding special recognition of OpenAFS.  AFS paths can be entered
! in UNIX notation (e.g., <a href="file:///\\afs\openafs.org\software">/afs/openafs.org/software</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=MsoHyperlink>http://www.jpsoft.com</span>.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993099"></a><a
! name="_Toc126872180"></a><a name="_Toc115417051"></a><a name="_Toc115416115">3.9.
! OpenAFS includes aklog.exe</a></h2>
  
  <p class=MsoNormal>The OpenAFS 1.4 Client ships with its own version of
  aklog.exe which should be used in preference to those obtained by third party
! sources.  The OpenAFS aklog.exe supports Kerberos 5 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>
  
! <p class=PreformattedText>             [[-p | -path] pathname]</p>
  
! <p class=PreformattedText>             [-noprdb] [-force]</p>
  
! <p class=PreformattedText>             [-5 [-m]| -4]</p>
  
! <p class=PreformattedText>&nbsp;</p>
  
! <p class=PreformattedText>   -d = output debugging information.</p>
  
! <p class=PreformattedText>   cell = zero or more cells for which tokens will be
! obtained</p>
  
! <p class=PreformattedText>   krb_realm = the kerberos realm of the cell.</p>
  
! <p class=PreformattedText>   pathname = the directory for which authentication
! is required</p>
  
! <p class=PreformattedText>   -noprdb = don't try to determine AFS ID.</p>
  
! <p class=PreformattedText>   -5 or -4 = use Kerberos V (default) or Kerberos IV
! tickets</p>
  
! <p class=PreformattedText>   -m = use krb524d to convert Kerberos V tickets to
! Kerberos IV</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993100"></a><a
! name="_Toc126872181"></a><a name="_Toc115417052"></a><a name="_Toc115416116">3.10.
! OpenAFS Servers on Windows are Unsupported</a></h2>
  
  <p class=MsoNormal>The AFS Server functionality provided with OpenAFS 1.4 might
! work but should be considered highly experimental.  It has not been thoroughly
! tested.  Any data which would cause pain if lost should not be stored in an
! OpenAFS Server on Windows.</p>
  
  <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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>When installed on the same machine as the AFS Server, Freelance
! mode must be turned off.  Otherwise, you will be unable to manipulate the
! contents of the root.afs volume for the hosted cell.</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>The AFS Server and related tools only support the built in
! kaserver (Kerberos IV).  If the AFS Server is being used, MIT Kerberos for
! Windows should not be installed or must be disabled.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993101"></a><a
! name="_Toc126872182"></a><a name="_Toc115417053"></a><a name="_Toc115416117">3.11.
! OpenAFS Debugging Symbol files</a></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows installers now include Debugging
  Symbol files which should be installed if you are experiencing problems and
! need to send crash reports.  This is true for both the release and the debug
! versions of the installers.  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 style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>whether or not the binaries were compiled with optimization</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>whether the debug symbols are installed by default</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>whether additional debug statements were compiled into the
! binaries</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993102"></a><a
! name="_Toc126872183"></a><a name="_Toc115417054"></a><a name="_Toc115416118">3.12.
! </a>Large Files (64-bit) Supported</h2>
! 
! <p class=MsoNormal>As of release 1.5.3, OpenAFS for Windows supports files
! larger than 2GB.  The maximum file size is now 16777216 terabytes when the AFS
! File Server supports large files.   If the AFS File Server does not support
! large files, then the file size limit remains 2GB.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993103"></a><a
! name="_Toc126872184"></a><a name="_Toc115417055"></a><a name="_Toc115416119">3.13.
! Encrypted AFS File Access</a></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.  This is often referred to as &quot;fcrypt&quot; mode.  Encrypted data
! transfer can be turned on or off with the “fs crypt” command.  Transitions
! between “crypt” and “non-crypt” modes are logged to the Windows Application
! Event Log. </p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993104"></a><a
! name="_Toc126872185"></a><a name="_Toc115417056"></a><a name="_Toc115416120">3.14.
! Authenticated Access to the OpenAFS Client Service</a></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 supports authenticated SMB connections using
! either NTLM or GSS SPNEGO (NTLM).  In previous versions of OpenAFS, the SMB
! connections were unauthenticated which opened the door for several attacks
! which could be used to obtain access to another user's tokens on shared
! machines.    </p>
  
  <p class=MsoNormal>When GSS SPNEGO attempts a Kerberos 5 authentication, the
  Windows SMB client will attempt to retrieve service tickets for
  &quot;cifs/afs@REALM&quot; (if the loopback adapter is in use) or
  &quot;cifs/machine-afs@REALM&quot; (if the loopback adapter is not being
! used).  It is extremely important that this service principal not exist in the
! KDC database as the Kerberos authentication must fail allowing automatic
! fallback to NTLM.  When NTLM is used a special local authentication mode will
! be used that does not require access to the user's password.  Instead, Windows
! will internally recognize the request as coming from a local logon session.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993105"></a><a
! name="_Toc126872186"></a><a name="_Toc115417057"></a><a name="_Toc115416121">3.15.
! No More INI Files</a></h2>
  
  <p class=MsoNormal>Previous AFS clients for Windows stored configuration data
! in Windows .INI files.   OpenAFS 1.4 does not use Windows .INI files for the storage
! of configuration data.   All settings are now stored in the registry (see <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>). 
! The CellServDB file is now stored in the %PROGRAMFILES%\OpenAFS\Client
! directory.   The <i><a
! href="../../oafw-1-4-release-notes.doc#_Value___: CellServDBDir">CellServDBDir</a></i>
! registry value can be used to specify an alternative location.</p>
  
  <p class=MsoNormal>OpenAFS 1.4 will relocate the contents of the “afsdcell.ini”
! file to the new CellServDB file.  OpenAFS 1.4 will also import the contents of
! the “afs_freelance.ini” file to the Windows registry.   OpenAFS 1.4 will not
  process the contents of the “afsddbmt.ini”.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993106"></a><a
! name="_Toc126872187"></a><a name="_Toc115417058"></a><a name="_Toc115416122">3.16.
! Microsoft Windows Internet Connection Firewall</a></h2>
  
  <p class=MsoNormal>The OpenAFS 1.4 Client is compatible with the Internet
! Connection Firewall that debuted with Windows XP SP2 and Windows 2003 SP1.  The
! Internet Connection Firewall will be automatically adjusted to allow the
! receipt of incoming callback messages from the AFS file server.  In addition,
! the appropriate <i>Back Connection</i> registry entries are added to allow SMB
  authentication to be performed across the Microsoft Loopback Adapter.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993107"></a><a
! name="_Toc126872188"></a><a name="_Toc115417059"></a><a name="_Toc115416123">3.17.
! Browsing AFS from the Explorer Shell and Office</a></h2>
  
  <p class=MsoNormal>The OpenAFS 1.4 Client Service implements the CIFS Remote
  Admin Protocol which allows Explorer to browse server and share information.
  This significantly enhances the interoperability of AFS volumes within the
  Explorer Shell and Microsoft Office applications.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993108"></a><a
! name="_Toc126872189"></a><a name="_Toc115417060"></a><a name="_Toc115416124">3.18.
! </a>Byte Range Locking</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
! simultaneous file access or as a signaling mechanism.   OpenAFS for Windows
! release 1.5 (or greater) implements byte range locking within the CIFS-AFS
! gateway server.   This support for byte range locking obtains <span
! style='font-family:"Times New Roman"'>AFS’ advisory file server locks to simulate
! Microsoft Windows mandatory locks.&nbsp;&nbsp; When an application opens a
! file, a lock will be obtained from AFS indicating that the file is in
! use.&nbsp; If the lock is a write lock, access to the file will be restricted
! to other applications running on the same machine as the first application to
! request the lock.&nbsp;&nbsp; Applications running on other machines will see
! the AFS full file lock and will be unable to access the file.</span></p>
! 
! <p class=MsoNormal><span style='font-family:"Times New Roman"'>Most Windows
! applications and Windows itself opens files in shared read mode. When this is
! done, a read lock is applied to the file.&nbsp;&nbsp; This does not prevent
! shared read access across multiple machines but is used to ensure that no one
! writes to the file while it is in use.</span></p>
! 
! <p class=MsoNormal>As the CIFS-AFS gateway server attempts to implement Windows
! lock semantics on top of AFS lock semantics it is important to understand how
! AFS file locks work.  In Windows there are no special privileges associated
! with obtaining file locks.  If you can read or execute a file, then you can
! obtain a read lock.  If you can write or create a file, then you can obtain a
! write lock.  In AFS if you can write to a file, then you can obtain a write
! lock.  However, in AFS if you can read a file it does not mean that you can
! obtain a read lock on it.   The ability to obtain read locks is granted only if
! you have the lock (or ‘k’) privilege.  This behavior is required in order to
! allow anonymous users to read files while preventing them from being able to
! deny access to the files to other users.  <i>OpenAFS 1.4.0 and earlier as well
! as all IBM AFS file servers have an implementation bug that prevents users with
! write privileges from being able to obtain locks without the lock privilege.</i> 
! When AFS serves data out of read-only volumes the file server will deny all
! requests for read and write locks because the contents of the volume cannot be
! changed by the client.</p>
! 
! <p class=MsoNormal>Since Microsoft Windows applications almost always attempt
! to obtain a temporary read lock when accessing files the CIFS-AFS gateway
! implements the following semantics in order to reduce the inconvenience on end
! users.  </p>
! 
! <ul type=disc>
!  <li class=MsoNormal>If the file is located on a read-only volume and the
!      application requests a read lock, the CIFS-AFS server will grant the lock
!      request without asking the AFS file server.</li>
!  <li class=MsoNormal>If the file is located on a read-only volume and the
!      application requests a write lock, the CIFS-AFS server will refuse the
!      lock request and return a read only error.</li>
!  <li class=MsoNormal>If the file is located on a read-write volume and the
!      application requests a write lock, the CIFS-AFS server will request a lock
!      from the AFS file server.  If granted by the file server, then the
!      CIFS-AFS server will grant the lock request.  Otherwise, the request will
!      be denied either with an access denied or an in use error.</li>
!  <li class=MsoNormal>If the file is located on a read-write volume and the
!      application requests a read lock, the CIFS-AFS server will request a lock
!      from the AFS file server.  If granted by the file server, then the
!      CIFS-AFS server grants the lock request.  If the request is denied due to
!      an access denied error and the user has the lookup and read privileges but
!      not the lock privilege, then the CIFS-AFS server will grant the request
!      even though the AFS file server said ‘no’.  If the user does not have at
!      least those permissions, the CIFS-AFS server will deny the request.</li>
!  <li class=MsoNormal>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>If the CIFS-AFS server is unable to renew the AFS file
!      server locks, then it will invalidate the associated file handles.  This
!      is the same behavior that an application will experience if it was using a
!      Windows File Share and the connection was broken.   Invalidating the file
!      handles prevents subsequent data corruption from taking place.</li>
! </ul>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993109"></a><a
! name="_Toc126872190"></a><a name="_Toc115417061"></a><a name="_Toc115416125">3.19.
! Automatic Discarding of AFS Tokens at Logoff</a></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 will automatically forget a user's tokens upon
! Logoff unless the user's profile was loaded from an AFS volume.  In this
! situation there is no mechanism to determine when the profile has been
! successfully written back to the network.  It is therefore unsafe to release
! the user's tokens.  Whether or not the profile has been loaded from the
! registry can be determined for Local Accounts, Active Directory accounts and
! NT4 accounts.</p>
! 
! <p class=MsoNormal>If there is a need to disable this functionality, the <a
! href="../../oafw-1-4-release-notes.doc#_Value_:_LogoffPreserveTokens">LogoffPreserveTokens</a>
! registry value can be used. (see <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>.)</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993110"></a><a
! name="_Toc126872191"></a><a name="_Toc115417062"></a><a name="_Toc115416126">3.20.
! Terminal Server installations</a></h2>
  
  <p class=MsoNormal>When installing the NSIS (.exe) installer under Terminal
! Server, you must execute it from within the Add/Remove Programs Control Panel. 
! Failure to do so will result in AFS not running properly.  The AFS Server
  should not be installed on a machine with Terminal Server installed.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993111"></a><a
! name="_Toc126872192"></a><a name="_Toc115417063"></a><a name="_Toc115416127">3.21.
! Hidden Dot Files</a></h2>
! 
! <p class=MsoNormal>AFS is a UNIX native file system.  The OpenAFS client
! attempts to treat the files stored in AFS as they would be on UNIX.  File and
! directory names beginning with a &quot;.&quot; are automatically given the Hidden
! attribute so they will not normally be displayed.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993112"></a><a
! name="_Toc126872193"></a><a name="_Toc115417064"></a><a name="_Toc115416128">3.22.
! Status Cache Limits</a></h2>
  
  <p class=MsoNormal>The Status Cache (AFS Configuration Control Panel: Advanced
! Page) is defined to have a maximum number of entries.  Each entry represents a
! single file or directory entry accessed within the AFS file system.  When the
! maximum number of entries are allocated, entries will begin to be reused
! according to a least recently used (LRU) algorithm.  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.  Each entry requires approximately
! 1.2K.  In OpenAFS 1.4, the default number of Status Cache entries is 10,000.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993113"></a><a
! name="_Toc126872194"></a><a name="_Toc115417065"></a><a name="_Toc115416129">3.23.
! NETBIOS over TCP/IP must be enabled</a></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 succeed.  If
! &quot;Netbios over TCP/IP&quot; is disabled on the machine, then communication
! with the AFS Client Service will be impossible.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993114"></a><a
! name="_Toc126872195"></a><a name="_Toc115417066"></a><a name="_Toc115416130">3.24.
! OpenAFS binaries are digitally signed</a></h2>
  
  <p class=MsoNormal>The OpenAFS Client Service and related binaries distributed
! by OpenAFS.org are digitally signed by &quot;Secure Endpoints Inc.&quot;.  The
! OpenAFS Client Service will perform a run-time verification check to ensure
! that all OpenAFS related DLLs loaded by the service match the same file version
! number and were signed by the same entity.  This check has been added to
  prevent the stability problems caused by more than one AFS installation present
! on a machine at the same time.  Many hours of support time have been wasted
! tracking down problems caused by the mixture of files from different releases. 
! </p>
! 
! <p class=MsoNormal><a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>
! documents the &quot;<a
! href="../../oafw-1-4-release-notes.doc#_Value___: VerifyServiceSignature">VerifyServiceSignature</a>&quot;
! registry value which can be used to disable the signature check.  The file
! version check cannot be disabled.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993115"></a><a
! name="_Toc126872196"></a><a name="_Toc115417067"></a><a name="_Toc115416131">3.25.
! Maximum Size of the AFSCache File</a></h2>
! 
! <p class=MsoNormal>The maximum cache size is approximately 1.3GB.  This is the
! largest contiguous block of memory in the 2GB process address space which can
! be used for constructing a memory mapped file.  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.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993116"></a><a
! name="_Toc126872197"></a><a name="_Toc115417068"></a><a name="_Toc115416132">3.26.
! Filename Character Sets</a></h2>
  
  <p class=MsoNormal>OpenAFS for Windows implements an SMB server which is used
! as a gateway to the AFS filesystem.  Because of limitations of the SMB
! implementation, Windows stores all files into AFS using OEM code pages such as
! CP437 (United States) or CP850 (Western Europe).  These code pages are
  incompatible with the ISO Latin-1 character set typically used as the default
! on UNIX systems in both the United States and Western Europe.  Filenames stored
! by OpenAFS for Windows are therefore unreadable on UNIX systems if they include
! any of the following characters:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='border-collapse:collapse;border:none'>
!  <tr style='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>     [Ç]  128  08/00  200  80  C cedilla</p>
!   <p class=PreformattedText>     [ü]  129  08/01  201  81  u diaeresis</p>
!   <p class=PreformattedText>     [é]  130  08/02  202  82  e acute</p>
!   <p class=PreformattedText>     [â]  131  08/03  203  83  a circumflex</p>
!   <p class=PreformattedText>     [ä]  132  08/04  204  84  a diaeresis</p>
!   <p class=PreformattedText>     [à]  133  08/05  205  85  a grave</p>
!   <p class=PreformattedText>     [å]  134  08/06  206  86  a ring</p>
!   <p class=PreformattedText>     [ç]  135  08/07  207  87  c cedilla</p>
!   <p class=PreformattedText>     [ê]  136  08/08  210  88  e circumflex</p>
!   <p class=PreformattedText>     [ë]  137  08/09  211  89  e diaeresis</p>
!   <p class=PreformattedText>     [è]  138  08/10  212  8A  e grave</p>
!   <p class=PreformattedText>     [ï]  139  08/11  213  8B  i diaeresis</p>
!   <p class=PreformattedText>     [î]  140  08/12  214  8C  i circumflex</p>
!   <p class=PreformattedText>     [ì]  141  08/13  215  8D  i grave</p>
!   <p class=PreformattedText>     [Ä]  142  08/14  216  8E  A diaeresis</p>
!   <p class=PreformattedText>     [Å]  143  08/15  217  8F  A ring</p>
!   <p class=PreformattedText>     [É]  144  09/00  220  90  E acute</p>
!   <p class=PreformattedText>     [æ]  145  09/01  221  91  ae diphthong</p>
!   <p class=PreformattedText>     [Æ]  146  09/02  222  92  AE diphthong</p>
!   <p class=PreformattedText>     [ô]  147  09/03  223  93  o circumflex</p>
!   <p class=PreformattedText>     [ö]  148  09/04  224  94  o diaeresis</p>
!   <p class=PreformattedText>     [ò]  149  09/05  225  95  o grave</p>
!   <p class=PreformattedText>     [û]  150  09/06  226  96  u circumflex</p>
!   <p class=PreformattedText>     [ù]  151  09/07  227  97  u grave</p>
!   <p class=PreformattedText>     [ÿ]  152  09/08  230  98  y diaeresis</p>
!   <p class=PreformattedText>     [Ö]  153  09/09  231  99  O diaeresis</p>
!   <p class=PreformattedText>     [Ü]  154  09/10  232  9A  U diaeresis</p>
!   <p class=PreformattedText>     [ø]  155  09/11  233  9B  o slash</p>
!   <p class=PreformattedText>     [£]  156  09/12  234  9C  Pound sterling sign</p>
!   <p class=PreformattedText>     [Ø]  157  09/13  235  9D  O slash</p>
!   <p class=PreformattedText>     [×]  158  09/14  236  9E  Multiplication sign</p>
!   <p class=PreformattedText>     [ƒ]  159  09/15  237  9F  Florin sign</p>
    </td>
   </tr>
  </table>
  
! <p class=PreformattedText>&nbsp;</p>
  
  <p class=MsoNormal>OpenAFS 1.4 provides an optional registry value, <i><a
! href="../../oafw-1-4-release-notes.doc#_Value___: StoreAnsiFilenames">StoreAnsiFilenames</a></i>,
! that can be set to instruct OpenAFS to store filenames using the ANSI Code Page
! instead of the OEM Code Page.  The ANSI Code Page is a compatible superset of
! Latin-1.  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>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993117"></a><a
! name="_Toc126872198"></a><a name="_Toc115417069"></a><a name="_Toc115416133">3.27.
! Known Character Set Issues with Roaming Profiles</a></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
! be represented in the local OEM character set.  In this case, attempts to write
! the profile back to AFS will fail.  OpenAFS for Windows does not currently
! support UNICODE.  To avoid this problem some sites run logoff scripts (assigned
! by group policy) which rename all files to use only the supported characters
! for the locale.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993118"></a><a
! name="_Toc126872199"></a><a name="_Toc115417070"></a><a name="_Toc115416134">3.28.
! The AFSCache File</a></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.  The
! persistent nature of the data stored in the cache file improves the performance
! of OpenAFS by reducing the number of times data must be read from the AFS file
! servers.  </p>
  
  <p class=MsoNormal>The performance of the AFS Client Service is significantly
! affected by the access times associated with the AFSCache paging file.   When
! given the choice, the AFSCache file should be placed on a fast disk, preferably
! NTFS, the file should not be compressed and should consist of as few fragments
! as possible.   Significant performance gains can be achieved by defragmenting
! the AFSCache file with Sysinternal's Contig utility.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993119"></a><a
! name="_Toc126872200"></a><a name="_Toc115417071"></a><a name="_Toc115416135">3.29.
! Restricting OpenAFS Client Service Start and Stop</a></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>
  
! <p class=PreformattedText>    afsdacl : Set or reset the DACL to allow starting
! or stopping</p>
  
! <p class=PreformattedText>         the afsd service by any ordinary user.</p>
  
! <p class=PreformattedText>&nbsp;</p>
  
! <p class=PreformattedText>    Usage : afsdacl [-set | -reset] [-show]</p>
  
! <p class=PreformattedText>          -set   : Sets the DACL</p>
  
! <p class=PreformattedText>          -reset : Reset the DACL</p>
  
! <p class=PreformattedText>          -show  : Show current DACL (SDSF)</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993120"></a><a
! name="_Toc126872201"></a><a name="_Toc115417072"></a><a name="_Toc115416136">3.30.
! The @sys Name List</a></h2>
  
  <p class=MsoNormal>The default @sys name list in OpenAFS 1.4 is set to
! &quot;x86_win32 i386_w2k i386_nt40&quot; for 32-bit x86 systems.  The default
! for itanium will be &quot;ia64_win64&quot; and &quot;amd64_win64&quot; for amd
! 64-bit processors when those platforms are supported.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993121"></a><a
! name="_Toc126872202"></a><a name="_Toc115417073"></a><a name="_Toc115416137">3.31.
! Symlinks to AFS UNC paths</a></h2>
  
  <p class=MsoNormal>In OpenAFS 1.4, symlinks to AFS UNC paths, \\AFS[\all]\...,
! are treated the same as symlinks to /afs/...  However, please use /afs/... as
! the Windows UNC form will not work on UNIX.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993122"></a><a
! name="_Toc126872203"></a><a name="_Toc115417074"></a><a name="_Toc115416138">3.32.
! Cache Manager Debugging Now Supported</a></h2>
  
  <p class=MsoNormal>OpenAFS for Windows 1.4 implements the Cache Manager
! Debugging RPC Interface.  The CM debugger can be queried with cmdebug.exe.</p>
  
  <p class=PreformattedText>Usage: cmdebug -servers &lt;server machine&gt; [-port
  &lt;IP port&gt;] [-long]</p>
  
! <p class=PreformattedText>               [-addrs] [-cache] [-help]</p>
  
! <p class=PreformattedText>Where: -long   print all info</p>
  
! <p class=PreformattedText>       -addrs  print only host interfaces</p>
  
! <p class=PreformattedText>       -cache  print only cache configuration</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993123"></a><a
! name="_Toc126872204"></a><a name="_Toc115417075"></a><a name="_Toc115416139">3.33.
! Windows Logon Caching vs. Kerberos Logons</a></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
  multi-domain Windows forest, you must enable Windows logon caching unless the
! workstation is Windows Vista Beta 2 or later.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993124"></a><a
! name="_Toc126872205"></a><a name="_Toc115417076"></a><a name="_Toc115416140">3.34.
! Initial Server Preferences</a></h2>
  
  <p class=MsoNormal>VLDB and File Server Preferences can now be provided initial
! values using registry keys.  This is useful for managed machines in a Windows
! domain which are centrally located (e.g., in a computing lab.)  See <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>
! for details on the &quot;<a
! href="../../oafw-1-4-release-notes.doc#_Regkey:_[HKLMSOFTWAREOpenAFSClie_2">Server
! Preferences</a>&quot; keys.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993125"></a><a
! name="_Toc126872206"></a><a name="_Toc115417077"></a><a name="_Toc115416141">3.35.
! File Timestamps</a></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 reports timestamps on files stored in AFS in UTC
! all year round.  In locales with daylight savings time, previous versions of
! AFS for Windows reported the time when DST is active as UTC+1.  This was done
! to preserve the relative local time for the user.  A file stored at 11:00am EST
! in January would be reported as having been stored at 11:00am EDT in June. 
! Unfortunately, this has the negative side effect of changing the reported
! timestamp from 16:00UTC to 15:00UTC.  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.  They do
! preserve the relative local time.  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.  During DST, these two times will no longer agree even
! though they are in fact representing the same moment in time.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993126"></a><a
! name="_Toc126872207"></a><a name="_Toc115417078"></a><a name="_Toc115416142">3.36.
! Windows RPC client support must be installed</a> </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
  are present and that they refer to the dll &quot;rpcrt4.dll&quot;:</p>
  
! <p class=PreformattedText>   HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_np&quot;</p>
  
! <p class=PreformattedText>   HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_ip_tcp&quot;</p>
  
! <p class=PreformattedText>   HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncadg_ip_udp&quot;</p>
  
! <p class=PreformattedText>   HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_http&quot;</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993127"></a><a
! name="_Toc126872208"></a><a name="_Toc115417079"></a><a name="_Toc115416143">3.37.
! Generating Minidumps of the OpenAFS Client Service</a></h2>
! 
! <p class=MsoNormal>OpenAFS 1.4 adds a new command, &quot;fs minidump&quot;. 
! This command can be used at any time to generate a mini dump file containing
! the current stack of the afsd_service.exe process.   This output can be very
! helpful when debugging the AFS Client Service when it is unresponsive to
! SMB/CIFS requests.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993128"></a><a
! name="_Toc126872209"></a><a name="_Toc115417080"></a><a name="_Toc115416144">3.38.
! AFS Client Universally Unique Identifiers</a></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows 1.4 client implements Universally
! Unique Identifiers (UUIDs).  They are used to provide the server with a method
! of identifying the client that is independent of IP address.  The UUID is
  generated when the AFSCache file is created and is maintained as long as the
! contents of the AFSCache file are kept intact.  The UUID is stored in the
! AFSCache file.   When cloning machines that have Windows AFS client installed,
! the AFSCache files should be deleted as part of the cloning process.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993129">3.39.
! Delayed Write Errors with Microsoft Office Applications</a></h2>
! 
! <p class=MsoBodyText>Microsoft Office makes heavy use of asynchronous
! input/output methods for reading and writing to file streams.  This can result
! in hundreds of requests being simultaneously queued for service by the CIFS
! client with a fixed timeout period.  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.  When the actual network bandwidth
! to the AFS file server is slow and the file size is large it is possible for
! the CIFS client to time out the connection.  When this happens a “delayed write
! error” will be reported to the user and the application may crash.  The only
! workaround at the current time is to save first to a local disk and
! subsequently copy the file to AFS as copying a file with the explorer shell
! does not use asynchronous i/o.</p>
! 
! <p class=MsoBodyText>The CIFS session timeout defaults to 45 seconds and can be
! increased by modifying the <a href="../relnotes.htm#_Value:_ConnDeadTimeout">registry</a>.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993130">3.40.
! Global Drives (aka </a>Service Drive Letters) are no longer supported by
! Microsoft</h2>
! 
! <p class=MsoBodyText>The Global DriveAuto-mount feature has been deprecated due
! to the following Microsoft KB article.</p>
! 
! <p class=MsoBodyText style='text-indent:35.45pt'><a
! href="http://msdn.microsoft.com/library/en-us/dllproc/base/services_and_redirected_drives.asp">http://msdn.microsoft.com/library/en-us/dllproc/base/services_and_redirected_drives.asp</a></p>
! 
! <p class=MsoBodyText>It says that services mounting drive letters are no longer
! supported by Microsoft and may act unpredictably.  The experience other users
! have had is that if the connection to the OpenAFS CIFS/SMB server is terminated
! by the Windows CIFS client, the drive mapping may not be re-established until
! the machine is rebooted.</p>
! 
! <p class=MsoBodyText>OpenAFS supports UNC paths and whenever possible
! applications should be modified to use of \\AFS\&lt;cellname&gt;\&lt;path&gt;
! instead of drive letters.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993131">3.41.
! 64-bit Microsoft Windows Installations</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 64-bit. 
! The 64-bit installer contains only 64-bit executables.  In order to support
! 32-bit applications that link against OpenAFS libraries it is required that a
! separate 32-bit OpenAFS Tools set be installed.</p>
! 
! <p class=MsoBodyText>OpenAFS on 64-bit Windows benefits from the lifting of the
! 2GB process memory restriction that is present on 32-bit Windows.   Without
! this restriction the AFS Cache File can become arbitrarily large limited only
! by available disk space.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993132">3.42. Known
! Issues with Microsoft Windows </a>Vista</h2>
! 
! <p class=MsoBodyText>OpenAFS for Windows is known to work with Vista and Longhorn Server Beta 2 from the command prompt.  There are still issues with the
! Explorer Shell that Secure Endpoints Inc. and Microsoft are working to resolve.</p>
! 
! <p class=MsoBodyText>&nbsp;</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993133"></a><a
! name="_Toc126872210"></a><a name="_Toc115417112"></a><a name="_Toc115417081"></a><a
! name="_Toc115416145">4. How to Debug Problems with OpenAFS for Windows:</a></h1>
  
  <p class=MsoNormal>OpenAFS for Windows provides a wide range of tools to assist
! you in debugging problems.  The techniques available to you are varied because
! of the wide range of issues that have been discovered over the years.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993134"></a><a
! name="_Toc126872211"></a><a name="_Toc115417082"></a><a name="_Toc115416146">4.1.
! pioctl debugging (</a><a
! href="../../oafw-1-4-release-notes.doc#_Value___: IoctlDebug">IoctlDebug</a>
! registry key)</h2>
  
  <p class=MsoNormal>pioctl (path-based ioctl) calls are used by various tools to
! communicate with the AFS Client Service.  Some of the operations performed
! include:</p>
  
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>setting/querying tokens  (tokens.exe, aklog.exe, afscreds.exe)</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>setting/querying ACLs </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>setting/querying cache parameters</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>flushing files or volumes</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>setting/querying server preferences</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>querying path location</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>checking the status of servers and volumes</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>setting/querying the sysname list</p>
  
  <p class=MsoNormal>pioctl calls are implemented by writing to a special UNC
! path that is processed by the AFS Client Service.   If there is a failure to
! communicate with the AFS Client Service via SMB/CIFS, it will be impossible to
! perform any of the above operations.   </p>
  
  <p class=MsoNormal>To assist in debugging these problems, the registry value:</p>
  
! <p class=PreformattedText>  [HKLM\SOFTWARE\OpenAFS\Client]</p>
! 
! <p class=PreformattedText>  REG_DWORD:  IoctlDebug   = 0x01</p>
  
! <p class=MsoNormal>should be set.  Then any of the commands that perform pioctl
! calls should be executed from the command prompt.  With this key set the pioctl
! library will generate debugging output to stderr.  The output will contain the
! Win32 API calls executed along with their most important parameters and their
! return code.   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='margin-left:0pt;text-indent:0pt'><a name="_Toc139993135"></a><a
! name="_Toc126872212"></a><a name="_Toc115417083"></a><a name="_Toc115416147">4.2.
! afsd_service initialization log (%WinDir%\TEMP\afsd_init.log)</a></h2>
  
  <p class=MsoNormal>Every time the AFS Client Service starts it appends data
! about its progress and configuration to a file.  This file provides information
! crucial to determining why the service cannot start when there are problems. 
! When the process terminates due to a panic condition it will write to this file
! the source code file and line number of the error.  In many cases the panic
! condition is due to a misconfiguration of the machine.  In other cases it might
! be due to a programming error in the software.  A quick review of the location
! in the source code will quickly reveal the reason for the termination.</p>
! 
! <p class=MsoNormal>The <i><a
! href="../../oafw-1-4-release-notes.doc#_Value___: MaxLogSize">MaxLogSize</a></i>
! registry value determines the maximum size of the %WINDIR%\TEMP\afsd_init.log
! file.  If the file is larger than this value when OpenAFS Client Service
! starts, the file will be reset to 0 bytes.  If value is set to 0, the file will
! be allowed to grow indefinitely.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993136"></a><a
! name="_Toc126872213"></a><a name="_Toc115417084"></a><a name="_Toc115416148">4.3.
! afsd_service debug logs (fs trace {-on, -off, -dump}
! -&gt;%WinDir%\TEMP\afsd.log)</a></h2>
  
  <p class=MsoNormal>When attempting to debug the behavior of the SMB/CIFS Server
  and the Cache Manager it is often useful to examine a log of the operations
! being performed.  While running the AFS Client Service keeps an in memory log
! of many of its actions.   The default number of actions preserved at any one
! time is 5000.  This can be adjusted with the <a
! href="../../oafw-1-4-release-notes.doc#_Value_:_TraceBufferSize">registry value</a>:</p>
  
! <p class=PreformattedText> 
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
  
! <p class=PreformattedText>  REG_DWORD  TraceBufferSize </p>
  
  <p class=MsoNormal>A restart of the service is necessary when adjusting this
! value.   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='margin-left:0pt;text-indent:0pt'><a name="_Toc139993137"></a><a
! name="_Toc126872214"></a><a name="_Toc115417085"></a><a name="_Toc115416149">4.4.
! Using SysInternal’s DbgView and FileMon Tools</a></h2>
! 
! <p class=MsoNormal>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 DbgView to capture real-time debugging output.  When the OpenAFS
! Client Service starts and Bit 2 of the <a
! href="../../oafw-1-4-release-notes.doc#_Value__:_TraceOption">TraceOption</a>
! value in the registry is set, all trace log events are output using the Windows
! Debug Monitor interface (OutputDebugString).  </p>
  
! <p class=PreformattedText> 
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
! 
! <p class=PreformattedText style='text-indent:12.0pt'>REG_DWORD   TraceOption =
! 0x04</p>
  
  <p class=MsoNormal>Use “fs trace –on” and “fs trace –off” to toggle the
  generation of log messages. </p>
  
! <p class=MsoNormal><a name="_Toc126872215"></a><a name="_Toc115417086"></a><a
! name="_Toc115416150">Sysinternal’s FileMon utility can be use to monitor the
! file operations requested by applications and their success or failure.   Use
! the Volumes menu to restrict FileMon monitor to <i>Network</i> volumes only in
! order to reduce the output to just the CIFS requests.  Turn on the <i>Advanced
! Output</i> option in order to log with finer granularity.</a></p>
! 
! <p class=MsoNormal>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.   The captured data can be
! stored to files for inclusion in <a href="../relnotes.htm#_5._Reporting_Bugs:">bug
! reports</a>.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993138">4.5. Microsoft
  MiniDumps <br>
! (fs minidump -&gt; %WinDir%\TEMP\afsd.dmp)</a></h2>
  
  <p class=MsoNormal>If the AFS Client Service become unresponsive to any form of
  communication there may be a serious error that can only be debugged by someone
! with access to the source code and a debugger.   The &quot;fs minidump&quot;
! command can be used to force the generation of a MiniDump file containing the
! state of all of the threads in the AFS Client Service process.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993139"></a><a
! name="_Toc126872216"></a><a name="_Toc115417087"></a><a name="_Toc115416151">4.6.
! Single Sign-on (Integrated Logon) debugging</a></h2>
  
  <p class=MsoNormal>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.   Setting Bit 0 of the <a
! href="../../oafw-1-4-release-notes.doc#_Value__:_TraceOption">TraceOption</a> registry
! value:</p>
  
! <p class=PreformattedText> 
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
  
! <p class=PreformattedText>  REG_DWORD   TraceOption = 0x01</p>
  
  <p class=MsoNormal>will instruct the Integrated Logon Network Provider and
  Event Handlers to log information to the Windows Event Log: Application under
  the name “AFS Logon&quot;.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993140"></a><a
! name="_Toc126872217"></a><a name="_Toc115417088"></a><a name="_Toc115416152">4.7.
! RX (AFS RPC) debugging (rxdebug)</a></h2>
  
  <p class=MsoNormal>The rxdebug.exe tool can be used to query a variety of
! information about the AFS services installed on a given machine.  The port for
! the AFS Cache Manager is 7001.  </p>
  
  <p class=PreformattedText>Usage: rxdebug -servers &lt;server machine&gt; [-port
  &lt;IP port&gt;] [-nodally] </p>
  
! <p class=PreformattedText style='margin-left:35.45pt;text-indent:35.45pt'>  
! [-allconnections] [-rxstats] [-onlyserver] [-onlyclient] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'>   [-onlyport &lt;show
! only &lt;port&gt;&gt;] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'>   [-onlyhost &lt;show
! only &lt;host&gt;&gt;] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'>   [-onlyauth &lt;show
! only &lt;auth level&gt;&gt;] [-version] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'>   [-noconns] [-peers]
! [-help]</p>
  
! <p class=PreformattedText>Where: -nodally         don't show dallying conns</p>
  
! <p class=PreformattedText>       -allconnections  don't filter out
  uninteresting connections</p>
  
! <p class=PreformattedText>       -rxstats         show Rx statistics</p>
! 
! <p class=PreformattedText>       -onlyserver      only show server conns</p>
! 
! <p class=PreformattedText>       -onlyclient      only show client conns</p>
! 
! <p class=PreformattedText>       -version         show AFS version id</p>
! 
! <p class=PreformattedText>       -noconns         show no connections</p>
! 
! <p class=PreformattedText>       -peers           show peers</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993141"></a><a
! name="_Toc126872218"></a><a name="_Toc115417089"></a><a name="_Toc115416153">4.8.
! Cache Manager debugging (cmdebug)</a></h2>
  
  <p class=MsoNormal>The cmdebug.exe tool can be used to query the state of the
  AFS Cache Manager on a given machine.</p>
***************
*** 4303,4447 ****
  <p class=PreformattedText>Usage: cmdebug -servers &lt;server machine&gt; [-port
  &lt;IP port&gt;] [-long] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'><span
! style='mso-spacerun:yes'>   </span>[-refcounts] [-callbacks] [-addrs] [-cache]
! [-help]</p>
  
! <p class=PreformattedText>Where: -long<span style='mso-spacerun:yes'>      
! </span>print all info</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>  </span><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>-addrs<span style='mso-spacerun:yes'>      </span>print only host
! interfaces</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>      
! </span>-cache<span style='mso-spacerun:yes'>      </span>print only cache
! configuration</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417090"></a><a
! name="_Toc115416154"><span style='mso-bookmark:_Toc115417090'>4.9. Persistent
! Cache consistency check</span></a></h2>
  
  <p class=MsoNormal>The persistent cache is stored in a Hidden System file at
! %WinDir%\TEMP\AFSCache.<span style='mso-spacerun:yes'>  </span>If there is a
! problem with the persistent cache that prevent the AFS Client Service from
! being able to start a validation check on the file can be performed.</p>
! 
! <p class=PreformattedText><span style='mso-spacerun:yes'>  </span>afsd_service.exe
! --validate-cache &lt;cache-path&gt;</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417113"></a><a
! name="_Toc115417091"></a><a name="_Toc115416155"><span style='mso-bookmark:
! _Toc115417091'><span style='mso-bookmark:_Toc115417113'>5. Reporting Bugs:</span></span></a></h1>
  
  <p class=MsoNormal>Bug reports should be sent to <a
! href="mailto:openafs-bugs@openafs.org?subject=Bug%20Report">openafs-bugs@openafs.org</a>.<span
! style='mso-spacerun:yes'>  </span>Please include as much information as
! possible about the issue.<span style='mso-spacerun:yes'>  </span>If you are
  reporting a crash, please install the debugging symbols by re-running the
! installer.<span style='mso-spacerun:yes'>  </span>If a dump file is available
! for the problem, %WINDIR%\TEMP\afsd.dmp, include it along with the AFS Client
! Trace file<span style='mso-spacerun:yes'>  </span>%WINDIR%\TEMP\afsd.log.<span
! style='mso-spacerun:yes'>  </span>The AFS Client startup log is
! %WINDIR%\TEMP\afsd_init.log.<span style='mso-spacerun:yes'>  </span>Send the
! last continuous block of<span style='mso-spacerun:yes'>  </span>log information
  from this file.</p>
  
  <p class=MsoNormal>Configuring DrWatson to generate dump files for crashes:</p>
  
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l8 level1 lfo20;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>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;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>click
! Start &gt; Run...<span style='mso-spacerun:yes'>  </span></p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>type
! drwtsn32 &lt;enter&gt;. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Select
! either a Crash Dump Type: Mini or Full. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Clear
! Dump Symbol Table</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Clear
! Append to Existing Log file. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Check
! Dump All Thread Contexts.</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Check
! Create Crash Dump File</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;mso-list:
! l9 level1 lfo22;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Next
! run the monitoring module of Dr. Watson: </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l10 level1 lfo24;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>click
! Start &gt; Run...</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l10 level1 lfo24;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>type
! drwatson &lt;enter&gt;. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;mso-list:
! l10 level1 lfo24;tab-stops:list 14.15pt'><![if !supportLists]><span
! style='font-size:9.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
! mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>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>
  
  <p class=MsoNormal>Once you have the Dr. Watson's logfile and minidump, zip
  them and attach them to your e-mail.</p>
--- 1742,1839 ----
  <p class=PreformattedText>Usage: cmdebug -servers &lt;server machine&gt; [-port
  &lt;IP port&gt;] [-long] </p>
  
! <p class=PreformattedText style='margin-left:70.9pt'>   [-refcounts]
! [-callbacks] [-addrs] [-cache] [-help]</p>
! 
! <p class=PreformattedText>Where: -long       print all info</p>
! 
! <p class=PreformattedText>       -refcounts  print only cache entries with
! positive reference counts</p>
! 
! <p class=PreformattedText>       -callbacks  print only cache entries with
! callbacks</p>
  
! <p class=PreformattedText>       -addrs      print only host interfaces</p>
  
! <p class=PreformattedText>       -cache      print only cache configuration</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993142"></a><a
! name="_Toc126872219"></a><a name="_Toc115417090"></a><a name="_Toc115416154">4.9.
! Persistent Cache consistency check</a></h2>
  
  <p class=MsoNormal>The persistent cache is stored in a Hidden System file at
! %WinDir%\TEMP\AFSCache.  If there is a problem with the persistent cache that
! prevent the AFS Client Service from being able to start a validation check on
! the file can be performed.</p>
! 
! <p class=PreformattedText>  afsd_service.exe --validate-cache
! &lt;cache-path&gt;</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993143"></a><a
! name="_Toc126872220"></a><a name="_Toc115417113"></a><a name="_Toc115417091"></a><a
! name="_Toc115416155"></a><a name="_5._Reporting_Bugs:"></a>5. Reporting Bugs:</h1>
  
  <p class=MsoNormal>Bug reports should be sent to <a
! href="mailto:openafs-bugs@openafs.org?subject=Bug%20Report">openafs-bugs@openafs.org</a>. 
! Please include as much information as possible about the issue.  If you are
  reporting a crash, please install the debugging symbols by re-running the
! installer.  If a dump file is available for the problem,
! %WINDIR%\TEMP\afsd.dmp, include it along with the AFS Client Trace file 
! %WINDIR%\TEMP\afsd.log.  The AFS Client startup log is
! %WINDIR%\TEMP\afsd_init.log.  Send the last continuous block of  log information
  from this file.</p>
  
  <p class=MsoNormal>Configuring DrWatson to generate dump files for crashes:</p>
  
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>click Start &gt; Run...  </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>type drwtsn32 &lt;enter&gt;. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Select either a Crash Dump Type: Mini or Full. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Clear Dump Symbol Table</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Clear Append to Existing Log file. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Check Dump All Thread Contexts.</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Check Create Crash Dump File</p>
! 
! <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>Next run the monitoring module of Dr. Watson: </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>click Start &gt; Run...</p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span>type drwatson &lt;enter&gt;. </p>
! 
! <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
! style='font-size:9.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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>
  
  <p class=MsoNormal>Once you have the Dr. Watson's logfile and minidump, zip
  them and attach them to your e-mail.</p>
***************
*** 4449,4617 ****
  <p class=MsoNormal>When reporting a error, please be sure to include the
  version of OpenAFS.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417114"></a><a
! name="_Toc115417092"></a><a name="_Toc115416156"><span style='mso-bookmark:
! _Toc115417092'><span style='mso-bookmark:_Toc115417114'>6. How to Contribute to
! the Development of OpenAFS for Windows</span></span></a></h1>
  
  <p class=MsoNormal>Contributions to the development of OpenAFS for Windows are
! continuously needed.<span style='mso-spacerun:yes'>  </span>Contributions may
! take many forms including cash donations, support contracts, donated developer
! time, and even donated tech writer time.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417093"></a><a
! name="_Toc115416157"><span style='mso-bookmark:_Toc115417093'>6.1. The USENIX
! OpenAFS Fund</span></a> </h2>
  
  <p class=MsoBodyText><a href="http://www.usenix.org/">USENIX</a>, a 501c3
  non-profit corporation, has formed the USENIX OpenAFS Fund in order to accept
  tax deductible donations on behalf of the OpenAFS Elders. The donated funds
! will be allocated by the OpenAFS Elders to fund OpenAFS development, documentation,
! project management, and maintaining openafs.org. </p>
  
! <div style='mso-element:frame;mso-element-frame-height:66.05pt;mso-element-wrap:
! no-wrap-beside;mso-element-anchor-vertical:page;mso-element-anchor-horizontal:
! column;mso-element-left:.05pt;mso-element-top:372.8pt;mso-height-rule:exactly'>
  
  <table cellspacing=0 cellpadding=0 hspace=0 vspace=0 width=540 height=88>
   <tr>
    <td valign=top align=left height=88 style='padding-top:0pt;padding-right:
    9.0pt;padding-bottom:0pt;padding-left:9.0pt'>
!   <p class=MsoEnvelopeAddress style='mso-element:frame;mso-element-frame-height:
!   66.05pt;mso-element-wrap:no-wrap-beside;mso-element-anchor-vertical:page;
!   mso-element-anchor-horizontal:column;mso-element-left:.05pt;mso-element-top:
!   372.8pt;mso-height-rule:exactly'>USENIX OpenAFS Fund<br>
    USENIX Association <br>
! <st2:address w:st="on"><st2:Street w:st="on">2560 Ninth St., Suite 215</st2:Street>
!    <br>
! <st2:City w:st="on">Berkeley</st2:City>, <st2:State w:st="on">CA</st2:State> <st2:PostalCode
!    w:st="on">94710</st2:PostalCode></st2:address> </p>
    </td>
   </tr>
  </table>
  
  </div>
  
! <![if !supportTextWrap]><br clear=ALL>
! <![endif]>
  
  <p class=MsoBodyText>Donations 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">donation online</a>.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417094">6.2. Secure
! Endpoints Inc.</a> </h2>
  
  <p class=MsoBodyText><a href="http://www.secure-endpoints.com/">Secure
  Endpoints Inc.</a> provides development and support services for OpenAFS for
! Windows and MIT Kerberos for Windows.<span style='mso-spacerun:yes'> 
! </span>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>Secure Endpoints Inc. accepts software development
! agreements from organizations who wish to fund a well-defined set of bug fixes
! or new features. </p>
  
  <p class=MsoBodyText>Secure Endpoints Inc. provides contract based support for
  the OpenAFS for Windows and the MIT Kerberos for Windows products. </p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417095">6.3. The
! MIT Kerberos Account</a> </h2>
! 
! <p class=MsoNormal style='margin:0pt;margin-bottom:.0001pt;mso-pagination:widow-orphan;
! mso-hyphenate:auto;mso-layout-grid-align:none;text-autospace:none'><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! color:black'>Th</span><span class=BodyTextChar>e <a
! href="http://web.mit.edu/kerberos/">MIT Kerberos</a> development team accepts
! unrestricted grants.<span style='mso-spacerun:yes'>  </span>Grants are tax
! deductible and the full amount of the grant will be used to fund the
! development of Kerberos 5 and/or Kerberos for Windows.<span
! style='mso-spacerun:yes'>  </span>OpenAFS for Windows is dependent on MIT
! Kerberos for Windows for authentication and shares many of the same re</span><span
! style='font-family:"Times New Roman";mso-fareast-font-family:"MS Mincho";
! color:black'>quirements for credential management.<span
! style='mso-spacerun:yes'>  </span>Future releases of both products will share a
! common identity management user interface. <o:p></o:p></span></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417096">6.4. Direct
! contributions of code and/or documentation</a> </h2>
  
  <p class=MsoBodyText>Organizations that use OpenAFS in house and have
  development staffs are encouraged to contribute any code modifications they
! make to OpenAFS.org via <u><span style='color:blue'>openafs-bugs@openafs.org</span></u>.<span
! style='mso-spacerun:yes'>  </span>Contributions of documentation are highly
! desired. </p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417097">6.5.
! OpenAFS for Windows Mailing Lists</a></h2>
  
  <p class=MsoNormal>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">openafs-win32-devel@openafs.org</a></i>
  mailing list.</p>
  
! <p class=MsoNormal style='margin-left:35.45pt'><span class=MsoHyperlink>https://lists.openafs.org/mailman/listinfo/openafs-win32-devel<o:p></o:p></span></p>
  
  <p class=MsoNormal>User questions should be sent to the <a
  href="mailto:openafs-info@openafs.org?subject=OpenAFS%20for%20Windows%20User%20Question">openafs-info@openafs.org</a>
! mailing list.<span style='mso-spacerun:yes'>  </span></p>
  
! <p class=MsoNormal style='margin-left:35.45pt'><span class=MsoHyperlink>https://lists.openafs.org/mailman/listinfo/openafs-info<o:p></o:p></span></p>
  
  <p class=MsoNormal>You must join the mailing lists if you wish to post to the
  list without incurring a moderation delay.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417115"></a><a
! name="_Toc115417098"></a><a name="_Toc115416158"></a><a
! name="_MSI_Deployment_Guide"></a><![if !supportLists]><span style='mso-bookmark:
! _Toc115417115'><span style='mso-bookmark:_Toc115417098'><span style='mso-bookmark:
! _Toc115416158'></span></span></span><![endif]><span style='mso-bookmark:_Toc115417115'><span
! style='mso-bookmark:_Toc115417098'><span style='mso-bookmark:_Toc115416158'>7.
! MSI Deployment Guide</span></span></span></h1>
  
  </div>
  
! <b><span style='font-size:16.0pt;font-family:Albany;mso-fareast-font-family:
! "MS Mincho";mso-bidi-font-family:Tahoma;mso-ansi-language:EN-US;mso-fareast-language:
! JA;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always;
! mso-break-type:section-break'>
  </span></b>
  
  <div class=Section2>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417099"></a><a
! name="_Toc115416159"><span style='mso-bookmark:_Toc115417099'>7.1. Introduction</span></a></h2>
  
  <p class=MsoNormal>A MSI installer option is available for those who wish to
  use Windows Installer for installing OpenAFS and for organizations that wish to
! deploy OpenAFS through Group Policy.<span style='mso-spacerun:yes'>  </span>The
! first version of OpenAFS for Windows available as an MSI was 1.3.65.</p>
  
  <p class=MsoNormal>This document provides a guide for authoring transforms used
! to customize the MSI package for a particular organization.<span
! style='mso-spacerun:yes'>  </span>Although many settings can be deployed via
! transforms, in an Active Directory environment it is advisable to deploy
! registry settings<span style='mso-spacerun:yes'>    </span>and configuration
! files through group policy and/or startup scripts so that machines where
! OpenAFS for Windows is already installed will pick up these customizations.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416160">7.1.1
! Requirements</a></h3>
  
  <p class=MsoNormal>The information in this document applies to MSI packages
  distributed with OpenAFS for Windows releases from 1.3.65 and onwards or MSI
! packages built from corresponding source releases.<span
! style='mso-spacerun:yes'>  </span>Not all releases support all the
! configuration options documented here.</p>
  
  <p class=MsoNormal>Authoring a &quot;Windows Installer&quot; transform requires
  additional software for editing the MSI database tables and generating the
! transform from the modified MSI package.<span style='mso-spacerun:yes'> 
! </span>ORCA.EXE and MSITRAN.EXE which are included in the Windows Platform SDK
! (&quot;Windows Installer&quot; SDK) can be used for this purpose.</p>
  
  <p class=MsoNormal>For reference, the schema for the MSI package is based on
  SCHEMA.MSI distributed with the Platform SDK.</p>
--- 1841,1993 ----
  <p class=MsoNormal>When reporting a error, please be sure to include the
  version of OpenAFS.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993144"></a><a
! name="_Toc126872221"></a><a name="_Toc115417114"></a><a name="_Toc115417092"></a><a
! name="_Toc115416156">6. How to Contribute to the Development of OpenAFS for
! Windows</a></h1>
  
  <p class=MsoNormal>Contributions to the development of OpenAFS for Windows are
! continuously needed.  Contributions may take many forms including cash
! donations, support contracts, donated developer time, and even donated tech
! writer time.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993145"></a><a
! name="_Toc126872222"></a><a name="_Toc115417093"></a><a name="_Toc115416157">6.1.
! The USENIX OpenAFS Fund</a> </h2>
  
  <p class=MsoBodyText><a href="http://www.usenix.org/">USENIX</a>, a 501c3
  non-profit corporation, has formed the USENIX OpenAFS Fund in order to accept
  tax deductible donations on behalf of the OpenAFS Elders. The donated funds
! will be allocated by the OpenAFS Elders to fund OpenAFS development,
! documentation, project management, and maintaining openafs.org. </p>
  
! <div>
  
  <table cellspacing=0 cellpadding=0 hspace=0 vspace=0 width=540 height=88>
   <tr>
    <td valign=top align=left height=88 style='padding-top:0pt;padding-right:
    9.0pt;padding-bottom:0pt;padding-left:9.0pt'>
!   <p class=MsoEnvelopeAddress>USENIX OpenAFS Fund<br>
    USENIX Association <br>
!     2560 Ninth St., Suite 215 <br>
!     Berkeley, CA 94710 </p>
    </td>
   </tr>
  </table>
  
  </div>
  
! <br clear=ALL>
  
  <p class=MsoBodyText>Donations 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">donation online</a>.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993146"></a><a
! name="_Toc126872223"></a><a name="_Toc115417094">6.2. Secure Endpoints Inc.</a>
! </h2>
  
  <p class=MsoBodyText><a href="http://www.secure-endpoints.com/">Secure
  Endpoints Inc.</a> provides development and support services for OpenAFS for
! Windows and MIT Kerberos for Windows.  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>Secure Endpoints Inc. accepts software development agreements
! from organizations who wish to fund a well-defined set of bug fixes or new
! features. </p>
  
  <p class=MsoBodyText>Secure Endpoints Inc. provides contract based support for
  the OpenAFS for Windows and the MIT Kerberos for Windows products. </p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993147"></a><a
! name="_Toc126872224"></a><a name="_Toc115417095">6.3. The MIT Kerberos Account</a>
! </h2>
! 
! <p class=MsoNormal style='margin:0pt;margin-bottom:.0001pt;text-autospace:none'><span
! style='font-family:"Times New Roman";color:black'>Th</span><span
! class=BodyTextChar>e <a href="http://web.mit.edu/kerberos/">MIT Kerberos</a> development
! team accepts unrestricted grants.  Grants are tax deductible and the full
! amount of the grant will be used to fund the development of Kerberos 5 and/or
! Kerberos for Windows.  OpenAFS for Windows is dependent on MIT Kerberos for
! Windows for authentication and shares many of the same re</span><span
! style='font-family:"Times New Roman";color:black'>quirements for credential
! management.  Future releases of both products will share a common identity
! management user interface. </span></p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993148"></a><a
! name="_Toc126872225"></a><a name="_Toc115417096">6.4. Direct contributions of
! code and/or documentation</a> </h2>
  
  <p class=MsoBodyText>Organizations that use OpenAFS in house and have
  development staffs are encouraged to contribute any code modifications they
! make to OpenAFS.org via <u><span style='color:blue'>openafs-bugs@openafs.org</span></u>.
!  Contributions of documentation are highly desired. </p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993149"></a><a
! name="_Toc126872226"></a><a name="_Toc115417097">6.5. OpenAFS for Windows
! Mailing Lists</a></h2>
  
  <p class=MsoNormal>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">openafs-win32-devel@openafs.org</a></i>
  mailing list.</p>
  
! <p class=MsoNormal style='margin-left:35.45pt'><span class=MsoHyperlink>https://lists.openafs.org/mailman/listinfo/openafs-win32-devel</span></p>
  
  <p class=MsoNormal>User questions should be sent to the <a
  href="mailto:openafs-info@openafs.org?subject=OpenAFS%20for%20Windows%20User%20Question">openafs-info@openafs.org</a>
! mailing list.  </p>
  
! <p class=MsoNormal style='margin-left:35.45pt'><span class=MsoHyperlink>https://lists.openafs.org/mailman/listinfo/openafs-info</span></p>
  
  <p class=MsoNormal>You must join the mailing lists if you wish to post to the
  list without incurring a moderation delay.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993150"></a><a
! name="_Toc126872227"></a><a name="_Toc115417115"></a><a name="_Toc115417098"></a><a
! name="_Toc115416158"></a><a name="_MSI_Deployment_Guide"></a>7. MSI Deployment
! Guide</h1>
  
  </div>
  
! <b><span style='font-size:16.0pt;font-family:Albany'><br clear=all
! style='page-break-before:always'>
  </span></b>
  
  <div class=Section2>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993151"></a><a
! name="_Toc126872228"></a><a name="_Toc115417099"></a><a name="_Toc115416159">7.1.
! Introduction</a></h2>
  
  <p class=MsoNormal>A MSI installer option is available for those who wish to
  use Windows Installer for installing OpenAFS and for organizations that wish to
! deploy OpenAFS through Group Policy.  The first version of OpenAFS for Windows
! available as an MSI was 1.3.65.</p>
  
  <p class=MsoNormal>This document provides a guide for authoring transforms used
! to customize the MSI package for a particular organization.  Although many
! settings can be deployed via transforms, in an Active Directory environment it
! is advisable to deploy registry settings    and configuration files through
! group policy and/or startup scripts so that machines where OpenAFS for Windows
! is already installed will pick up these customizations.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993152"></a><a
! name="_Toc126872229"></a><a name="_Toc115416160">7.1.1 Requirements</a></h3>
  
  <p class=MsoNormal>The information in this document applies to MSI packages
  distributed with OpenAFS for Windows releases from 1.3.65 and onwards or MSI
! packages built from corresponding source releases.  Not all releases support
! all the configuration options documented here.</p>
  
  <p class=MsoNormal>Authoring a &quot;Windows Installer&quot; transform requires
  additional software for editing the MSI database tables and generating the
! transform from the modified MSI package.  ORCA.EXE and MSITRAN.EXE which are
! included in the Windows Platform SDK (&quot;Windows Installer&quot; SDK) can be
! used for this purpose.</p>
  
  <p class=MsoNormal>For reference, the schema for the MSI package is based on
  SCHEMA.MSI distributed with the Platform SDK.</p>
***************
*** 4619,6025 ****
  <p class=MsoNormal>For general information about &quot;Windows Installer&quot;,
  refer to:</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp">http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp</a></p>
  
  <p class=MsoNormal>For general information about authoring MSI transforms,
  refer to:</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp">http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp</a></p>
  
  <p class=MsoNormal>The remainder of this document assumes some familiarity with
! authoring transforms.<span style='mso-spacerun:yes'>  </span>While the MSDN
! documentation for Windows Installer is a bit dense, the guide on MSI transforms
! found at the second link above is recommended reading.<span
! style='mso-spacerun:yes'>  </span>MSDN also includes a step-by-step example for
! creating a transform at:</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp">http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp</a></p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416161">7.1.2
! Authoring a Transform</a></h3>
  
  <p class=MsoNormal>Transforms describe a set of modifications to be performed
! on an existing MSI for the purpose of customizing it.<span
! style='mso-spacerun:yes'>  </span>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.<span style='mso-spacerun:yes'>  </span>For
! example:</p>
! 
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt;
! mso-list:l17 level1 lfo26;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
! </span></span><![endif]>copy openafs.msi openafs-modified.msi</p>
! 
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt;
! mso-list:l17 level1 lfo26;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
! </span></span><![endif]>(edit the openafs-modified.msi to include the necessary
! changes)</p>
! 
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt;
! mso-list:l17 level1 lfo26;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
! </span></span><![endif]>msitran -g openafs.msi openafs-modified.msi
! openafs-transform.mst</p>
! 
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt;
! mso-list:l17 level1 lfo26;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
! </span></span><![endif]>(generates openafs-transform.mst, which is the
! transform)</p>
! 
! <p class=MsoNormal>Transforms have an extension of .mst.<span
! style='mso-spacerun:yes'>  </span>'msitran' is a tool distributed as part of
! the &quot;Windows Installer&quot; SDK (part of the Windows Platform SDK).</p>
  
  <p class=MsoNormal>You can test a transform by:</p>
  
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt;
! mso-list:l16 level1 lfo28;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
! </span></span><![endif]>copy openafs.msi openafs-test.msi</p>
! 
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt;
! mso-list:l16 level1 lfo28;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
! </span></span><![endif]>msitran -a openafs-transform.mst openafs-test.msi</p>
  
  <p class=MsoNormal>and then checking the resulting openafs-test.msi to see if
  all changes you have made above to openafs-modified.msi is present in
! openafs-test.msi.<span style='mso-spacerun:yes'>  </span>'msitran' will
! complain if some modification in the transform can not be successfully applied.</p>
  
  <p class=MsoNormal>As mentioned above, you can use a tool like ORCA.EXE to edit
! the MSI databases directly when editing openafs-modified.msi.<span
! style='mso-spacerun:yes'>  </span>More details are given below.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417100"></a><a
! name="_Toc115416162"><span style='mso-bookmark:_Toc115417100'>7.2.
! Configuration Options</span></a></h2>
  
  <p class=MsoNormal>The logic necessary to implement many of the settings
! described in <a href="#_Appendix_A:_Registry_Values">Appendix A</a> are present
! in the MSI.<span style='mso-spacerun:yes'>  </span>Most of these can be
! controlled by setting the corresponding properties to the desired value.<span
! style='mso-spacerun:yes'>  </span>Some settings may require modifying existing
! registry entries (though not recommended) or adding new resources (like files
! or registry keys).<span style='mso-spacerun:yes'>  </span>Instructions for
! performing these tasks are below.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416163">7.2.1
! Configurable Properties</a></h3>
  
  <p class=MsoNormal>Most configurable properties correspond to registry keys or
! values.<span style='mso-spacerun:yes'>  </span>Due to the logic invoked based
! on the existence of these registry keys or values, they are only set if the
! associated property is defined to have a non null value.<span
! style='mso-spacerun:yes'>  </span>If the associated property is not defined in
! the MSI, the registry key or value will not be touched.<span
! style='mso-spacerun:yes'>  </span>By default, the MSI does not contain these
! properties and hence will not set the registry keys.<span
! style='mso-spacerun:yes'>  </span>You will need to add properties as needed to
! the MSI.</p>
  
  <p class=MsoNormal>When one of the configurable properties is set, the
  installer will use the property value to set the corresponding setting in the
! HKEY_LOCAL_MACHINE registry hive.<span style='mso-spacerun:yes'>  </span>The
! HKEY_CURRENT_USER hive is not touched by the installer.</p>
  
  <p class=MsoNormal>For each property, the associated registry setting is
! referenced by the same text used in <a href="#_Appendix_A:_Registry_Values">Appendix
! A</a>.</p>
  
  <p class=MsoNormal>Strings are quoted using single quotes (e.g. 'a string'). An
! empty string is denoted as ''.<span style='mso-spacerun:yes'>  </span>Note that
! you can't author null values into the 'Property' table.</p>
  
  <p class=MsoNormal>Numeric values should be authored as decimal strings.</p>
  
! <h4><a name="_Toc115416164">7.2.1.1 Setting Properties</a></h4>
  
  <p class=MsoNormal>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;mso-list:l14 level1 lfo30;tab-stops:
! list 18.0pt'><![if !supportLists]><span style='font-size:9.0pt;mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>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;mso-list:l14 level1 lfo30;tab-stops:
! list 18.0pt'><![if !supportLists]><span style='font-size:9.0pt;mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>2.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>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;mso-list:l14 level1 lfo30;tab-stops:
! list 18.0pt'><![if !supportLists]><span style='font-size:9.0pt;mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>3.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>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;mso-list:l14 level1 lfo30;tab-stops:
! list 18.0pt'><![if !supportLists]><span style='font-size:9.0pt;mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>4.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>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>
  
! <h4><a name="_Toc115416165">7.2.1.2 OpenAFS for Windows Properties</a></h4>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5 style='mso-yfti-cnfc:1'><a name="_Toc115416166"></a><a
!   name="_(Service_parameters):"></a><span style='mso-bookmark:_Toc115416166'>(Service
!   parameters):</span></h5>
!   <p class=ListContents style='margin-left:0pt;mso-yfti-cnfc:1'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc115416167"></a><a name="_(Network_provider):"></a><span
!   style='mso-bookmark:_Toc115416167'>(Network provider):</span></h5>
    <p class=ListContents style='margin-left:0pt'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</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="_Toc115416168"></a><a name="_(OpenAFS_Client):"></a><span
!   style='mso-bookmark:_Toc115416168'>(OpenAFS Client):</span></h5>
    <p class=ListContents style='margin-left:0pt'>[HKLM\SOFTWARE\OpenAFS\Client]</p>
    </td>
   </tr>
  </table>
  
! <h5><a name="_Toc115416169">7.2.1.2.1 Registry Properties</a></h5>
  
  <p class=MsoNormal>These properties are used to set the values of registry
  entries associated with OpenAFS for Windows.</p>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6 style='mso-yfti-cnfc:1'><a name="_Toc115416170">AFSCACHEPATH</a></h6>
!   <p class=MsoList style='mso-yfti-cnfc:1'>Registry key<span
!   style='mso-spacerun:yes'>    </span>: <a href="#_(Service_parameters):">(Service
    parameters)</a></p>
!   <p class=MsoList style='mso-yfti-cnfc:1'>Registry value : <a
!   href="#_Value_:_CachePath">CachePath</a></p>
!   <p class=MsoList style='mso-yfti-cnfc:1'>Valid values<span
!   style='mso-spacerun:yes'>    </span>: string .</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc115416171">AFSCACHESIZE</a></h6>
!   <p class=MsoList>Registry key<span style='mso-spacerun:yes'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value : <a href="#_Value___:_CacheSize">CacheSize</a></p>
!   <p class=MsoList>Valid values<span style='mso-spacerun:yes'>    </span>:
!   numeric</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="_Toc115416172">AFSCELLNAME</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_Cell">Cell</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>:
!   string</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="_Toc115416173">FREELANCEMODE</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_FreelanceClient">FreelanceClient</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '1'
!   or '0'</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="_Toc115416174">HIDEDOTFILES</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_HideDotFiles">HideDotFiles</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '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="_Toc115416175">LOGONOPTIONS</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Network_provider):">(Network provider)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value___:_LogonOptions">LogonOptions</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '0',
!   '1' or '3'</p>
!   <p class=MsoNormal>See <a href="#_Appendix_A:_Registry_Values">Appendix A</a>
!   <a href="#_A.2.1_Domain_specific_configuration">section 2.1 (Domain specific
!   configuration keys for Network Provider)</a> for more details.</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="_Toc115416176">MOUNTROOT</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_Mountroot">Mountroot</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>:
!   string</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="_Toc115416177">NETBIOSNAME</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value___:_NetbiosName">NetbiosName</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>:
!   string (at most 15 characters)</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="_Toc115416178">NOFINDLANABYNAME</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value___:_NoFindLanaByName">NoFindLanaByName</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '1'
!   or '0'</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="_Toc115416179">RXMAXMTU</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_RxMaxMTU">RxMaxMTU</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>:
!   numeric</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="_Toc115416180">SECURITYLEVEL</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_SecurityLevel">SecurityLevel</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '1'
!   or '0'</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="_Toc115416181">SMBAUTHTYPE</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value___:_smbAuthType">SMBAuthType</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>:
!   '0','1' or '2'</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="_Toc115416182">STOREANSIFILENAMES</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(OpenAFS_Client):">(OpenAFS Client)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value___:_StoreAnsiFilenames">StoreAnsiFilenames</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '0'
!   or '1'</p>
    </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'>
!   <h6><a name="_Toc115416183">USEDNS</a></h6>
!   <p class=MsoList>Registry key<span style='mso-tab-count:1'>    </span>: <a
!   href="#_(Service_parameters):">(Service parameters)</a></p>
!   <p class=MsoList>Registry value<span style='mso-tab-count:1'> </span>: <a
!   href="#_Value_:_UseDNS">UseDNS</a></p>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '1'
!   or '0'</p>
    </td>
   </tr>
  </table>
  
! <h5><a name="_Toc115416184"></a><a name="_7.2.1.2.2_AFSCreds.exe_Properties"></a><span
! style='mso-bookmark:_Toc115416184'>7.2.1.2.2 AFSCreds.exe Properties</span></h5>
  
  <p class=MsoNormal>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).<span
! style='mso-spacerun:yes'>  </span>The method of specifying the option was chosen
! for easy integration with the Windows Installer user interface.<span
! style='mso-spacerun:yes'>  </span>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=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6 style='mso-yfti-cnfc:1'><a name="_Toc115416185">CREDSSTARTUP</a></h6>
!   <p class=MsoList style='mso-yfti-cnfc:1'>Valid values<span
!   style='mso-spacerun:yes'>    </span>: '1' or '0'</p>
!   <p class=MsoList style='mso-yfti-cnfc:1'>Controls whether AFSCreds.exe starts
!   up automatically when the user logs on.<span style='mso-spacerun:yes'> 
!   </span>When CREDSSTARTUP is '1' a shortcut is added to the 'Startup' folder in
!   the 'Program menu' which starts AFSCREDS.EXE with the options that are
!   determined by the other CREDS* properties.</p>
!   </td>
!  </tr>
!  <tr style='mso-yfti-irow:0'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc115416186">CREDSAUTOINIT</a></h6>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '-a'
!   or ''</p>
    <p class=MsoList>Enables automatic initialization.</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="_Toc115416187">CREDSIPCHDET</a></h6>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '-n'
!   or ''</p>
    <p class=MsoList>Enables IP address change detection.</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="_Toc115416188">CREDSQUIET</a></h6>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '-q'
!   or ''</p>
    <p class=MsoList>Enables quiet mode.</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="_Toc115416189">CREDSRENEWDRMAP</a></h6>
!   <p class=MsoList>Valid values<span style='mso-tab-count:1'>    </span>: '-m'
!   or '’</p>
    <p class=MsoList>Enables renewing drive map at startup.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:4;mso-yfti-lastrow:yes'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc115416190">CREDSSHOW</a></h6>
!   <p class=MsoList>Valid values<span style='mso-spacerun:yes'>    </span>: '-s'
!   or ''</p>
    <p class=MsoList>Enables displaying the credential manager window when
    AFSCREDS starts up.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416191">7.2.2
! Existing Registry Entries</a></h3>
  
  <p class=MsoNormal>You can change existing registry values subject to the
! restrictions mentioned in the Windows Platform SDK.<span
! style='mso-spacerun:yes'>  </span>Pay special attention to component key paths
! and try to only change the 'Value' column in the 'Registry' table.<span
! style='mso-spacerun:yes'>  </span>If you want to add additional registry keys
! please refer to section 3 (Additional resources).</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416192">7.2.3
! Replacing Configuration Files</a></h3>
  
  <p class=MsoNormal>The OpenAFS configuration files (CellServDB) can be replaced
! by your own configuration files.<span style='mso-spacerun:yes'>  </span>These
! files are contained in separate MSI components so that you can disable them
! individually.</p>
  
  <p class=MsoNormal>The recommended method for replacing these files is to first
  disable the components containing the configuration files that you want to
! replace, and then add new components for the replacement files.<span
! style='mso-spacerun:yes'>  </span>This is outlined below (assuming you are
! using ORCA.EXE to author the transform).</p>
  
  <p class=MsoNormal>Note that transforms are not a good way to add a new file as
! an embedded stream.<span style='mso-spacerun:yes'>  </span>The method outlined
! here places the file in the same directory as the MSI for deployment.</p>
  
  <p class=MsoNormal>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;mso-list:l13 level1 lfo32;tab-stops:
! list 18.0pt'><![if !supportLists]><span style='mso-fareast-font-family:Thorndale;
! mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>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;mso-list:l13 level2 lfo32;tab-stops:
! list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:Thorndale;
! mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>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;mso-list:l13 level2 lfo32;tab-stops:
! list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:Thorndale;
! mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>In
! the Component table, locate the component you need to change ( Ctrl-F invokes
! the 'Find' dialog).<span style='mso-spacerun:yes'>  </span>The component names
! are listed below in section <a href="#_2.3.1_Components_for_Configuration_">7.2.3.1</a>.<span
! style='mso-spacerun:yes'>  </span>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;mso-list:l13 level2 lfo32;tab-stops:
! list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:Thorndale;
! mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1.3.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>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;mso-list:l13 level2 lfo32;tab-stops:
! list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:Thorndale;
! mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1.4.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Enter
! a condition that evaluates to false. I.e. 'DONOTINSTALL'. (Note that an
! undefined property always evaluates to false).</p>
  
  <p class=MsoNormal>Note 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;mso-list:l13 level1 lfo32;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Add
  a new component containing the new configuration file.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>2.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Select
! the 'Component' table in the 'Tables' list.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>2.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Select
  'Tables'-&gt;'Add Row' (Ctrl-R).</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>2.3.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Enter
! the following :</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:39.35pt;border-collapse:collapse;border:none;mso-border-alt:
!  solid windowtext .5pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <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;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
!   solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=PreformattedText><o:p>&nbsp;</o:p></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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=PreformattedText>fil_my_CellServDB</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal style='margin-left:35.45pt'>Note that the ComponentId is an uppercase
! GUID.<span style='mso-spacerun:yes'>  </span>You can generate one using
! GUIDGEN.EXE or UUIDGEN.EXE, both of which are included in the Platform SDK.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>The Attributes value of 144 is a
  sum of msidbComponentAttributesPermanent (16) and
! msidbComponentAttributesNeverOverwrite (128).<span style='mso-spacerun:yes'> 
! </span>This ensures that local modifications are not overwritten or lost during
! an installation or uninstallation.<span style='mso-spacerun:yes'>  </span>These
! are the same settings used on the default configuration files.</p>
! 
! <p class=MsoNormal><span style='mso-tab-count:1'>            </span>'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;mso-list:l13 level1 lfo32;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>3.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Add
  a new feature to hold the new component.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>3.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Select
! the 'Feature' table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>3.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Add
! a new row (Ctrl-R or 'Tables'-&gt;'Add Row') with the following values:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none;mso-border-alt:
!  solid windowtext .5pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
!   solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=PreformattedText><o:p>&nbsp;</o:p></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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=PreformattedText><o:p>&nbsp;</o:p></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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=PreformattedText><o:p>&nbsp;</o:p></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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=PreformattedText>8</p>
    </td>
   </tr>
  </table>
  
  <p class=MsoNormal style='margin-left:35.45pt'>It is important to create the
! new feature under the 'feaClient' feature, which will ensure that the
! configuration file will be installed when the client binaries are installed.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>Setting 'Display' to 0 will hide
! this feature from the feature selection dialog during an interactive
! installation.<span style='mso-spacerun:yes'>  </span>A value of 30 for 'Level'
! allows this feature to be installed by default (on a 'Typical' installation).</p>
  
! <p class=MsoNormal style='margin-left:35.45pt'>The 'Attributes' value is
! msidbFeatureAttributesDisallowAdvertise (8), which is set on all features in
! the OpenAFS MSI.<span style='mso-spacerun:yes'>  </span>The OpenAFS MSI is not
! designed for an advertised installation.</p>
! 
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l13 level1 lfo32;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>4.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Join
  the component and the feature.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>4.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Select
! the 'FeatureComponents' table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>4.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Add
! a new row with the following values:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none;mso-border-alt:
!  solid windowtext .5pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
!   solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-list:l13 level1 lfo32;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>5.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Add
  an entry to the 'File' table.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>5.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Select
! the 'File' table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>5.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Add
! a new row with the following values:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none;mso-border-alt:
!  solid windowtext .5pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
!   solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=PreformattedText>1000</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal><span style='mso-tab-count:1'>            </span><span
! style='mso-spacerun:yes'>    </span>(leave other fields blank)</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>The 'Attributes' value is
! msidbFileAttributesNonCompressed (8192).<span style='mso-spacerun:yes'> 
! </span>This is because we will be placing this file in the same directory as
! the MSI instead of embedding the file in it.<span style='mso-spacerun:yes'> 
! </span>Transforms do not support updating compressed sources or adding new
  cabinet streams.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>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;mso-list:l13 level1 lfo32;
! tab-stops:list 18.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>6.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Set
  a media source for the file.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>6.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Select
! the 'Media' table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;mso-list:l13 level2 lfo32;
! tab-stops:list 39.6pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>6.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]>Add
! a row with the following values :</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none;mso-border-alt:
!  solid windowtext .5pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   mso-border-alt:solid windowtext .5pt;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;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
!   solid windowtext .5pt;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;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
!   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;
!   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=PreformattedText>1000</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal><span style='mso-tab-count:1'>            </span><span
! style='mso-spacerun:yes'>    </span>(leave other fields blank)</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>The sequence number of 1000
  designates this as the media source for the newly added file.</p>
  
! <h4><a name="_Toc115416193"></a><a name="_2.3.1_Components_for_Configuration_"></a><span
! style='mso-bookmark:_Toc115416193'>7.2.3.1 Components for Configuration Files</span></h4>
  
  <p class=PreformattedText style='text-indent:35.45pt'>CellServDB:
  'cpf_CellServDB' (ID {D5BA4C15-DBEC-4292-91FC-B54C30F24F2A})</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416194">7.2.4
! Adding Domain Specific Registry Keys</a></h3>
  
  <p class=MsoNormal>Following is an example for adding domain specific registry
  keys.</p>
  
! <p class=MsoNormal style='tab-stops:204.0pt'><span style='mso-spacerun:yes'>   
! </span>Refer to <a href="#_Appendix_A:_Registry_Values">Appendix A</a> section
! 2.1 for more information.</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span>Columns that are
! unspecified should be left empty.</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span>We create a new feature
! and component to hold the new registry keys.</p>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal style='mso-yfti-cnfc:1'><span style='mso-spacerun:yes'>   
!   </span>'Feature' table:</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><span
!   style='mso-tab-count:1'>      </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Feature<span
!   style='mso-tab-count:1'>            </span>: 'feaDomainKeys'<br>
!   <span style='mso-tab-count:1'>            </span>Feature Parent<span
!   style='mso-tab-count:1'> </span>: 'feaClient'<br>
!   <span style='mso-tab-count:1'>            </span>Display<span
!   style='mso-tab-count:1'>           </span>: 0<br>
!   <span style='mso-tab-count:1'>            </span>Level<span style='mso-tab-count:
!   2'>               </span>: 30<br>
!   <span style='mso-tab-count:1'>            </span>Attributes<span
!   style='mso-tab-count:1'>        </span>: 10</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><span style='mso-spacerun:yes'>    </span>'Component'
!   table:</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'>
!   <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><span
!   style='mso-tab-count:1'>      </span>(new row)<br>
!   <span style='mso-spacerun:yes'>    </span><span style='mso-tab-count:1'>      </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'<br>
!   <span style='mso-tab-count:1'>            </span>ComponentId<span
!   style='mso-tab-count:1'>  </span>: '{4E3FCBF4-8BE7-40B2-A108-C47CF743C627}'<br>
!   <span style='mso-tab-count:1'>            </span>Directory<span
!   style='mso-tab-count:1'>         </span>: 'TARGETDIR'<br>
!   <span style='mso-tab-count:1'>            </span>Attributes<span
!   style='mso-tab-count:1'>        </span>: 4<br>
!   <span style='mso-tab-count:1'>            </span>KeyPath<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey0'</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><span style='mso-spacerun:yes'>   
!   </span>'FeatureComponents' table:</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><span style='mso-spacerun:yes'>    </span><span
!   style='mso-tab-count:1'>      </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Feature<span
!   style='mso-tab-count:1'>            </span>: 'feaDomainKeys'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</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><span style='mso-spacerun:yes'>   </span><span
!   style='mso-spacerun:yes'> </span>'Registry' table:</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey0'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>:
    'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</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><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey1'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '*'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey2'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>:
    'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '*'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey3'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>:
!   'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: 'LogonOptions'<br>
!   <span style='mso-tab-count:1'>            </span>Value<span style='mso-tab-count:
!   2'>              </span>: 1<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey4'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>:
!   SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '*'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey5'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>:
    'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: 'LogonOptions'<br>
!   <span style='mso-tab-count:1'>            </span>Value<span style='mso-tab-count:
!   2'>              </span>: 0<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'</p>
!   </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><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_domkey6'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: 'FailLoginsSilently'<br>
!   <span style='mso-tab-count:1'>            </span>Value<span style='mso-tab-count:
!   2'>              </span>: 1<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_DomainKeys'<br style='mso-special-character:
!   line-break'>
!   <![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
!   <![endif]></p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal><o:p>&nbsp;</o:p></p>
  
! <p class=MsoNormal>The example adds domain specific keys for 'ATHENA.MIT.EDU' (enable
! integrated logon) and 'LOCALHOST' (disable integrated logon and fail logins
! silently).</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416195">7.2.5
! Adding Site Specific Freelance Registry Keys</a></h3>
  
  <p class=MsoNormal>Following is an example for adding site specific Freelance
  registry keys to pre-populate the Mountpoints and Symlinks in the fake root.afs
  volume.</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span>Columns that are
! unspecified should be left empty.</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span>We create a new
! feature and component to hold the new registry keys.</p>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal style='mso-yfti-cnfc:1'><span style='mso-spacerun:yes'>   
!   </span>'Feature' table:</p>
!   </td>
!  </tr>
!  <tr style='mso-yfti-irow:0'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><span
!   style='mso-tab-count:1'>      </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Feature<span
!   style='mso-tab-count:1'>            </span>: 'feaFreelanceKeys'<br>
!   <span style='mso-tab-count:1'>            </span>Feature Parent<span
!   style='mso-tab-count:1'> </span>: 'feaClient'<br>
!   <span style='mso-tab-count:1'>            </span>Display<span
!   style='mso-tab-count:1'>           </span>: 0<br>
!   <span style='mso-tab-count:1'>            </span>Level<span style='mso-tab-count:
!   2'>               </span>: 30<br>
!   <span style='mso-tab-count:1'>            </span>Attributes<span
!   style='mso-tab-count:1'>        </span>: 10</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><span style='mso-spacerun:yes'>    </span>'Component'
!   table:</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'>
!   <p class=MsoNormal><span style='mso-spacerun:yes'>    </span><span
!   style='mso-tab-count:1'>      </span>(new row)<br>
!   <span style='mso-spacerun:yes'>    </span><span style='mso-tab-count:1'>      </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'<br>
!   <span style='mso-tab-count:1'>            </span>ComponentId<span
!   style='mso-tab-count:1'>  </span>: '{4E3B3CBF4-9AE7-40C3-7B09-C48CF842C583}'<br>
!   <span style='mso-tab-count:1'>            </span>Directory<span
!   style='mso-tab-count:1'>         </span>: 'TARGETDIR'<br>
!   <span style='mso-tab-count:1'>            </span>Attributes<span
!   style='mso-tab-count:1'>        </span>: 4<br>
!   <span style='mso-tab-count:1'>            </span>KeyPath<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey0'</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><span style='mso-spacerun:yes'>   
!   </span>'FeatureComponents' table:</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><span style='mso-spacerun:yes'>    </span><span
!   style='mso-tab-count:1'>      </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Feature<span
!   style='mso-tab-count:1'>            </span>: 'feaFreelanceKeys'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</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><span style='mso-spacerun:yes'>    </span>'Registry'
!   table:</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey0'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SOFTWARE\OpenAFS\Client\Freelance'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</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><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey1'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SOFTWARE\OpenAFS\Client\Freelance'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '0'<br>
!   <span style='mso-spacerun:yes'>  </span><span style='mso-tab-count:1'>         </span>Value<span
!   style='mso-spacerun:yes'>           </span><span style='mso-tab-count:1'>         </span>:
!   'athena.mit.edu#athena.mit.edu:root.cell.'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey2'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SOFTWARE\OpenAFS\Client\Freelance'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '1'<br>
!   <span style='mso-spacerun:yes'>   </span><span style='mso-tab-count:1'>       </span>Value<span
!   style='mso-spacerun:yes'>           </span><span style='mso-tab-count:1'>         </span>:
!   '.athena.mit.edu%athena.mit.edu:root.cell.'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey3'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</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'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey4'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '0'<br>
!   <span style='mso-spacerun:yes'> </span><span style='mso-tab-count:1'>          </span>Value<span
!   style='mso-spacerun:yes'>           </span><span style='mso-tab-count:1'>         </span>:
!   '<st1:GivenName w:st="on">athena</st1:GivenName>:athena.mit.edu.'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr style='mso-yfti-irow:11;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal><span style='mso-tab-count:1'>            </span>(new row)<br>
!   <span style='mso-tab-count:1'>            </span>Registry<span
!   style='mso-tab-count:1'>          </span>: 'reg_freekey5'<br>
!   <span style='mso-tab-count:1'>            </span>Root<span style='mso-tab-count:
!   2'>                </span>: 2<br>
!   <span style='mso-tab-count:1'>            </span>Key<span style='mso-tab-count:
!   2'>                 </span>: 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'<br>
!   <span style='mso-tab-count:1'>            </span>Name<span style='mso-tab-count:
!   2'>              </span>: '1'<br>
!   <span style='mso-spacerun:yes'>   </span><span style='mso-tab-count:1'>       </span>Value<span
!   style='mso-spacerun:yes'>           </span><span style='mso-tab-count:1'>         </span>:
!   '.athena:.athena.mit.edu.'<br>
!   <span style='mso-tab-count:1'>            </span>Component<span
!   style='mso-tab-count:1'>     </span>: 'rcm_FreelanceKeys'</p>
    </td>
   </tr>
  </table>
  
  <p class=MsoNormal>The example adds a read-only mountpoint to the
! athena.mit.edu cell's root.afs volume as well as a read-write mountpoint.<span
! style='mso-spacerun:yes'>  </span>Aliases are also provided using symlinks.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417101"></a><a
! name="_Toc115416196"></a><a name="_Ref115275867"><span style='mso-bookmark:
! _Toc115416196'><span style='mso-bookmark:_Toc115417101'>7.3 Additional
! Resources</span></span></a></h2>
  
  <p class=MsoNormal>If you want to add registry keys or files you need to create
! new components and features for those.<span style='mso-spacerun:yes'> 
! </span>Refer to the Windows Platform SDK for details.</p>
  
  <p class=MsoNormal>It is beyond the scope of this document to provide a
! comprehensive overview of how to add new resources through a transform.<span
! style='mso-spacerun:yes'>  </span>Please refer to the &quot;Windows
! Installer&quot; documentation for details.<span style='mso-spacerun:yes'> 
! </span>The relevant section is at :</p>
  
  <p class=MsoNormal>http://msdn.microsoft.com/library/en-us/msi/setup/using_transforms_to_add_resources.asp</p>
  
  <p class=MsoNormal>A sample walkthrough of adding a new configuration file is
  in section 2.3.</p>
  
! <p class=MsoNormal>Add new features under the 'feaClient' or 'feaServer' as
! appropriate and set the 'Level' column for those features to equal the 'Level'
! for their parent features for consistency.<span style='mso-spacerun:yes'> 
! </span>Note that none of the features in the OpenAFS for Windows MSI package
! are designed to be installed to run from 'source' or 'advertised'.<span
! style='mso-spacerun:yes'>  </span>It is recommended that you set
  'msidbFeatureAttributesFavorLocal' (0), 'msidbFeatureAttributesFollowParent'
! (2) and 'msidbFeatureAttributesDisallowAdvertise' (8) attributes for new
! features.</p>
  
  <p class=MsoNormal>If you are creating new components, retain the same
  component GUID when creating new transforms against new releases of the OpenAFS
--- 1995,3162 ----
  <p class=MsoNormal>For general information about &quot;Windows Installer&quot;,
  refer to:</p>
  
! <p class=MsoNormal>    <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp">http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp</a></p>
  
  <p class=MsoNormal>For general information about authoring MSI transforms,
  refer to:</p>
  
! <p class=MsoNormal>    <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp">http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp</a></p>
  
  <p class=MsoNormal>The remainder of this document assumes some familiarity with
! authoring transforms.  While the MSDN documentation for Windows Installer is a
! bit dense, the guide on MSI transforms found at the second link above is
! recommended reading.  MSDN also includes a step-by-step example for creating a
! transform at:</p>
  
! <p class=MsoNormal>    <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp">http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp</a></p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993153"></a><a
! name="_Toc126872230"></a><a name="_Toc115416161">7.1.2 Authoring a Transform</a></h3>
  
  <p class=MsoNormal>Transforms describe a set of modifications to be performed
! on an existing MSI for the purpose of customizing it.  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.  For example:</p>
! 
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt'>1.<span
! style='font:7.0pt "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'>2.<span
! style='font:7.0pt "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'>3.<span
! style='font:7.0pt "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'>4.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>(generates
! openafs-transform.mst, which is the transform)</p>
! 
! <p class=MsoNormal>Transforms have an extension of .mst.  'msitran' is a tool
! distributed as part of the &quot;Windows Installer&quot; SDK (part of the
! Windows Platform SDK).</p>
  
  <p class=MsoNormal>You can test a transform by:</p>
  
! <p class=PreformattedText style='margin-left:36.0pt;text-indent:-18.0pt'>1.<span
! style='font:7.0pt "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'>2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>msitran -a
! openafs-transform.mst openafs-test.msi</p>
  
  <p class=MsoNormal>and then checking the resulting openafs-test.msi to see if
  all changes you have made above to openafs-modified.msi is present in
! openafs-test.msi.  'msitran' will complain if some modification in the
! transform can not be successfully applied.</p>
  
  <p class=MsoNormal>As mentioned above, you can use a tool like ORCA.EXE to edit
! the MSI databases directly when editing openafs-modified.msi.  More details are
! given below.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993154"></a><a
! name="_Toc126872231"></a><a name="_Toc115417100"></a><a name="_Toc115416162">7.2.
! Configuration Options</a></h2>
  
  <p class=MsoNormal>The logic necessary to implement many of the settings
! described in <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>
! are present in the MSI.  Most of these can be controlled by setting the
! corresponding properties to the desired value.  Some settings may require
! modifying existing registry entries (though not recommended) or adding new resources
! (like files or registry keys).  Instructions for performing these tasks are
! below.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993155"></a><a
! name="_Toc126872232"></a><a name="_Toc115416163">7.2.1 Configurable Properties</a></h3>
  
  <p class=MsoNormal>Most configurable properties correspond to registry keys or
! values.  Due to the logic invoked based on the existence of these registry keys
! or values, they are only set if the associated property is defined to have a
! non null value.  If the associated property is not defined in the MSI, the
! registry key or value will not be touched.  By default, the MSI does not
! contain these properties and hence will not set the registry keys.  You will
! need to add properties as needed to the MSI.</p>
  
  <p class=MsoNormal>When one of the configurable properties is set, the
  installer will use the property value to set the corresponding setting in the
! HKEY_LOCAL_MACHINE registry hive.  The HKEY_CURRENT_USER hive is not touched by
! the installer.</p>
  
  <p class=MsoNormal>For each property, the associated registry setting is
! referenced by the same text used in <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>.</p>
  
  <p class=MsoNormal>Strings are quoted using single quotes (e.g. 'a string'). An
! empty string is denoted as ''.  Note that you can't author null values into the
! 'Property' table.</p>
  
  <p class=MsoNormal>Numeric values should be authored as decimal strings.</p>
  
! <h4><a name="_Toc139993156"></a><a name="_Toc126872233"></a><a
! name="_Toc115416164">7.2.1.1 Setting Properties</a></h4>
  
  <p class=MsoNormal>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'><span style='font-size:9.0pt'>1.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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'><span style='font-size:9.0pt'>2.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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'><span style='font-size:9.0pt'>3.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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'><span style='font-size:9.0pt'>4.<span
  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></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>
  
! <h4><a name="_Toc139993157"></a><a name="_Toc126872234"></a><a
! name="_Toc115416165">7.2.1.2 OpenAFS for Windows Properties</a></h4>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc139993158"></a><a name="_Toc126872235"></a><a
!   name="_Toc115416166"></a><a name="_(Service_parameters):"></a>(Service
!   parameters):</h5>
!   <p class=ListContents style='margin-left:0pt'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc139993159"></a><a name="_Toc126872236"></a><a
!   name="_Toc115416167"></a><a name="_(Network_provider):"></a>(Network
!   provider):</h5>
    <p class=ListContents style='margin-left:0pt'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc139993160"></a><a name="_Toc126872237"></a><a
!   name="_Toc115416168"></a><a name="_(OpenAFS_Client):"></a>(OpenAFS Client):</h5>
    <p class=ListContents style='margin-left:0pt'>[HKLM\SOFTWARE\OpenAFS\Client]</p>
    </td>
   </tr>
  </table>
  
! <h5><a name="_Toc139993161"></a><a name="_Toc126872238"></a><a
! name="_Toc115416169">7.2.1.2.1 Registry Properties</a></h5>
  
  <p class=MsoNormal>These properties are used to set the values of registry
  entries associated with OpenAFS for Windows.</p>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993162"></a><a name="_Toc126872239"></a><a
!   name="_Toc115416170">AFSCACHEPATH</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
    parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_CachePath">CachePath</a></p>
!   <p class=MsoList>Valid values    : string .</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993163"></a><a name="_Toc126872240"></a><a
!   name="_Toc115416171">AFSCACHESIZE</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value___: CacheSize">CacheSize</a></p>
!   <p class=MsoList>Valid values    : numeric</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993164"></a><a name="_Toc126872241"></a><a
!   name="_Toc115416172">AFSCELLNAME</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_Cell">Cell</a></p>
!   <p class=MsoList>Valid values    : string</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993165"></a><a name="_Toc126872242"></a><a
!   name="_Toc115416173">FREELANCEMODE</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_FreelanceClient">FreelanceClient</a></p>
!   <p class=MsoList>Valid values    : '1' or '0'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993166"></a><a name="_Toc126872243"></a><a
!   name="_Toc115416174">HIDEDOTFILES</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_HideDotFiles">HideDotFiles</a></p>
!   <p class=MsoList>Valid values    : '1' or '0'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993167"></a><a name="_Toc126872244"></a><a
!   name="_Toc115416175">LOGONOPTIONS</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Network_provider):">(Network
!   provider)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value___: LogonOptions">LogonOptions</a></p>
!   <p class=MsoList>Valid values    : '0', '1' or '3'</p>
!   <p class=MsoNormal>See <a
!   href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix
!   A</a> <a
!   href="../../oafw-1-4-release-notes.doc#_A.2.1_Domain_specific_configuration">section
!   2.1 (Domain specific configuration keys for Network Provider)</a> for more
!   details.</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993168"></a><a name="_Toc126872245"></a><a
!   name="_Toc115416176">MOUNTROOT</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_Mountroot">Mountroot</a></p>
!   <p class=MsoList>Valid values    : string</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993169"></a><a name="_Toc126872246"></a><a
!   name="_Toc115416177">NETBIOSNAME</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value___: NetbiosName">NetbiosName</a></p>
!   <p class=MsoList>Valid values    : string (at most 15 characters)</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993170"></a><a name="_Toc126872247"></a><a
!   name="_Toc115416178">NOFINDLANABYNAME</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value___: NoFindLanaByName">NoFindLanaByName</a></p>
!   <p class=MsoList>Valid values    : '1' or '0'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993171"></a><a name="_Toc126872248"></a><a
!   name="_Toc115416179">RXMAXMTU</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_RxMaxMTU">RxMaxMTU</a></p>
!   <p class=MsoList>Valid values    : numeric</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993172"></a><a name="_Toc126872249"></a><a
!   name="_Toc115416180">SECURITYLEVEL</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_SecurityLevel">SecurityLevel</a></p>
!   <p class=MsoList>Valid values    : '1' or '0'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993173"></a><a name="_Toc126872250"></a><a
!   name="_Toc115416181">SMBAUTHTYPE</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value___: smbAuthType">SMBAuthType</a></p>
!   <p class=MsoList>Valid values    : '0','1' or '2'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993174"></a><a name="_Toc126872251"></a><a
!   name="_Toc115416182">STOREANSIFILENAMES</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(OpenAFS_Client):">(OpenAFS Client)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value___: StoreAnsiFilenames">StoreAnsiFilenames</a></p>
!   <p class=MsoList>Valid values    : '0' or '1'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993175"></a><a name="_Toc126872252"></a><a
!   name="_Toc115416183">USEDNS</a></h6>
!   <p class=MsoList>Registry key    : <a
!   href="../../oafw-1-4-release-notes.doc#_(Service_parameters):">(Service
!   parameters)</a></p>
!   <p class=MsoList>Registry value : <a
!   href="../../oafw-1-4-release-notes.doc#_Value_:_UseDNS">UseDNS</a></p>
!   <p class=MsoList>Valid values    : '1' or '0'</p>
    </td>
   </tr>
  </table>
  
! <h5><a name="_Toc139993176"></a><a name="_Toc126872253"></a><a
! name="_Toc115416184"></a><a name="_7.2.1.2.2_AFSCreds.exe_Properties"></a>7.2.1.2.2
! AFSCreds.exe Properties</h5>
  
  <p class=MsoNormal>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).  The method of specifying
! the option was chosen for easy integration with the Windows Installer user
! interface.  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=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993177"></a><a name="_Toc126872254"></a><a
!   name="_Toc115416185">CREDSSTARTUP</a></h6>
!   <p class=MsoList>Valid values    : '1' or '0'</p>
!   <p class=MsoList>Controls whether AFSCreds.exe starts up automatically when
!   the user logs on.  When CREDSSTARTUP is '1' a shortcut is added to the
!   'Startup' folder in the 'Program menu' which starts AFSCREDS.EXE with the
!   options that are determined by the other CREDS* properties.</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993178"></a><a name="_Toc126872255"></a><a
!   name="_Toc115416186">CREDSAUTOINIT</a></h6>
!   <p class=MsoList>Valid values    : '-a' or ''</p>
    <p class=MsoList>Enables automatic initialization.</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993179"></a><a name="_Toc126872256"></a><a
!   name="_Toc115416187">CREDSIPCHDET</a></h6>
!   <p class=MsoList>Valid values    : '-n' or ''</p>
    <p class=MsoList>Enables IP address change detection.</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993180"></a><a name="_Toc126872257"></a><a
!   name="_Toc115416188">CREDSQUIET</a></h6>
!   <p class=MsoList>Valid values    : '-q' or ''</p>
    <p class=MsoList>Enables quiet mode.</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993181"></a><a name="_Toc126872258"></a><a
!   name="_Toc115416189">CREDSRENEWDRMAP</a></h6>
!   <p class=MsoList>Valid values    : '-m' or '’</p>
    <p class=MsoList>Enables renewing drive map at startup.</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h6><a name="_Toc139993182"></a><a name="_Toc126872259"></a><a
!   name="_Toc115416190">CREDSSHOW</a></h6>
!   <p class=MsoList>Valid values    : '-s' or ''</p>
    <p class=MsoList>Enables displaying the credential manager window when
    AFSCREDS starts up.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993183"></a><a
! name="_Toc126872260"></a><a name="_Toc115416191">7.2.2 Existing Registry
! Entries</a></h3>
  
  <p class=MsoNormal>You can change existing registry values subject to the
! restrictions mentioned in the Windows Platform SDK.  Pay special attention to
! component key paths and try to only change the 'Value' column in the 'Registry'
! table.  If you want to add additional registry keys please refer to section 3
! (Additional resources).</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993184"></a><a
! name="_Toc126872261"></a><a name="_Toc115416192">7.2.3 Replacing Configuration
! Files</a></h3>
  
  <p class=MsoNormal>The OpenAFS configuration files (CellServDB) can be replaced
! by your own configuration files.  These files are contained in separate MSI components
! so that you can disable them individually.</p>
  
  <p class=MsoNormal>The recommended method for replacing these files is to first
  disable the components containing the configuration files that you want to
! replace, and then add new components for the replacement files.  This is
! outlined below (assuming you are using ORCA.EXE to author the transform).</p>
  
  <p class=MsoNormal>Note that transforms are not a good way to add a new file as
! an embedded stream.  The method outlined here places the file in the same
! directory as the MSI for deployment.</p>
  
  <p class=MsoNormal>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'>1.<span style='font:7.0pt "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'>1.1.<span style='font:7.0pt "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'>1.2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
! </span>In the Component table, locate the component you need to change ( Ctrl-F
! invokes the 'Find' dialog).  The component names are listed below in section <a
! href="../../oafw-1-4-release-notes.doc#_2.3.1_Components_for_Configuration ">7.2.3.1</a>. 
! 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'>1.3.<span style='font:7.0pt "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'>1.4.<span style='font:7.0pt "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>
  
  <p class=MsoNormal>Note 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'>2.<span
! style='font:7.0pt "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'>2.1.<span
! style='font:7.0pt "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'>2.2.<span
! style='font:7.0pt "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'>2.3.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Enter the following :</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:39.35pt;border-collapse:collapse;border:none'>
!  <tr style='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>
    <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>
    <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>
    <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>
    <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>
    <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>
  </table>
  
! <p class=MsoNormal style='margin-left:35.45pt'>Note that the ComponentId is an
! uppercase GUID.  You can generate one using GUIDGEN.EXE or UUIDGEN.EXE, both of
! which are included in the Platform SDK.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>The Attributes value of 144 is a
  sum of msidbComponentAttributesPermanent (16) and
! msidbComponentAttributesNeverOverwrite (128).  This ensures that local
! modifications are not overwritten or lost during an installation or
! uninstallation.  These are the same settings used on the default configuration files.</p>
! 
! <p class=MsoNormal>            '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'>3.<span
! style='font:7.0pt "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'>3.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Select the 'Feature'
! table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt'>3.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Add a new row (Ctrl-R
! or 'Tables'-&gt;'Add Row') with the following values:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none'>
!  <tr>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
  </table>
  
  <p class=MsoNormal style='margin-left:35.45pt'>It is important to create the
! new feature under the 'feaClient' feature, which will ensure that the configuration
! file will be installed when the client binaries are installed.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>Setting 'Display' to 0 will hide
! this feature from the feature selection dialog during an interactive installation. 
! A value of 30 for 'Level' allows this feature to be installed by default (on a
! 'Typical' installation).</p>
! 
! <p class=MsoNormal style='margin-left:35.45pt'>The 'Attributes' value is msidbFeatureAttributesDisallowAdvertise
! (8), which is set on all features in the OpenAFS MSI.  The OpenAFS MSI is not designed
! for an advertised installation.</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt'>4.<span
! style='font:7.0pt "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'>4.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Select the
! 'FeatureComponents' table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt'>4.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Add a new row with the
! following values:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none'>
!  <tr>
    <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>
    <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'>5.<span
! style='font:7.0pt "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'>5.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Select the 'File'
! table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt'>5.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Add a new row with the
! following values:</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none'>
!  <tr>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
  </table>
  
! <p class=MsoNormal>                (leave other fields blank)</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>The 'Attributes' value is
! msidbFileAttributesNonCompressed (8192).  This is because we will be placing
! this file in the same directory as the MSI instead of embedding the file in
! it.  Transforms do not support updating compressed sources or adding new
  cabinet streams.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>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'>6.<span
! style='font:7.0pt "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'>6.1.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Select the 'Media'
! table.</p>
! 
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt'>6.2.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span>Add a row with the
! following values :</p>
  
  <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='margin-left:40.1pt;border-collapse:collapse;border:none'>
!  <tr>
    <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>
    <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>
  </table>
  
! <p class=MsoNormal>                (leave other fields blank)</p>
  
  <p class=MsoNormal style='margin-left:35.45pt'>The sequence number of 1000
  designates this as the media source for the newly added file.</p>
  
! <h4><a name="_Toc139993185"></a><a name="_Toc126872262"></a><a
! name="_Toc115416193"></a><a name="_2.3.1_Components_for_Configuration "></a>7.2.3.1
! Components for Configuration Files</h4>
  
  <p class=PreformattedText style='text-indent:35.45pt'>CellServDB:
  'cpf_CellServDB' (ID {D5BA4C15-DBEC-4292-91FC-B54C30F24F2A})</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993186"></a><a
! name="_Toc126872263"></a><a name="_Toc115416194">7.2.4 Adding Domain Specific
! Registry Keys</a></h3>
  
  <p class=MsoNormal>Following is an example for adding domain specific registry
  keys.</p>
  
! <p class=MsoNormal>    Refer to <a
! href="../../oafw-1-4-release-notes.doc#_Appendix_A:_Registry_Values">Appendix A</a>
! section 2.1 for more information.</p>
  
! <p class=MsoNormal>    Columns that are unspecified should be left empty.</p>
  
! <p class=MsoNormal>    We create a new feature and component to hold the new
! registry keys.</p>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'Feature' table:</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Feature            : 'feaDomainKeys'<br>
!             Feature Parent : 'feaClient'<br>
!             Display           : 0<br>
!             Level               : 30<br>
!             Attributes        : 10</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'Component' table:</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!               Component     : 'rcm_DomainKeys'<br>
!             ComponentId  : '{4E3FCBF4-8BE7-40B2-A108-C47CF743C627}'<br>
!             Directory         : 'TARGETDIR'<br>
!             Attributes        : 4<br>
!             KeyPath          : 'reg_domkey0'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'FeatureComponents' table:</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Feature            : 'feaDomainKeys'<br>
!             Component     : 'rcm_DomainKeys'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'Registry' table:</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey0'<br>
!             Root                : 2<br>
!             Key                 : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain'<br>
!             Component     : 'rcm_DomainKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey1'<br>
!             Root                : 2<br>
!             Key                 :
    'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain'<br>
!             Name              : '*'<br>
!             Component     : 'rcm_DomainKeys'</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey2'<br>
!             Root                : 2<br>
!             Key                 :
    'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'<br>
!             Name              : '*'<br>
!             Component     : 'rcm_DomainKeys'</p>
    </td>
   </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey3'<br>
!             Root                : 2<br>
!             Key                 : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'<br>
!             Name              : 'LogonOptions'<br>
!             Value              : 1<br>
!             Component     : 'rcm_DomainKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey4'<br>
!             Root                : 2<br>
!             Key                 : SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!             Name              : '*'<br>
!             Component     : 'rcm_DomainKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey5'<br>
!             Root                : 2<br>
!             Key                 :
!   'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!             Name              : 'LogonOptions'<br>
!             Value              : 0<br>
!             Component     : 'rcm_DomainKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_domkey6'<br>
!             Root                : 2<br>
!             Key                 :
    'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!             Name              : 'FailLoginsSilently'<br>
!             Value              : 1<br>
!             Component     : 'rcm_DomainKeys'<br>
!   <br>
!   </p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal>&nbsp;</p>
  
! <p class=MsoNormal>The example adds domain specific keys for 'ATHENA.MIT.EDU'
! (enable integrated logon) and 'LOCALHOST' (disable integrated logon and fail
! logins silently).</p>
! 
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993187"></a><a
! name="_Toc126872264"></a><a name="_Toc115416195">7.2.5 Adding Site Specific
! Freelance Registry Keys</a></h3>
  
  <p class=MsoNormal>Following is an example for adding site specific Freelance
  registry keys to pre-populate the Mountpoints and Symlinks in the fake root.afs
  volume.</p>
  
! <p class=MsoNormal>    Columns that are unspecified should be left empty.</p>
  
! <p class=MsoNormal>    We create a new feature and component to hold the new
! registry keys.</p>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'Feature' table:</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Feature            : 'feaFreelanceKeys'<br>
!             Feature Parent : 'feaClient'<br>
!             Display           : 0<br>
!             Level               : 30<br>
!             Attributes        : 10</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'Component' table:</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!               Component     : 'rcm_FreelanceKeys'<br>
!             ComponentId  : '{4E3B3CBF4-9AE7-40C3-7B09-C48CF842C583}'<br>
!             Directory         : 'TARGETDIR'<br>
!             Attributes        : 4<br>
!             KeyPath          : 'reg_freekey0'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'FeatureComponents' table:</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Feature            : 'feaFreelanceKeys'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>    'Registry' table:</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_freekey0'<br>
!             Root                : 2<br>
!             Key                 : 'SOFTWARE\OpenAFS\Client\Freelance'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_freekey1'<br>
!             Root                : 2<br>
!             Key                 : 'SOFTWARE\OpenAFS\Client\Freelance'<br>
!             Name              : '0'<br>
!               Value              : 'athena.mit.edu#athena.mit.edu:root.cell.'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_freekey2'<br>
!             Root                : 2<br>
!             Key                 : 'SOFTWARE\OpenAFS\Client\Freelance'<br>
!             Name              : '1'<br>
!               Value              : '.athena.mit.edu%athena.mit.edu:root.cell.'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_freekey3'<br>
!             Root                : 2<br>
!             Key                 : 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_freekey4'<br>
!             Root                : 2<br>
!             Key                 : 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'<br>
!             Name              : '0'<br>
!               Value              : 'athena:athena.mit.edu.'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
!   </td>
!  </tr>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=MsoNormal>            (new row)<br>
!             Registry          : 'reg_freekey5'<br>
!             Root                : 2<br>
!             Key                 : 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'<br>
!             Name              : '1'<br>
!               Value              : '.athena:.athena.mit.edu.'<br>
!             Component     : 'rcm_FreelanceKeys'</p>
    </td>
   </tr>
  </table>
  
  <p class=MsoNormal>The example adds a read-only mountpoint to the
! athena.mit.edu cell's root.afs volume as well as a read-write mountpoint. 
! Aliases are also provided using symlinks.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993188"></a><a
! name="_Toc126872265"></a><a name="_Toc115417101"></a><a name="_Toc115416196"></a><a
! name="_Ref115275867">7.3 Additional Resources</a></h2>
  
  <p class=MsoNormal>If you want to add registry keys or files you need to create
! new components and features for those.  Refer to the Windows Platform SDK for
! details.</p>
  
  <p class=MsoNormal>It is beyond the scope of this document to provide a
! comprehensive overview of how to add new resources through a transform.  Please
! refer to the &quot;Windows Installer&quot; documentation for details.  The relevant
! section is at :</p>
  
  <p class=MsoNormal>http://msdn.microsoft.com/library/en-us/msi/setup/using_transforms_to_add_resources.asp</p>
  
  <p class=MsoNormal>A sample walkthrough of adding a new configuration file is
  in section 2.3.</p>
  
! <p class=MsoNormal>Add new features under the 'feaClient' or 'feaServer' as appropriate
! and set the 'Level' column for those features to equal the 'Level' for their
! parent features for consistency.  Note that none of the features in the OpenAFS
! for Windows MSI package are designed to be installed to run from 'source' or
! 'advertised'.  It is recommended that you set
  'msidbFeatureAttributesFavorLocal' (0), 'msidbFeatureAttributesFollowParent'
! (2) and 'msidbFeatureAttributesDisallowAdvertise' (8) attributes for new features.</p>
  
  <p class=MsoNormal>If you are creating new components, retain the same
  component GUID when creating new transforms against new releases of the OpenAFS
***************
*** 6029,6178 ****
  ORCA.EXE you can generate a transform with MSITRAN.EXE as follows :</p>
  
  <p class=MsoNormal>(Modified MSI package is 'openafs-en_US_new.msi' and the
! original MSI package is 'openafs-en_US.msi'.<span style='mso-spacerun:yes'> 
! </span>Generates transform 'openafs-transform.mst')</p>
  
! <p class=MsoNormal><span style='mso-spacerun:yes'>    </span>&gt; msitran.exe
! -g openafs-en_US.msi openafs-en_US_new.msi openafs-transform.mst</p>
  
  <p class=MsoNormal>See the Platform SDK documentation for information on
  command line options for MSITRAN.EXE.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417102"></a><a
! name="_Toc115416197"><span style='mso-bookmark:_Toc115417102'>7.4. Upgrades</span></a></h2>
  
! <p class=MsoNormal>The MSI package is designed to replace (or uninstall)
! previous versions of OpenAFS for Windows during installation.<span
! style='mso-spacerun:yes'>  </span>Previous versions are installations that used
! the NSIS (.EXE) installer or an MSI that has a known Upgrade Code and a
! different Product Code.<span style='mso-spacerun:yes'>  </span>The MSI does not
! directly upgrade an existing installation.<span style='mso-spacerun:yes'> 
! </span>This is intentional and ensures that development releases which do not
! have strictly increasing version numbers are properly upgraded.</p>
! 
! <p class=MsoNormal>Versions of OpenAFS that are upgraded by the MSI package
! are:</p>
! 
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l12 level1 lfo34;
! tab-stops:list 36.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>1)<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>OpenAFS
  MSI package<br>
  Upgrade code {6823EEDD-84FC-4204-ABB3-A80D25779833}<br>
! All versions regardless of Product Code</p>
  
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l12 level1 lfo34;
! tab-stops:list 36.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>2)<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>MIT's
  Transarc AFS MSI package<br>
  Upgrade code {5332B94F-DE38-4927-9EAB-51F4A64193A7}<br>
! All versions up to 3.6.2</p>
  
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l12 level1 lfo34;
! tab-stops:list 36.0pt'><![if !supportLists]><span style='mso-fareast-font-family:
! Thorndale;mso-bidi-font-family:Thorndale'><span style='mso-list:Ignore'>3)<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>OpenAFS
  NSIS package<br>
  All versions</p>
  
  <p class=MsoNormal>Note that versions of the OpenAFS NSIS package prior to
! 1.3.65 had a bug where it couldn't be uninstalled properly in unattended
! mode.<span style='mso-spacerun:yes'>  </span>Therefore the MSI package will not
! try to uninstall an OpenAFS NSIS package if running unattended.<span
! style='mso-spacerun:yes'>  </span>This means that group policy based
! deployments will fail on machines that have the OpenAFS NSIS package installed.</p>
  
  <p class=MsoNormal>If you have used a different MSI package to install OpenAFS
! and wish to upgrade it you can author rows into the 'Upgrade' table as
! described in the Platform SDK.</p>
  
  <p class=MsoNormal>When performing an upgrade with msiexec.exe execute the MSI
  with the repair options &quot;vomus&quot;.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'>7.4.1. OpenAFS MSI Product Codes</h3>
! 
! <h4>Release 1.3</h4>
! 
! <table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
!  style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
!  mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;mso-border-insideh:
!  .5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>
!  <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes'>
!   <td width=118 valign=top style='width:88.55pt;border:solid windowtext 1.0pt;
!   mso-border-alt:solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=PreformattedText>i386_w2k<span style='mso-spacerun:yes'>   </span></p>
!   </td>
!   <td width=481 valign=top style='width:361.05pt;border:solid windowtext 1.0pt;
!   border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
!   solid windowtext .5pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <p class=PreformattedText>{CCAF9E14-976E-46C0-8A1B-A218EAB7ADC5}</p>
!   </td>
!  </tr>
! </table>
! 
! <h4>Release 1.4 and later</h4>
! 
! <p class=MsoNormal>Each build of the installation package will have a randomly
! assigned Product Code assigned to it.<span style='mso-spacerun:yes'>  </span>As
! each release of OpenAFS is shipped using a unique file name the Product IDs
! must be unique as well.</p>
! 
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417116"></a><a
! name="_Toc115417103"></a><a name="_Toc115416198"></a><a
! name="_Appendix_A:_Registry_Values"></a><![if !supportLists]><span
! style='mso-bookmark:_Toc115417116'><span style='mso-bookmark:_Toc115417103'><span
! style='mso-bookmark:_Toc115416198'></span></span></span><![endif]><span
! style='mso-bookmark:_Toc115417116'><span style='mso-bookmark:_Toc115417103'><span
! style='mso-bookmark:_Toc115416198'>Appendix A: Registry Values</span></span></span></h1>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417104"></a><a
! name="_Toc115416199"><span style='mso-bookmark:_Toc115417104'>A.1. Service
! parameters</span></a></h2>
  
  <p class=MsoBodyText>The service parameters primarily affect the behavior of
  the AFS client service (afsd_service.exe).</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416200">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416201">Value: LANadapter</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD<br>
    Default: -1<br>
    Variable: LANadapter</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>LAN adapter number to use.<span
!   style='mso-spacerun:yes'>  </span>This is the lana number of the LAN adapter
!   that the SMB server should bind to.<span style='mso-spacerun:yes'>  </span>If
!   unspecified or set to -1, a LAN adapter with named 'AFS' or a loopback
!   adapter will be selected.<span style='mso-spacerun:yes'>  </span>If neither
!   are present, then all available adapters will be bound to.<span
!   style='mso-spacerun:yes'>  </span>When binding to a non-loopback adapter, the
!   NetBIOS name hostname%-AFS' will be used (where %hostname% is the NetBIOS
!   name of the host truncated to 11 characters). Otherwise, the NetBIOS name
!   will be 'AFS'.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0;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="_Toc115416202"></a><a name="_Value___:_CacheSize"></a><span
!   style='mso-bookmark:_Toc115416202'>Value: CacheSize</span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 98304 (CM_CONFIGDEFAULT_CACHESIZE)<br>
    Variable: cm_initParams.cacheSize</p>
    <p class=MsoBodyText>Size of the AFS cache in 1k blocks.</p>
    </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="_Toc115416203">Value: ChunkSize</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 17 (CM_CONFIGDEFAULT_CHUNKSIZE)<br>
    Variable: cm_logChunkSize (cm_chunkSize = 1 &lt;&lt; cm_logChunkSize)</p>
--- 3166,3271 ----
  ORCA.EXE you can generate a transform with MSITRAN.EXE as follows :</p>
  
  <p class=MsoNormal>(Modified MSI package is 'openafs-en_US_new.msi' and the
! original MSI package is 'openafs-en_US.msi'.  Generates transform 'openafs-transform.mst')</p>
  
! <p class=MsoNormal>    &gt; msitran.exe -g openafs-en_US.msi
! openafs-en_US_new.msi openafs-transform.mst</p>
  
  <p class=MsoNormal>See the Platform SDK documentation for information on
  command line options for MSITRAN.EXE.</p>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993189"></a><a
! name="_Toc126872266"></a><a name="_Toc115417102"></a><a name="_Toc115416197">7.4.
! Upgrades</a></h2>
! 
! <p class=MsoNormal>The MSI package is designed to uninstall previous versions
! of OpenAFS for Windows during installation.  Note that it doesn't directly
! upgrade an existing installation.  This is intentional and ensures that
! development releases which do not have strictly increasing version numbers are
! properly upgraded.</p>
! 
! <p class=MsoNormal>Versions of OpenAFS that are upgraded by the MSI package are:</p>
  
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt'>1)<span
! style='font:7.0pt "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'>2)<span
! style='font:7.0pt "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'>3)<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>OpenAFS
  NSIS package<br>
  All versions</p>
  
  <p class=MsoNormal>Note that versions of the OpenAFS NSIS package prior to
! 1.3.65 had a bug where it couldn't be uninstalled properly in unattended mode. 
! Therefore the MSI package will not try to uninstall an OpenAFS NSIS package if
! running unattended.  This means that group policy based deployments will fail
! on machines that have the OpenAFS NSIS package installed.</p>
  
  <p class=MsoNormal>If you have used a different MSI package to install OpenAFS
! and wish to upgrade it you can author rows into the 'Upgrade' table as described
! in the Platform SDK.</p>
  
  <p class=MsoNormal>When performing an upgrade with msiexec.exe execute the MSI
  with the repair options &quot;vomus&quot;.</p>
  
! <h1 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993190"></a><a
! name="_Toc126872267"></a><a name="_Toc115417116"></a><a name="_Toc115417103"></a><a
! name="_Toc115416198"></a><a name="_Appendix_A:_Registry_Values"></a>Appendix A:
! Registry Values</h1>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993191"></a><a
! name="_Toc126872268"></a><a name="_Toc115417104"></a><a name="_Toc115416199">A.1.
! Service parameters</a></h2>
  
  <p class=MsoBodyText>The service parameters primarily affect the behavior of
  the AFS client service (afsd_service.exe).</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993192"></a><a
! name="_Toc126872269"></a><a name="_Toc115416200">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993193"></a><a name="_Toc126872270"></a><a
!   name="_Toc115416201">Value: LANadapter</a></h5>
!   <p class=MsoBodyText>Type: DWORD<br>
    Default: -1<br>
    Variable: LANadapter</p>
!   <p class=MsoBodyText>LAN adapter number to use.  This is the lana number of
!   the LAN adapter that the SMB server should bind to.  If unspecified or set to
!   -1, a LAN adapter with named 'AFS' or a loopback adapter will be selected. 
!   If neither are present, then all available adapters will be bound to.  When
!   binding to a non-loopback adapter, the NetBIOS name hostname%-AFS' will be
!   used (where %hostname% is the NetBIOS name of the host truncated to 11
!   characters). Otherwise, the NetBIOS name will be 'AFS'.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993194"></a><a name="_Toc126872271"></a><a
!   name="_Toc115416202"></a><a name="_Value___: CacheSize"></a>Value: CacheSize</h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 98304 (CM_CONFIGDEFAULT_CACHESIZE)<br>
    Variable: cm_initParams.cacheSize</p>
    <p class=MsoBodyText>Size of the AFS cache in 1k blocks.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993195"></a><a name="_Toc126872272"></a><a
!   name="_Toc115416203">Value: ChunkSize</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 17 (CM_CONFIGDEFAULT_CHUNKSIZE)<br>
    Variable: cm_logChunkSize (cm_chunkSize = 1 &lt;&lt; cm_logChunkSize)</p>
***************
*** 6180,6189 ****
    is 2^cm_logChunkSize.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:2;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="_Toc115416204">Value: Daemons</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 2 (CM_CONFIGDEFAULT_DAEMONS)<br>
    Variable: numBkgD</p>
--- 3273,3283 ----
    is 2^cm_logChunkSize.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993196"></a><a name="_Toc126872273"></a><a
!   name="_Toc115416204">Value: Daemons</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 2 (CM_CONFIGDEFAULT_DAEMONS)<br>
    Variable: numBkgD</p>
***************
*** 6191,6290 ****
    cm_BkgDaemon). (see cm_BkgDaemon in cm_daemon.c)</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="_Toc115416205">Value: ServerThreads</a></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: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="_Toc115416206">Value: Stats</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 10000 (CM_CONFIGDEFAULT_STATS)<br>
    Variable: cm_initParams.nStatCaches</p>
    <p class=MsoBodyText>Cache configuration.</p>
    </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="_Toc115416207"></a><a name="_Value_:_LogoffPreserveTokens"></a><span
!   style='mso-bookmark:_Toc115416207'>Value: LogoffPreserveTokens</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
!   attempt to delete the user's tokens<span style='mso-spacerun:yes'>  </span>if
!   the user's profile is stored outside of AFS.</p>
    </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><a name="_Toc115416208">Value: RootVolume</a></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;root.afs&quot;<br>
    Variable: cm_rootVolumeName</p>
    <p class=MsoBodyText>Root volume name.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:7;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="_Toc115416209"></a><a name="_Value_:_Mountroot"></a><span
!   style='mso-bookmark:_Toc115416209'>Value: Mountroot</span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;/afs&quot;<br>
    Variable: cm_mountRoot</p>
!   <p class=MsoBodyText>Name of root mount point.<span
!   style='mso-spacerun:yes'>  </span>In symlinks, if a path starts with
!   cm_mountRoot, it is assumed that the path is absolute (as opposed to relative)
!   and is adjusted accordingly. Eg: if a path is specified as
    /afs/athena.mit.edu/foo/bar/baz and cm_mountRoot is &quot;/afs&quot;, then
!   the path is interpreted as \\afs\all\athena.mit.edu\foo\bar\baz.<span
!   style='mso-spacerun:yes'>  </span>If a path does not start with with
!   cm_mountRoot, the path is assumed to be relative and suffixed to the
!   reference directory (i.e. directory where the symlink exists)</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:8;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="_Toc115416210"></a><a name="_Value_:_CachePath"></a><span
!   style='mso-bookmark:_Toc115416210'>Value: CachePath</span></h5>
    <p class=MsoBodyText>Type: REG_SZ or REG_EXPAND_SZ<br>
    Default: &quot;%TEMP%\AFSCache&quot;<br>
    Variable: cm_CachePath</p>
!   <p class=MsoBodyText>Location of on-disk cache file.<span
!   style='mso-spacerun:yes'>  </span>The default is the SYSTEM account's TEMP
!   directory.<span style='mso-spacerun:yes'>  </span>The attributes assigned to
!   the file are HIDDEN and SYSTEM.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:9;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="_Toc115416211">Value: NonPersistentCaching</a></h5>
    <p class=MsoBodyText>Type: DWORD [0..1]<br>
    Default: 0<br>
    Variable: buf_CacheType</p>
    <p class=MsoBodyText>When this registry value is set to a non-zero value, the
    CachePath value is ignored and the cache data is stored in the windows paging
!   file.<span style='mso-spacerun:yes'>  </span>This prevents the use of
!   persistent caching (when available) as well as the ability to alter the size
!   of the cache at runtime using the &quot;fs setcachesize&quot; command.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:10;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="_Toc115416212">Value: ValidateCache</a></h5>
    <p class=MsoBodyText>Type: DWORD [0..2]<br>
    Default: 1<br>
    Variable: buf_CacheType</p>
--- 3285,3387 ----
    cm_BkgDaemon). (see cm_BkgDaemon in cm_daemon.c)</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993197"></a><a name="_Toc126872274"></a><a
!   name="_Toc115416205">Value: ServerThreads</a></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='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="_Toc139993198"></a><a name="_Toc126872275"></a><a
!   name="_Toc115416206">Value: Stats</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 10000 (CM_CONFIGDEFAULT_STATS)<br>
    Variable: cm_initParams.nStatCaches</p>
    <p class=MsoBodyText>Cache configuration.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993199"></a><a name="_Toc126872276"></a><a
!   name="_Toc115416207"></a><a name="_Value_:_LogoffPreserveTokens"></a>Value:
!   LogoffPreserveTokens</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
!   attempt to delete the user's tokens  if the user's profile is stored outside
!   of AFS.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993200"></a><a name="_Toc126872277"></a><a
!   name="_Toc115416208">Value: RootVolume</a></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;root.afs&quot;<br>
    Variable: cm_rootVolumeName</p>
    <p class=MsoBodyText>Root volume name.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993201"></a><a name="_Toc126872278"></a><a
!   name="_Toc115416209"></a><a name="_Value_:_Mountroot"></a>Value: Mountroot</h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;/afs&quot;<br>
    Variable: cm_mountRoot</p>
!   <p class=MsoBodyText>Name of root mount point.  In symlinks, if a path starts
!   with cm_mountRoot, it is assumed that the path is absolute (as opposed to
!   relative) and is adjusted accordingly. Eg: if a path is specified as
    /afs/athena.mit.edu/foo/bar/baz and cm_mountRoot is &quot;/afs&quot;, then
!   the path is interpreted as \\afs\all\athena.mit.edu\foo\bar\baz.  If a path
!   does not start with with cm_mountRoot, the path is assumed to be relative and
!   suffixed to the reference directory (i.e. directory where the symlink exists)</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993202"></a><a name="_Toc126872279"></a><a
!   name="_Toc115416210"></a><a name="_Value_:_CachePath"></a>Value: CachePath</h5>
    <p class=MsoBodyText>Type: REG_SZ or REG_EXPAND_SZ<br>
    Default: &quot;%TEMP%\AFSCache&quot;<br>
    Variable: cm_CachePath</p>
!   <p class=MsoBodyText>Location of on-disk cache file.  The default is the
!   SYSTEM account's TEMP directory.  The attributes assigned to the file are
!   HIDDEN and SYSTEM.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993203"></a><a name="_Toc126872280"></a><a
!   name="_Toc115416211">Value: NonPersistentCaching</a></h5>
    <p class=MsoBodyText>Type: DWORD [0..1]<br>
    Default: 0<br>
    Variable: buf_CacheType</p>
    <p class=MsoBodyText>When this registry value is set to a non-zero value, the
    CachePath value is ignored and the cache data is stored in the windows paging
!   file.  This prevents the use of persistent caching (when available) as well
!   as the ability to alter the size of the cache at runtime using the &quot;fs
!   setcachesize&quot; command.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993204"></a><a name="_Toc126872281"></a><a
!   name="_Toc115416212">Value: ValidateCache</a></h5>
    <p class=MsoBodyText>Type: DWORD [0..2]<br>
    Default: 1<br>
    Variable: buf_CacheType</p>
***************
*** 6295,6304 ****
    2 - Validation is performed at shutdown</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:11;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="_Toc115416213">Value: TrapOnPanic</a></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: traceOnPanic</p>
--- 3392,3402 ----
    2 - Validation is performed at shutdown</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993205"></a><a name="_Toc126872282"></a><a
!   name="_Toc115416213">Value: TrapOnPanic</a></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: traceOnPanic</p>
***************
*** 6306,6397 ****
    (breakpoint: _asm int 3).</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:12;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="_Toc115416214"></a><a name="_Value___:_NetbiosName"></a><span
!   style='mso-bookmark:_Toc115416214'>Value: NetbiosName</span></h5>
    <p class=MsoBodyText>Type: REG_EXPAND_SZ<br>
    Default: &quot;AFS&quot;<br>
    Variable: cm_NetbiosName</p>
    <p class=MsoBodyText>Specifies the NetBIOS name to be used when binding to a
!   Loopback adapter.<span style='mso-spacerun:yes'>  </span>To provide the old
!   behavior specify a value of<span style='mso-spacerun:yes'> 
!   </span>&quot;%COMPUTERNAME%-AFS&quot;.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:13;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="_Toc115416215">Value: IsGateway</a></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: isGateway</p>
    <p class=MsoBodyText>Select whether or not this AFS client should act as a
!   gateway.<span style='mso-spacerun:yes'>  </span>If set and the NetBIOS name
!   hostname-AFS is bound to a physical NIC, other machines in the subnet can
!   access AFS via SMB connections to hostname-AFS.</p>
    <p class=MsoBodyText>When IsGateway is non-zero, the LAN adapter detection
!   code will avoid binding to a loopback adapter.<span
!   style='mso-spacerun:yes'>  </span>This will ensure that the NetBIOS name will
!   be of the form hostname-AFS instead of the value set by the
    &quot;NetbiosName&quot; registry value.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:14;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="_Toc115416216">Value: ReportSessionStartups</a></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: reportSessionStartups</p>
    <p class=MsoBodyText>If enabled, all SMB sessions created are recorded in the
!   Application event log.<span style='mso-spacerun:yes'>  </span>This also
!   enables other events such as drive mappings or various error types to be
!   logged.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:15;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="_Toc115416217"></a><a name="_Value_:_TraceBufferSize"></a><span
!   style='mso-bookmark:_Toc115416217'>Value: TraceBufferSize</span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 5000 (CM_CONFIGDEFAULT_TRACEBUFSIZE)<br>
    Variable: traceBufSize</p>
    <p class=MsoBodyText>Number of entries to keep in trace log.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:16;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="_Toc115416218"></a><a name="_Value_:_SysName"></a><span
!   style='mso-bookmark:_Toc115416218'>Value: SysName</span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;i386_nt40&quot;<br>
    Variable: cm_sysName</p>
!   <p class=MsoBodyText>Provides an initial value for &quot;fs
!   sysname&quot;.<span style='mso-spacerun:yes'>  </span>The string can contain
!   one or more replacement values for @sys in order of preference separated by
!   whitespace.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:17;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="_Toc115416219"></a><a name="_Value_:_SecurityLevel"></a><span
!   style='mso-bookmark:_Toc115416219'>Value: SecurityLevel</span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cryptall</p>
    <p class=MsoBodyText>Enables encryption on RX calls.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:18;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="_Toc115416220"></a><a name="_Value_:_UseDNS"></a><span
!   style='mso-bookmark:_Toc115416220'>Value: UseDNS</span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: cm_dnsEnabled</p>
--- 3404,3496 ----
    (breakpoint: _asm int 3).</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993206"></a><a name="_Toc126872283"></a><a
!   name="_Toc115416214"></a><a name="_Value___: NetbiosName"></a>Value:
!   NetbiosName</h5>
    <p class=MsoBodyText>Type: REG_EXPAND_SZ<br>
    Default: &quot;AFS&quot;<br>
    Variable: cm_NetbiosName</p>
    <p class=MsoBodyText>Specifies the NetBIOS name to be used when binding to a
!   Loopback adapter.  To provide the old behavior specify a value of 
!   &quot;%COMPUTERNAME%-AFS&quot;.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993207"></a><a name="_Toc126872284"></a><a
!   name="_Toc115416215">Value: IsGateway</a></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: isGateway</p>
    <p class=MsoBodyText>Select whether or not this AFS client should act as a
!   gateway.  If set and the NetBIOS name hostname-AFS is bound to a physical
!   NIC, other machines in the subnet can access AFS via SMB connections to
!   hostname-AFS.</p>
    <p class=MsoBodyText>When IsGateway is non-zero, the LAN adapter detection
!   code will avoid binding to a loopback adapter.  This will ensure that the NetBIOS
!   name will be of the form hostname-AFS instead of the value set by the
    &quot;NetbiosName&quot; registry value.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993208"></a><a name="_Toc126872285"></a><a
!   name="_Toc115416216">Value: ReportSessionStartups</a></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: reportSessionStartups</p>
    <p class=MsoBodyText>If enabled, all SMB sessions created are recorded in the
!   Application event log.  This also enables other events such as drive mappings
!   or various error types to be logged.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993209"></a><a name="_Toc126872286"></a><a
!   name="_Toc115416217"></a><a name="_Value_:_TraceBufferSize"></a>Value:
!   TraceBufferSize</h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 5000 (CM_CONFIGDEFAULT_TRACEBUFSIZE)<br>
    Variable: traceBufSize</p>
    <p class=MsoBodyText>Number of entries to keep in trace log.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993210"></a><a name="_Toc126872287"></a><a
!   name="_Toc115416218"></a><a name="_Value_:_SysName"></a>Value: SysName</h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;i386_nt40&quot;<br>
    Variable: cm_sysName</p>
!   <p class=MsoBodyText>Provides an initial value for &quot;fs sysname&quot;. 
!   The string can contain one or more replacement values for @sys in order of
!   preference separated by whitespace.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993211"></a><a name="_Toc126872288"></a><a
!   name="_Toc115416219"></a><a name="_Value_:_SecurityLevel"></a>Value:
!   SecurityLevel</h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cryptall</p>
    <p class=MsoBodyText>Enables encryption on RX calls.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993212"></a><a name="_Toc126872289"></a><a
!   name="_Toc115416220"></a><a name="_Value_:_UseDNS"></a>Value: UseDNS</h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: cm_dnsEnabled</p>
***************
*** 6401,6434 ****
    above.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:19;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="_Toc115416221"></a><a name="_Value_:_FreelanceClient"></a><span
!   style='mso-bookmark:_Toc115416221'>Value: FreelanceClient</span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cm_freelanceEnabled</p>
    <p class=MsoBodyText>Enables freelance client.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:20;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="_Toc115416222"></a><a name="_Value_:_HideDotFiles"></a><span
!   style='mso-bookmark:_Toc115416222'>Value: HideDotFiles</span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: smb_hideDotFiles</p>
!   <p class=MsoBodyText>Enables marking dotfiles with the hidden attribute.<span
!   style='mso-spacerun:yes'>  </span>Dot files are files whose name starts with
!   a period (excluding &quot;.&quot; and &quot;..&quot;).</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:21;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="_Toc115416223">Value: MaxMpxRequests</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 50<br>
    Variable: smb_maxMpxRequests</p>
--- 3500,3536 ----
    above.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993213"></a><a name="_Toc126872290"></a><a
!   name="_Toc115416221"></a><a name="_Value_:_FreelanceClient"></a>Value:
!   FreelanceClient</h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cm_freelanceEnabled</p>
    <p class=MsoBodyText>Enables freelance client.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993214"></a><a name="_Toc126872291"></a><a
!   name="_Toc115416222"></a><a name="_Value_:_HideDotFiles"></a>Value:
!   HideDotFiles</h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: smb_hideDotFiles</p>
!   <p class=MsoBodyText>Enables marking dotfiles with the hidden attribute.  Dot
!   files are files whose name starts with a period (excluding &quot;.&quot; and
!   &quot;..&quot;).</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993215"></a><a name="_Toc126872292"></a><a
!   name="_Toc115416223">Value: MaxMpxRequests</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 50<br>
    Variable: smb_maxMpxRequests</p>
***************
*** 6436,6456 ****
    made.</p>
    </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="_Toc115416224">Value: MaxVCPerServer</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 100<br>
    Variable: smb_maxVCPerServer</p>
    <p class=MsoBodyText>Maximum number of SMB virtual circuits.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:23;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="_Toc115416225"></a><a name="_Value_:_Cell"></a><span
!   style='mso-bookmark:_Toc115416225'>Value: Cell</span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: rootCellName</p>
--- 3538,3559 ----
    made.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993216"></a><a name="_Toc126872293"></a><a
!   name="_Toc115416224">Value: MaxVCPerServer</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 100<br>
    Variable: smb_maxVCPerServer</p>
    <p class=MsoBodyText>Maximum number of SMB virtual circuits.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993217"></a><a name="_Toc126872294"></a><a
!   name="_Toc115416225"></a><a name="_Value_:_Cell"></a>Value: Cell</h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: rootCellName</p>
***************
*** 6458,6467 ****
    be mounted in \\afs\all).</p>
    </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="_Toc115416226">Value: RxNoJumbo</a></h5>
    <p class=MsoBodyText>Type: DWORD {0,1}<br>
    Default: 0<br>
    Variable: rx_nojumbo</p>
--- 3561,3571 ----
    be mounted in \\afs\all).</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993218"></a><a name="_Toc126872295"></a><a
!   name="_Toc115416226">Value: RxNoJumbo</a></h5>
    <p class=MsoBodyText>Type: DWORD {0,1}<br>
    Default: 0<br>
    Variable: rx_nojumbo</p>
***************
*** 6469,6479 ****
    to send or receive RX jumbograms.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:25;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="_Toc115416227"></a><a name="_Value_:_RxMaxMTU"></a><span
!   style='mso-bookmark:_Toc115416227'>Value: RxMaxMTU</span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: -1<br>
    Variable: rx_mtu</p>
--- 3573,3583 ----
    to send or receive RX jumbograms.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993219"></a><a name="_Toc126872296"></a><a
!   name="_Toc115416227"></a><a name="_Value_:_RxMaxMTU"></a>Value: RxMaxMTU</h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: -1<br>
    Variable: rx_mtu</p>
***************
*** 6483,6492 ****
    IPSec VPN client, this value must be set to 1264 or smaller.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:26;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="_Toc115416228">Value: ConnDeadTimeout</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 60 (seconds)<br>
    Variable: ConnDeadtimeout</p>
--- 3587,3598 ----
    IPSec VPN client, this value must be set to 1264 or smaller.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993220"></a><a name="_Toc126872297"></a><a
!   name="_Toc115416228"></a><a name="_Value:_ConnDeadTimeout"></a>Value:
!   ConnDeadTimeout</h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 60 (seconds)<br>
    Variable: ConnDeadtimeout</p>
***************
*** 6495,6528 ****
    [HKLM\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters]
    SessTimeout</p>
    <p class=MsoBodyText>If the minimum SMB timeout is not specified the value is
!   45 seconds.<span style='mso-spacerun:yes'>  </span>See <a
    href="http://support.microsoft.com/support/kb/articles/Q102/0/67.asp">http://support.microsoft.com:80/support/kb/articles/Q102/0/67.asp</a></p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:27;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="_Toc115416229">Value: HardDeadTimeout</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 120 (seconds)<br>
    Variable: HardDeadtimeout</p>
    <p class=MsoBodyText>The Hard Dead Time is enforced to be at least double the
!   ConnDeadTimeout.<span style='mso-spacerun:yes'>  </span>The provides an
!   opportunity for at least one retry.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:28;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="_Toc115416230"></a><a name="_Value__:_TraceOption"></a><span
!   style='mso-bookmark:_Toc115416230'>Value: TraceOption</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.<span style='mso-spacerun:yes'>  </span></p>
    <p class=MsoBodyText>Bit 1 enables logging of events captured by the AFS
    Client Service.</p>
    <p class=MsoBodyText>Bit 2 enables real-time viewing of &quot;fs trace&quot;
--- 3601,3633 ----
    [HKLM\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters]
    SessTimeout</p>
    <p class=MsoBodyText>If the minimum SMB timeout is not specified the value is
!   45 seconds.  See <a
    href="http://support.microsoft.com/support/kb/articles/Q102/0/67.asp">http://support.microsoft.com:80/support/kb/articles/Q102/0/67.asp</a></p>
    </td>
   </tr>
!  <tr style='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="_Toc139993221"></a><a name="_Toc126872298"></a><a
!   name="_Toc115416229">Value: HardDeadTimeout</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 120 (seconds)<br>
    Variable: HardDeadtimeout</p>
    <p class=MsoBodyText>The Hard Dead Time is enforced to be at least double the
!   ConnDeadTimeout.  The provides an opportunity for at least one retry.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993222"></a><a name="_Toc126872299"></a><a
!   name="_Toc115416230"></a><a name="_Value__:_TraceOption"></a>Value:
!   TraceOption</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.  </p>
    <p class=MsoBodyText>Bit 1 enables logging of events captured by the AFS
    Client Service.</p>
    <p class=MsoBodyText>Bit 2 enables real-time viewing of &quot;fs trace&quot;
***************
*** 6530,6715 ****
    <p class=MsoBodyText>Bit 3 enables &quot;fs trace&quot; logging on startup.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:29;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="_Toc115416231">Value: AllSubmount</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1</p>
    <p class=MsoBodyText>Variable: allSubmount (smb.c)</p>
    <p class=MsoBodyText>By setting this value to 0, the
!   &quot;\\NetbiosName\all&quot; mount point will not be created.<span
!   style='mso-spacerun:yes'>  </span>This allows the read-write versions of
!   root.afs to be hidden.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:30;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="_Toc115416232"></a><a name="_Value___:_NoFindLanaByName"></a><span
!   style='mso-bookmark:_Toc115416232'>Value: NoFindLanaByName</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
    use by looking for an adapter with a display name of &quot;AFS&quot;.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:31;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="_Toc115416233">Value: MaxCPUs</a></h5>
    <p class=MsoBodyText>Type: DWORD {1..32} or {1..64} depending on the
    architecture<br>
    Default: &lt;no default&gt;</p>
    <p class=MsoBodyText>If this value is specified, afsd_service.exe will
    restrict itself to executing on the specified number of CPUs if there are a
!   greater number installed in the machine.<span style='mso-spacerun:yes'> 
!   </span></p>
    </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="_Toc115416234"></a><a name="_Value___:_smbAuthType"></a><span
!   style='mso-bookmark:_Toc115416234'>Value: smbAuthType</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
    authentication which must be present in order for the Windows SMB client to
!   connect to the AFS Client Service's SMB server.<span
!   style='mso-spacerun:yes'>  </span>The values are:</p>
    <p class=MsoBodyText>0 = No authentication required<br>
    1 = NTLM authentication required<br>
    2 = Extended (GSS SPNEGO) authentication required<br>
    The default is Extended authentication</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="_Toc115416235"></a><a name="_Value___:_MaxLogSize"></a><span
!   style='mso-bookmark:_Toc115416235'>Value: MaxLogSize</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.<span style='mso-spacerun:yes'>  </span>If the
!   file is larger than this value when afsd_service.exe starts the file will be
!   reset to 0 bytes.<span style='mso-spacerun:yes'>  </span>If this value is 0,
!   it means the file should be allowed to grow indefinitely.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:34;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="_Toc115416236">Value: FlushOnHibernate</a></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
    hibernate or stand-by.</p>
    </td>
   </tr>
-  <tr style='mso-yfti-irow:35;height:65.75pt'>
-   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
-   height:65.75pt'>
-   <h5>Value: RxEnablePeerStats</h5>
-   <p class=MsoBodyText>Type: REG_DWORD<br>
-   Default: 0x0</p>
-   <p class=MsoBodyText>This value will enable the gathering of RX Statistics
-   for connections with the Cache Manager’s Peers.<span
-   style='mso-spacerun:yes'>  </span>This functionality can be adjusted at runtime
-   with the “fs rxstatpeer” command.</p>
-   </td>
-  </tr>
-  <tr style='mso-yfti-irow:36;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>Value: RxEnableProcessStats</h5>
-   <p class=MsoBodyText>Type: REG_DWORD<br>
-   Default: 0x0</p>
-   <p class=MsoBodyText>This value will enable the gathering of RX Statistics
-   for the Cache Manager’s Process.<span style='mso-spacerun:yes'>  </span>This functionality
-   can be adjusted at runtime with the “fs rxstatproc” command.</p>
-   </td>
-  </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416237">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416238">Value: &lt;Drive
!   Letter:&gt; for example &quot;G:&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Specifies the submount name to
!   be mapped by afsd_service.exe at startup to the provided drive letter.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416239">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416240"></a><a
!   name="_Value___:_CellServDBDir"></a><span style='mso-bookmark:_Toc115416240'>Value:
!   CellServDBDir</span></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &lt;not defined&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Specifies the directory
!   containing the CellServDB file.<span style='mso-spacerun:yes'>  </span>When
!   this value is not specified, the AFS Client install directory is used.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0;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="_Toc115416241"></a><a name="_Value___:_VerifyServiceSignature"></a><span
!   style='mso-bookmark:_Toc115416241'>Value: VerifyServiceSignature</span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x1</p>
    <p class=MsoBodyText>This value can be used to disable the runtime
    verification of the digital signatures applied to afsd_service.exe and the
!   OpenAFS DLLs it loads.<span style='mso-spacerun:yes'>  </span>This test is
!   performed to verify that<span style='mso-spacerun:yes'>   </span>the DLLs
    which are loaded by afsd_service.exe are from the same distribution as
!   afsd_service.exe.<span style='mso-spacerun:yes'>  </span>This is to prevent
!   random errors caused when DLLs from one distribution of AFS are loaded by
!   another one.<span style='mso-spacerun:yes'>  </span>This is not a security
!   test.<span style='mso-spacerun:yes'>  </span>The reason for disabling this
!   test is to free up additional memory which can be used for a large cache
!   size.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:1;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="_Toc115416242"></a><a name="_Value___:_IoctlDebug"></a><span
!   style='mso-bookmark:_Toc115416242'>Value: IoctlDebug</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()
!   failures.<span style='mso-spacerun:yes'>  </span>Set a non-zero value and the
!   pioctl() library will output status information to stdout.<span
!   style='mso-spacerun:yes'>  </span>Executing command line tools such as
!   tokens.exe, fs.exe, etc can then be used to determine why the pioctl() call
!   is failing. </p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:2;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="_Toc115416243">Value: MiniDumpType</a></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
--- 3635,3793 ----
    <p class=MsoBodyText>Bit 3 enables &quot;fs trace&quot; logging on startup.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993223"></a><a name="_Toc126872300"></a><a
!   name="_Toc115416231">Value: AllSubmount</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1</p>
    <p class=MsoBodyText>Variable: allSubmount (smb.c)</p>
    <p class=MsoBodyText>By setting this value to 0, the
!   &quot;\\NetbiosName\all&quot; mount point will not be created.  This allows
!   the read-write versions of root.afs to be hidden.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993224"></a><a name="_Toc126872301"></a><a
!   name="_Toc115416232"></a><a name="_Value___: NoFindLanaByName"></a>Value:
!   NoFindLanaByName</h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoBodyText>Disables the attempt to identity the network adapter to
    use by looking for an adapter with a display name of &quot;AFS&quot;.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993225"></a><a name="_Toc126872302"></a><a
!   name="_Toc115416233">Value: MaxCPUs</a></h5>
    <p class=MsoBodyText>Type: DWORD {1..32} or {1..64} depending on the
    architecture<br>
    Default: &lt;no default&gt;</p>
    <p class=MsoBodyText>If this value is specified, afsd_service.exe will
    restrict itself to executing on the specified number of CPUs if there are a
!   greater number installed in the machine.  </p>
    </td>
   </tr>
!  <tr style='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="_Toc139993226"></a><a name="_Toc126872303"></a><a
!   name="_Toc115416234"></a><a name="_Value___: smbAuthType"></a>Value:
!   smbAuthType</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
    authentication which must be present in order for the Windows SMB client to
!   connect to the AFS Client Service's SMB server.  The values are:</p>
    <p class=MsoBodyText>0 = No authentication required<br>
    1 = NTLM authentication required<br>
    2 = Extended (GSS SPNEGO) authentication required<br>
    The default is Extended authentication</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993227"></a><a name="_Toc126872304"></a><a
!   name="_Toc115416235"></a><a name="_Value___: MaxLogSize"></a>Value:
!   MaxLogSize</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.  If the file is larger than this value when
!   afsd_service.exe starts the file will be reset to 0 bytes.  If this value is
!   0, it means the file should be allowed to grow indefinitely.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993228"></a><a name="_Toc126872305"></a><a
!   name="_Toc115416236">Value: FlushOnHibernate</a></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
    hibernate or stand-by.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993229"></a><a
! name="_Toc126872306"></a><a name="_Toc115416237">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993230"></a><a name="_Toc126872307"></a><a
!   name="_Toc115416238">Value: &lt;Drive Letter:&gt; for example &quot;G:&quot;</a></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>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993231"></a><a
! name="_Toc126872308"></a><a name="_Toc115416239">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993232"></a><a name="_Toc126872309"></a><a
!   name="_Toc115416240"></a><a name="_Value___: CellServDBDir"></a>Value:
!   CellServDBDir</h5>
!   <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;not defined&gt;</p>
!   <p class=MsoBodyText>Specifies the directory containing the CellServDB file. 
!   When this value is not specified, the AFS Client install directory is used.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993233"></a><a name="_Toc126872310"></a><a
!   name="_Toc115416241"></a><a name="_Value___: VerifyServiceSignature"></a>Value:
!   VerifyServiceSignature</h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x1</p>
    <p class=MsoBodyText>This value can be used to disable the runtime
    verification of the digital signatures applied to afsd_service.exe and the
!   OpenAFS DLLs it loads.  This test is performed to verify that   the DLLs
    which are loaded by afsd_service.exe are from the same distribution as
!   afsd_service.exe.  This is to prevent random errors caused when DLLs from one
!   distribution of AFS are loaded by another one.  This is not a security test. 
!   The reason for disabling this test is to free up additional memory which can
!   be used for a large cache size.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993234"></a><a name="_Toc126872311"></a><a
!   name="_Toc115416242"></a><a name="_Value___: IoctlDebug"></a>Value:
!   IoctlDebug</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()
!   failures.  Set a non-zero value and the pioctl() library will output status
!   information to stdout.  Executing command line tools such as tokens.exe,
!   fs.exe, etc can then be used to determine why the pioctl() call is failing. </p>
    </td>
   </tr>
!  <tr style='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="_Toc139993235"></a><a name="_Toc126872312"></a><a
!   name="_Toc115416243">Value: MiniDumpType</a></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
***************
*** 6717,6724 ****
    initiated is dump file is generated with the &quot;fs.exe minidump&quot;
    command.</p>
    <p class=MsoBodyText>Valid values are dependent on the version of DbgHelp.dll
!   installed on the machine.<span style='mso-spacerun:yes'>  </span>See the
!   Microsoft Developer Library for further information.</p>
    <p class=MsoBodyText>MiniDumpNormal = 0x00000000,<br>
    MiniDumpWithDataSegs = 0x00000001,<br>
    MiniDumpWithFullMemory = 0x00000002,<br>
--- 3795,3802 ----
    initiated is dump file is generated with the &quot;fs.exe minidump&quot;
    command.</p>
    <p class=MsoBodyText>Valid values are dependent on the version of DbgHelp.dll
!   installed on the machine.  See the Microsoft Developer Library for further
!   information.</p>
    <p class=MsoBodyText>MiniDumpNormal = 0x00000000,<br>
    MiniDumpWithDataSegs = 0x00000001,<br>
    MiniDumpWithFullMemory = 0x00000002,<br>
***************
*** 6736,7019 ****
    MiniDumpWithCodeSegs = 0x00002000</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:3;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="_Toc115416244"></a><a name="_Value___:_StoreAnsiFilenames"></a><span
!   style='mso-bookmark:_Toc115416244'>Value: StoreAnsiFilenames</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.<span style='mso-spacerun:yes'>  </span></p>
    <p class=MsoBodyText>Note: The use of ANSI characters will render access to
!   files with 8-bit OEM file names unaccessible from Windows.<span
!   style='mso-spacerun:yes'>  </span>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.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416245">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416246">Value: &quot;smb/cifs
!   share name&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This key is used to map SMB/CIFS
!   shares to Client Side Caching (off-line access) policies. For each share one
!   of the following policies may be used: &quot;manual&quot;,
!   &quot;programs&quot;, &quot;documents&quot;, &quot;disable&quot;.<span
!   style='mso-spacerun:yes'>  </span></p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>These values used to be stored
!   in afsdsbmt.ini</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416247"></a><a
! name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie"></a><![if !supportLists]><span
! style='mso-bookmark:_Toc115416247'></span><![endif]><span style='mso-bookmark:
! _Toc115416247'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</span></h3>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416248">Value: &quot;numeric
!   value&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This key is used to store dot
!   terminated mount point strings for use in constructing the fake root.afs
!   volume when Freelance (dynamic roots) mode is activated.</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>&quot;athena.mit.edu#athena.mit.edu:root.cell.&quot;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>&quot;.athena.mit.edu%athena.mit.edu:root.cell.&quot;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>These values used to be stored
!   in afs_freelance.ini</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416249"></a><a
! name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_1"></a><![if !supportLists]><span
! style='mso-bookmark:_Toc115416249'></span><![endif]><span style='mso-bookmark:
! _Toc115416249'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</span></h3>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416250">Value: &quot;numeric
!   value&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This key is used to store a dot
!   terminated symlink strings for use in constructing the fake root.afs volume
!   when Freelance (dynamic roots) mode is activated.</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>&quot;linkname:destination-path.&quot;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>&quot;<st1:GivenName w:st="on">athena</st1:GivenName>:athena.mit.edu.&quot;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>&quot;home:athena.mit.edu\user\j\a\jaltman.&quot;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>&quot;filename:path\file.&quot;</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416251">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416252">Value: &quot;submount
!   name&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_EXPAND_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This key is used to store
!   mappings of UNIX style AFS paths to submount names which can be referenced as
!   UNC paths.<span style='mso-spacerun:yes'>  </span>For example the submount
!   string “/athena.mit.edu/user/j/a/jaltman&quot; can be associated with the
!   submount name &quot;jaltman.home&quot;.<span style='mso-spacerun:yes'> 
!   </span>This can then be referenced as the UNC path \\AFS\jaltman.home.</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>These values used to be stored
!   in afsdsbmt.ini</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>NOTE: Submounts should no longer
!   be used with OpenAFS. Use the Windows Explorer to create drive mappings to
!   AFS UNC paths instead of using the AFS Submount mechanism.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416253"></a><a
! name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_2"></a><![if !supportLists]><span
! style='mso-bookmark:_Toc115416253'></span><![endif]><span style='mso-bookmark:
! _Toc115416253'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</span></h3>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416254">Value: &quot;hostname or
!   ip address&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_DWORD<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This key is used to specify a
!   default set of VLDB server preferences. For each entry the value name will be
!   either the IP address of a server or a fully qualified domain name.<span
!   style='mso-spacerun:yes'>  </span>The value will be the ranking.<span
!   style='mso-spacerun:yes'>  </span>The ranking will be adjusted by a random
!   value between 0 and 256 prior to the preference being set.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416255">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\File]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416256">Value: &quot;hostname or
!   ip address&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_DWORD<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>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.<span
!   style='mso-spacerun:yes'>  </span>The value will be the ranking.<span
!   style='mso-spacerun:yes'>  </span>The ranking will be adjusted by a random
!   value between 0 and 256 prior to the preference being set.</p>
    </td>
   </tr>
  </table>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417105"></a><a
! name="_Toc115416257"><span style='mso-bookmark:_Toc115417105'>A.2. Integrated
! Logon Network provider parameters</span></a></h2>
  
  <p class=MsoBodyText>Affects the network provider (afslogon.dll).</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416258">Regkey:
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416259">Value: FailLoginsSilently</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD<br>
    Default: 0</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Do not display message boxes if
!   the login fails.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416260">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416261">Value: NoWarnings</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD<br>
    Default: 0</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Disables visible warnings during
!   logon.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0;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="_Toc115416262">Value: AuthentProviderPath</a></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: %WINDIR%\SYSTEM32\afslogon.dll</p>
    <p class=MsoBodyText>Specifies the install location of the authentication
    provider dll.</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="_Toc115416263">Value: Class</a></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:2;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="_Toc115416264">Value: DependOnGroup</a></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.<span style='mso-spacerun:yes'>  </span>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: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="_Toc115416265">Value: DependOnService</a></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
!   Service depends.<span style='mso-spacerun:yes'>  </span>Windows should not
!   attempt to start the AFS Client Service until all of the specified services
!   have successfully started.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:4;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="_Toc115416266">Value: Name</a></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:5;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="_Toc115416267">Value: ProviderPath</a></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>
--- 3814,4072 ----
    MiniDumpWithCodeSegs = 0x00002000</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993236"></a><a name="_Toc126872313"></a><a
!   name="_Toc115416244"></a><a name="_Value___: StoreAnsiFilenames"></a>Value:
!   StoreAnsiFilenames</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.  </p>
    <p class=MsoBodyText>Note: The use of ANSI characters will render access to
!   files with 8-bit OEM file names unaccessible from Windows.  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.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993237"></a><a
! name="_Toc126872314"></a><a name="_Toc115416245">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993238"></a><a name="_Toc126872315"></a><a
!   name="_Toc115416246">Value: &quot;smb/cifs share name&quot;</a></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
!   Caching (off-line access) policies. For each share one of the following
!   policies may be used: &quot;manual&quot;, &quot;programs&quot;,
!   &quot;documents&quot;, &quot;disable&quot;.  </p>
!   <p class=MsoBodyText>These values used to be stored in afsdsbmt.ini</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993239"></a><a
! name="_Toc126872316"></a><a name="_Toc115416247"></a><a
! name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie"></a>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</h3>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993240"></a><a name="_Toc126872317"></a><a
!   name="_Toc115416248">Value: &quot;numeric value&quot;</a></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
!   strings for use in constructing the fake root.afs volume when Freelance
!   (dynamic roots) mode is activated.</p>
!   <p class=MsoBodyText>&quot;athena.mit.edu#athena.mit.edu:root.cell.&quot;</p>
!   <p class=MsoBodyText>&quot;.athena.mit.edu%athena.mit.edu:root.cell.&quot;</p>
!   <p class=MsoBodyText>These values used to be stored in afs_freelance.ini</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993241"></a><a
! name="_Toc126872318"></a><a name="_Toc115416249"></a><a
! name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_1"></a>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</h3>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993242"></a><a name="_Toc126872319"></a><a
!   name="_Toc115416250">Value: &quot;numeric value&quot;</a></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
!   strings for use in constructing the fake root.afs volume when Freelance
!   (dynamic roots) mode is activated.</p>
!   <p class=MsoBodyText>&quot;linkname:destination-path.&quot;</p>
!   <p class=MsoBodyText>&quot;athena:athena.mit.edu.&quot;</p>
!   <p class=MsoBodyText>&quot;home:athena.mit.edu\user\j\a\jaltman.&quot;</p>
!   <p class=MsoBodyText>&quot;filename:path\file.&quot;</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993243"></a><a
! name="_Toc126872320"></a><a name="_Toc115416251">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='height:171.75pt'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:171.75pt'>
!   <h5><a name="_Toc139993244"></a><a name="_Toc126872321"></a><a
!   name="_Toc115416252">Value: &quot;submount name&quot;</a></h5>
!   <p class=MsoBodyText>Type: REG_EXPAND_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText>This key is used to store mappings of UNIX style AFS
!   paths to submount names which can be referenced as UNC paths.  For example
!   the submount string “/athena.mit.edu/user/j/a/jaltman&quot; can be associated
!   with the submount name &quot;jaltman.home&quot;.  This can then be referenced
!   as the UNC path \\AFS\jaltman.home.</p>
!   <p class=MsoBodyText>These values used to be stored in afsdsbmt.ini</p>
!   <p class=MsoBodyText>NOTE: Submounts should no longer be used with OpenAFS.
!   Use the Windows Explorer to create drive mappings to AFS UNC paths instead of
!   using the AFS Submount mechanism.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993245"></a><a
! name="_Toc126872322"></a><a name="_Toc115416253"></a><a
! name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_2"></a>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</h3>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993246"></a><a name="_Toc126872323"></a><a
!   name="_Toc115416254">Value: &quot;hostname or ip address&quot;</a></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
!   preferences. For each entry the value name will be either the IP address of a
!   server or a fully qualified domain name.  The value will be the ranking.  The
!   ranking will be adjusted by a random value between 0 and 256 prior to the
!   preference being set.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993247"></a><a
! name="_Toc126872324"></a><a name="_Toc115416255">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\File]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993248"></a><a name="_Toc126872325"></a><a
!   name="_Toc115416256">Value: &quot;hostname or ip address&quot;</a></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.  The value will be the ranking.  The
!   ranking will be adjusted by a random value between 0 and 256 prior to the
!   preference being set.</p>
    </td>
   </tr>
  </table>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993249"></a><a
! name="_Toc126872326"></a><a name="_Toc115417105"></a><a name="_Toc115416257">A.2.
! Integrated Logon Network provider parameters</a></h2>
  
  <p class=MsoBodyText>Affects the network provider (afslogon.dll).</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993250"></a><a
! name="_Toc126872327"></a><a name="_Toc115416258">Regkey: [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993251"></a><a name="_Toc126872328"></a><a
!   name="_Toc115416259">Value: FailLoginsSilently</a></h5>
!   <p class=MsoBodyText>Type: DWORD<br>
    Default: 0</p>
!   <p class=MsoBodyText>Do not display message boxes if the login fails.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993252"></a><a
! name="_Toc126872329"></a><a name="_Toc115416260">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993253"></a><a name="_Toc126872330"></a><a
!   name="_Toc115416261">Value: NoWarnings</a></h5>
!   <p class=MsoBodyText>Type: DWORD<br>
    Default: 0</p>
!   <p class=MsoBodyText>Disables visible warnings during logon.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993254"></a><a name="_Toc126872331"></a><a
!   name="_Toc115416262">Value: AuthentProviderPath</a></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: %WINDIR%\SYSTEM32\afslogon.dll</p>
    <p class=MsoBodyText>Specifies the install location of the authentication
    provider dll.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993255"></a><a name="_Toc126872332"></a><a
!   name="_Toc115416263">Value: Class</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    NSIS: 0x02</p>
    <p class=MsoBodyText>Specifies the class of network provider</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993256"></a><a name="_Toc126872333"></a><a
!   name="_Toc115416264">Value: DependOnGroup</a></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.  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='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="_Toc139993257"></a><a name="_Toc126872334"></a><a
!   name="_Toc115416265">Value: DependOnService</a></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
!   Service depends.  Windows should not attempt to start the AFS Client Service
!   until all of the specified services have successfully started.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993258"></a><a name="_Toc126872335"></a><a
!   name="_Toc115416266">Value: Name</a></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='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="_Toc139993259"></a><a name="_Toc126872336"></a><a
!   name="_Toc115416267">Value: ProviderPath</a></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>
***************
*** 7021,7124 ****
   </tr>
  </table>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417106"></a><a
! name="_Toc115416268"></a><a name="_A.2.1_Domain_specific_configuration"></a><![if !supportLists]><span
! style='mso-bookmark:_Toc115417106'><span style='mso-bookmark:_Toc115416268'></span></span><![endif]><span
! style='mso-bookmark:_Toc115417106'><span style='mso-bookmark:_Toc115416268'>A.2.1
! Domain specific configuration keys for the Network Provider</span></span></h2>
  
  <p class=MsoBodyText>The network provider can be configured to have different
! behavior depending on the domain that the user logs into.<span
! style='mso-spacerun:yes'>  </span>These settings are only relevant when using
! integrated login.<span style='mso-spacerun:yes'>  </span>A domain refers to an
! Active Directory (AD) domain, a trusted Kerberos (non-AD) realm or the local
! machine (i.e. local account logins).<span style='mso-spacerun:yes'>  </span>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>Domain specific registry keys are:</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416269">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</a></h3>
  
! <p class=MsoBodyText><span style='mso-spacerun:yes'>  </span>(NP key)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416270">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</a></h3>
  
! <p class=MsoBodyText><span style='mso-spacerun:yes'>  </span>(Domains key)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416271">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\&quot;domain
  name&quot;]</a></h3>
  
! <p class=MsoBodyText><span style='mso-spacerun:yes'>  </span>(Specific domain
! key. One per domain.)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416272">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</a></h3>
  
! <p class=MsoBodyText><span style='mso-spacerun:yes'>  </span>(Localhost key)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416273">Example:</a></h3>
  
! <p class=PreformattedText><span
! style='mso-spacerun:yes'> </span>HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>  </span>|</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>  </span>+- Domain</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    
! </span>+-AD1.EXAMPLE.COM</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    
! </span>+-AD2.EXAMPLE.NET</p>
  
! <p class=PreformattedText><span style='mso-spacerun:yes'>    
! </span>+-LOCALHOST</p>
  
  <p class=MsoBodyText>Each of the domain specific keys can have the set of
! values described in 2.1.1.<span style='mso-spacerun:yes'>  </span>The effective
! values are chosen as described in 2.1.2.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416274">A.2.1.1
! Domain specific configuration values</a></h3>
  
! <h4><a name="_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]</a></h4>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416276"></a><a
!   name="_Value___:_LogonOptions"></a><span style='mso-bookmark:_Toc115416276'>Value:
!   LogonOptions</span></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD<br>
    Default: 0x01</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>NSIS/WiX: depends on user
!   configuration</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>0x00 - Integrated Logon is not
!   used<br>
    0x01 - Integrated Logon is used<br>
    0x02 - High Security Mode is used (deprecated)<br>
    0x03 - Integrated Logon with High Security Mode is used (deprecated)</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>High Security Mode generates
!   random SMB names for the creation of Drive Mappings.<span
!   style='mso-spacerun:yes'>  </span>This mode should not be used without
!   Integrated Logon.</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>As of 1.3.65 the SMB server
!   supports SMB authentication.<span style='mso-spacerun:yes'>  </span>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:0;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="_Toc115416277">Value: FailLoginsSilentl</a></h5>
    <p class=MsoBodyText>Type: DWORD (1|0)<br>
    Default: 0<br>
    NSIS/WiX: (not set)</p>
--- 4074,4172 ----
   </tr>
  </table>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993260"></a><a
! name="_Toc126872337"></a><a name="_Toc115417106"></a><a name="_Toc115416268"></a><a
! name="_A.2.1_Domain_specific_configuration"></a>A.2.1 Domain specific
! configuration keys for the Network Provider</h2>
  
  <p class=MsoBodyText>The network provider can be configured to have different
! behavior depending on the domain that the user logs into.  These settings are only
! relevant when using integrated login.  A domain refers to an Active Directory
! (AD) domain, a trusted Kerberos (non-AD) realm or the local machine (i.e. local
! account logins).  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>Domain specific registry keys are:</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993261"></a><a
! name="_Toc126872338"></a><a name="_Toc115416269">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</a></h3>
  
! <p class=MsoBodyText>  (NP key)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993262"></a><a
! name="_Toc126872339"></a><a name="_Toc115416270">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</a></h3>
  
! <p class=MsoBodyText>  (Domains key)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993263"></a><a
! name="_Toc126872340"></a><a name="_Toc115416271">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\&quot;domain
  name&quot;]</a></h3>
  
! <p class=MsoBodyText>  (Specific domain key. One per domain.)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993264"></a><a
! name="_Toc126872341"></a><a name="_Toc115416272">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</a></h3>
  
! <p class=MsoBodyText>  (Localhost key)</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993265"></a><a
! name="_Toc126872342"></a><a name="_Toc115416273">Example:</a></h3>
  
! <p class=PreformattedText> HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider</p>
  
! <p class=PreformattedText>  |</p>
  
! <p class=PreformattedText>  +- Domain</p>
  
! <p class=PreformattedText>     +-AD1.EXAMPLE.COM</p>
  
! <p class=PreformattedText>     +-AD2.EXAMPLE.NET</p>
  
! <p class=PreformattedText>     +-LOCALHOST</p>
  
  <p class=MsoBodyText>Each of the domain specific keys can have the set of
! values described in 2.1.1.  The effective values are chosen as described in
! 2.1.2.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993266"></a><a
! name="_Toc126872343"></a><a name="_Toc115416274">A.2.1.1 Domain specific
! configuration values</a></h3>
  
! <h4><a name="_Toc139993267"></a><a name="_Toc126872344"></a><a
! name="_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]</a></h4>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993268"></a><a name="_Toc126872345"></a><a
!   name="_Toc115416276"></a><a name="_Value___: LogonOptions"></a>Value:
!   LogonOptions</h5>
!   <p class=MsoBodyText>Type: DWORD<br>
    Default: 0x01</p>
!   <p class=MsoBodyText>NSIS/WiX: depends on user configuration</p>
!   <p class=MsoBodyText>0x00 - Integrated Logon is not used<br>
    0x01 - Integrated Logon is used<br>
    0x02 - High Security Mode is used (deprecated)<br>
    0x03 - Integrated Logon with High Security Mode is used (deprecated)</p>
!   <p class=MsoBodyText>High Security Mode generates random SMB names for the
!   creation of Drive Mappings.  This mode should not be used without Integrated
!   Logon.</p>
!   <p class=MsoBodyText>As of 1.3.65 the SMB server supports SMB
!   authentication.  The High Security Mode should not be used when using SMB
!   authentication (SMBAuthType setting is non zero).</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993269"></a><a name="_Toc126872346"></a><a
!   name="_Toc115416277">Value: FailLoginsSilentl</a></h5>
    <p class=MsoBodyText>Type: DWORD (1|0)<br>
    Default: 0<br>
    NSIS/WiX: (not set)</p>
***************
*** 7126,7152 ****
    event of an error during the integrated login process.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:1;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="_Toc115416278">Value: LogonScript</a></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
    -a -m -n -q</p>
    <p class=MsoBodyText>A logon script that will be scheduled to be run after
!   the profile load is complete.<span style='mso-spacerun:yes'>  </span>If using
!   the REG_EXPAND_SZ type, you can use any system environment variable as
!   &quot;%varname%&quot; which would be expanded at the time the network
!   provider is run.<span style='mso-spacerun:yes'>  </span>Optionally using a
    &quot;%s&quot; in the value would result in it being expanded into the AFS
    SMB username for the session.</p>
    </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="_Toc115416279">Value: LoginRetryInterval</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 30<br>
    NSIS/WiX: (not set)</p>
--- 4174,4201 ----
    event of an error during the integrated login process.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993270"></a><a name="_Toc126872347"></a><a
!   name="_Toc115416278">Value: LogonScript</a></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
    -a -m -n -q</p>
    <p class=MsoBodyText>A logon script that will be scheduled to be run after
!   the profile load is complete.  If using the REG_EXPAND_SZ type, you can use
!   any system environment variable as &quot;%varname%&quot; which would be
!   expanded at the time the network provider is run.  Optionally using a
    &quot;%s&quot; in the value would result in it being expanded into the AFS
    SMB username for the session.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993271"></a><a name="_Toc126872348"></a><a
!   name="_Toc115416279">Value: LoginRetryInterval</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 30<br>
    NSIS/WiX: (not set)</p>
***************
*** 7156,7176 ****
    if the service is up.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:3;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="_Toc115416280">Value: LoginSleepInterval</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 5<br>
    NSIS/WiX: (not set)</p>
    <p class=MsoBodyText>See description of LoginRetryInterval.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:4;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="_Toc115416281"></a><a name="_Value:_TheseCells"></a><span
!   style='mso-bookmark:_Toc115416281'>Value: TheseCells</span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: &lt;not set&gt;</p>
    <p class=MsoBodyText>When Kerberos 5 is being used, TheseCells provides a
--- 4205,4226 ----
    if the service is up.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993272"></a><a name="_Toc126872349"></a><a
!   name="_Toc115416280">Value: LoginSleepInterval</a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 5<br>
    NSIS/WiX: (not set)</p>
    <p class=MsoBodyText>See description of LoginRetryInterval.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993273"></a><a name="_Toc126872350"></a><a
!   name="_Toc115416281"></a><a name="_Value:_TheseCells"></a>Value: TheseCells</h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: &lt;not set&gt;</p>
    <p class=MsoBodyText>When Kerberos 5 is being used, TheseCells provides a
***************
*** 7180,7494 ****
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416282">A.2.1.2<span
! style='mso-spacerun:yes'>  </span>Selection of effective values for domain
! specific configuration</a></h3>
  
  <p class=MsoBodyText>During login to domain X, where X is the domain passed
! into NPLogonNotify as lpAuthentInfo-&gt;LogonDomainName or the string
! 'LOCALHOST' if 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;mso-list:
! l15 level1 lfo36;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-fareast-font-family:Thorndale;mso-bidi-font-family:Thorndale'><span
! style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>NP key.
! (&quot;HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider&quot;)</p>
! 
! <p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
! l15 level1 lfo36;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-fareast-font-family:Thorndale;mso-bidi-font-family:Thorndale'><span
! style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>Domains key. (NP key\&quot;Domain&quot;)</p>
! 
! <p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
! l15 level1 lfo36;tab-stops:list 36.0pt'><![if !supportLists]><span
! style='mso-fareast-font-family:Thorndale;mso-bidi-font-family:Thorndale'><span
! style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span></span><![endif]>Specific domain key. (Domains key\X)</p>
  
  <p class=MsoBodyText>If the specific domain key does not exist, then the
! domains key will be ignored.<span style='mso-spacerun:yes'>  </span>All the
! configuration information in this case will come from the NP key.</p>
  
  <p class=MsoBodyText>If the specific domain key exists, then for each of the
! values metioned in (2), they will be looked up in the specific domain key,
! domains key and the NP key successively until the value is found. The first
! instance of the value found this way will be the effective for the login
! session.<span style='mso-spacerun:yes'>  </span>If no such instance can be
! found, the default will be used.<span style='mso-spacerun:yes'>  </span>To
! re-iterate, a value in a more specific key supercedes a value in a less
! specific key.<span style='mso-spacerun:yes'>  </span>The exceptions to this
! rule are stated below.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416283">A.2.1.3
! Exceptions to A.2.1.2</a></h3>
  
  <p class=MsoBodyText>To retain backwards compatibility, the following
  exceptions are made to 2.1.2.</p>
  
! <h4><a name="_Toc115416284">2.1.3.1 'FailLoginsSilently'</a></h4>
  
! <p class=MsoBodyText>Historically, the 'FailLoginsSilently' value was in
! HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters key and not
! in the NP key.<span style='mso-spacerun:yes'>  </span>Therefore, for backwards
! compatibility, the value in the Parameters key will supercede all instances of
! this value in other keys.<span style='mso-spacerun:yes'>  </span>In the absence
! of this value in the Parameters key, normal scope rules apply.</p>
  
! <h4><a name="_Toc115416285">2.1.3.2 'LogonScript'</a></h4>
  
  <p class=MsoBodyText>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.<span
! style='mso-spacerun:yes'>  </span>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.<span style='mso-spacerun:yes'>  </span>Please be aware of
! this when setting this value.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417107"></a><a
! name="_Toc115416286"><span style='mso-bookmark:_Toc115417107'>A.3. AFS
! Credentials System Tray Tool parameters</span></a></h2>
  
  <p class=MsoBodyText>Affects the behavior of afscreds.exe</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416287">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416288">Value: Gateway</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &quot;&quot;<br>
    Function: GetGatewayName()</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>If the AFS client is utilizing a
!   gateway to obtain AFS access, the name of the gateway is specified by this
!   value.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0;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="_Toc115416289">Value: Cell</a></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: IsServiceConfigured()</p>
!   <p class=MsoBodyText>The value Cell is used to determine if the AFS Client Service
!   has been properly configured or not.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416290">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client]<br>
  [HKCU\SOFTWARE\OpenAFS\Client]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416291">Value: ShowTrayIcon</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: InitApp(), Main_OnCheckTerminate()</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This value is used to determine whether
!   or not a shortcut should be maintained in the user's Start
    Menu-&gt;Programs-&gt;Startup folder. </p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This value used to be stored at
    [HKLM\Software\TransarcCorporation\AFS Client\AfsCreds].</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>The current user value is
!   checked first; if it does not exist the local machine value is checked.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0;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="_Toc115416292">Value: EnableKFW</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: KFW_is_available()</p>
    <p class=MsoBodyText>When MIT Kerberos for Windows can be loaded, Kerberos 5
!   will be used to obtain AFS credentials.<span style='mso-spacerun:yes'> 
!   </span>By setting this value to 0, the internal Kerberos 4 implementation
!   will be used instead.<span style='mso-spacerun:yes'>  </span>The current user
    value is checked first; if it does not exist the local machine value is
    checked.</p>
    </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="_Toc115416293"></a><a name="_Value___:_Use524"></a><span
!   style='mso-bookmark:_Toc115416293'>Value: Use524</span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0<br>
    Function: KFW_use_krb524()</p>
!   <p class=MsoBodyText>When MIT Kerberos for Windows can be loaded, Kerberos 5
!   will be used to obtain AFS credentials.<span style='mso-spacerun:yes'> 
!   </span>By setting this value to 1, the Kerberos 5 tickets will be converted
!   to Kerberos 4 tokens via a call to the krb524 daemon.<span
!   style='mso-spacerun:yes'>  </span>The current user value is checked first; if
!   it does not exist the local machine value is checked.</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:2;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="_Toc115416294"></a><a name="_Value___:_AfscredsShortcutParams"></a><span
!   style='mso-bookmark:_Toc115416294'>Value: AfscredsShortcutParams</span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;-A -M -N -Q&quot;<br>
    Function: Shortcut_FixStartup</p>
!   <p class=MsoBodyText>This value specifies the command line options which should
!   be set as part of the shortcut to afscreds.exe.<span
!   style='mso-spacerun:yes'>  </span>afscreds.exe rewrites the shortcut each
!   time it exits so as to ensure that the shortcut points to the latest version
!   of the program.<span style='mso-spacerun:yes'>  </span>This value is used to
!   determine which values should be used for command line parameters.<span
!   style='mso-spacerun:yes'>  </span>The current user value is checked first; if
!   it does not exist the local machine value is checked.</p>
    <p class=MsoBodyText>The following subset of the command line options is
    appropriate for use in this registry setting:</p>
    <p class=MsoBodyText>-A = autoinit<br>
    -M = renew drive maps<br>
    -N = ip address change detection<br>
!   -Q = quiet mode.<span style='mso-spacerun:yes'>  </span>do not display start
!   service dialog if afsd_service is not already running<br>
    -S = show tokens dialog on startup<br>
    -Z = unmap drives</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416295">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416296">Value: Authentication
!   Cell</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Function: Afscreds.exe GetDefaultCell()</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This value allows the user to
!   configure a different cell name to be used as the default cell when acquiring
!   tokens in afscreds.exe.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416297">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416298">Value: &quot;afs cell
!   name&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;<br>
    Function: LoadRemind(), SaveRemind()</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>These values are used to save
!   and restore the state of the reminder flag for each cell for which the user
!   has obtained tokens.</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>This value used to be stored at
    [HKLM\Software\TransarcCorporation\AFS Client\AfsCreds].</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416299">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416300">Value: &quot;upper case
!   drive letter&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>These values are used to store the
!   persistence state of the AFS drive mappings as listed in the
!   [...\Client\Mappings] key.</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>These values used to be stored
!   in the afsdsbmt.ini file</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115416301">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;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 style='mso-yfti-cnfc:1'><a name="_Toc115416302">Value: &quot;upper case
!   drive letter&quot;</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>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 style='mso-yfti-cnfc:1'>These values used to be stored
!   in the afsdsbmt.ini file.</p>
    </td>
   </tr>
  </table>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc115417108"></a><a
! name="_Toc115416303"><span style='mso-bookmark:_Toc115417108'>A.4 OpenAFS
! Client Service Environment Variables</span></a></h2>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.0pt;mso-yfti-tbllook:480;mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
!  mso-border-insideh:.75pt outset windowtext;mso-border-insidev:.75pt outset windowtext'>
!  <tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5 style='mso-yfti-cnfc:1'><a name="_Toc115416304">Variable: AFS_RPC_ENCRYPT</a></h5>
!   <p class=MsoBodyText style='mso-yfti-cnfc:1'>Values:<span
!   style='mso-spacerun:yes'>   </span>&quot;OFF&quot; disables the use of RPC
    encryption any other value allows RPC encryption to be used<br>
!   Default:<span style='mso-spacerun:yes'>  </span>RPC encryption is on</p>
    </td>
   </tr>
!  <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc115416305">Variable: AFS_RPC_PROTSEQ</a></h5>
!   <p class=MsoBodyText>Values:<span style='mso-tab-count:1'>            </span>&quot;ncalrpc&quot;<span
!   style='mso-spacerun:yes'>  </span>- local RPC<br>
!   <span style='mso-spacerun:yes'> </span><span style='mso-tab-count:2'>                      </span>&quot;ncacn_np&quot;
!   - named pipes<br>
!   <span style='mso-spacerun:yes'> </span><span style='mso-tab-count:2'>                      </span>&quot;ncacn_ip_tcp&quot;
!   - tcp/ip<br>
!   Default:<span style='mso-spacerun:yes'>  </span>local RPC</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoBodyText><o:p>&nbsp;</o:p></p>
  
  </div>
  
--- 4230,4516 ----
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993274"></a><a
! name="_Toc126872351"></a><a name="_Toc115416282">A.2.1.2 Selection of effective
! values for domain specific configuration</a></h3>
  
  <p class=MsoBodyText>During login to domain X, where X is the domain passed
! into NPLogonNotify as lpAuthentInfo-&gt;LogonDomainName or the string 'LOCALHOST'
! if 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'>1.<span
! style='font:7.0pt "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'>2.<span
! style='font:7.0pt "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'>3.<span
! style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Specific
! domain key. (Domains key\X)</p>
  
  <p class=MsoBodyText>If the specific domain key does not exist, then the
! domains key will be ignored.  All the configuration information in this case
! will come from the NP key.</p>
  
  <p class=MsoBodyText>If the specific domain key exists, then for each of the
! values metioned in (2), they will be looked up in the specific domain key, domains
! key and the NP key successively until the value is found. The first instance of
! the value found this way will be the effective for the login session.  If no
! such instance can be found, the default will be used.  To re-iterate, a value
! in a more specific key supercedes a value in a less specific key.  The
! exceptions to this rule are stated below.</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993275"></a><a
! name="_Toc126872352"></a><a name="_Toc115416283">A.2.1.3 Exceptions to A.2.1.2</a></h3>
  
  <p class=MsoBodyText>To retain backwards compatibility, the following
  exceptions are made to 2.1.2.</p>
  
! <h4><a name="_Toc139993276"></a><a name="_Toc126872353"></a><a
! name="_Toc115416284">2.1.3.1 'FailLoginsSilently'</a></h4>
  
! <p class=MsoBodyText>Historically, the 'FailLoginsSilently' value was in HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
! key and not in the NP key.  Therefore, for backwards compatibility, the value
! in the Parameters key will supercede all instances of this value in other
! keys.  In the absence of this value in the Parameters key, normal scope rules
! apply.</p>
  
! <h4><a name="_Toc139993277"></a><a name="_Toc126872354"></a><a
! name="_Toc115416285">2.1.3.2 'LogonScript'</a></h4>
  
  <p class=MsoBodyText>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.  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.  Please be aware of this when
! setting this value.</p>
! 
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993278"></a><a
! name="_Toc126872355"></a><a name="_Toc115417107"></a><a name="_Toc115416286">A.3.
! AFS Credentials System Tray Tool parameters</a></h2>
  
  <p class=MsoBodyText>Affects the behavior of afscreds.exe</p>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993279"></a><a
! name="_Toc126872356"></a><a name="_Toc115416287">Regkey:<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993280"></a><a name="_Toc126872357"></a><a
!   name="_Toc115416288">Value: Gateway</a></h5>
!   <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;&quot;<br>
    Function: GetGatewayName()</p>
!   <p class=MsoBodyText>If the AFS client is utilizing a gateway to obtain AFS
!   access, the name of the gateway is specified by this value.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993281"></a><a name="_Toc126872358"></a><a
!   name="_Toc115416289">Value: Cell</a></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: IsServiceConfigured()</p>
!   <p class=MsoBodyText>The value Cell is used to determine if the AFS Client
!   Service has been properly configured or not.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993282"></a><a
! name="_Toc126872359"></a><a name="_Toc115416290">Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client]<br>
  [HKCU\SOFTWARE\OpenAFS\Client]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993283"></a><a name="_Toc126872360"></a><a
!   name="_Toc115416291">Value: ShowTrayIcon</a></h5>
!   <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: InitApp(), Main_OnCheckTerminate()</p>
!   <p class=MsoBodyText>This value is used to determine whether or not a
!   shortcut should be maintained in the user's Start
    Menu-&gt;Programs-&gt;Startup folder. </p>
!   <p class=MsoBodyText>This value used to be stored at
    [HKLM\Software\TransarcCorporation\AFS Client\AfsCreds].</p>
!   <p class=MsoBodyText>The current user value is checked first; if it does not
!   exist the local machine value is checked.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993284"></a><a name="_Toc126872361"></a><a
!   name="_Toc115416292">Value: EnableKFW</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: KFW_is_available()</p>
    <p class=MsoBodyText>When MIT Kerberos for Windows can be loaded, Kerberos 5
!   will be used to obtain AFS credentials.  By setting this value to 0, the
!   internal Kerberos 4 implementation will be used instead.  The current user
    value is checked first; if it does not exist the local machine value is
    checked.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993285"></a><a name="_Toc126872362"></a><a
!   name="_Toc115416293"></a><a name="_Value___: Use524"></a>Value: Use524</h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0<br>
    Function: KFW_use_krb524()</p>
!   <p class=MsoBodyText>When MIT Kerberos for Windows can be loaded, Kerberos 5 will
!   be used to obtain AFS credentials.  By setting this value to 1, the Kerberos
!   5 tickets will be converted to Kerberos 4 tokens via a call to the krb524
!   daemon.  The current user value is checked first; if it does not exist the
!   local machine value is checked.</p>
    </td>
   </tr>
!  <tr style='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="_Toc139993286"></a><a name="_Toc126872363"></a><a
!   name="_Toc115416294"></a><a name="_Value___: AfscredsShortcutParams"></a>Value:
!   AfscredsShortcutParams</h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;-A -M -N -Q&quot;<br>
    Function: Shortcut_FixStartup</p>
!   <p class=MsoBodyText>This value specifies the command line options which
!   should be set as part of the shortcut to afscreds.exe.  afscreds.exe rewrites
!   the shortcut each time it exits so as to ensure that the shortcut points to
!   the latest version of the program.  This value is used to determine which
!   values should be used for command line parameters.  The current user value is
!   checked first; if it does not exist the local machine value is checked.</p>
    <p class=MsoBodyText>The following subset of the command line options is
    appropriate for use in this registry setting:</p>
    <p class=MsoBodyText>-A = autoinit<br>
    -M = renew drive maps<br>
    -N = ip address change detection<br>
!   -Q = quiet mode.  do not display start service dialog if afsd_service is not
!   already running<br>
    -S = show tokens dialog on startup<br>
    -Z = unmap drives</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993287"></a><a
! name="_Toc126872364"></a><a name="_Toc115416295">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993288"></a><a name="_Toc126872365"></a><a
!   name="_Toc115416296">Value: Authentication Cell</a></h5>
!   <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Function: Afscreds.exe GetDefaultCell()</p>
!   <p class=MsoBodyText>This value allows the user to configure a different cell
!   name to be used as the default cell when acquiring tokens in afscreds.exe.</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993289"></a><a
! name="_Toc126872366"></a><a name="_Toc115416297">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993290"></a><a name="_Toc126872367"></a><a
!   name="_Toc115416298">Value: &quot;afs cell name&quot;</a></h5>
!   <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;<br>
    Function: LoadRemind(), SaveRemind()</p>
!   <p class=MsoBodyText>These values are used to save and restore the state of
!   the reminder flag for each cell for which the user has obtained tokens.</p>
!   <p class=MsoBodyText>This value used to be stored at
    [HKLM\Software\TransarcCorporation\AFS Client\AfsCreds].</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993291"></a><a
! name="_Toc126872368"></a><a name="_Toc115416299">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993292"></a><a name="_Toc126872369"></a><a
!   name="_Toc115416300">Value: &quot;upper case drive letter&quot;</a></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
!   the AFS drive mappings as listed in the [...\Client\Mappings] key.</p>
!   <p class=MsoBodyText>These values used to be stored in the afsdsbmt.ini file</p>
    </td>
   </tr>
  </table>
  
! <h3 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993293"></a><a
! name="_Toc126872370"></a><a name="_Toc115416301">Regkey:<br>
  [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</a></h3>
  
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr style='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="_Toc139993294"></a><a name="_Toc126872371"></a><a
!   name="_Toc115416302">Value: &quot;upper case drive letter&quot;</a></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>
  </table>
  
! <h2 style='margin-left:0pt;text-indent:0pt'><a name="_Toc139993295"></a><a
! name="_Toc126872372"></a><a name="_Toc115417108"></a><a name="_Toc115416303">A.4
! OpenAFS Client Service Environment Variables</a></h2>
! 
! <table class=MsoTableWeb1 border=1 cellspacing=3 cellpadding=0>
!  <tr>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc139993296"></a><a name="_Toc126872373"></a><a
!   name="_Toc115416304">Variable: AFS_RPC_ENCRYPT</a></h5>
!   <p class=MsoBodyText>Values:   &quot;OFF&quot; disables the use of RPC
    encryption any other value allows RPC encryption to be used<br>
!   Default:  RPC encryption is on</p>
    </td>
   </tr>
!  <tr>
    <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
!   <h5><a name="_Toc139993297"></a><a name="_Toc126872374"></a><a
!   name="_Toc115416305">Variable: AFS_RPC_PROTSEQ</a></h5>
!   <p class=MsoBodyText>Values:            &quot;ncalrpc&quot;  - local RPC<br>
!                           &quot;ncacn_np&quot; - named pipes<br>
!                           &quot;ncacn_ip_tcp&quot; - tcp/ip<br>
!   Default:  local RPC</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoBodyText>&nbsp;</p>
  
  </div>
  
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 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.1
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2	Sun Sep 25 20:18:00 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm	Wed Jul 19 00:08:46 2006
***************
*** 1,1484 ****
! <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">
  
  <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="OpenAFS for Windows Release Notes">
! <link rel=File-List href="toc_files/filelist.xml">
! <title>OpenAFS for Windows Release Notes TOC</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>0</o:TotalTime>
!   <o:Created>2005-09-25T20:11:00Z</o:Created>
!   <o:LastSaved>2005-09-25T20:11:00Z</o:LastSaved>
!   <o:Pages>1</o:Pages>
!   <o:Words>2362</o:Words>
!   <o:Characters>13466</o:Characters>
!   <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>112</o:Lines>
!   <o:Paragraphs>31</o:Paragraphs>
!   <o:CharactersWithSpaces>15797</o:CharactersWithSpaces>
!   <o:Version>11.6408</o:Version>
!  </o:DocumentProperties>
! </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:WordDocument>
!   <w:ValidateAgainstSchemas/>
!   <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
!   <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
!   <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
!   <w:Compatibility>
!    <w:BreakWrappedTables/>
!    <w:SnapToGridInCell/>
!    <w:WrapTextWithPunct/>
!    <w:UseAsianBreakRules/>
!    <w:UseWord2002TableStyleRules/>
!    <w:UseFELayout/>
!   </w:Compatibility>
!   <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
!  </w:WordDocument>
! </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
!  </w:LatentStyles>
! </xml><![endif]-->
  <style>
  <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;
! 	mso-font-alt:"\FF2D\FF33 \660E\671D";
! 	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:-1610612033 1757936891 16 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";}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
! 	{mso-style-update:auto;
! 	mso-style-noshow:yes;
! 	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-noshow:yes;
! 	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-noshow:yes;
! 	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-noshow:yes;
! 	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-noshow:yes;
! 	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-noshow:yes;
! 	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";}
  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;}
  -->
  </style>
! <!--[if gte mso 10]>
! <style>
!  /* Style Definitions */
!  table.MsoNormalTable
! 	{mso-style-name:"Table Normal";
! 	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]--><!--[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=MsoNormal><!--[if supportFields]><span style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>RD &quot;oafw-1-4-release-notes.doc&quot; \f <![endif]--><!--[if supportFields]><span
! style='mso-element:field-end'></span><![endif]--><!--[if supportFields]><span
! style='mso-element:field-begin'></span><span
! style='mso-spacerun:yes'> </span>TOC \o &quot;1-2&quot; \h \z \u <span
! style='mso-element:field-separator'></span><![endif]--><span style='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#_Toc115417037">1.
! Installer Options<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417037 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417038">2.
! System Requirements<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417038 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417039">2.1
! Supported Operating Systems<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417039 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417040">2.2
! Disk Space<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417040 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417041">2.3
! Additional Software<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417041 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417042">3.
! Operational Notes<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417042 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417043">3.1.
! Requirements for Kerberos 5 Authentication<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417043 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417044">3.2.
! Use of the Microsoft Loopback Adapter<span style='color:windowtext;display:
! none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417044 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417045">3.3.
! Using Freelance (Dynamic Root) Mode to Improve Mobility<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417045 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417046">3.4.
! Locating AFS Volume Database Servers<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417046 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417047">3.5.
! Obtaining AFS Tokens as a Part of Windows Logon<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417047 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417048">3.6.
! AFS System Tray Command Line Options<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417048 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417049">3.7.
! The “AFS Client Admins” Authorization Group<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417049 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417050">3.8.
! OpenAFS support for UNC paths<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417050 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417051">3.9.
! OpenAFS includes aklog.exe<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417051 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417052">3.10.
! OpenAFS Servers on Windows are Unsupported<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417052 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417053">3.11.
! OpenAFS Debugging Symbol files<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417053 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417054">3.12.
! Maximum File Size is 2GB<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'>.. </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417054 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417055">3.13.
! Encrypted AFS File Access<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'>. </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417055 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417056">3.14.
! Authenticated Access to the OpenAFS Client Service<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417056 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417057">3.15.
! No More INI Files<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417057 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417058">3.16.
! Microsoft Windows Internet Connection Firewall<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417058 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417059">3.17.
! Browsing AFS from the Explorer Shell and Office<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417059 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417060">3.18.
! No Support for Byte Range Locking<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417060 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417061">3.19.
! Automatic Discarding of AFS Tokens at Logoff<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417061 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417062">3.20.
! Terminal Server installations<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417062 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417063">3.21.
! Hidden Dot Files<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417063 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417064">3.22.
! Status Cache Limits<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417064 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417065">3.23.
! NETBIOS over TCP/IP must be enabled<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417065 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417066">3.24.
! OpenAFS binaries are digitally signed<span style='color:windowtext;display:
! none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417066 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417067">3.25.
! Maximum Size of the AFSCache File<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417067 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417068">3.26.
! Filename Character Sets<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'>. </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417068 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417069">3.27.
! Known Character Set Issues with Roaming Profiles<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417069 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417070">3.28.
! The AFSCache File<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417070 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417071">3.29.
! Restricting OpenAFS Client Service Start and Stop<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417071 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417072">3.30.
! The @sys Name List<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417072 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417073">3.31.
! Symlinks to AFS UNC paths<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'>. </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417073 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417074">3.32.
! Cache Manager Debugging Now Supported<span style='color:windowtext;display:
! none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417074 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417075">3.33.
! Windows Logon Caching vs. Kerberos Logons<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417075 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417076">3.34.
! Initial Server Preferences<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417076 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417077">3.35.
! File Timestamps<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417077 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417078">3.36.
! Windows RPC client support must be installed<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417078 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417079">3.37.
! Generating Minidumps of the OpenAFS Client Service<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417079 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417080">3.38.
! AFS Client Universally Unique Identifiers<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417080 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417081">4.
! How to Debug Problems with OpenAFS for Windows:<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417081 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417082">4.1.
! pioctl debugging (IoctlDebug registry key)<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417082 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417083">4.2.
! afsd_service initialization log (%WinDir%\TEMP\afsd_init.log)<span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417083 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417084">4.3.
! afsd_service debug logs (fs trace {-on, -off, -dump}
! -&gt;%WinDir%\TEMP\afsd.log)<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417084 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417085">4.4.
! Using SysInternal’s DbgView and FileMon Tools<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417085 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417086">4.5.
! Microsoft MiniDumps<span style='mso-spacerun:yes'>  </span>(fs minidump -&gt;
! %WinDir%\TEMP\afsd.dmp)<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'> </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417086 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417087">4.6.
! Single Sign-on (Integrated Logon) debugging<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417087 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417088">4.7.
! RX (AFS RPC) debugging (rxdebug)<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417088 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417089">4.8.
! Cache Manager debugging (cmdebug)<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417089 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417090">4.9.
! Persistent Cache consistency check<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417090 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417091">5.
! Reporting Bugs:<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417091 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417092">6.
! How to Contribute to the Development of OpenAFS for Windows<span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417092 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417093">6.1.
! The USENIX OpenAFS Fund<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'>. </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417093 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417094">6.2.
! Secure Endpoints Inc.<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417094 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417095">6.3.
! The MIT Kerberos Account<span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-tab-count:
! 1 dotted'> </span></span><!--[if supportFields]><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-begin'></span></span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'> PAGEREF
! _Toc115417095 \h </span><span style='color:windowtext;display:none;mso-hide:
! screen;text-decoration:none;text-underline:none'><span style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417096">6.4.
! Direct contributions of code and/or documentation<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417096 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417097">6.5.
! OpenAFS for Windows Mailing Lists<span style='color:windowtext;display:none;
! mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417097 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417098">7.
! MSI Deployment Guide<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417098 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417099">7.1.
! Introduction<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417099 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417100">7.2.
! Configuration Options<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417100 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417101">7.3
! Additional Resources<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417101 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417102">7.4.
! Upgrades<span style='color:windowtext;display:none;mso-hide:screen;text-decoration:
! none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417102 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417103">Appendix
! A: Registry Values<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417103 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417104">A.1.
! Service parameters<span style='color:windowtext;display:none;mso-hide:screen;
! text-decoration:none;text-underline:none'><span style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417104 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417105">A.2.
! Integrated Logon Network provider parameters<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417105 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417106">A.2.1
! Domain specific configuration keys for the Network Provider<span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-tab-count:1 dotted'> </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417106 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417107">A.3.
! AFS Credentials System Tray Tool parameters<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417107 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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#_Toc115417108">A.4
! OpenAFS Client Service Environment Variables<span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-tab-count:1 dotted'>. </span></span><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-begin'></span></span><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'> PAGEREF _Toc115417108 \h </span><span style='color:windowtext;
! display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
! style='mso-element:field-separator'></span></span><![endif]--><b><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'>Error! Bookmark not defined.</span></b><!--[if supportFields]><span
! style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
! text-underline:none'><span style='mso-element:field-end'></span></span><![endif]--></a></span></span><span
! style='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>
  
  </div>
  
--- 1,796 ----
! <html>
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
! <meta name=Generator content="Microsoft Word 11 (filtered)">
! <base target=Frame1>
  <style>
  <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;}
  @font-face
  	{font-family:"\@MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{margin:0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
! 	{margin:0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:0pt;
  	margin-left:12.0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:0pt;
  	margin-left:24.0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc4, li.MsoToc4, div.MsoToc4
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:0pt;
  	margin-left:36.0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc5, li.MsoToc5, div.MsoToc5
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:0pt;
  	margin-left:48.0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  p.MsoToc6, li.MsoToc6, div.MsoToc6
! 	{margin-top:0pt;
  	margin-right:0pt;
  	margin-bottom:0pt;
  	margin-left:60.0pt;
  	margin-bottom:.0001pt;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";}
  a:link, span.MsoHyperlink
  	{color:blue;
! 	text-decoration:underline;}
  a:visited, span.MsoHyperlinkFollowed
  	{color:purple;
! 	text-decoration:underline;}
  @page Section1
  	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
  div.Section1
  	{page:Section1;}
  -->
  </style>
! 
  </head>
  
! <body lang=EN-US link=blue vlink=purple>
  
  <div class=Section1>
  
! <p class=MsoNormal></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993082">1. Installer Options</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993083">2. System Requirements</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993084">2.1 Supported Operating Systems</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993085">2.1.1 Unsupported Operating Systems</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993086">2.2 Disk Space</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993087">2.3 Additional Software Packages</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993088">3. Operational Notes</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993089">3.1. Requirements for Kerberos 5
! Authentication</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993090">3.1.1. Active Directory</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993091">3.1.2. Using the krb524 service</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993092">3.2. Use of the Microsoft Loopback Adapter</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993093">3.3. Using Freelance (Dynamic Root) Mode
! to Improve Mobility</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993094">3.4. Locating AFS Volume Database Servers</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993095">3.5. Obtaining AFS Tokens as a Part of
! Windows Logon</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993096">3.6. AFS System Tray Command Line Options</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993097">3.7. The “AFS Client Admins” Authorization
! Group</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993098">3.8. OpenAFS support for UNC paths</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993099">3.9. OpenAFS includes aklog.exe</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993100">3.10. OpenAFS Servers on Windows are
! Unsupported</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993101">3.11. OpenAFS Debugging Symbol files</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993102">3.12. Large Files (64-bit) Supported</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993103">3.13. Encrypted AFS File Access</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993104">3.14. Authenticated Access to the OpenAFS
! Client Service</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993105">3.15. No More INI Files</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993106">3.16. Microsoft Windows Internet
! Connection Firewall</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993107">3.17. Browsing AFS from the Explorer Shell
! and Office</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993108">3.18. Byte Range Locking</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993109">3.19. Automatic Discarding of AFS Tokens
! at Logoff</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993110">3.20. Terminal Server installations</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993111">3.21. Hidden Dot Files</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993112">3.22. Status Cache Limits</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993113">3.23. NETBIOS over TCP/IP must be enabled</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993114">3.24. OpenAFS binaries are digitally
! signed</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993115">3.25. Maximum Size of the AFSCache File</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993116">3.26. Filename Character Sets</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993117">3.27. Known Character Set Issues with
! Roaming Profiles</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993118">3.28. The AFSCache File</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993119">3.29. Restricting OpenAFS Client Service
! Start and Stop</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993120">3.30. The @sys Name List</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993121">3.31. Symlinks to AFS UNC paths</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993122">3.32. Cache Manager Debugging Now
! Supported</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993123">3.33. Windows Logon Caching vs. Kerberos
! Logons</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993124">3.34. Initial Server Preferences</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993125">3.35. File Timestamps</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993126">3.36. Windows RPC client support must be
! installed</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993127">3.37. Generating Minidumps of the OpenAFS
! Client Service</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993128">3.38. AFS Client Universally Unique
! Identifiers</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993129">3.39. Delayed Write Errors with Microsoft
! Office Applications</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993130">3.40. Global Drives (aka Service Drive
! Letters) are no longer supported by Microsoft</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993131">3.41. 64-bit Microsoft Windows
! Installations</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993132">3.42. Known Issues with Microsoft Windows
! Vista</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993133">4. How to Debug Problems with OpenAFS for
! Windows:</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993134">4.1. pioctl debugging (IoctlDebug registry
! key)</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993135">4.2. afsd_service initialization log
! (%WinDir%\TEMP\afsd_init.log)</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993136">4.3. afsd_service debug logs (fs trace
! {-on, -off, -dump} -&gt;%WinDir%\TEMP\afsd.log)</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993137">4.4. Using SysInternal’s DbgView and
! FileMon Tools</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993138">4.5. Microsoft MiniDumps  (fs minidump
! -&gt; %WinDir%\TEMP\afsd.dmp)</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993139">4.6. Single Sign-on (Integrated Logon)
! debugging</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993140">4.7. RX (AFS RPC) debugging (rxdebug)</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993141">4.8. Cache Manager debugging (cmdebug)</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993142">4.9. Persistent Cache consistency check</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993143">5. Reporting Bugs:</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993144">6. How to Contribute to the Development of
! OpenAFS for Windows</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993145">6.1. The USENIX OpenAFS Fund</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993146">6.2. Secure Endpoints Inc.</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993147">6.3. The MIT Kerberos Account</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993148">6.4. Direct contributions of code and/or
! documentation</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993149">6.5. OpenAFS for Windows Mailing Lists</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993150">7. MSI Deployment Guide</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993151">7.1. Introduction</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993152">7.1.1 Requirements</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993153">7.1.2 Authoring a Transform</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993154">7.2. Configuration Options</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993155">7.2.1 Configurable Properties</a></span></p>
! 
! <p class=MsoToc4><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993156">7.2.1.1 Setting Properties</a></span></p>
! 
! <p class=MsoToc4><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993157">7.2.1.2 OpenAFS for Windows Properties</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993158">(Service parameters):</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993159">(Network provider):</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993160">(OpenAFS Client):</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993161">7.2.1.2.1 Registry Properties</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993162">AFSCACHEPATH</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993163">AFSCACHESIZE</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993164">AFSCELLNAME</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993165">FREELANCEMODE</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993166">HIDEDOTFILES</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993167">LOGONOPTIONS</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993168">MOUNTROOT</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993169">NETBIOSNAME</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993170">NOFINDLANABYNAME</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993171">RXMAXMTU</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993172">SECURITYLEVEL</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993173">SMBAUTHTYPE</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993174">STOREANSIFILENAMES</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993175">USEDNS</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993176">7.2.1.2.2 AFSCreds.exe Properties</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993177">CREDSSTARTUP</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993178">CREDSAUTOINIT</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993179">CREDSIPCHDET</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993180">CREDSQUIET</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993181">CREDSRENEWDRMAP</a></span></p>
! 
! <p class=MsoToc6><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993182">CREDSSHOW</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993183">7.2.2 Existing Registry Entries</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993184">7.2.3 Replacing Configuration Files</a></span></p>
! 
! <p class=MsoToc4><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993185">7.2.3.1 Components for Configuration Files</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993186">7.2.4 Adding Domain Specific Registry Keys</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993187">7.2.5 Adding Site Specific Freelance
! Registry Keys</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993188">7.3 Additional Resources</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993189">7.4. Upgrades</a></span></p>
! 
! <p class=MsoToc1><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993190">Appendix A: Registry Values</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993191">A.1. Service parameters</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993192">Regkey:
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993193">Value: LANadapter</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993194">Value: CacheSize</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993195">Value: ChunkSize</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993196">Value: Daemons</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993197">Value: ServerThreads</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993198">Value: Stats</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993199">Value: LogoffPreserveTokens</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993200">Value: RootVolume</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993201">Value: Mountroot</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993202">Value: CachePath</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993203">Value: NonPersistentCaching</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993204">Value: ValidateCache</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993205">Value: TrapOnPanic</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993206">Value: NetbiosName</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993207">Value: IsGateway</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993208">Value: ReportSessionStartups</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993209">Value: TraceBufferSize</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993210">Value: SysName</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993211">Value: SecurityLevel</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993212">Value: UseDNS</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993213">Value: FreelanceClient</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993214">Value: HideDotFiles</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993215">Value: MaxMpxRequests</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993216">Value: MaxVCPerServer</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993217">Value: Cell</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993218">Value: RxNoJumbo</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993219">Value: RxMaxMTU</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993220">Value: ConnDeadTimeout</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993221">Value: HardDeadTimeout</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993222">Value: TraceOption</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993223">Value: AllSubmount</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993224">Value: NoFindLanaByName</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993225">Value: MaxCPUs</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993226">Value: smbAuthType</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993227">Value: MaxLogSize</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993228">Value: FlushOnHibernate</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993229">Regkey:
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993230">Value: &lt;Drive Letter:&gt; for example
! &quot;G:&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993231">Regkey: [HKLM\SOFTWARE\OpenAFS\Client]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993232">Value: CellServDBDir</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993233">Value: VerifyServiceSignature</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993234">Value: IoctlDebug</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993235">Value: MiniDumpType</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993236">Value: StoreAnsiFilenames</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993237">Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993238">Value: &quot;smb/cifs share name&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993239">Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993240">Value: &quot;numeric value&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993241">Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993242">Value: &quot;numeric value&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993243">Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993244">Value: &quot;submount name&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993245">Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993246">Value: &quot;hostname or ip address&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993247">Regkey: [HKLM\SOFTWARE\OpenAFS\Client\Server
! Preferences\File]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993248">Value: &quot;hostname or ip address&quot;</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993249">A.2. Integrated Logon Network provider
! parameters</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993250">Regkey:
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993251">Value: FailLoginsSilently</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993252">Regkey: [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993253">Value: NoWarnings</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993254">Value: AuthentProviderPath</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993255">Value: Class</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993256">Value: DependOnGroup</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993257">Value: DependOnService</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993258">Value: Name</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993259">Value: ProviderPath</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993260">A.2.1 Domain specific configuration keys
! for the Network Provider</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993261">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993262">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993263">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain&quot;domain
! name&quot;]</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993264">[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993265">Example:</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993266">A.2.1.1 Domain specific configuration
! values</a></span></p>
! 
! <p class=MsoToc4><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993267">[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]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993268">Value: LogonOptions</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993269">Value: FailLoginsSilentl</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993270">Value: LogonScript</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993271">Value: LoginRetryInterval</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993272">Value: LoginSleepInterval</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993273">Value: TheseCells</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993274">A.2.1.2 Selection of effective values for
! domain specific configuration</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993275">A.2.1.3 Exceptions to A.2.1.2</a></span></p>
! 
! <p class=MsoToc4><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993276">2.1.3.1 'FailLoginsSilently'</a></span></p>
! 
! <p class=MsoToc4><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993277">2.1.3.2 'LogonScript'</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993278">A.3. AFS Credentials System Tray Tool
! parameters</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993279">Regkey: [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993280">Value: Gateway</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993281">Value: Cell</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993282">Regkey: [HKLM\SOFTWARE\OpenAFS\Client]
! [HKCU\SOFTWARE\OpenAFS\Client]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993283">Value: ShowTrayIcon</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993284">Value: EnableKFW</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993285">Value: Use524</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993286">Value: AfscredsShortcutParams</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993287">Regkey: [HKCU\SOFTWARE\OpenAFS\Client]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993288">Value: Authentication Cell</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993289">Regkey:
! [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993290">Value: &quot;afs cell name&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993291">Regkey:
! [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993292">Value: &quot;upper case drive letter&quot;</a></span></p>
! 
! <p class=MsoToc3><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993293">Regkey:
! [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993294">Value: &quot;upper case drive letter&quot;</a></span></p>
! 
! <p class=MsoToc2><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993295">A.4 OpenAFS Client Service Environment
! Variables</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993296">Variable: AFS_RPC_ENCRYPT</a></span></p>
! 
! <p class=MsoToc5><span class=MsoHyperlink><a
! href="../relnotes.htm#_Toc139993297">Variable: AFS_RPC_PROTSEQ</a></span></p>
  
! <p class=MsoNormal>&nbsp;</p>
  
  </div>
  
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo_files/filelist.xml
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo_files/filelist.xml:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo_files/filelist.xml:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo_files/filelist.xml:1.1	Sun Sep 25 16:35:16 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo_files/filelist.xml	Thu Aug  3 00:43:30 2006
***************
*** 1,6 ****
- <xml xmlns:o="urn:schemas-microsoft-com:office:office">
-  <o:MainFile HRef="../logo.htm"/>
-  <o:File HRef="image001.jpg"/>
-  <o:File HRef="image002.jpg"/>
-  <o:File HRef="filelist.xml"/>
- </xml>
\ No newline at end of file
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo_files/image002.jpg
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 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml:1.1	Sun Sep 25 16:35:16 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml	Thu Aug  3 00:43:30 2006
***************
*** 1,6 ****
- <xml xmlns:o="urn:schemas-microsoft-com:office:office">
-  <o:MainFile HRef="../relnotes.htm"/>
-  <o:File HRef="preview.wmf"/>
-  <o:File HRef="header.htm"/>
-  <o:File HRef="filelist.xml"/>
- </xml>
\ No newline at end of file
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/header.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/header.htm:1.2 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/header.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/header.htm:1.2	Mon Sep 26 20:35:27 2005
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/header.htm	Thu Aug  3 00:43:30 2006
***************
*** 1,84 ****
- <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:contacts"
- xmlns:st2="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 11">
- <meta name=Originator content="Microsoft Word 11">
- <link id=Main-File rel=Main-File href="../relnotes.htm">
- <o:SmartTagType namespaceuri="urn:schemas:contacts" name="GivenName"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="address"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="PostalCode"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="State"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="City"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="Street"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="country-region"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="PlaceType"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="PlaceName"/>
- <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
-  name="place"/>
- </head>
- 
- <body lang=EN-US link=navy vlink=maroon>
- 
- <div style='mso-element:footnote-separator' id=fs>
- 
- <p class=MsoNormal><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
- 
- <hr align=left size=1 width="33%">
- 
- <![endif]></span></p>
- 
- </div>
- 
- <div style='mso-element:footnote-continuation-separator' id=fcs>
- 
- <p class=MsoNormal><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
- 
- <hr align=left size=1>
- 
- <![endif]></span></p>
- 
- </div>
- 
- <div style='mso-element:endnote-separator' id=es>
- 
- <p class=MsoNormal><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
- 
- <hr align=left size=1 width="33%">
- 
- <![endif]></span></p>
- 
- </div>
- 
- <div style='mso-element:endnote-continuation-separator' id=ecs>
- 
- <p class=MsoNormal><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
- 
- <hr align=left size=1>
- 
- <![endif]></span></p>
- 
- </div>
- 
- <div style='mso-element:header' id=h2>
- 
- <p class=MsoHeader>OpenAFS for Windows 1.4.0 Release Notes</p>
- 
- </div>
- 
- </body>
- 
- </html>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/preview.wmf
Index: openafs/src/WINNT/install/wix/feature.wxi
diff -c openafs/src/WINNT/install/wix/feature.wxi:1.14 openafs/src/WINNT/install/wix/feature.wxi:1.14.2.1
*** openafs/src/WINNT/install/wix/feature.wxi:1.14	Mon Mar 20 12:20:01 2006
--- openafs/src/WINNT/install/wix/feature.wxi	Tue Jul 18 12:03:59 2006
***************
*** 10,16 ****
             <ComponentRef Id="efl_uninstall_EXE" />
  
             <ComponentRef Id="cmp_Release_Notes_en_US" />
-            <ComponentRef Id="cmp_relnotes_files_en_US"/>
             <ComponentRef Id="cmf_index2_HTM_en_US" />
             <ComponentRef Id="cmp_index_files_en_US" />
             <ComponentRef Id="cmp_logo_files_en_US" />
--- 10,15 ----
Index: openafs/src/WINNT/install/wix/files.wxi
diff -c openafs/src/WINNT/install/wix/files.wxi:1.22.2.4 openafs/src/WINNT/install/wix/files.wxi:1.22.2.5
*** openafs/src/WINNT/install/wix/files.wxi:1.22.2.4	Sun Jul  2 21:46:33 2006
--- openafs/src/WINNT/install/wix/files.wxi	Tue Jul 18 12:03:59 2006
***************
*** 767,789 ****
                                  <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="frames.htm" LongName="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" />
                                  <File Id="filetoc_HTM_$(var.Language)" Name="toc.htm" LongName="toc.htm" DiskId="1" />
                              </Component>
-                             <Directory Id="dirrelnotes_files_$(var.Language)" Name="relnotes" LongName="relnotes_files" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\ReleaseNotes\relnotes_files\">
-                                 <Component Id="cmp_relnotes_files_$(var.Language)" Guid="$(var.DocHtmlRelnotesFilesGuid)">
-                                     <File Id="filernfilelist_XML_$(var.Language)" Name="filelist.xml" LongName="filelist.xml" DiskId="1"/>
-                                     <File Id="filernheader_HTM_$(var.Language)" Name="header.htm" LongName="header.htm" DiskId="1"/>
-                                     <File Id="filernpreview_WMF_$(var.Language)" Name="preview.wmf" LongName="preview.wmf" DiskId="1"/>
-                                 </Component>
-                             </Directory> <!-- relnotes_files -->
                              <Directory Id="dirlogo_files_$(var.Language)" Name="logo" LongName="logo_files" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\ReleaseNotes\logo_files\">
                                  <Component Id="cmp_logo_files_$(var.Language)" Guid="$(var.DocHtmlLogoFilesGuid)">
-                                     <File Id="filelffilelist_XML_$(var.Language)" Name="filelist.xml" LongName="filelist.xml" DiskId="1"/>
                                      <File Id="filelfimage001_JPG_$(var.Language)" Name="image001.jpg" LongName="image001.jpg" DiskId="1"/>
-                                     <File Id="filelfimage002_JPG_$(var.Language)" Name="image002.jpg" LongName="image002.jpg" DiskId="1"/>
                                  </Component>
                              </Directory> <!-- logo_files -->
                          </Directory> <!-- Release Notes -->
--- 767,780 ----
                                  <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" />
                                  <File Id="filetoc_HTM_$(var.Language)" Name="toc.htm" LongName="toc.htm" DiskId="1" />
                              </Component>
                              <Directory Id="dirlogo_files_$(var.Language)" Name="logo" LongName="logo_files" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\ReleaseNotes\logo_files\">
                                  <Component Id="cmp_logo_files_$(var.Language)" Guid="$(var.DocHtmlLogoFilesGuid)">
                                      <File Id="filelfimage001_JPG_$(var.Language)" Name="image001.jpg" LongName="image001.jpg" DiskId="1"/>
                                  </Component>
                              </Directory> <!-- logo_files -->
                          </Directory> <!-- Release Notes -->
***************
*** 799,805 ****
                  </Component>
                  <Component Id="cpf_CellServDB" Guid="D5BA4C15-DBEC-4292-91FC-B54C30F24F2A">
  					<Registry Root="HKLM" Key="SOFTWARE\OpenAFS\Client" Name="CellServDBMoved" Type="integer" Value="1" Id="reg_OldCellDB" KeyPath="yes" />
!                     <CopyFile Id="copy_CellServDB" Delete="yes" DestinationDirectory="dirClient" DestinationName="CellServ|CellServDB" SourceDirectory="WindowsFolder" SourceName="afsdcell.ini" />
                      <Condition>OLDCELLSERVDB &lt;&gt; ""</Condition>
                  </Component>
    <?endif?>
--- 790,796 ----
                  </Component>
                  <Component Id="cpf_CellServDB" Guid="D5BA4C15-DBEC-4292-91FC-B54C30F24F2A">
  					<Registry Root="HKLM" Key="SOFTWARE\OpenAFS\Client" Name="CellServDBMoved" Type="integer" Value="1" Id="reg_OldCellDB" KeyPath="yes" />
!                     <CopyFile Id="copy_CellServDB" Delete="yes" DestinationDirectory="dirClient" DestinationName="CelSrvDB" SourceDirectory="WindowsFolder" SourceName="afsdcell.ini" />
                      <Condition>OLDCELLSERVDB &lt;&gt; ""</Condition>
                  </Component>
    <?endif?>
Index: openafs/src/WINNT/install/wix/property.wxi
diff -c openafs/src/WINNT/install/wix/property.wxi:1.10 openafs/src/WINNT/install/wix/property.wxi:1.10.2.1
*** openafs/src/WINNT/install/wix/property.wxi:1.10	Mon Mar 20 12:20:01 2006
--- openafs/src/WINNT/install/wix/property.wxi	Tue Jul 18 12:03:59 2006
***************
*** 49,123 ****
  
  <?ifndef BinsOnly?>
      <Property Id="AFSCCPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PatchLevel" Type="registry" />
      </Property>
      <Property Id="AFSCCMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MajorVersion" Type="registry" />
      </Property>
      <Property Id="AFSCCMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MinorVersion" Type="registry" />
      </Property>
      <Property Id="AFSCCPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PathName" Type="registry" />
      </Property>
      
      <Property Id="AFSCLIENTPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="PatchLevel" Type="registry" />
      </Property>
      <Property Id="AFSCLIENTMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="MajorVersion" Type="registry" />
      </Property>
      <Property Id="AFSCLIENTMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="MinorVersion" Type="registry" />
      </Property>
      <Property Id="AFSCLIENTPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="PathName" Type="registry" />
      </Property>
  
      <Property Id="AFSDOCPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PatchLevel" Type="registry" />
      </Property>
      <Property Id="AFSDOCMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MajorVersion" Type="registry" />
      </Property>
      <Property Id="AFSDOCMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MinorVersion" Type="registry" />
      </Property>
      <Property Id="AFSDOCPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PathName" Type="registry" />
      </Property>
  
      <Property Id="AFSSERVERPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="PatchLevel" Type="registry" />
      </Property>
      <Property Id="AFSSERVERMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="MajorVersion" Type="registry" />
      </Property>
      <Property Id="AFSSERVERMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="MinorVersion" Type="registry" />
      </Property>
      <Property Id="AFSSERVERPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="PathName" Type="registry" />
      </Property>
      
      <Property Id="AFSSDKPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="PatchLevel" Type="registry" />
      </Property>
      <Property Id="AFSSDKMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_major" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="MajorVersion" Type="registry" />
      </Property>
      <Property Id="AFSSDKMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="MinorVersion" Type="registry" />
      </Property>
      <Property Id="AFSSDKPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_path" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="PathName" Type="registry" />
      </Property>
  
  	<Property Id="NSISVERSION">
! 	  <RegistrySearch Win64="$(var.Win64)" Id="rl_NSIS_Ver" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" Name="DisplayVersion" Type="registry" />
  	</Property>
      <Property Id="NSISUNINSTALL">
! 	  <RegistrySearch Win64="$(var.Win64)" Id="rl_NSIS_Uninst" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" Name="UninstallString" Type="registry" />
      </Property>
      
      <Property Id="OLDCELLSERVDB">
--- 49,123 ----
  
  <?ifndef BinsOnly?>
      <Property Id="AFSCCPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PatchLevel" Type="raw" />
      </Property>
      <Property Id="AFSCCMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MajorVersion" Type="raw" />
      </Property>
      <Property Id="AFSCCMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MinorVersion" Type="raw" />
      </Property>
      <Property Id="AFSCCPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSCC_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PathName" Type="directory" />
      </Property>
      
      <Property Id="AFSCLIENTPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="PatchLevel" Type="raw" />
      </Property>
      <Property Id="AFSCLIENTMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="MajorVersion" Type="raw" />
      </Property>
      <Property Id="AFSCLIENTMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="MinorVersion" Type="raw" />
      </Property>
      <Property Id="AFSCLIENTPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSClient_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="PathName" Type="directory" />
      </Property>
  
      <Property Id="AFSDOCPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PatchLevel" Type="raw" />
      </Property>
      <Property Id="AFSDOCMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MajorVersion" Type="raw" />
      </Property>
      <Property Id="AFSDOCMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MinorVersion" Type="raw" />
      </Property>
      <Property Id="AFSDOCPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSDoc_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PathName" Type="directory" />
      </Property>
  
      <Property Id="AFSSERVERPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="PatchLevel" Type="raw" />
      </Property>
      <Property Id="AFSSERVERMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="MajorVersion" Type="raw" />
      </Property>
      <Property Id="AFSSERVERMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="MinorVersion" Type="raw" />
      </Property>
      <Property Id="AFSSERVERPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSServer_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="PathName" Type="directory" />
      </Property>
      
      <Property Id="AFSSDKPATCH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="PatchLevel" Type="raw" />
      </Property>
      <Property Id="AFSSDKMAJOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_major" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="MajorVersion" Type="raw" />
      </Property>
      <Property Id="AFSSDKMINOR">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="MinorVersion" Type="raw" />
      </Property>
      <Property Id="AFSSDKPATH">
!       <RegistrySearch Win64="$(var.Win64)" Id="rl_AFSSDK_path" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="PathName" Type="directory" />
      </Property>
  
  	<Property Id="NSISVERSION">
! 	  <RegistrySearch Win64="$(var.Win64)" Id="rl_NSIS_Ver" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" Name="DisplayVersion" Type="raw" />
  	</Property>
      <Property Id="NSISUNINSTALL">
! 	  <RegistrySearch Win64="$(var.Win64)" Id="rl_NSIS_Uninst" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" Name="UninstallString" Type="file" />
      </Property>
      
      <Property Id="OLDCELLSERVDB">
Index: openafs/src/WINNT/install/wix/lang/de_DE/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/de_DE/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/de_DE/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/de_DE/ActionText.wxi:1.1	Mon Jun 21 01:21:49 2004
--- openafs/src/WINNT/install/wix/lang/de_DE/ActionText.wxi	Tue Jul 18 12:04:00 2006
***************
*** 1,64 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Anwendungsprogramm wird angeboten</ProgressText>
  
  <ProgressText Action="AllocateRegistrySpace" Template="Freier Speicherplatz: [1]">In der Registrierung wird Speicherplatz reserviert</ProgressText>
  
  <ProgressText Action="AppSearch" Template="Eigenschaft: [1], Signatur: [2]">Installierte Anwendungsprogramme werden gesucht</ProgressText>
  
! <ProgressText Action="BindImage" Template="Datei: [1]">Ausführbare Dateien werden gebunden</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">Kompatible Produkte werden gesucht</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">Speicherbedarf wird berechnet</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">Speicherbedarf wird berechnet</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Ordner: [1]">Ordner werden erstellt</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="Verknüpfung: [1]">Verknüpfungen werden erstellt</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="Dienst: [1]">Dienste werden gelöscht</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Datei: [1], Ordner: [9], Größe: [6]">Dateien werden dupliziert</ProgressText>
  
! <ProgressText Action="FileCost" Template="">Speicherbedarf wird berechnet</ProgressText>
  
  <ProgressText Action="FindRelatedProducts" Template="Anwendung gefunden: [1]">Verwandte Anwendungen werden gesucht</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Skriptoperationen werden generiert für Aktion:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Datei: [1], Ordner: [9], Größe: [6]">Netzwerkinstallationsdateien werden kopiert</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Datei: [1], Ordner: [9], Größe: [6]">Neue Dateien werden kopiert</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">ODBC-Komponenten werden installiert</ProgressText>
  
  <ProgressText Action="InstallServices" Template="Dienst: [2]">Neue Dienste werden installiert</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Datei: [1],  Abhängigkeiten: [2]">Systemkatalog wird installiert</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">Die Installation wird überprüft</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">Die Startbedingungen werden überprüft</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Anwendung: [1]">Funktionszustände verwandter Anwendungen werden migriert</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Datei: [1], Ordner: [9], Größe: [6]">Dateien werden verschoben</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Anwendungskontext:[1], Assemblierungsname:[2]">Assemblierungsinformationen werden veröffentlicht</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Anwendungskontext:[1], Assemblierungsname:[2]">Veröffentlichung der Assemblierungsinformationen wird aufgehoben</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Datei: [1], Ordner: [2], Größe: [3]">Dateien werden gepatcht</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">Registrierung der Komponente(n) wird aktualisiert</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Komponentenkennung: [1], Kennzeichner: [2]">Qualifizierte Komponenten werden veröffentlicht</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="Funktion: [1]">Produktfunktionen werden veröffentlicht</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">Produktinformation wird veröffentlicht</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Klassenkennung: [1]">Klassenserver werden registriert</ProgressText>
  
--- 1,64 ----
  <Include>
  
! <ProgressText Action="Advertise">Anwendungsprogramm wird angeboten</ProgressText>
  
  <ProgressText Action="AllocateRegistrySpace" Template="Freier Speicherplatz: [1]">In der Registrierung wird Speicherplatz reserviert</ProgressText>
  
  <ProgressText Action="AppSearch" Template="Eigenschaft: [1], Signatur: [2]">Installierte Anwendungsprogramme werden gesucht</ProgressText>
  
! <ProgressText Action="BindImage" Template="Datei: [1]">AusfÃ¼hrbare Dateien werden gebunden</ProgressText>
  
! <ProgressText Action="CCPSearch">Kompatible Produkte werden gesucht</ProgressText>
  
! <ProgressText Action="CostFinalize">Speicherbedarf wird berechnet</ProgressText>
  
! <ProgressText Action="CostInitialize">Speicherbedarf wird berechnet</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Ordner: [1]">Ordner werden erstellt</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="VerknÃ¼pfung: [1]">VerknÃ¼pfungen werden erstellt</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="Dienst: [1]">Dienste werden gelÃ¶scht</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Datei: [1], Ordner: [9], GrÃ¶ÃŸe: [6]">Dateien werden dupliziert</ProgressText>
  
! <ProgressText Action="FileCost">Speicherbedarf wird berechnet</ProgressText>
  
  <ProgressText Action="FindRelatedProducts" Template="Anwendung gefunden: [1]">Verwandte Anwendungen werden gesucht</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Skriptoperationen werden generiert fÃ¼r Aktion:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Datei: [1], Ordner: [9], GrÃ¶ÃŸe: [6]">Netzwerkinstallationsdateien werden kopiert</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Datei: [1], Ordner: [9], GrÃ¶ÃŸe: [6]">Neue Dateien werden kopiert</ProgressText>
  
! <ProgressText Action="InstallODBC">ODBC-Komponenten werden installiert</ProgressText>
  
  <ProgressText Action="InstallServices" Template="Dienst: [2]">Neue Dienste werden installiert</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Datei: [1],  AbhÃ¤ngigkeiten: [2]">Systemkatalog wird installiert</ProgressText>
  
! <ProgressText Action="InstallValidate">Die Installation wird Ã¼berprÃ¼ft</ProgressText>
  
! <ProgressText Action="LaunchConditions">Die Startbedingungen werden Ã¼berprÃ¼ft</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Anwendung: [1]">FunktionszustÃ¤nde verwandter Anwendungen werden migriert</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Datei: [1], Ordner: [9], GrÃ¶ÃŸe: [6]">Dateien werden verschoben</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Anwendungskontext:[1], Assemblierungsname:[2]">Assemblierungsinformationen werden verÃ¶ffentlicht</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Anwendungskontext:[1], Assemblierungsname:[2]">VerÃ¶ffentlichung der Assemblierungsinformationen wird aufgehoben</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Datei: [1], Ordner: [2], GrÃ¶ÃŸe: [3]">Dateien werden gepatcht</ProgressText>
  
! <ProgressText Action="ProcessComponents">Registrierung der Komponente(n) wird aktualisiert</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Komponentenkennung: [1], Kennzeichner: [2]">Qualifizierte Komponenten werden verÃ¶ffentlicht</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="Funktion: [1]">Produktfunktionen werden verÃ¶ffentlicht</ProgressText>
  
! <ProgressText Action="PublishProduct">Produktinformation wird verÃ¶ffentlicht</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Klassenkennung: [1]">Klassenserver werden registriert</ProgressText>
  
***************
*** 88,104 ****
  
  <ProgressText Action="RemoveFolders" Template="Ordner: [1]">Ordner werden entfernt</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]">INI-Dateieinträge werden entfernt</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">ODBC-Komponenten werden entfernt</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="Schlüssel: [1], Name: [2]">Werte werden aus der Systemregistrierung entfernt</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="Verknüpfungen: [1]">Verknüpfungen werden entfernt</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">Kompatible Produkte werden gesucht</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Aktion wird rückgängig gemacht:</ProgressText>
  
  <ProgressText Action="RollbackCleanup" Template="Datei: [1]">Sicherungsdateien werden entfernt</ProgressText>
  
--- 88,104 ----
  
  <ProgressText Action="RemoveFolders" Template="Ordner: [1]">Ordner werden entfernt</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Datei: [1], Abschnitt: [2], SchlÃ¼ssel: [3], Wert: [4]">INI-DateieintrÃ¤ge werden entfernt</ProgressText>
  
! <ProgressText Action="RemoveODBC">ODBC-Komponenten werden entfernt</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="SchlÃ¼ssel: [1], Name: [2]">Werte werden aus der Systemregistrierung entfernt</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="VerknÃ¼pfungen: [1]">VerknÃ¼pfungen werden entfernt</ProgressText>
  
! <ProgressText Action="RMCCPSearch">Kompatible Produkte werden gesucht</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Aktion wird rÃ¼ckgÃ¤ngig gemacht:</ProgressText>
  
  <ProgressText Action="RollbackCleanup" Template="Datei: [1]">Sicherungsdateien werden entfernt</ProgressText>
  
***************
*** 106,112 ****
  
  <ProgressText Action="SelfUnregModules" Template="Datei: [1], Ordner: [2]">Module werden aus der Registrierung entfernt</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">ODBC-Ordner werden initialisiert</ProgressText>
  
  <ProgressText Action="StartServices" Template="Dienst: [1]">Dienste werden gestartet</ProgressText>
  
--- 106,112 ----
  
  <ProgressText Action="SelfUnregModules" Template="Datei: [1], Ordner: [2]">Module werden aus der Registrierung entfernt</ProgressText>
  
! <ProgressText Action="SetODBCFolders">ODBC-Ordner werden initialisiert</ProgressText>
  
  <ProgressText Action="StartServices" Template="Dienst: [1]">Dienste werden gestartet</ProgressText>
  
***************
*** 114,124 ****
  
  <ProgressText Action="UnmoveFiles" Template="Datei: [1], Ordner: [9]">Verschobene Dateien werden entfernt</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Komponentenkennung: [1], Kennzeichner: [2]">Veröffentlichung qualifizierter Komponenten wird rückgängig gemacht</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Funktion: [1]">Veröffentlichung von Produktfunktionen wird rückgängig gemacht</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">Veröffentlichung von Produktinformation wird rückgängig gemacht</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Klassenkennung: [1]">Klassenserver werden aus der Registrierung entfernt</ProgressText>
  
--- 114,124 ----
  
  <ProgressText Action="UnmoveFiles" Template="Datei: [1], Ordner: [9]">Verschobene Dateien werden entfernt</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Komponentenkennung: [1], Kennzeichner: [2]">VerÃ¶ffentlichung qualifizierter Komponenten wird rÃ¼ckgÃ¤ngig gemacht</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Funktion: [1]">VerÃ¶ffentlichung von Produktfunktionen wird rÃ¼ckgÃ¤ngig gemacht</ProgressText>
  
! <ProgressText Action="UnpublishProduct">VerÃ¶ffentlichung von Produktinformation wird rÃ¼ckgÃ¤ngig gemacht</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Klassenkennung: [1]">Klassenserver werden aus der Registrierung entfernt</ProgressText>
  
***************
*** 136,143 ****
  
  <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Wert: [2], Aktion [3]">Umgebungsstrings werden aktualisiert</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]">INI-Dateiwerte werden geschrieben</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="Schlüssel: [1], Name: [2], Wert: [3]">Werte werden in die Systemregistrierung geschrieben</ProgressText>
  
  </Include>
--- 136,143 ----
  
  <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Wert: [2], Aktion [3]">Umgebungsstrings werden aktualisiert</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Datei: [1], Abschnitt: [2], SchlÃ¼ssel: [3], Wert: [4]">INI-Dateiwerte werden geschrieben</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="SchlÃ¼ssel: [1], Name: [2], Wert: [3]">Werte werden in die Systemregistrierung geschrieben</ProgressText>
  
  </Include>
Index: openafs/src/WINNT/install/wix/lang/en_US/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/en_US/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/en_US/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/en_US/ActionText.wxi:1.1	Mon Jun 21 01:21:50 2004
--- openafs/src/WINNT/install/wix/lang/en_US/ActionText.wxi	Tue Jul 18 12:04:00 2006
***************
*** 1,6 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Advertising application</ProgressText>
  
  <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">Searching for installed applications</ProgressText>
  
--- 1,6 ----
  <Include>
  
! <ProgressText Action="Advertise">Advertising application</ProgressText>
  
  <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">Searching for installed applications</ProgressText>
  
***************
*** 8,18 ****
  
  <ProgressText Action="BindImage" Template="File: [1]">Binding executables</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">Searching for qualifying products</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">Computing space requirements</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">Computing space requirements</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Folder: [1]">Creating folders</ProgressText>
  
--- 8,18 ----
  
  <ProgressText Action="BindImage" Template="File: [1]">Binding executables</ProgressText>
  
! <ProgressText Action="CCPSearch">Searching for qualifying products</ProgressText>
  
! <ProgressText Action="CostFinalize">Computing space requirements</ProgressText>
  
! <ProgressText Action="CostInitialize">Computing space requirements</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Folder: [1]">Creating folders</ProgressText>
  
***************
*** 22,28 ****
  
  <ProgressText Action="DuplicateFiles" Template="File: [1],  Directory: [9],  Size: [6]">Creating duplicate files</ProgressText>
  
! <ProgressText Action="FileCost" Template="">Computing space requirements</ProgressText>
  
  <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">Searching for related applications</ProgressText>
  
--- 22,28 ----
  
  <ProgressText Action="DuplicateFiles" Template="File: [1],  Directory: [9],  Size: [6]">Creating duplicate files</ProgressText>
  
! <ProgressText Action="FileCost">Computing space requirements</ProgressText>
  
  <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">Searching for related applications</ProgressText>
  
***************
*** 32,44 ****
  
  <ProgressText Action="InstallFiles" Template="File: [1],  Directory: [9],  Size: [6]">Copying new files</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">Installing ODBC components</ProgressText>
  
  <ProgressText Action="InstallServices" Template="Service: [2]">Installing new services</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">Validating install</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">Evaluating launch conditions</ProgressText>
  
  <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">Migrating feature states from related applications</ProgressText>
  
--- 32,44 ----
  
  <ProgressText Action="InstallFiles" Template="File: [1],  Directory: [9],  Size: [6]">Copying new files</ProgressText>
  
! <ProgressText Action="InstallODBC">Installing ODBC components</ProgressText>
  
  <ProgressText Action="InstallServices" Template="Service: [2]">Installing new services</ProgressText>
  
! <ProgressText Action="InstallValidate">Validating install</ProgressText>
  
! <ProgressText Action="LaunchConditions">Evaluating launch conditions</ProgressText>
  
  <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">Migrating feature states from related applications</ProgressText>
  
***************
*** 46,58 ****
  
  <ProgressText Action="PatchFiles" Template="File: [1],  Directory: [2],  Size: [3]">Patching files</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">Updating component registration</ProgressText>
  
  <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">Publishing Qualified Components</ProgressText>
  
  <ProgressText Action="PublishFeatures" Template="Feature: [1]">Publishing Product Features</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">Publishing product information</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Registering Class servers</ProgressText>
  
--- 46,58 ----
  
  <ProgressText Action="PatchFiles" Template="File: [1],  Directory: [2],  Size: [3]">Patching files</ProgressText>
  
! <ProgressText Action="ProcessComponents">Updating component registration</ProgressText>
  
  <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">Publishing Qualified Components</ProgressText>
  
  <ProgressText Action="PublishFeatures" Template="Feature: [1]">Publishing Product Features</ProgressText>
  
! <ProgressText Action="PublishProduct">Publishing product information</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Registering Class servers</ProgressText>
  
***************
*** 84,96 ****
  
  <ProgressText Action="RemoveIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">Removing INI files entries</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">Removing ODBC components</ProgressText>
  
  <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">Removing system registry values</ProgressText>
  
  <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">Removing shortcuts</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">Searching for qualifying products</ProgressText>
  
  <ProgressText Action="Rollback" Template="[1]">Rolling back action:</ProgressText>
  
--- 84,96 ----
  
  <ProgressText Action="RemoveIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">Removing INI files entries</ProgressText>
  
! <ProgressText Action="RemoveODBC">Removing ODBC components</ProgressText>
  
  <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">Removing system registry values</ProgressText>
  
  <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">Removing shortcuts</ProgressText>
  
! <ProgressText Action="RMCCPSearch">Searching for qualifying products</ProgressText>
  
  <ProgressText Action="Rollback" Template="[1]">Rolling back action:</ProgressText>
  
***************
*** 100,106 ****
  
  <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">Unregistering modules</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">Initializing ODBC directories</ProgressText>
  
  <ProgressText Action="StartServices" Template="Service: [1]">Starting services</ProgressText>
  
--- 100,106 ----
  
  <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">Unregistering modules</ProgressText>
  
! <ProgressText Action="SetODBCFolders">Initializing ODBC directories</ProgressText>
  
  <ProgressText Action="StartServices" Template="Service: [1]">Starting services</ProgressText>
  
***************
*** 112,118 ****
  
  <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">Unpublishing Product Features</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">Unpublishing product information</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Unregister Class servers</ProgressText>
  
--- 112,118 ----
  
  <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">Unpublishing Product Features</ProgressText>
  
! <ProgressText Action="UnpublishProduct">Unpublishing product information</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Unregister Class servers</ProgressText>
  
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 openafs/src/WINNT/install/wix/lang/en_US/ui.wxi:1.10.4.1
*** openafs/src/WINNT/install/wix/lang/en_US/ui.wxi:1.10	Mon Nov 21 10:51:37 2005
--- openafs/src/WINNT/install/wix/lang/en_US/ui.wxi	Tue Jul 18 12:04:00 2006
***************
*** 759,780 ****
          <Control Id="DNSLabel" Type="Text"						X="45"	Y="160"	Width="100" Height="15" Text="Lookup cells in DNS" />
          <Control Id="DNSSel" Type="RadioButtonGroup"			X="150"	Y="160"	Width="120" Height="20" Property="USEDNS" />
        </Dialog>
!       <RadioGroup Property="SECURITYLEVEL">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioGroup>
!       <RadioGroup Property="FREELANCEMODE">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioGroup>
!       <RadioGroup Property="USEDNS">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioGroup>
!       <RadioGroup Property="LOGONOPTIONS">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioGroup>
  
        <Dialog Id="ConfigCredsDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
          <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
--- 759,780 ----
          <Control Id="DNSLabel" Type="Text"						X="45"	Y="160"	Width="100" Height="15" Text="Lookup cells in DNS" />
          <Control Id="DNSSel" Type="RadioButtonGroup"			X="150"	Y="160"	Width="120" Height="20" Property="USEDNS" />
        </Dialog>
!       <RadioButtonGroup Property="SECURITYLEVEL">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioButtonGroup>
!       <RadioButtonGroup Property="FREELANCEMODE">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioButtonGroup>
!       <RadioButtonGroup Property="USEDNS">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioButtonGroup>
!       <RadioButtonGroup Property="LOGONOPTIONS">
  		<RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable" Value="0"></RadioButton>
  		<RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable" Value="1"></RadioButton>
!       </RadioButtonGroup>
  
        <Dialog Id="ConfigCredsDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
          <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
***************
*** 969,978 ****
            <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
          </Control>
        </Dialog>
!       <RadioGroup Property="IAgree">
          <RadioButton Text="{\DlgFont8}I &amp;accept the terms in the License Agreement" X="5" Y="0" Width="250" Height="15" Value="yes"></RadioButton>
          <RadioButton Text="{\DlgFont8}I &amp;do not accept the terms in the License Agreement" X="5" Y="20" Width="250" Height="15" Value="no"></RadioButton>
!       </RadioGroup>
        <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
        <TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
        <TextStyle Id="VerdanaBold13" FaceName="Verdana" Size="13" Bold="yes" />
--- 969,978 ----
            <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
          </Control>
        </Dialog>
!       <RadioButtonGroup Property="IAgree">
          <RadioButton Text="{\DlgFont8}I &amp;accept the terms in the License Agreement" X="5" Y="0" Width="250" Height="15" Value="yes"></RadioButton>
          <RadioButton Text="{\DlgFont8}I &amp;do not accept the terms in the License Agreement" X="5" Y="20" Width="250" Height="15" Value="no"></RadioButton>
!       </RadioButtonGroup>
        <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
        <TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
        <TextStyle Id="VerdanaBold13" FaceName="Verdana" Size="13" Bold="yes" />
Index: openafs/src/WINNT/install/wix/lang/es_ES/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/es_ES/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/es_ES/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/es_ES/ActionText.wxi:1.1	Mon Jun 21 01:21:50 2004
--- openafs/src/WINNT/install/wix/lang/es_ES/ActionText.wxi	Tue Jul 18 12:04:00 2006
***************
*** 1,6 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Mostrar aplicación</ProgressText>
  
  <ProgressText Action="AllocateRegistrySpace" Template="Espacio disponible: [1]">Asignando espacio del registro</ProgressText>
  
--- 1,6 ----
  <Include>
  
! <ProgressText Action="Advertise">Mostrar aplicaciÃ³n</ProgressText>
  
  <ProgressText Action="AllocateRegistrySpace" Template="Espacio disponible: [1]">Asignando espacio del registro</ProgressText>
  
***************
*** 8,18 ****
  
  <ProgressText Action="BindImage" Template="Archivo: [1]">Enlazando archivos ejecutables</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">Buscando productos necesarios</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">Calculando el espacio necesario</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">Calculando el espacio necesario</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Carpeta: [1]">Creando carpetas</ProgressText>
  
--- 8,18 ----
  
  <ProgressText Action="BindImage" Template="Archivo: [1]">Enlazando archivos ejecutables</ProgressText>
  
! <ProgressText Action="CCPSearch">Buscando productos necesarios</ProgressText>
  
! <ProgressText Action="CostFinalize">Calculando el espacio necesario</ProgressText>
  
! <ProgressText Action="CostInitialize">Calculando el espacio necesario</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Carpeta: [1]">Creando carpetas</ProgressText>
  
***************
*** 20,74 ****
  
  <ProgressText Action="DeleteServices" Template="Servicio: [1]">Eliminando servicios</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Archivo: [1], directorio: [9], tamaño: [6]">Creando archivos duplicados</ProgressText>
  
! <ProgressText Action="FileCost" Template="">Calculando el espacio necesario</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Se encontró esta aplicación: [1]">Buscando aplicaciones relacionadas</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Generando operaciones de secuencias de comandos para la acción:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Archivo: [1], directorio: [9], tamaño: [6]">Copiando archivos de instalación de la red</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Archivo: [1], directorio: [9], tamaño: [6]">Copiando archivos nuevos</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">Instalando componentes ODBC</ProgressText>
  
  <ProgressText Action="InstallServices" Template="Servicio: [2]">Instalando servicios nuevos</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Archivo: [1],  dependencias: [2]">Instalar catálogo de sistema</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">Validando la instalación</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">Evaluando condiciones de inicio</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Aplicación: [1]">Transfiriendo los estados de las características desde las aplicaciones relacionadas</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Archivo: [1], directorio: [9], tamaño: [6]">Moviendo archivos</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Contexto de aplicación:[1], Nombre de asamblea:[2]">Publicar información de la asamblea</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Contexto de aplicación:[1], Nombre de asamblea:[2]">No publicar información de la asamblea</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Archivo: [1], directorio: [2], tamaño: [3]">Revisando archivos</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">Actualizando el registro de componentes</ProgressText>
  
  <ProgressText Action="PublishComponents" Template="Id. del componente: [1], capacitador: [2]">Publicar componentes aceptables</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="Función: [1]">Publicar funciones del producto</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">Publicar información del producto</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Id. de clase: [1]">Registrando servidores de clases</ProgressText>
  
  <ProgressText Action="RegisterComPlus" Template="IdApl: [1]{{, Tipo de apl.: [2], Usuarios: [3], RSN: [4]}}">Registrando aplicaciones y componentes COM+</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="Extensión: [1]">Registrando servidores de extensiones</ProgressText>
  
  <ProgressText Action="RegisterFonts" Template="Fuente: [1]">Registrando fuentes</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="Tipo de contenido MIME: [1], extensión: [2]">Registrando información MIME</ProgressText>
  
  <ProgressText Action="RegisterProduct" Template="[1]">Registrando el producto</ProgressText>
  
--- 20,74 ----
  
  <ProgressText Action="DeleteServices" Template="Servicio: [1]">Eliminando servicios</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Archivo: [1], directorio: [9], tamaÃ±o: [6]">Creando archivos duplicados</ProgressText>
  
! <ProgressText Action="FileCost">Calculando el espacio necesario</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Se encontrÃ³ esta aplicaciÃ³n: [1]">Buscando aplicaciones relacionadas</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Generando operaciones de secuencias de comandos para la acciÃ³n:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Archivo: [1], directorio: [9], tamaÃ±o: [6]">Copiando archivos de instalaciÃ³n de la red</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Archivo: [1], directorio: [9], tamaÃ±o: [6]">Copiando archivos nuevos</ProgressText>
  
! <ProgressText Action="InstallODBC">Instalando componentes ODBC</ProgressText>
  
  <ProgressText Action="InstallServices" Template="Servicio: [2]">Instalando servicios nuevos</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Archivo: [1],  dependencias: [2]">Instalar catÃ¡logo de sistema</ProgressText>
  
! <ProgressText Action="InstallValidate">Validando la instalaciÃ³n</ProgressText>
  
! <ProgressText Action="LaunchConditions">Evaluando condiciones de inicio</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="AplicaciÃ³n: [1]">Transfiriendo los estados de las caracterÃ­sticas desde las aplicaciones relacionadas</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Archivo: [1], directorio: [9], tamaÃ±o: [6]">Moviendo archivos</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Contexto de aplicaciÃ³n:[1], Nombre de asamblea:[2]">Publicar informaciÃ³n de la asamblea</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Contexto de aplicaciÃ³n:[1], Nombre de asamblea:[2]">No publicar informaciÃ³n de la asamblea</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Archivo: [1], directorio: [2], tamaÃ±o: [3]">Revisando archivos</ProgressText>
  
! <ProgressText Action="ProcessComponents">Actualizando el registro de componentes</ProgressText>
  
  <ProgressText Action="PublishComponents" Template="Id. del componente: [1], capacitador: [2]">Publicar componentes aceptables</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="FunciÃ³n: [1]">Publicar funciones del producto</ProgressText>
  
! <ProgressText Action="PublishProduct">Publicar informaciÃ³n del producto</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Id. de clase: [1]">Registrando servidores de clases</ProgressText>
  
  <ProgressText Action="RegisterComPlus" Template="IdApl: [1]{{, Tipo de apl.: [2], Usuarios: [3], RSN: [4]}}">Registrando aplicaciones y componentes COM+</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="ExtensiÃ³n: [1]">Registrando servidores de extensiones</ProgressText>
  
  <ProgressText Action="RegisterFonts" Template="Fuente: [1]">Registrando fuentes</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="Tipo de contenido MIME: [1], extensiÃ³n: [2]">Registrando informaciÃ³n MIME</ProgressText>
  
  <ProgressText Action="RegisterProduct" Template="[1]">Registrando el producto</ProgressText>
  
***************
*** 80,112 ****
  
  <ProgressText Action="RemoveDuplicateFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos duplicados</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Nombre: [1], valor: [2], acción [3]">Actualizando cadenas de entorno</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="Aplicación: [1], Línea de comandos: [2]">Quitando aplicaciones</ProgressText>
  
  <ProgressText Action="RemoveFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos</ProgressText>
  
  <ProgressText Action="RemoveFolders" Template="Carpeta: [1]">Quitando carpetas</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Archivo: [1], sección: [2], clave: [3], valor: [4]">Quitando entradas de archivos INI</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">Quitando componentes ODBC</ProgressText>
  
  <ProgressText Action="RemoveRegistryValues" Template="Clave: [1], nombre: [2]">Quitando valores del registro del sistema</ProgressText>
  
  <ProgressText Action="RemoveShortcuts" Template="Acceso directo: [1]">Quitando accesos directos</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">Buscando productos necesarios</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Acción de restauración:</ProgressText>
  
  <ProgressText Action="RollbackCleanup" Template="Archivo: [1]">Quitando copias de seguridad</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Archivo: [1], carpeta: [2]">Registrando módulos</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Archivo: [1], carpeta: [2]">Eliminando módulos del registro</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">Inicializando directorios ODBC</ProgressText>
  
  <ProgressText Action="StartServices" Template="Servicio: [1]">Iniciando servicios</ProgressText>
  
--- 80,112 ----
  
  <ProgressText Action="RemoveDuplicateFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos duplicados</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Nombre: [1], valor: [2], acciÃ³n [3]">Actualizando cadenas de entorno</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="AplicaciÃ³n: [1], LÃ­nea de comandos: [2]">Quitando aplicaciones</ProgressText>
  
  <ProgressText Action="RemoveFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos</ProgressText>
  
  <ProgressText Action="RemoveFolders" Template="Carpeta: [1]">Quitando carpetas</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Archivo: [1], secciÃ³n: [2], clave: [3], valor: [4]">Quitando entradas de archivos INI</ProgressText>
  
! <ProgressText Action="RemoveODBC">Quitando componentes ODBC</ProgressText>
  
  <ProgressText Action="RemoveRegistryValues" Template="Clave: [1], nombre: [2]">Quitando valores del registro del sistema</ProgressText>
  
  <ProgressText Action="RemoveShortcuts" Template="Acceso directo: [1]">Quitando accesos directos</ProgressText>
  
! <ProgressText Action="RMCCPSearch">Buscando productos necesarios</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">AcciÃ³n de restauraciÃ³n:</ProgressText>
  
  <ProgressText Action="RollbackCleanup" Template="Archivo: [1]">Quitando copias de seguridad</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Archivo: [1], carpeta: [2]">Registrando mÃ³dulos</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Archivo: [1], carpeta: [2]">Eliminando mÃ³dulos del registro</ProgressText>
  
! <ProgressText Action="SetODBCFolders">Inicializando directorios ODBC</ProgressText>
  
  <ProgressText Action="StartServices" Template="Servicio: [1]">Iniciando servicios</ProgressText>
  
***************
*** 114,142 ****
  
  <ProgressText Action="UnmoveFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos movidos</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Id. del componente: [1], capacitador: [2]">Anular publicación de componentes aceptables</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Función: [1]">Anular publicación de funciones del producto</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">Anular publicación de información del producto</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Id. de clase: [1]">Eliminar del registro los servidores de clases</ProgressText>
  
  <ProgressText Action="UnregisterComPlus" Template="IdApl: [1]{{, Tipo de apl.: [2]}}">Quitando aplicaciones y componentes COM+ del registro</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="Extensión: [1]">Eliminando del registro los servidores de extensiones</ProgressText>
  
  <ProgressText Action="UnregisterFonts" Template="Fuente: [1]">Eliminando del registro las fuentes</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="Tipo de contenido MIME: [1], extensión: [2]">Eliminando del registro información MIME</ProgressText>
  
  <ProgressText Action="UnregisterProgIdInfo" Template="IdProg: [1]">Eliminando identificadores de programa del registro</ProgressText>
  
  <ProgressText Action="UnregisterTypeLibraries" Template="Id. de la biblioteca: [1]">Eliminando del registro bibliotecas de tipos</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Nombre: [1], valor: [2], acción [3]">Actualizando cadenas de entorno</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Archivo: [1], sección: [2], clave: [3], valor: [4]">Escribiendo valores de los archivos INI</ProgressText>
  
  <ProgressText Action="WriteRegistryValues" Template="Clave: [1], nombre: [2], valor: [3]">Escribiendo valores del registro del sistema</ProgressText>
  
--- 114,142 ----
  
  <ProgressText Action="UnmoveFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos movidos</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Id. del componente: [1], capacitador: [2]">Anular publicaciÃ³n de componentes aceptables</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="FunciÃ³n: [1]">Anular publicaciÃ³n de funciones del producto</ProgressText>
  
! <ProgressText Action="UnpublishProduct">Anular publicaciÃ³n de informaciÃ³n del producto</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Id. de clase: [1]">Eliminar del registro los servidores de clases</ProgressText>
  
  <ProgressText Action="UnregisterComPlus" Template="IdApl: [1]{{, Tipo de apl.: [2]}}">Quitando aplicaciones y componentes COM+ del registro</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="ExtensiÃ³n: [1]">Eliminando del registro los servidores de extensiones</ProgressText>
  
  <ProgressText Action="UnregisterFonts" Template="Fuente: [1]">Eliminando del registro las fuentes</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="Tipo de contenido MIME: [1], extensiÃ³n: [2]">Eliminando del registro informaciÃ³n MIME</ProgressText>
  
  <ProgressText Action="UnregisterProgIdInfo" Template="IdProg: [1]">Eliminando identificadores de programa del registro</ProgressText>
  
  <ProgressText Action="UnregisterTypeLibraries" Template="Id. de la biblioteca: [1]">Eliminando del registro bibliotecas de tipos</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Nombre: [1], valor: [2], acciÃ³n [3]">Actualizando cadenas de entorno</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Archivo: [1], secciÃ³n: [2], clave: [3], valor: [4]">Escribiendo valores de los archivos INI</ProgressText>
  
  <ProgressText Action="WriteRegistryValues" Template="Clave: [1], nombre: [2], valor: [3]">Escribiendo valores del registro del sistema</ProgressText>
  
Index: openafs/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi:1.1	Mon Jun 21 01:21:51 2004
--- openafs/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi	Tue Jul 18 12:04:00 2006
***************
*** 1,143 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Œã‚ÅŽg—p‚·‚é‚½‚ß‚ÉƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðÝ’è‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="‹ó‚«—Ìˆæ: [1]">ƒŒƒWƒXƒgƒŠ—Ìˆæ‚ðŠ„‚è“–‚Ä‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="AppSearch" Template="ƒvƒƒpƒeƒB: [1]A –¼: [2]">ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="BindImage" Template="ƒtƒ@ƒCƒ‹: [1]">ŽÀsƒtƒ@ƒCƒ‹‚ðƒoƒCƒ“ƒh‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">ðŒ‚É‡‚¤»•i‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">•K—v‚È—Ìˆæ‚ðŒvŽZ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">•K—v‚È—Ìˆæ‚ðŒvŽZ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="ƒtƒHƒ‹ƒ_: [1]">ƒtƒHƒ‹ƒ_‚ðì¬‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="ƒVƒ‡[ƒgƒJƒbƒg: [1]">ƒVƒ‡[ƒgƒJƒbƒg‚ðì¬‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="ƒT[ƒrƒX: [1]">ƒT[ƒrƒX‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="ƒtƒ@ƒCƒ‹: [1]A  ƒfƒBƒŒƒNƒgƒŠ: [9]A  ƒTƒCƒY: [6]">d•¡‚µ‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðì¬‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="FileCost" Template="">•K—v‚È—Ìˆæ‚ðŒvŽZ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Œ©‚Â‚©‚Á‚½ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ : [1]">ŠÖ˜A‚ÌƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">‘€ì‚Ì‚½‚ß‚ÌƒXƒNƒŠƒvƒg‘€ì‚ðì¬‚µ‚Ä‚¢‚Ü‚·:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="ƒtƒ@ƒCƒ‹: [1]A ƒfƒBƒŒƒNƒgƒŠ: [9]A ƒTƒCƒY: [6]">ƒlƒbƒgƒ[ƒN ƒCƒ“ƒXƒg[ƒ‹ ƒtƒ@ƒCƒ‹‚ðƒRƒs[‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="ƒtƒ@ƒCƒ‹: [1]A  ƒfƒBƒŒƒNƒgƒŠ: [9]A  ƒTƒCƒY: [6]">V‚µ‚¢ƒtƒ@ƒCƒ‹‚ðƒRƒs[‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">ODBC ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="InstallServices" Template="ƒT[ƒrƒX: [2]">V‚µ‚¢ƒT[ƒrƒX‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="ƒtƒ@ƒCƒ‹: [1],  ˆË‘¶ŠÖŒW: [2]">ƒVƒXƒeƒ€ ƒJƒ^ƒƒO‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">ƒCƒ“ƒXƒg[ƒ‹‚ðŒŸØ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">‹N“®ó‘Ô‚ðŒŸØ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ : [1]">ŠÖ˜A‚ÌƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚ç‹@”\‚Ìó‘Ô‚ðˆÚs‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="ƒtƒ@ƒCƒ‹: [1]A  ƒfƒBƒŒƒNƒgƒŠ: [9]A  ƒTƒCƒY: [6]">ƒtƒ@ƒCƒ‹‚ðˆÚ“®‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒRƒ“ƒeƒLƒXƒg:[1], ƒAƒZƒ“ƒuƒŠ–¼:[2]">ƒAƒZƒ“ƒuƒŠî•ñ‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ ƒRƒ“ƒeƒLƒXƒg:[1], ƒAƒZƒ“ƒuƒŠ–¼:[2]">ƒAƒZƒ“ƒuƒŠî•ñ‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="ƒtƒ@ƒCƒ‹: [1]A  ƒfƒBƒŒƒNƒgƒŠ: [2]A  ƒTƒCƒY: [3]">ƒtƒ@ƒCƒ‹‚ðC³‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">ƒRƒ“ƒ|[ƒlƒ“ƒg‚Ì“o˜^‚ðXV‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="ƒRƒ“ƒ|[ƒlƒ“ƒg ID: [1]ACüŽq: [2]">ðŒ‚É‡‚¤ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="‹@”\: [1]">»•i‹@”\‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">»•iî•ñ‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="ƒNƒ‰ƒX ID: [1]">ƒNƒ‰ƒX ƒT[ƒo[‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId : [1]{{, AppType : [2], Users : [3], RSN : [4]}}">COM+ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÆƒRƒ“ƒ|[ƒlƒ“ƒg‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="ƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“: [1]">ƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“ ƒT[ƒo[‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="ƒtƒHƒ“ƒg: [1]">ƒtƒHƒ“ƒg‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME ƒRƒ“ƒeƒ“ƒg ƒ^ƒCƒv: [1]AƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“: [2]">MIME î•ñ‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">»•i‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ƒvƒƒOƒ‰ƒ€ ID: [1]">ƒvƒƒOƒ‰ƒ€Ž¯•ÊŽq‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="ƒ‰ƒCƒuƒ‰ƒŠ ID: [1]">Ží—Þ‚Ìƒ‰ƒCƒuƒ‰ƒŠ‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">ƒ†[ƒU[‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="ƒtƒ@ƒCƒ‹: [1]A ƒfƒBƒŒƒNƒgƒŠ: [9]">d•¡‚µ‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="–¼‘O: [1]A’l: [2]A‘€ì [3]">ŠÂ‹«ƒXƒgƒŠƒ“ƒO‚ðXV‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="ƒAƒvƒŠƒP[ƒVƒ‡ƒ“ : [1], ƒRƒ}ƒ“ƒh ƒ‰ƒCƒ“ : [2]">ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="ƒtƒ@ƒCƒ‹: [1]A ƒfƒBƒŒƒNƒgƒŠ: [9]">ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="ƒtƒHƒ‹ƒ_: [1]">ƒtƒHƒ‹ƒ_‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="ƒtƒ@ƒCƒ‹: [1]AƒZƒNƒVƒ‡ƒ“: [2]AƒL[: [3]A’l: [4]">INI ƒtƒ@ƒCƒ‹‚ÌƒGƒ“ƒgƒŠ‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">ODBC ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="ƒL[: [1]A–¼‘O: [2]">ƒVƒXƒeƒ€ ƒŒƒWƒXƒgƒŠ‚Ì’l‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="ƒVƒ‡[ƒgƒJƒbƒg: [1]">ƒVƒ‡[ƒgƒJƒbƒg‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">ðŒ‚É‡‚¤»•i‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">‘€ì‚ðŒ³‚É–ß‚µ‚Ä‚¢‚Ü‚·:</ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="ƒtƒ@ƒCƒ‹: [1]">ƒoƒbƒNƒAƒbƒv ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="ƒtƒ@ƒCƒ‹: [1]AƒtƒHƒ‹ƒ_: [2]">ƒ‚ƒWƒ…[ƒ‹‚ð“o˜^‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="ƒtƒ@ƒCƒ‹: [1]AƒtƒHƒ‹ƒ_: [2]">ƒ‚ƒWƒ…[ƒ‹‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">ODBC ƒfƒBƒŒƒNƒgƒŠ‚ð‰Šú‰»‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="StartServices" Template="ƒT[ƒrƒX: [1]">ƒT[ƒrƒX‚ðŠJŽn‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="StopServices" Template="ƒT[ƒrƒX: [1]">ƒT[ƒrƒX‚ð’âŽ~‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="ƒtƒ@ƒCƒ‹: [1]A ƒfƒBƒŒƒNƒgƒŠ: [9]">ˆÚ“®‚µ‚½ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="ƒRƒ“ƒ|[ƒlƒ“ƒg ID: [1]ACüŽq: [2]">ðŒ‚É‡‚¤ƒRƒ“ƒ|[ƒlƒ“ƒg‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="‹@”\: [1]">»•i‹@”\‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">»•iî•ñ‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="ƒNƒ‰ƒX ID: [1]">ƒNƒ‰ƒX ƒT[ƒo[‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId : [1]{{, AppType : [2]}}">COM+ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÆƒRƒ“ƒ|[ƒlƒ“ƒg‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="ƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“: [1]">ƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“ ƒT[ƒo[‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="ƒtƒHƒ“ƒg: [1]">ƒtƒHƒ“ƒg‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME ƒRƒ“ƒeƒ“ƒg ƒ^ƒCƒv: [1]AƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“: [2]">MIME î•ñ‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ƒvƒƒOƒ‰ƒ€ ID: [1]">ƒvƒƒOƒ‰ƒ€Ž¯•ÊŽq‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="ƒ‰ƒCƒuƒ‰ƒŠ ID: [1]">Ží—Þ‚Ìƒ‰ƒCƒuƒ‰ƒŠ‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="–¼‘O: [1]A’l: [2]A‘€ì [3]">ŠÂ‹«ƒXƒgƒŠƒ“ƒO‚ðXV‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="ƒtƒ@ƒCƒ‹: [1]AƒZƒNƒVƒ‡ƒ“: [2]AƒL[: [3]A’l: [4]">INI ƒtƒ@ƒCƒ‹‚É’l‚ð‘‚«ž‚ñ‚Å‚¢‚Ü‚·</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="ƒL[: [1]A –¼‘O: [2]A ’l: [3]">Œã‚ÅŽg—p‚·‚é‚½‚ß‚ÉƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðÝ’è‚µ‚Ä‚¢‚Ü‚·</ProgressText>
  
  </Include>
--- 1,143 ----
  <Include>
  
! <ProgressText Action="Advertise">Å’Ã£â€šÃ…Å½gâ€”pâ€šÂ·â€šÃ©â€šÂ½â€šÃŸâ€šÃ‰Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ°ÂÃâ€™Ã¨â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="â€¹Ã³â€šÂ«â€”ÃŒË†Ã¦: [1]">Æ’Å’Æ’WÆ’XÆ’gÆ’Å â€”ÃŒË†Ã¦â€šÃ°Å â€žâ€šÃ¨â€œâ€“â€šÃ„â€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="AppSearch" Template="Æ’vÆ’ÂÆ’pÆ’eÆ’B: [1]ÂA ÂÂâ€“Â¼: [2]">Æ’CÆ’â€œÆ’XÆ’gÂ[Æ’â€¹â€šÂ³â€šÃªâ€šÃ„â€šÂ¢â€šÃ©Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ°Å’Å¸ÂÃµâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="BindImage" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]">Å½Ã€ÂsÆ’tÆ’@Æ’CÆ’â€¹â€šÃ°Æ’oÆ’CÆ’â€œÆ’hâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="CCPSearch">ÂÃ°Å’Ââ€šÃ‰Ââ€¡â€šÂ¤ÂÂ»â€¢iâ€šÃ°Å’Å¸ÂÃµâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="CostFinalize">â€¢Kâ€”vâ€šÃˆâ€”ÃŒË†Ã¦â€šÃ°Å’vÅ½Zâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="CostInitialize">â€¢Kâ€”vâ€šÃˆâ€”ÃŒË†Ã¦â€šÃ°Å’vÅ½Zâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="Æ’tÆ’HÆ’â€¹Æ’_: [1]">Æ’tÆ’HÆ’â€¹Æ’_â€šÃ°ÂÃ¬ÂÂ¬â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="Æ’VÆ’â€¡Â[Æ’gÆ’JÆ’bÆ’g: [1]">Æ’VÆ’â€¡Â[Æ’gÆ’JÆ’bÆ’gâ€šÃ°ÂÃ¬ÂÂ¬â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="Æ’TÂ[Æ’rÆ’X: [1]">Æ’TÂ[Æ’rÆ’Xâ€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA  Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]ÂA  Æ’TÆ’CÆ’Y: [6]">Âdâ€¢Â¡â€šÂµâ€šÃ„â€šÂ¢â€šÃ©Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°ÂÃ¬ÂÂ¬â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="FileCost">â€¢Kâ€”vâ€šÃˆâ€”ÃŒË†Ã¦â€šÃ°Å’vÅ½Zâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Å’Â©â€šÃ‚â€šÂ©â€šÃâ€šÂ½Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œ : [1]">Å Ã–ËœAâ€šÃŒÆ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ°Å’Å¸ÂÃµâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">â€˜â‚¬ÂÃ¬â€šÃŒâ€šÂ½â€šÃŸâ€šÃŒÆ’XÆ’NÆ’Å Æ’vÆ’gâ€˜â‚¬ÂÃ¬â€šÃ°ÂÃ¬ÂÂ¬â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]ÂA Æ’TÆ’CÆ’Y: [6]">Æ’lÆ’bÆ’gÆ’ÂÂ[Æ’N Æ’CÆ’â€œÆ’XÆ’gÂ[Æ’â€¹ Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°Æ’RÆ’sÂ[â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA  Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]ÂA  Æ’TÆ’CÆ’Y: [6]">ÂVâ€šÂµâ€šÂ¢Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°Æ’RÆ’sÂ[â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="InstallODBC">ODBC Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃ°Æ’CÆ’â€œÆ’XÆ’gÂ[Æ’â€¹â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="InstallServices" Template="Æ’TÂ[Æ’rÆ’X: [2]">ÂVâ€šÂµâ€šÂ¢Æ’TÂ[Æ’rÆ’Xâ€šÃ°Æ’CÆ’â€œÆ’XÆ’gÂ[Æ’â€¹â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1],  Ë†Ã‹â€˜Â¶Å Ã–Å’W: [2]">Æ’VÆ’XÆ’eÆ’â‚¬ Æ’JÆ’^Æ’ÂÆ’Oâ€šÃ°Æ’CÆ’â€œÆ’XÆ’gÂ[Æ’â€¹â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="InstallValidate">Æ’CÆ’â€œÆ’XÆ’gÂ[Æ’â€¹â€šÃ°Å’Å¸ÂÃ˜â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="LaunchConditions">â€¹Nâ€œÂ®ÂÃ³â€˜Ã”â€šÃ°Å’Å¸ÂÃ˜â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œ : [1]">Å Ã–ËœAâ€šÃŒÆ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÂ©â€šÃ§â€¹@â€\â€šÃŒÂÃ³â€˜Ã”â€šÃ°Ë†ÃšÂsâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA  Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]ÂA  Æ’TÆ’CÆ’Y: [6]">Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°Ë†Ãšâ€œÂ®â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œ Æ’RÆ’â€œÆ’eÆ’LÆ’XÆ’g:[1], Æ’AÆ’ZÆ’â€œÆ’uÆ’Å â€“Â¼:[2]">Æ’AÆ’ZÆ’â€œÆ’uÆ’Å ÂÃ®â€¢Ã±â€šÃ°Å’Ã¶Å Jâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œ Æ’RÆ’â€œÆ’eÆ’LÆ’XÆ’g:[1], Æ’AÆ’ZÆ’â€œÆ’uÆ’Å â€“Â¼:[2]">Æ’AÆ’ZÆ’â€œÆ’uÆ’Å ÂÃ®â€¢Ã±â€šÃ°â€Ã±Å’Ã¶Å Jâ€šÃ‰â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA  Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [2]ÂA  Æ’TÆ’CÆ’Y: [3]">Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°ÂCÂÂ³â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="ProcessComponents">Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃŒâ€œoËœ^â€šÃ°ÂXÂVâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’g ID: [1]ÂAÂCÂÃ¼Å½q: [2]">ÂÃ°Å’Ââ€šÃ‰Ââ€¡â€šÂ¤Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃ°Å’Ã¶Å Jâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="â€¹@â€\: [1]">ÂÂ»â€¢iâ€¹@â€\â€šÃ°Å’Ã¶Å Jâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="PublishProduct">ÂÂ»â€¢iÂÃ®â€¢Ã±â€šÃ°Å’Ã¶Å Jâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Æ’NÆ’â€°Æ’X ID: [1]">Æ’NÆ’â€°Æ’X Æ’TÂ[Æ’oÂ[â€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId : [1]{{, AppType : [2], Users : [3], RSN : [4]}}">COM+ Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ†Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="Æ’GÆ’NÆ’XÆ’eÆ’â€œÆ’VÆ’â€¡Æ’â€œ: [1]">Æ’GÆ’NÆ’XÆ’eÆ’â€œÆ’VÆ’â€¡Æ’â€œ Æ’TÂ[Æ’oÂ[â€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="Æ’tÆ’HÆ’â€œÆ’g: [1]">Æ’tÆ’HÆ’â€œÆ’gâ€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME Æ’RÆ’â€œÆ’eÆ’â€œÆ’g Æ’^Æ’CÆ’v: [1]ÂAÆ’GÆ’NÆ’XÆ’eÆ’â€œÆ’VÆ’â€¡Æ’â€œ: [2]">MIME ÂÃ®â€¢Ã±â€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">ÂÂ»â€¢iâ€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="Æ’vÆ’ÂÆ’OÆ’â€°Æ’â‚¬ ID: [1]">Æ’vÆ’ÂÆ’OÆ’â€°Æ’â‚¬Å½Â¯â€¢ÃŠÅ½qâ€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="Æ’â€°Æ’CÆ’uÆ’â€°Æ’Å  ID: [1]">Å½Ã­â€”Ãžâ€šÃŒÆ’â€°Æ’CÆ’uÆ’â€°Æ’Å â€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">Æ’â€ Â[Æ’UÂ[â€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]">Âdâ€¢Â¡â€šÂµâ€šÃ„â€šÂ¢â€šÃ©Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="â€“Â¼â€˜O: [1]ÂAâ€™l: [2]ÂAâ€˜â‚¬ÂÃ¬ [3]">Å Ã‚â€¹Â«Æ’XÆ’gÆ’Å Æ’â€œÆ’Oâ€šÃ°ÂXÂVâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œ : [1], Æ’RÆ’}Æ’â€œÆ’h Æ’â€°Æ’CÆ’â€œ : [2]">Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]">Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="Æ’tÆ’HÆ’â€¹Æ’_: [1]">Æ’tÆ’HÆ’â€¹Æ’_â€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂAÆ’ZÆ’NÆ’VÆ’â€¡Æ’â€œ: [2]ÂAÆ’LÂ[: [3]ÂAâ€™l: [4]">INI Æ’tÆ’@Æ’CÆ’â€¹â€šÃŒÆ’GÆ’â€œÆ’gÆ’Å â€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveODBC">ODBC Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="Æ’LÂ[: [1]ÂAâ€“Â¼â€˜O: [2]">Æ’VÆ’XÆ’eÆ’â‚¬ Æ’Å’Æ’WÆ’XÆ’gÆ’Å â€šÃŒâ€™lâ€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="Æ’VÆ’â€¡Â[Æ’gÆ’JÆ’bÆ’g: [1]">Æ’VÆ’â€¡Â[Æ’gÆ’JÆ’bÆ’gâ€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="RMCCPSearch">ÂÃ°Å’Ââ€šÃ‰Ââ€¡â€šÂ¤ÂÂ»â€¢iâ€šÃ°Å’Å¸ÂÃµâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">â€˜â‚¬ÂÃ¬â€šÃ°Å’Â³â€šÃ‰â€“ÃŸâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·:</ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]">Æ’oÆ’bÆ’NÆ’AÆ’bÆ’v Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂAÆ’tÆ’HÆ’â€¹Æ’_: [2]">Æ’â€šÆ’WÆ’â€¦Â[Æ’â€¹â€šÃ°â€œoËœ^â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂAÆ’tÆ’HÆ’â€¹Æ’_: [2]">Æ’â€šÆ’WÆ’â€¦Â[Æ’â€¹â€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="SetODBCFolders">ODBC Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å â€šÃ°Ââ€°Å Ãºâ€°Â»â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="StartServices" Template="Æ’TÂ[Æ’rÆ’X: [1]">Æ’TÂ[Æ’rÆ’Xâ€šÃ°Å JÅ½nâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="StopServices" Template="Æ’TÂ[Æ’rÆ’X: [1]">Æ’TÂ[Æ’rÆ’Xâ€šÃ°â€™Ã¢Å½~â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂA Æ’fÆ’BÆ’Å’Æ’NÆ’gÆ’Å : [9]">Ë†Ãšâ€œÂ®â€šÂµâ€šÂ½Æ’tÆ’@Æ’CÆ’â€¹â€šÃ°ÂÃ­ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’g ID: [1]ÂAÂCÂÃ¼Å½q: [2]">ÂÃ°Å’Ââ€šÃ‰Ââ€¡â€šÂ¤Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃ°â€Ã±Å’Ã¶Å Jâ€šÃ‰â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="â€¹@â€\: [1]">ÂÂ»â€¢iâ€¹@â€\â€šÃ°â€Ã±Å’Ã¶Å Jâ€šÃ‰â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnpublishProduct">ÂÂ»â€¢iÂÃ®â€¢Ã±â€šÃ°â€Ã±Å’Ã¶Å Jâ€šÃ‰â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Æ’NÆ’â€°Æ’X ID: [1]">Æ’NÆ’â€°Æ’X Æ’TÂ[Æ’oÂ[â€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId : [1]{{, AppType : [2]}}">COM+ Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ†Æ’RÆ’â€œÆ’|Â[Æ’lÆ’â€œÆ’gâ€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="Æ’GÆ’NÆ’XÆ’eÆ’â€œÆ’VÆ’â€¡Æ’â€œ: [1]">Æ’GÆ’NÆ’XÆ’eÆ’â€œÆ’VÆ’â€¡Æ’â€œ Æ’TÂ[Æ’oÂ[â€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="Æ’tÆ’HÆ’â€œÆ’g: [1]">Æ’tÆ’HÆ’â€œÆ’gâ€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME Æ’RÆ’â€œÆ’eÆ’â€œÆ’g Æ’^Æ’CÆ’v: [1]ÂAÆ’GÆ’NÆ’XÆ’eÆ’â€œÆ’VÆ’â€¡Æ’â€œ: [2]">MIME ÂÃ®â€¢Ã±â€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="Æ’vÆ’ÂÆ’OÆ’â€°Æ’â‚¬ ID: [1]">Æ’vÆ’ÂÆ’OÆ’â€°Æ’â‚¬Å½Â¯â€¢ÃŠÅ½qâ€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="Æ’â€°Æ’CÆ’uÆ’â€°Æ’Å  ID: [1]">Å½Ã­â€”Ãžâ€šÃŒÆ’â€°Æ’CÆ’uÆ’â€°Æ’Å â€šÃŒâ€œoËœ^â€šÃ°â€°Ã°ÂÅ“â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="â€“Â¼â€˜O: [1]ÂAâ€™l: [2]ÂAâ€˜â‚¬ÂÃ¬ [3]">Å Ã‚â€¹Â«Æ’XÆ’gÆ’Å Æ’â€œÆ’Oâ€šÃ°ÂXÂVâ€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Æ’tÆ’@Æ’CÆ’â€¹: [1]ÂAÆ’ZÆ’NÆ’VÆ’â€¡Æ’â€œ: [2]ÂAÆ’LÂ[: [3]ÂAâ€™l: [4]">INI Æ’tÆ’@Æ’CÆ’â€¹â€šÃ‰â€™lâ€šÃ°Ââ€˜â€šÂ«ÂÅ¾â€šÃ±â€šÃ…â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="Æ’LÂ[: [1]ÂA â€“Â¼â€˜O: [2]ÂA â€™l: [3]">Å’Ã£â€šÃ…Å½gâ€”pâ€šÂ·â€šÃ©â€šÂ½â€šÃŸâ€šÃ‰Æ’AÆ’vÆ’Å Æ’PÂ[Æ’VÆ’â€¡Æ’â€œâ€šÃ°ÂÃâ€™Ã¨â€šÂµâ€šÃ„â€šÂ¢â€šÃœâ€šÂ·</ProgressText>
  
  </Include>
Index: openafs/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi:1.1	Mon Jun 21 01:21:51 2004
--- openafs/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi	Tue Jul 18 12:04:01 2006
***************
*** 1,143 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Ã³À½ »ç¿ë ½Ã ¼³Ä¡ÇÒ ÀÀ¿ë ÇÁ·Î±×·¥</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="³²Àº °ø°£: [1]">·¹Áö½ºÆ®¸® °ø°£ ÇÒ´ç Áß</ProgressText>
  
! <ProgressText Action="AppSearch" Template="¼Ó¼º: [1], ¼­¸í: [2]">¼³Ä¡ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ È®ÀÎ Áß</ProgressText>
  
! <ProgressText Action="BindImage" Template="ÆÄÀÏ: [1]">½ÇÇà ÆÄÀÏÀ» ¹ÙÀÎµùÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">Á¦Ç°À» È®ÀÎÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="Æú´õ: [1]">Æú´õ ¸¸µå´Â Áß</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="¹Ù·Î °¡±â: [1]">¹Ù·Î °¡±â ¸¸µå´Â Áß</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="¼­ºñ½º: [1]">¼­ºñ½º »èÁ¦ Áß</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="ÆÄÀÏ: [1],  µð·ºÅÍ¸®: [9],  Å©±â: [6]">Áßº¹ ÆÄÀÏÀ» ¸¸µå´Â Áß</ProgressText>
  
! <ProgressText Action="FileCost" Template="">ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="´ÙÀ½ ÀÀ¿ë ÇÁ·Î±×·¥À» Ã£¾Ò½À´Ï´Ù: [1]">°ü·Ã ÀÀ¿ë ÇÁ·Î±×·¥À» °Ë»öÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">¼öÇàÇÒ ½ºÅ©¸³Æ® ÀÛ¾÷À» »ý¼ºÇÏ´Â Áß:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="ÆÄÀÏ: [1], µð·ºÅÍ¸®: [9], Å©±â: [6]">³×Æ®¿öÅ© ¼³Ä¡ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="ÆÄÀÏ: [1],  µð·ºÅÍ¸®: [9],  Å©±â: [6]">»õ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">ODBC ±¸¼º ¿ä¼Ò ¼³Ä¡ Áß</ProgressText>
  
! <ProgressText Action="InstallServices" Template="¼­ºñ½º: [2]">»õ ¼­ºñ½º ¼³Ä¡ Áß</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="ÆÄÀÏ: [1],  Á¾¼Ó¼º: [2]">½Ã½ºÅÛ Ä«Å»·Î±× ¼³Ä¡ Áß</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">¼³Ä¡¸¦ À¯È¿È­ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">½ÇÇà Á¶°Ç È®ÀÎ Áß</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="ÀÀ¿ë ÇÁ·Î±×·¥: [1]">°ü·Ã ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ±â´ÉÀ» ÀÌµ¿ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="ÆÄÀÏ: [1],  µð·ºÅÍ¸®: [9],  Å©±â: [6]">ÆÄÀÏÀ» ¿Å±â´Â Áß</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="ÀÀ¿ë ÇÁ·Î±×·¥ ÄÁÅØ½ºÆ®:[1], ¾î¼Àºí¸® ÀÌ¸§:[2]">¾î¼Àºí¸® Á¤º¸¸¦ °Ô½ÃÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="ÀÀ¿ë ÇÁ·Î±×·¥ ÄÁÅØ½ºÆ®:[1], ¾î¼Àºí¸® ÀÌ¸§:[2]">¾î¼Àºí¸® Á¤º¸¸¦ °Ô½Ã Ãë¼ÒÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="ÆÄÀÏ: [1], µð·ºÅÍ¸®: [2], Å©±â: [3]">ÆÄÀÏ ÆÐÄ¡ Áß</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">±¸¼º ¿ä¼Ò µî·ÏÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="±¸¼º ¿ä¼Ò ID: [1], Á¦ÇÑÀÚ: [2]">ÇØ´ç ±¸¼º ¿ä¼Ò¸¦ °Ô½ÃÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="±â´É: [1]">Á¦Ç° ±â´ÉÀ» °Ô½ÃÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">Á¦Ç° Á¤º¸¸¦ °Ô½ÃÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Class ¼­¹ö¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">COM+ ÀÀ¿ë ÇÁ·Î±×·¥°ú ±¸¼º ¿ä¼Ò¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="ÀÍ½ºÅÙ¼Ç: [1]">ÀÍ½ºÅÙ¼Ç ¼­¹ö¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="±Û²Ã: [1]">±Û²ÃÀ» µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME ÄÁÅÙÆ® À¯Çü: [1], ÀÍ½ºÅÙ¼Ç: [2]">MIME Á¤º¸¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">Á¦Ç°À» µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">ÇÁ·Î±×·¥ È®ÀÎÀÚ¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Çü½Ä ¶óÀÌºê·¯¸®¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">»ç¿ëÀÚ¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="ÆÄÀÏ: [1], µð·ºÅÍ¸®: [9]">Áßº¹ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="ÀÌ¸§: [1], °ª: [2], ¼öÇà [3]">È¯°æ ¹®ÀÚ¿­À» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="ÀÀ¿ë ÇÁ·Î±×·¥: [1], ¸í·ÉÁÙ: [2]">ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="ÆÄÀÏ: [1], µð·ºÅÍ¸®: [9]">ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="Æú´õ: [1]">Æú´õ¸¦ Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Å°: [1],  ¼½¼Ç: [2],  Å°: [3], °ª: [4]">INI ÆÄÀÏ Ç×¸ñÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">ODBC ±¸¼º ¿ä¼Ò Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="Å°: [1], ÀÌ¸§: [2]">½Ã½ºÅÛ ·¹Áö½ºÆ®¸® °ªÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="¹Ù·Î °¡±â: [1]">¹Ù·Î °¡±â¸¦ Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">Á¦Ç°À» È®ÀÎÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">·Ñ¹éÀ» ¼öÇàÇÏ´Â Áß:</ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="ÆÄÀÏ: [1]">¹é¾÷ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="ÆÄÀÏ: [1], Æú´õ: [2]">¸ðµâÀ» µî·ÏÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="ÆÄÀÏ: [1], Æú´õ: [2]">¸ðµâ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">ODBC µð·ºÅÍ¸®¸¦ ÃÊ±âÈ­ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="StartServices" Template="¼­ºñ½º: [1]">¼­ºñ½º¸¦ ½ÃÀÛÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="StopServices" Template="¼­ºñ½º: [1]">¼­ºñ½º¸¦ ÁßÁöÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="ÆÄÀÏ: [1], µð·ºÅÍ¸®: [9]">ÀÌµ¿ÇÑ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="±¸¼º ¿ä¼Ò ID: [1], Á¦ÇÑÀÚ: [2]">ÇØ´ç ±¸¼º ¿ä¼ÒÀÇ °Ô½Ã¸¦ ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="±â´É: [1]">Á¦Ç° ±â´ÉÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">Á¦Ç° Á¤º¸ÀÇ °Ô½Ã¸¦ ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Class ¼­¹öÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">COM+ ÀÀ¿ë ÇÁ·Î±×·¥°ú ±¸¼º ¿ä¼ÒÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="ÀÍ½ºÅÙ¼Ç: [1]">extension ¼­¹öÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="±Û²Ã: [1]">±Û²Ã µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME ÄÁÅÙÆ® À¯Çü: [1], ÀÍ½ºÅÙ¼Ç: [2]">MIME Á¤º¸ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">ÇÁ·Î±×·¥ È®ÀÎÀÚÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Çü½Ä ¶óÀÌºê·¯¸®ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="ÀÌ¸§: [1], °ª: [2], ¼öÇà [3]">È¯°æ ¹®ÀÚ¿­À» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Å°: [1],  ¼½¼Ç: [2],  Å°: [3], °ª: [4]">INI ÆÄÀÏ °ªÀ» ¾²´Â Áß</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="Å°: [1], ÀÌ¸§: [2], °ª: [3]">½Ã½ºÅÛ ·¹Áö½ºÆ®¸® °ªÀ» ¾²´Â Áß</ProgressText>
  
  </Include>
--- 1,143 ----
  <Include>
  
! <ProgressText Action="Advertise">ÃƒÂ³Ã€Â½ Â»Ã§Â¿Ã« Â½Ãƒ Â¼Â³Ã„Â¡Ã‡Ã’ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="Â³Â²Ã€Âº Â°Ã¸Â°Â£: [1]">Â·Â¹ÃÃ¶Â½ÂºÃ†Â®Â¸Â® Â°Ã¸Â°Â£ Ã‡Ã’Â´Ã§ ÃÃŸ</ProgressText>
  
! <ProgressText Action="AppSearch" Template="Â¼Ã“Â¼Âº: [1], Â¼Â­Â¸Ã­: [2]">Â¼Â³Ã„Â¡Ã‡Ã‘ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥ ÃˆÂ®Ã€ÃŽ ÃÃŸ</ProgressText>
  
! <ProgressText Action="BindImage" Template="Ã†Ã„Ã€Ã: [1]">Â½Ã‡Ã‡Ã  Ã†Ã„Ã€ÃÃ€Â» Â¹Ã™Ã€ÃŽÂµÃ¹Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="CCPSearch">ÃÂ¦Ã‡Â°Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="CostFinalize">Ã‡ÃŠÂ¿Ã¤Ã‡Ã‘ Â°Ã¸Â°Â£Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="CostInitialize">Ã‡ÃŠÂ¿Ã¤Ã‡Ã‘ Â°Ã¸Â°Â£Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="Ã†ÃºÂ´Ãµ: [1]">Ã†ÃºÂ´Ãµ Â¸Â¸ÂµÃ¥Â´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="Â¹Ã™Â·ÃŽ Â°Â¡Â±Ã¢: [1]">Â¹Ã™Â·ÃŽ Â°Â¡Â±Ã¢ Â¸Â¸ÂµÃ¥Â´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="Â¼Â­ÂºÃ±Â½Âº: [1]">Â¼Â­ÂºÃ±Â½Âº Â»Ã¨ÃÂ¦ ÃÃŸ</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Ã†Ã„Ã€Ã: [1],  ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9],  Ã…Â©Â±Ã¢: [6]">ÃÃŸÂºÂ¹ Ã†Ã„Ã€ÃÃ€Â» Â¸Â¸ÂµÃ¥Â´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="FileCost">Ã‡ÃŠÂ¿Ã¤Ã‡Ã‘ Â°Ã¸Â°Â£Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Â´Ã™Ã€Â½ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥Ã€Â» ÃƒÂ£Â¾Ã’Â½Ã€Â´ÃÂ´Ã™: [1]">Â°Ã¼Â·Ãƒ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥Ã€Â» Â°Ã‹Â»Ã¶Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Â¼Ã¶Ã‡Ã Ã‡Ã’ Â½ÂºÃ…Â©Â¸Â³Ã†Â® Ã€Ã›Â¾Ã·Ã€Â» Â»Ã½Â¼ÂºÃ‡ÃÂ´Ã‚ ÃÃŸ:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Ã†Ã„Ã€Ã: [1], ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9], Ã…Â©Â±Ã¢: [6]">Â³Ã—Ã†Â®Â¿Ã¶Ã…Â© Â¼Â³Ã„Â¡ Ã†Ã„Ã€ÃÃ€Â» ÂºÂ¹Â»Ã§Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Ã†Ã„Ã€Ã: [1],  ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9],  Ã…Â©Â±Ã¢: [6]">Â»Ãµ Ã†Ã„Ã€ÃÃ€Â» ÂºÂ¹Â»Ã§Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="InstallODBC">ODBC Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’ Â¼Â³Ã„Â¡ ÃÃŸ</ProgressText>
  
! <ProgressText Action="InstallServices" Template="Â¼Â­ÂºÃ±Â½Âº: [2]">Â»Ãµ Â¼Â­ÂºÃ±Â½Âº Â¼Â³Ã„Â¡ ÃÃŸ</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Ã†Ã„Ã€Ã: [1],  ÃÂ¾Â¼Ã“Â¼Âº: [2]">Â½ÃƒÂ½ÂºÃ…Ã› Ã„Â«Ã…Â»Â·ÃŽÂ±Ã— Â¼Â³Ã„Â¡ ÃÃŸ</ProgressText>
  
! <ProgressText Action="InstallValidate">Â¼Â³Ã„Â¡Â¸Â¦ Ã€Â¯ÃˆÂ¿ÃˆÂ­Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="LaunchConditions">Â½Ã‡Ã‡Ã  ÃÂ¶Â°Ã‡ ÃˆÂ®Ã€ÃŽ ÃÃŸ</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥: [1]">Â°Ã¼Â·Ãƒ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥Â¿Â¡Â¼Â­ Â±Ã¢Â´Ã‰Ã€Â» Ã€ÃŒÂµÂ¿Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Ã†Ã„Ã€Ã: [1],  ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9],  Ã…Â©Â±Ã¢: [6]">Ã†Ã„Ã€ÃÃ€Â» Â¿Ã…Â±Ã¢Â´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥ Ã„ÃÃ…Ã˜Â½ÂºÃ†Â®:[1], Â¾Ã®Â¼Ã€ÂºÃ­Â¸Â® Ã€ÃŒÂ¸Â§:[2]">Â¾Ã®Â¼Ã€ÂºÃ­Â¸Â® ÃÂ¤ÂºÂ¸Â¸Â¦ Â°Ã”Â½ÃƒÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥ Ã„ÃÃ…Ã˜Â½ÂºÃ†Â®:[1], Â¾Ã®Â¼Ã€ÂºÃ­Â¸Â® Ã€ÃŒÂ¸Â§:[2]">Â¾Ã®Â¼Ã€ÂºÃ­Â¸Â® ÃÂ¤ÂºÂ¸Â¸Â¦ Â°Ã”Â½Ãƒ ÃƒÃ«Â¼Ã’Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Ã†Ã„Ã€Ã: [1], ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [2], Ã…Â©Â±Ã¢: [3]">Ã†Ã„Ã€Ã Ã†ÃÃ„Â¡ ÃÃŸ</ProgressText>
  
! <ProgressText Action="ProcessComponents">Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’ ÂµÃ®Â·ÃÃ€Â» Â¾Ã·ÂµÂ¥Ã€ÃŒÃ†Â®Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’ ID: [1], ÃÂ¦Ã‡Ã‘Ã€Ãš: [2]">Ã‡Ã˜Â´Ã§ Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’Â¸Â¦ Â°Ã”Â½ÃƒÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="Â±Ã¢Â´Ã‰: [1]">ÃÂ¦Ã‡Â° Â±Ã¢Â´Ã‰Ã€Â» Â°Ã”Â½ÃƒÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="PublishProduct">ÃÂ¦Ã‡Â° ÃÂ¤ÂºÂ¸Â¸Â¦ Â°Ã”Â½ÃƒÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Class Â¼Â­Â¹Ã¶Â¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">COM+ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥Â°Ãº Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’Â¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="Ã€ÃÂ½ÂºÃ…Ã™Â¼Ã‡: [1]">Ã€ÃÂ½ÂºÃ…Ã™Â¼Ã‡ Â¼Â­Â¹Ã¶Â¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="Â±Ã›Â²Ãƒ: [1]">Â±Ã›Â²ÃƒÃ€Â» ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME Ã„ÃÃ…Ã™Ã†Â® Ã€Â¯Ã‡Ã¼: [1], Ã€ÃÂ½ÂºÃ…Ã™Â¼Ã‡: [2]">MIME ÃÂ¤ÂºÂ¸Â¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">ÃÂ¦Ã‡Â°Ã€Â» ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥ ÃˆÂ®Ã€ÃŽÃ€ÃšÂ¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Ã‡Ã¼Â½Ã„ Â¶Ã³Ã€ÃŒÂºÃªÂ·Â¯Â¸Â®Â¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">Â»Ã§Â¿Ã«Ã€ÃšÂ¸Â¦ ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="Ã†Ã„Ã€Ã: [1], ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9]">ÃÃŸÂºÂ¹ Ã†Ã„Ã€ÃÃ€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Ã€ÃŒÂ¸Â§: [1], Â°Âª: [2], Â¼Ã¶Ã‡Ã  [3]">ÃˆÂ¯Â°Ã¦ Â¹Â®Ã€ÃšÂ¿Â­Ã€Â» Â¾Ã·ÂµÂ¥Ã€ÃŒÃ†Â®Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥: [1], Â¸Ã­Â·Ã‰ÃÃ™: [2]">Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥Ã€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="Ã†Ã„Ã€Ã: [1], ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9]">Ã†Ã„Ã€ÃÃ€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="Ã†ÃºÂ´Ãµ: [1]">Ã†ÃºÂ´ÃµÂ¸Â¦ ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Ã…Â°: [1],  Â¼Â½Â¼Ã‡: [2],  Ã…Â°: [3], Â°Âª: [4]">INI Ã†Ã„Ã€Ã Ã‡Ã—Â¸Ã±Ã€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveODBC">ODBC Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’ ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="Ã…Â°: [1], Ã€ÃŒÂ¸Â§: [2]">Â½ÃƒÂ½ÂºÃ…Ã› Â·Â¹ÃÃ¶Â½ÂºÃ†Â®Â¸Â® Â°ÂªÃ€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="Â¹Ã™Â·ÃŽ Â°Â¡Â±Ã¢: [1]">Â¹Ã™Â·ÃŽ Â°Â¡Â±Ã¢Â¸Â¦ ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="RMCCPSearch">ÃÂ¦Ã‡Â°Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Â·Ã‘Â¹Ã©Ã€Â» Â¼Ã¶Ã‡Ã Ã‡ÃÂ´Ã‚ ÃÃŸ:</ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="Ã†Ã„Ã€Ã: [1]">Â¹Ã©Â¾Ã· Ã†Ã„Ã€ÃÃ€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Ã†Ã„Ã€Ã: [1], Ã†ÃºÂ´Ãµ: [2]">Â¸Ã°ÂµÃ¢Ã€Â» ÂµÃ®Â·ÃÃ‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Ã†Ã„Ã€Ã: [1], Ã†ÃºÂ´Ãµ: [2]">Â¸Ã°ÂµÃ¢ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="SetODBCFolders">ODBC ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®Â¸Â¦ ÃƒÃŠÂ±Ã¢ÃˆÂ­Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="StartServices" Template="Â¼Â­ÂºÃ±Â½Âº: [1]">Â¼Â­ÂºÃ±Â½ÂºÂ¸Â¦ Â½ÃƒÃ€Ã›Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="StopServices" Template="Â¼Â­ÂºÃ±Â½Âº: [1]">Â¼Â­ÂºÃ±Â½ÂºÂ¸Â¦ ÃÃŸÃÃ¶Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="Ã†Ã„Ã€Ã: [1], ÂµÃ°Â·ÂºÃ…ÃÂ¸Â®: [9]">Ã€ÃŒÂµÂ¿Ã‡Ã‘ Ã†Ã„Ã€ÃÃ€Â» ÃÂ¦Â°Ã…Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’ ID: [1], ÃÂ¦Ã‡Ã‘Ã€Ãš: [2]">Ã‡Ã˜Â´Ã§ Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’Ã€Ã‡ Â°Ã”Â½ÃƒÂ¸Â¦ Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Â±Ã¢Â´Ã‰: [1]">ÃÂ¦Ã‡Â° Â±Ã¢Â´Ã‰Ã€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnpublishProduct">ÃÂ¦Ã‡Â° ÃÂ¤ÂºÂ¸Ã€Ã‡ Â°Ã”Â½ÃƒÂ¸Â¦ Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Class Â¼Â­Â¹Ã¶Ã€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">COM+ Ã€Ã€Â¿Ã« Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥Â°Ãº Â±Â¸Â¼Âº Â¿Ã¤Â¼Ã’Ã€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="Ã€ÃÂ½ÂºÃ…Ã™Â¼Ã‡: [1]">extension Â¼Â­Â¹Ã¶Ã€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="Â±Ã›Â²Ãƒ: [1]">Â±Ã›Â²Ãƒ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME Ã„ÃÃ…Ã™Ã†Â® Ã€Â¯Ã‡Ã¼: [1], Ã€ÃÂ½ÂºÃ…Ã™Â¼Ã‡: [2]">MIME ÃÂ¤ÂºÂ¸Ã€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Ã‡ÃÂ·ÃŽÂ±Ã—Â·Â¥ ÃˆÂ®Ã€ÃŽÃ€ÃšÃ€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Ã‡Ã¼Â½Ã„ Â¶Ã³Ã€ÃŒÂºÃªÂ·Â¯Â¸Â®Ã€Ã‡ ÂµÃ®Â·ÃÃ€Â» Ã‡Ã˜ÃÂ¦Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Ã€ÃŒÂ¸Â§: [1], Â°Âª: [2], Â¼Ã¶Ã‡Ã  [3]">ÃˆÂ¯Â°Ã¦ Â¹Â®Ã€ÃšÂ¿Â­Ã€Â» Â¾Ã·ÂµÂ¥Ã€ÃŒÃ†Â®Ã‡ÃÂ´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Ã…Â°: [1],  Â¼Â½Â¼Ã‡: [2],  Ã…Â°: [3], Â°Âª: [4]">INI Ã†Ã„Ã€Ã Â°ÂªÃ€Â» Â¾Â²Â´Ã‚ ÃÃŸ</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="Ã…Â°: [1], Ã€ÃŒÂ¸Â§: [2], Â°Âª: [3]">Â½ÃƒÂ½ÂºÃ…Ã› Â·Â¹ÃÃ¶Â½ÂºÃ†Â®Â¸Â® Â°ÂªÃ€Â» Â¾Â²Â´Ã‚ ÃÃŸ</ProgressText>
  
  </Include>
Index: openafs/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi:1.1	Mon Jun 21 01:21:52 2004
--- openafs/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi	Tue Jul 18 12:04:02 2006
***************
*** 1,74 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Aplicativo de anúncio</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="Espaço livre: [1]">Alocando espaço no Registro</ProgressText>
  
  <ProgressText Action="AppSearch" Template="Propriedade: [1], Assinatura: [2]">Procurando aplicativos instalados</ProgressText>
  
! <ProgressText Action="BindImage" Template="Arquivo: [1]">Vinculando executáveis</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">Procurando produtos qualificados</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">Calculando requisitos de espaço</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">Calculando requisitos de espaço</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Pasta: [1]">Criando pastas</ProgressText>
  
  <ProgressText Action="CreateShortcuts" Template="Atalho: [1]">Criando atalhos</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="Serviço: [1]">Excluindo serviços</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Criando arquivos duplicados</ProgressText>
  
! <ProgressText Action="FileCost" Template="">Calculando requisitos de espaço</ProgressText>
  
  <ProgressText Action="FindRelatedProducts" Template="Aplicativo localizado: [1]">Procurando por aplicativos relacionados</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Gerando operações de script para ação:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Copiando arquivos de instalação em rede</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Copiando novos arquivos</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">Instalando componentes de ODBC</ProgressText>
  
! <ProgressText Action="InstallServices" Template="Serviço: [2]">Instalando novos serviços</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Arquivo: [1],  dependências: [2]">Instalando catálogo do sistema</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">Validando instalação</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">Avaliando condições de inicialização</ProgressText>
  
  <ProgressText Action="MigrateFeatureStates" Template="Aplicativo: [1]">Migrando estados do recurso de aplicativos relacionados</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Movendo arquivos</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Contexto do aplicativo:[1], Nome de montagem:[2]">Publicando informações de montagem</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Contexto do aplicativo:[1], Nome de montagem:[2]">Cancelando publicação de informações de montagem</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Arquivo: [1], Diretório: [2], Tamanho: [3]">Corrigindo arquivos</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">Atualizando registro do componente</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Identificação do componente: [1], Qualificador: [2]">Publicando componentes qualificados</ProgressText>
  
  <ProgressText Action="PublishFeatures" Template="Recurso: [1]">Publicando recursos do produto</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">Publicando informações sobre o produto</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Registrando servidores de classes</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Usuários: [3], RSN: [4]}}">Registrando componentes e aplicativos do COM+</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="Extensão: [1]">Registrando servidores de extensão</ProgressText>
  
  <ProgressText Action="RegisterFonts" Template="Fonte: [1]">Registrando fontes</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="Tipo de conteúdo MIME: [1], Extensão: [2]">Registrando informações sobre MIME</ProgressText>
  
  <ProgressText Action="RegisterProduct" Template="[1]">Registrando produto</ProgressText>
  
--- 1,74 ----
  <Include>
  
! <ProgressText Action="Advertise">Aplicativo de anÃºncio</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="EspaÃ§o livre: [1]">Alocando espaÃ§o no Registro</ProgressText>
  
  <ProgressText Action="AppSearch" Template="Propriedade: [1], Assinatura: [2]">Procurando aplicativos instalados</ProgressText>
  
! <ProgressText Action="BindImage" Template="Arquivo: [1]">Vinculando executÃ¡veis</ProgressText>
  
! <ProgressText Action="CCPSearch">Procurando produtos qualificados</ProgressText>
  
! <ProgressText Action="CostFinalize">Calculando requisitos de espaÃ§o</ProgressText>
  
! <ProgressText Action="CostInitialize">Calculando requisitos de espaÃ§o</ProgressText>
  
  <ProgressText Action="CreateFolders" Template="Pasta: [1]">Criando pastas</ProgressText>
  
  <ProgressText Action="CreateShortcuts" Template="Atalho: [1]">Criando atalhos</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="ServiÃ§o: [1]">Excluindo serviÃ§os</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Arquivo: [1], DiretÃ³rio: [9], Tamanho: [6]">Criando arquivos duplicados</ProgressText>
  
! <ProgressText Action="FileCost">Calculando requisitos de espaÃ§o</ProgressText>
  
  <ProgressText Action="FindRelatedProducts" Template="Aplicativo localizado: [1]">Procurando por aplicativos relacionados</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Gerando operaÃ§Ãµes de script para aÃ§Ã£o:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Arquivo: [1], DiretÃ³rio: [9], Tamanho: [6]">Copiando arquivos de instalaÃ§Ã£o em rede</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Arquivo: [1], DiretÃ³rio: [9], Tamanho: [6]">Copiando novos arquivos</ProgressText>
  
! <ProgressText Action="InstallODBC">Instalando componentes de ODBC</ProgressText>
  
! <ProgressText Action="InstallServices" Template="ServiÃ§o: [2]">Instalando novos serviÃ§os</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Arquivo: [1],  dependÃªncias: [2]">Instalando catÃ¡logo do sistema</ProgressText>
  
! <ProgressText Action="InstallValidate">Validando instalaÃ§Ã£o</ProgressText>
  
! <ProgressText Action="LaunchConditions">Avaliando condiÃ§Ãµes de inicializaÃ§Ã£o</ProgressText>
  
  <ProgressText Action="MigrateFeatureStates" Template="Aplicativo: [1]">Migrando estados do recurso de aplicativos relacionados</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Arquivo: [1], DiretÃ³rio: [9], Tamanho: [6]">Movendo arquivos</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Contexto do aplicativo:[1], Nome de montagem:[2]">Publicando informaÃ§Ãµes de montagem</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Contexto do aplicativo:[1], Nome de montagem:[2]">Cancelando publicaÃ§Ã£o de informaÃ§Ãµes de montagem</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Arquivo: [1], DiretÃ³rio: [2], Tamanho: [3]">Corrigindo arquivos</ProgressText>
  
! <ProgressText Action="ProcessComponents">Atualizando registro do componente</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="IdentificaÃ§Ã£o do componente: [1], Qualificador: [2]">Publicando componentes qualificados</ProgressText>
  
  <ProgressText Action="PublishFeatures" Template="Recurso: [1]">Publicando recursos do produto</ProgressText>
  
! <ProgressText Action="PublishProduct">Publicando informaÃ§Ãµes sobre o produto</ProgressText>
  
  <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Registrando servidores de classes</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], UsuÃ¡rios: [3], RSN: [4]}}">Registrando componentes e aplicativos do COM+</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="ExtensÃ£o: [1]">Registrando servidores de extensÃ£o</ProgressText>
  
  <ProgressText Action="RegisterFonts" Template="Fonte: [1]">Registrando fontes</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="Tipo de conteÃºdo MIME: [1], ExtensÃ£o: [2]">Registrando informaÃ§Ãµes sobre MIME</ProgressText>
  
  <ProgressText Action="RegisterProduct" Template="[1]">Registrando produto</ProgressText>
  
***************
*** 76,142 ****
  
  <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Registrando bibliotecas de tipos</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">Registrando usuário</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="Arquivo: [1], Diretório: [9]">Removendo arquivos duplicados</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Nome: [1], Valor: [2], Ação [3]">Atualizando seqüências de ambiente</ProgressText>
  
  <ProgressText Action="RemoveExistingProducts" Template="Aplicativo: [1], Linha de comando: [2]">Removendo aplicativos</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="Arquivo: [1], Diretório: [9]">Removendo arquivos</ProgressText>
  
  <ProgressText Action="RemoveFolders" Template="Pasta: [1]">Removendo pastas</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Arquivo: [1], Seção: [2], Chave: [3], Valor: [4]">Removendo entradas dos arquivos INI</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">Removendo componentes de ODBC</ProgressText>
  
  <ProgressText Action="RemoveRegistryValues" Template="Chave: [1], Nome: [2]">Removendo valores do Registro do sistema</ProgressText>
  
  <ProgressText Action="RemoveShortcuts" Template="Atalho: [1]">Removendo atalhos</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">Procurando produtos qualificados</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Repetindo a ação:</ProgressText>
  
  <ProgressText Action="RollbackCleanup" Template="Arquivo: [1]">Removendo arquivos de backup</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Arquivo: [1], Pasta: [2]">Registrando módulos</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Arquivo: [1], Pasta: [2]">Removendo registro de módulos</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">Inicializando diretórios de ODBC</ProgressText>
  
! <ProgressText Action="StartServices" Template="Serviço: [1]">Iniciando serviços</ProgressText>
  
! <ProgressText Action="StopServices" Template="Serviço: [1]">Interrompendo serviços</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="Arquivo: [1], Diretório: [9]">Removendo arquivos movidos</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Identificação do componente: [1], Qualificador: [2]">Cancelando publicação de componentes qualificados</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Recurso: [1]">Cancelando publicação de recursos do produto</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">Cancelando publicação de informações sobre o produto</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Remover o registro de servidores de classes</ProgressText>
  
  <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Removendo registro de componentes e aplicativos do COM+</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="Extensão: [1]">Removendo o registro de servidores de extensão</ProgressText>
  
  <ProgressText Action="UnregisterFonts" Template="Fonte: [1]">Removendo o registro de fontes</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="Tipo de conteúdo MIME: [1], Extensão: [2]">Removendo registro de informações sobre MIME</ProgressText>
  
  <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Removendo registro de identificadores de programas</ProgressText>
  
  <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Removendo registro de bibliotecas de tipos</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Nome: [1], Valor: [2], Ação [3]">Atualizando seqüências de ambiente</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Arquivo: [1], Seção: [2], Chave: [3], Valor: [4]">Gravando valores de arquivos INI</ProgressText>
  
  <ProgressText Action="WriteRegistryValues" Template="Chave: [1], Nome: [2], Valor: [3]">Gravando valores de Registro do sistema</ProgressText>
  
--- 76,142 ----
  
  <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Registrando bibliotecas de tipos</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">Registrando usuÃ¡rio</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="Arquivo: [1], DiretÃ³rio: [9]">Removendo arquivos duplicados</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Nome: [1], Valor: [2], AÃ§Ã£o [3]">Atualizando seqÃ¼Ãªncias de ambiente</ProgressText>
  
  <ProgressText Action="RemoveExistingProducts" Template="Aplicativo: [1], Linha de comando: [2]">Removendo aplicativos</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="Arquivo: [1], DiretÃ³rio: [9]">Removendo arquivos</ProgressText>
  
  <ProgressText Action="RemoveFolders" Template="Pasta: [1]">Removendo pastas</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Arquivo: [1], SeÃ§Ã£o: [2], Chave: [3], Valor: [4]">Removendo entradas dos arquivos INI</ProgressText>
  
! <ProgressText Action="RemoveODBC">Removendo componentes de ODBC</ProgressText>
  
  <ProgressText Action="RemoveRegistryValues" Template="Chave: [1], Nome: [2]">Removendo valores do Registro do sistema</ProgressText>
  
  <ProgressText Action="RemoveShortcuts" Template="Atalho: [1]">Removendo atalhos</ProgressText>
  
! <ProgressText Action="RMCCPSearch">Procurando produtos qualificados</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Repetindo a aÃ§Ã£o:</ProgressText>
  
  <ProgressText Action="RollbackCleanup" Template="Arquivo: [1]">Removendo arquivos de backup</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Arquivo: [1], Pasta: [2]">Registrando mÃ³dulos</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Arquivo: [1], Pasta: [2]">Removendo registro de mÃ³dulos</ProgressText>
  
! <ProgressText Action="SetODBCFolders">Inicializando diretÃ³rios de ODBC</ProgressText>
  
! <ProgressText Action="StartServices" Template="ServiÃ§o: [1]">Iniciando serviÃ§os</ProgressText>
  
! <ProgressText Action="StopServices" Template="ServiÃ§o: [1]">Interrompendo serviÃ§os</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="Arquivo: [1], DiretÃ³rio: [9]">Removendo arquivos movidos</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="IdentificaÃ§Ã£o do componente: [1], Qualificador: [2]">Cancelando publicaÃ§Ã£o de componentes qualificados</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Recurso: [1]">Cancelando publicaÃ§Ã£o de recursos do produto</ProgressText>
  
! <ProgressText Action="UnpublishProduct">Cancelando publicaÃ§Ã£o de informaÃ§Ãµes sobre o produto</ProgressText>
  
  <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Remover o registro de servidores de classes</ProgressText>
  
  <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Removendo registro de componentes e aplicativos do COM+</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="ExtensÃ£o: [1]">Removendo o registro de servidores de extensÃ£o</ProgressText>
  
  <ProgressText Action="UnregisterFonts" Template="Fonte: [1]">Removendo o registro de fontes</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="Tipo de conteÃºdo MIME: [1], ExtensÃ£o: [2]">Removendo registro de informaÃ§Ãµes sobre MIME</ProgressText>
  
  <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Removendo registro de identificadores de programas</ProgressText>
  
  <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Removendo registro de bibliotecas de tipos</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Nome: [1], Valor: [2], AÃ§Ã£o [3]">Atualizando seqÃ¼Ãªncias de ambiente</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Arquivo: [1], SeÃ§Ã£o: [2], Chave: [3], Valor: [4]">Gravando valores de arquivos INI</ProgressText>
  
  <ProgressText Action="WriteRegistryValues" Template="Chave: [1], Nome: [2], Valor: [3]">Gravando valores de Registro do sistema</ProgressText>
  
Index: openafs/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi:1.1	Mon Jun 21 01:21:52 2004
--- openafs/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi	Tue Jul 18 12:04:02 2006
***************
*** 1,143 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">Í¨ÖªÓ¦ÓÃ³ÌÐò</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="×ÔÓÉ¿Õ¼ä: [1]">ÕýÔÚ·ÖÅä×¢²á±í¿Õ¼ä</ProgressText>
  
! <ProgressText Action="AppSearch" Template="ÊôÐÔ: [1]£¬Ç©Ãû: [2]">ÕýÔÚËÑË÷ÒÑ°²×°µÄÓ¦ÓÃ³ÌÐò</ProgressText>
  
! <ProgressText Action="BindImage" Template="ÎÄ¼þ: [1]">°ó¶¨¿ÉÖ´ÐÐÎÄ¼þ</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">ÕýÔÚËÑË÷·ûºÏ×Ê¸ñµÄ²úÆ·</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="ÎÄ¼þ¼Ð: [1]">ÕýÔÚ´´½¨ÎÄ¼þ¼Ð</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="¿ì½Ý·½Ê½: [1]">ÕýÔÚ´´½¨¿ì½Ý·½Ê½</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="·þÎñ: [1]">ÕýÔÚÉ¾³ý·þÎñ</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]£¬´óÐ¡: [6]">ÕýÔÚ´´½¨ÖØ¸´ÎÄ¼þ</ProgressText>
  
! <ProgressText Action="FileCost" Template="">ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="ÕÒµ½Ó¦ÓÃ³ÌÐò: [1]">ÕýÔÚËÑË÷Ïà¹Ø²úÆ·</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">ÕýÔÚÉú³É½Å±¾²Ù×÷£¬ÓÃÓÚ£º</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]£¬´óÐ¡: [6]">ÕýÔÚ¸´ÖÆÍøÂç°²×°ÎÄ¼þ</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]£¬´óÐ¡: [6]">ÕýÔÚ¸´ÖÆÐÂÎÄ¼þ</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">ÕýÔÚ°²×° ODBC ×é¼þ</ProgressText>
  
! <ProgressText Action="InstallServices" Template="·þÎñ: [2]">ÕýÔÚ°²×°ÐÂ·þÎñ</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="ÎÄ¼þ: [1]£¬ ÒÀ´æ¹ØÏµ: [2]">ÕýÔÚ°²×°ÏµÍ³Ä¿Â¼</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">ÕýÔÚÑéÖ¤°²×°</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">ÕýÔÚÆÀ¹ÀÆô¶¯Ìõ¼þ</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Ó¦ÓÃ³ÌÐò: [1]">ÕýÔÚ´ÓÏà¹ØÓ¦ÓÃ³ÌÐòÇ¨ÒÆ¹¦ÄÜ</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]£¬´óÐ¡: [6]">ÕýÔÚÒÆ¶¯ÎÄ¼þ</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Ó¦ÓÃ³ÌÐò»·¾³:[1], »ã±àÃû:[2]">·¢ÐÐ»ã±àÐÅÏ¢</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Ó¦ÓÃ³ÌÐò»·¾³:[1], »ã±àÃû:[2]">Í£Ö¹·¢ÐÐ»ã±àÐÅÏ¢</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [2]£¬´óÐ¡: [3]">ÕýÔÚÐÞ²¹ÎÄ¼þ</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">ÕýÔÚ¸üÐÂ×é¼þ×¢²á±í</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="×é¼þ ID: [1]£¬×Ê¸ñÈÏÖ¤Õß: [2]">ÕýÔÚ·¢²¼ºÏ¸ñµÄ×é¼þ</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="¹¦ÄÜ: [1]">ÕýÔÚ·¢²¼²úÆ·¹¦ÄÜ</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">ÕýÔÚ·¢²¼²úÆ·ÐÅÏ¢</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">ÕýÔÚ×¢²áÀà·þÎñÆ÷</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">ÕýÔÚ×¢²á COM+ Ó¦ÓÃ³ÌÐòºÍ×é¼þ</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="À©Õ¹: [1]">ÕýÔÚ×¢²áÀ©Õ¹·þÎñÆ÷</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="×ÖÌå: [1]">ÕýÔÚ×¢²á×ÖÌå</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME ÄÚÈÝÀàÐÍ: [1]£¬À©Õ¹: [2]">ÕýÔÚ×¢²á MIME ÐÅÏ¢</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">ÕýÔÚ×¢²á²úÆ·</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">ÕýÔÚ×¢²á³ÌÐò±êÊ¶·û</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">ÕýÔÚ×¢²áÀàÐÍ¿â</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">ÕýÔÚ×¢²áÓÃ»§</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]">ÕýÔÚÉ¾³ýÖØ¸´µÄÎÄ¼þ</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Ãû³Æ: [1]£¬ÊýÖµ: [2]£¬¶¯×÷ [3]">ÕýÔÚ¸üÐÂ»·¾³×Ö·û´®</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="Ó¦ÓÃ³ÌÐò: [1]£¬ÃüÁîÐÐ: [2]">ÕýÔÚÉ¾³ýÓ¦ÓÃ³ÌÐò</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]">ÕýÔÚÉ¾³ýÎÄ¼þ</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="ÎÄ¼þ¼Ð: [1]">ÕýÔÚÉ¾³ýÎÄ¼þ¼Ð</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="ÎÄ¼þ: [1]£¬½Ú: [2]£¬¼ü: [3]£¬ÊýÖµ: [4]">ÕýÔÚÉ¾³ý INI ÎÄ¼þÌõÄ¿</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">ÕýÔÚÉ¾³ý ODBC ×é¼þ</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="¼üÖµ: [1]£¬Ãû³Æ: [2]">ÕýÔÚÉ¾³ýÏµÍ³×¢²á±íÖµ</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="¿ì½Ý·½Ê½: [1]">ÕýÔÚÉ¾³ý¿ì½Ý·½Ê½</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">ÕýÔÚËÑË÷·ûºÏ×Ê¸ñµÄ²úÆ·</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">»Ø¹ö²Ù×÷: </ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="ÎÄ¼þ: [1]">ÕýÔÚÉ¾³ý±¸·ÝÎÄ¼þ</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="ÎÄ¼þ: [1]£¬ÎÄ¼þ¼Ð: [2]">ÕýÔÚ×¢²áÄ£¿é</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="ÎÄ¼þ: [1]£¬ÎÄ¼þ¼Ð: [2]">ÕýÔÚ³·ÏúÄ£¿éµÄ×¢²á</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">ÕýÔÚ³õÊ¼»¯ ODBC Ä¿Â¼</ProgressText>
  
! <ProgressText Action="StartServices" Template="·þÎñ: [1]">ÕýÔÚÆô¶¯·þÎñ</ProgressText>
  
! <ProgressText Action="StopServices" Template="·þÎñ: [1]">ÕýÔÚÍ£Ö¹·þÎñ</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="ÎÄ¼þ: [1]£¬Ä¿Â¼: [9]">ÕýÔÚÉ¾³ýÒÆ¶¯¹ýµÄÎÄ¼þ</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="×é¼þ ID: [1]£¬×Ê¸ñÈÏÖ¤Õß: [2]">ÕýÔÚÈ¡ÏûºÏ¸ñ×é¼þµÄ·¢²¼</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="¹¦ÄÜ: [1]">ÕýÔÚÈ¡Ïû²úÆ·¹¦ÄÜµÄ·¢²¼</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">ÕýÔÚÈ¡Ïû²úÆ·ÐÅÏ¢µÄ·¢²¼</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">ÕýÔÚ³·ÏúÀà·þÎñÆ÷µÄ×¢²á</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">ÕýÔÚ³·Ïú COM+ Ó¦ÓÃ³ÌÐòºÍ×é¼þµÄ×¢²á</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="À©Õ¹: [1]">ÕýÔÚ³·ÏúÀ©Õ¹·þÎñÆ÷µÄ×¢²á</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="×ÖÌå: [1]">ÕýÔÚ³·Ïú×ÖÌåµÄ×¢²á</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME ÄÚÈÝÀàÐÍ: [1]£¬À©Õ¹: [2]">ÕýÔÚ³·Ïú MIME ÐÅÏ¢µÄ×¢²á</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">ÕýÔÚ³·Ïú³ÌÐò±êÊ¶·ûµÄ×¢²á</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">ÕýÔÚ³·ÏúÀàÐÍ¿âµÄ×¢²á</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Ãû³Æ: [1]£¬ÊýÖµ: [2]£¬¶¯×÷ [3]">ÕýÔÚ¸üÐÂ»·¾³×Ö·û´®</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="ÎÄ¼þ: [1]£¬½Ú: [2]£¬¼ü: [3]£¬ÊýÖµ: [4]">ÕýÔÚÐ´Èë INI ÎÄ¼þÊýÖµ</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="¼ü: [1]£¬Ãû³Æ: [2]£¬ÊýÖµ: [3]">ÕýÔÚÐ´ÈëÏµÍ³×¢²á±íÖµ</ProgressText>
  
  </Include>
--- 1,143 ----
  <Include>
  
! <ProgressText Action="Advertise">ÃÂ¨Ã–ÂªÃ“Â¦Ã“ÃƒÂ³ÃŒÃÃ²</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="Ã—Ã”Ã“Ã‰Â¿Ã•Â¼Ã¤: [1]">Ã•Ã½Ã”ÃšÂ·Ã–Ã…Ã¤Ã—Â¢Â²Ã¡Â±Ã­Â¿Ã•Â¼Ã¤</ProgressText>
  
! <ProgressText Action="AppSearch" Template="ÃŠÃ´ÃÃ”: [1]Â£Â¬Ã‡Â©ÃƒÃ»: [2]">Ã•Ã½Ã”ÃšÃ‹Ã‘Ã‹Ã·Ã’Ã‘Â°Â²Ã—Â°ÂµÃ„Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²</ProgressText>
  
! <ProgressText Action="BindImage" Template="ÃŽÃ„Â¼Ã¾: [1]">Â°Ã³Â¶Â¨Â¿Ã‰Ã–Â´ÃÃÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="CCPSearch">Ã•Ã½Ã”ÃšÃ‹Ã‘Ã‹Ã·Â·Ã»ÂºÃÃ—ÃŠÂ¸Ã±ÂµÃ„Â²ÃºÃ†Â·</ProgressText>
  
! <ProgressText Action="CostFinalize">Ã•Ã½Ã”ÃšÂ¼Ã†Ã‹Ã£Â¿Ã•Â¼Ã¤ÃÃ¨Ã‡Ã³</ProgressText>
  
! <ProgressText Action="CostInitialize">Ã•Ã½Ã”ÃšÂ¼Ã†Ã‹Ã£Â¿Ã•Â¼Ã¤ÃÃ¨Ã‡Ã³</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="ÃŽÃ„Â¼Ã¾Â¼Ã: [1]">Ã•Ã½Ã”ÃšÂ´Â´Â½Â¨ÃŽÃ„Â¼Ã¾Â¼Ã</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="Â¿Ã¬Â½ÃÂ·Â½ÃŠÂ½: [1]">Ã•Ã½Ã”ÃšÂ´Â´Â½Â¨Â¿Ã¬Â½ÃÂ·Â½ÃŠÂ½</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="Â·Ã¾ÃŽÃ±: [1]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½Â·Ã¾ÃŽÃ±</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]Â£Â¬Â´Ã³ÃÂ¡: [6]">Ã•Ã½Ã”ÃšÂ´Â´Â½Â¨Ã–Ã˜Â¸Â´ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="FileCost">Ã•Ã½Ã”ÃšÂ¼Ã†Ã‹Ã£Â¿Ã•Â¼Ã¤ÃÃ¨Ã‡Ã³</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Ã•Ã’ÂµÂ½Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²: [1]">Ã•Ã½Ã”ÃšÃ‹Ã‘Ã‹Ã·ÃÃ Â¹Ã˜Â²ÃºÃ†Â·</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Ã•Ã½Ã”ÃšÃ‰ÃºÂ³Ã‰Â½Ã…Â±Â¾Â²Ã™Ã—Ã·Â£Â¬Ã“ÃƒÃ“ÃšÂ£Âº</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]Â£Â¬Â´Ã³ÃÂ¡: [6]">Ã•Ã½Ã”ÃšÂ¸Â´Ã–Ã†ÃÃ¸Ã‚Ã§Â°Â²Ã—Â°ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]Â£Â¬Â´Ã³ÃÂ¡: [6]">Ã•Ã½Ã”ÃšÂ¸Â´Ã–Ã†ÃÃ‚ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="InstallODBC">Ã•Ã½Ã”ÃšÂ°Â²Ã—Â° ODBC Ã—Ã©Â¼Ã¾</ProgressText>
  
! <ProgressText Action="InstallServices" Template="Â·Ã¾ÃŽÃ±: [2]">Ã•Ã½Ã”ÃšÂ°Â²Ã—Â°ÃÃ‚Â·Ã¾ÃŽÃ±</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬ Ã’Ã€Â´Ã¦Â¹Ã˜ÃÂµ: [2]">Ã•Ã½Ã”ÃšÂ°Â²Ã—Â°ÃÂµÃÂ³Ã„Â¿Ã‚Â¼</ProgressText>
  
! <ProgressText Action="InstallValidate">Ã•Ã½Ã”ÃšÃ‘Ã©Ã–Â¤Â°Â²Ã—Â°</ProgressText>
  
! <ProgressText Action="LaunchConditions">Ã•Ã½Ã”ÃšÃ†Ã€Â¹Ã€Ã†Ã´Â¶Â¯ÃŒÃµÂ¼Ã¾</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²: [1]">Ã•Ã½Ã”ÃšÂ´Ã“ÃÃ Â¹Ã˜Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²Ã‡Â¨Ã’Ã†Â¹Â¦Ã„Ãœ</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]Â£Â¬Â´Ã³ÃÂ¡: [6]">Ã•Ã½Ã”ÃšÃ’Ã†Â¶Â¯ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²Â»Â·Â¾Â³:[1], Â»Ã£Â±Ã ÃƒÃ»:[2]">Â·Â¢ÃÃÂ»Ã£Â±Ã ÃÃ…ÃÂ¢</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²Â»Â·Â¾Â³:[1], Â»Ã£Â±Ã ÃƒÃ»:[2]">ÃÂ£Ã–Â¹Â·Â¢ÃÃÂ»Ã£Â±Ã ÃÃ…ÃÂ¢</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [2]Â£Â¬Â´Ã³ÃÂ¡: [3]">Ã•Ã½Ã”ÃšÃÃžÂ²Â¹ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="ProcessComponents">Ã•Ã½Ã”ÃšÂ¸Ã¼ÃÃ‚Ã—Ã©Â¼Ã¾Ã—Â¢Â²Ã¡Â±Ã­</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Ã—Ã©Â¼Ã¾ ID: [1]Â£Â¬Ã—ÃŠÂ¸Ã±ÃˆÃÃ–Â¤Ã•ÃŸ: [2]">Ã•Ã½Ã”ÃšÂ·Â¢Â²Â¼ÂºÃÂ¸Ã±ÂµÃ„Ã—Ã©Â¼Ã¾</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="Â¹Â¦Ã„Ãœ: [1]">Ã•Ã½Ã”ÃšÂ·Â¢Â²Â¼Â²ÃºÃ†Â·Â¹Â¦Ã„Ãœ</ProgressText>
  
! <ProgressText Action="PublishProduct">Ã•Ã½Ã”ÃšÂ·Â¢Â²Â¼Â²ÃºÃ†Â·ÃÃ…ÃÂ¢</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Ã€Ã Â·Ã¾ÃŽÃ±Ã†Ã·</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡ COM+ Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²ÂºÃÃ—Ã©Â¼Ã¾</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="Ã€Â©Ã•Â¹: [1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Ã€Â©Ã•Â¹Â·Ã¾ÃŽÃ±Ã†Ã·</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="Ã—Ã–ÃŒÃ¥: [1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Ã—Ã–ÃŒÃ¥</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME Ã„ÃšÃˆÃÃ€Ã ÃÃ: [1]Â£Â¬Ã€Â©Ã•Â¹: [2]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡ MIME ÃÃ…ÃÂ¢</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Â²ÃºÃ†Â·</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Â³ÃŒÃÃ²Â±ÃªÃŠÂ¶Â·Ã»</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Ã€Ã ÃÃÂ¿Ã¢</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Ã“ÃƒÂ»Â§</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½Ã–Ã˜Â¸Â´ÂµÃ„ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="ÃƒÃ»Â³Ã†: [1]Â£Â¬ÃŠÃ½Ã–Âµ: [2]Â£Â¬Â¶Â¯Ã—Ã· [3]">Ã•Ã½Ã”ÃšÂ¸Ã¼ÃÃ‚Â»Â·Â¾Â³Ã—Ã–Â·Ã»Â´Â®</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²: [1]Â£Â¬ÃƒÃ¼ÃÃ®ÃÃ: [2]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="ÃŽÃ„Â¼Ã¾Â¼Ã: [1]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½ÃŽÃ„Â¼Ã¾Â¼Ã</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Â½Ãš: [2]Â£Â¬Â¼Ã¼: [3]Â£Â¬ÃŠÃ½Ã–Âµ: [4]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½ INI ÃŽÃ„Â¼Ã¾ÃŒÃµÃ„Â¿</ProgressText>
  
! <ProgressText Action="RemoveODBC">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½ ODBC Ã—Ã©Â¼Ã¾</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="Â¼Ã¼Ã–Âµ: [1]Â£Â¬ÃƒÃ»Â³Ã†: [2]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½ÃÂµÃÂ³Ã—Â¢Â²Ã¡Â±Ã­Ã–Âµ</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="Â¿Ã¬Â½ÃÂ·Â½ÃŠÂ½: [1]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½Â¿Ã¬Â½ÃÂ·Â½ÃŠÂ½</ProgressText>
  
! <ProgressText Action="RMCCPSearch">Ã•Ã½Ã”ÃšÃ‹Ã‘Ã‹Ã·Â·Ã»ÂºÃÃ—ÃŠÂ¸Ã±ÂµÃ„Â²ÃºÃ†Â·</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Â»Ã˜Â¹Ã¶Â²Ã™Ã—Ã·: </ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="ÃŽÃ„Â¼Ã¾: [1]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½Â±Â¸Â·ÃÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬ÃŽÃ„Â¼Ã¾Â¼Ã: [2]">Ã•Ã½Ã”ÃšÃ—Â¢Â²Ã¡Ã„Â£Â¿Ã©</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬ÃŽÃ„Â¼Ã¾Â¼Ã: [2]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃºÃ„Â£Â¿Ã©ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="SetODBCFolders">Ã•Ã½Ã”ÃšÂ³ÃµÃŠÂ¼Â»Â¯ ODBC Ã„Â¿Ã‚Â¼</ProgressText>
  
! <ProgressText Action="StartServices" Template="Â·Ã¾ÃŽÃ±: [1]">Ã•Ã½Ã”ÃšÃ†Ã´Â¶Â¯Â·Ã¾ÃŽÃ±</ProgressText>
  
! <ProgressText Action="StopServices" Template="Â·Ã¾ÃŽÃ±: [1]">Ã•Ã½Ã”ÃšÃÂ£Ã–Â¹Â·Ã¾ÃŽÃ±</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Ã„Â¿Ã‚Â¼: [9]">Ã•Ã½Ã”ÃšÃ‰Â¾Â³Ã½Ã’Ã†Â¶Â¯Â¹Ã½ÂµÃ„ÃŽÃ„Â¼Ã¾</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Ã—Ã©Â¼Ã¾ ID: [1]Â£Â¬Ã—ÃŠÂ¸Ã±ÃˆÃÃ–Â¤Ã•ÃŸ: [2]">Ã•Ã½Ã”ÃšÃˆÂ¡ÃÃ»ÂºÃÂ¸Ã±Ã—Ã©Â¼Ã¾ÂµÃ„Â·Â¢Â²Â¼</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Â¹Â¦Ã„Ãœ: [1]">Ã•Ã½Ã”ÃšÃˆÂ¡ÃÃ»Â²ÃºÃ†Â·Â¹Â¦Ã„ÃœÂµÃ„Â·Â¢Â²Â¼</ProgressText>
  
! <ProgressText Action="UnpublishProduct">Ã•Ã½Ã”ÃšÃˆÂ¡ÃÃ»Â²ÃºÃ†Â·ÃÃ…ÃÂ¢ÂµÃ„Â·Â¢Â²Â¼</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃºÃ€Ã Â·Ã¾ÃŽÃ±Ã†Ã·ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Ã•Ã½Ã”ÃšÂ³Â·ÃÃº COM+ Ã“Â¦Ã“ÃƒÂ³ÃŒÃÃ²ÂºÃÃ—Ã©Â¼Ã¾ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="Ã€Â©Ã•Â¹: [1]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃºÃ€Â©Ã•Â¹Â·Ã¾ÃŽÃ±Ã†Ã·ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="Ã—Ã–ÃŒÃ¥: [1]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃºÃ—Ã–ÃŒÃ¥ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME Ã„ÃšÃˆÃÃ€Ã ÃÃ: [1]Â£Â¬Ã€Â©Ã•Â¹: [2]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃº MIME ÃÃ…ÃÂ¢ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃºÂ³ÃŒÃÃ²Â±ÃªÃŠÂ¶Â·Ã»ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Ã•Ã½Ã”ÃšÂ³Â·ÃÃºÃ€Ã ÃÃÂ¿Ã¢ÂµÃ„Ã—Â¢Â²Ã¡</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="ÃƒÃ»Â³Ã†: [1]Â£Â¬ÃŠÃ½Ã–Âµ: [2]Â£Â¬Â¶Â¯Ã—Ã· [3]">Ã•Ã½Ã”ÃšÂ¸Ã¼ÃÃ‚Â»Â·Â¾Â³Ã—Ã–Â·Ã»Â´Â®</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="ÃŽÃ„Â¼Ã¾: [1]Â£Â¬Â½Ãš: [2]Â£Â¬Â¼Ã¼: [3]Â£Â¬ÃŠÃ½Ã–Âµ: [4]">Ã•Ã½Ã”ÃšÃÂ´ÃˆÃ« INI ÃŽÃ„Â¼Ã¾ÃŠÃ½Ã–Âµ</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="Â¼Ã¼: [1]Â£Â¬ÃƒÃ»Â³Ã†: [2]Â£Â¬ÃŠÃ½Ã–Âµ: [3]">Ã•Ã½Ã”ÃšÃÂ´ÃˆÃ«ÃÂµÃÂ³Ã—Â¢Â²Ã¡Â±Ã­Ã–Âµ</ProgressText>
  
  </Include>
Index: openafs/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi
diff -c openafs/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi:1.1 openafs/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi:1.1.14.1
*** openafs/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi:1.1	Mon Jun 21 01:21:54 2004
--- openafs/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi	Tue Jul 18 12:04:02 2006
***************
*** 1,143 ****
  <Include>
  
! <ProgressText Action="Advertise" Template="">¥¿¦b«Å¶ÇÀ³¥Îµ{¦¡</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="¥i¥ÎªÅ¶¡: [1]">¾ã²zµn¿ý­ÈªÅ¶¡</ProgressText>
  
! <ProgressText Action="AppSearch" Template="ÄÝ©Ê: [1], Ã±¦W: [2]">·j´M¤w¦w¸ËªºÀ³¥Îµ{¦¡</ProgressText>
  
! <ProgressText Action="BindImage" Template="ÀÉ®×: [1]">¥¿¦bµ²¦X¥i°õÀÉ</ProgressText>
  
! <ProgressText Action="CCPSearch" Template="">¥¿¦b·j´M²Å¦X±ø¥óªº²£«~</ProgressText>
  
! <ProgressText Action="CostFinalize" Template="">­pºâ©Ò»ÝªÅ¶¡</ProgressText>
  
! <ProgressText Action="CostInitialize" Template="">­pºâ©Ò»ÝªÅ¶¡</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="¸ê®Æ§¨: [1]">¥¿¦b«Ø¥ß¸ê®Æ§¨</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="±¶®|: [1]">¥¿¦b«Ø¥ß±¶®|</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="ªA°È: [1]">§R°£ªA°È</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9],  ¤j¤p: [6]">«Ø¥ß­«½ÆÀÉ®×</ProgressText>
  
! <ProgressText Action="FileCost" Template="">­pºâ©Ò»ÝªÅ¶¡</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="¤w§ä¨ì¤§À³¥Îµ{¦¡: [1]">·j´M¬ÛÃöÀ³¥Îµ{¦¡</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">¥¿¦b¬°°Ê§@²£¥Í script ¾Þ§@:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="ÀÉ®×: [1], ¥Ø¿ý: [9], ¤j¤p: [6]">¥¿¦b½Æ»sºô¸ô¦w¸ËÀÉ®×</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9],  ¤j¤p: [6]">¥¿¦b½Æ»s·sªºÀÉ®×</ProgressText>
  
! <ProgressText Action="InstallODBC" Template="">¦w¸Ë ODBC ¤¸¥ó</ProgressText>
  
! <ProgressText Action="InstallServices" Template="ªA°È: [2]">¦w¸Ë</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="ÀÉ®×: [1]¡A¨Ì¦s©Ê: [2]">¥¿¦b¦w¸Ë¨t²ÎÃþ§O¥Ø¿ý</ProgressText>
  
! <ProgressText Action="InstallValidate" Template="">ÅçÃÒ¦w¸Ë</ProgressText>
  
! <ProgressText Action="LaunchConditions" Template="">ÀËÅç°õ¦æ±ø¥ó</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="À³¥Îµ{¦¡: [1]">±q¬ÛÃöÀ³¥Îµ{¦¡Âà´«¥\¯àª¬ºA</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9],  ¤j¤p: [6]">¥¿¦b²¾°ÊÀÉ®×</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="À³¥Îµ{¦¡¤º®e:[1], ²Õ¦X¦WºÙ:[2]">¥¿¦b¤½§G²Õ¦X¸ê°T</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="À³¥Îµ{¦¡¤º®e:[1], ²Õ¦X¦WºÙ:[2]">¥¿¦b¸Ñ°£¤½§G²Õ¦X¸ê°T</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="ÀÉ®×: [1],  ¥Ø¿ý: [2],  ¤j¤p: [3]">­×¸ÉÀÉ®×</ProgressText>
  
! <ProgressText Action="ProcessComponents" Template="">§ó·s¤¸¥óµn¿ý</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="¤¸¥ó ID: [1], Qualifier: [2]">µo§G¦X®æ¤¸¥ó</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="¥\¯à: [1]">µo§G²£«~¥\¯à</ProgressText>
  
! <ProgressText Action="PublishProduct" Template="">µo§G²£«~¸ê°T</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">µn¿ý Class ¦øªA¾¹</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">µn¿ý COM+ À³¥Îµ{¦¡¤Î¤¸¥ó</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="©µ¦ù: [1]">µn¿ý©µ¦ù¦øªA¾¹</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="¦r«¬: [1]">µn¿ý¦r«¬</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">µn¿ý MIME ¸ê°T</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">¥¿¦bµn¿ý²£«~</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">µn¿ýµ{¦¡ÃÑ§O</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">µn¿ý type libraries</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">¥¿¦bµn¿ý¨Ï¥ÎªÌ</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9]">²¾°£­«½ÆÀÉ®×</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="¦W¼µ: [1], ­È: [2], °Ê§@ [3]">§ó·sÀô¹Ò¦r¦ê</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="À³¥Îµ{¦¡: [1], ©R¥O¦C: [2]">²¾°£À³¥Îµ{¦¡</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9]">¥¿¦b²¾°£ÀÉ®×</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="¸ê®Æ§¨: [1]">¥¿¦b²¾°£¸ê®Æ§¨</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="ÀÉ®×: [1],  Section: [2],  Key: [3], Value: [4]">¥¿¦b²¾°£ INI ÀÉ®×</ProgressText>
  
! <ProgressText Action="RemoveODBC" Template="">¥¿¦b²¾°£ ODBC ¤¸¥ó</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="¾÷½X: [1], ¦WºÙ: [2]">¥¿¦b²¾°£¨t²Îµn¿ý­È</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="±¶®|: [1]">¥¿¦b²¾°£±¶®|</ProgressText>
  
! <ProgressText Action="RMCCPSearch" Template="">¥¿¦b·j´M²Å¦X±ø¥óªº²£«~</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">´_­ì°Ê§@:</ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="ÀÉ®×: [1]">¥¿¦b²¾°£³Æ¥÷ÀÉ®×</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="ÀÉ®×: [1], ¸ê®Æ§¨: [2]">¥¿¦bµn¿ý¼Ò²Õ</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="ÀÉ®×: [1], ¸ê®Æ§¨: [2]">¸Ñ°£µn¿ý¼Ò²Õ</ProgressText>
  
! <ProgressText Action="SetODBCFolders" Template="">±Ò°Ê ODBC ¥Ø¿ý</ProgressText>
  
! <ProgressText Action="StartServices" Template="ªA°È: [1]">±Ò°ÊªA°È</ProgressText>
  
! <ProgressText Action="StopServices" Template="ªA°È: [1]">°±¤îªA°È</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9]">¥¿¦b²¾°£³Q²¾°ÊªºÀÉ®×</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="¤¸¥ó ID: [1], Qualifier: [2]">¸Ñ°£µo§G¦X®æ¤¸¥ó</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="¥\¯à: [1]">¸Ñ°£µo§G²£«~¥\¯à</ProgressText>
  
! <ProgressText Action="UnpublishProduct" Template="">¸Ñ°£µo§G²£«~¸ê°T</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">¸Ñ°£µn¿ý Class ¦øªA¾¹</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">¸Ñ°£µn¿ý COM+ À³¥Îµ{¦¡¤Î¤¸¥ó</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="©µ¦ù: [1]">¸Ñ°£µn¿ý©µ¦ù¦øªA¾¹</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="¦r«¬: [1]">¸Ñ°£µn¿ý¦r«¬</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">¸Ñ°£µn¿ý MIME ¸ê°T</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">¸Ñ°£µn¿ýµ{¦¡ÃÑ§O</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">¸Ñ°£µn¿ý type libraries</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="¦W¼µ: [1], ­È: [2], °Ê§@ [3]">§ó·sÀô¹Ò¦r¦ê</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="ÀÉ®×: [1],  Section: [2],  Key: [3], Value: [4]">¼g¤J INI ÀÉ®×</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="¾÷½X: [1], ¦WºÙ: [2], ­È: [3]">¥¿¦b¼g¤J¨t²Îµn¿ý</ProgressText>
  
  </Include>
--- 1,143 ----
  <Include>
  
! <ProgressText Action="Advertise">Â¥Â¿Â¦bÂ«Ã…Â¶Ã‡Ã€Â³Â¥ÃŽÂµ{Â¦Â¡</ProgressText>
  
! <ProgressText Action="AllocateRegistrySpace" Template="Â¥iÂ¥ÃŽÂªÃ…Â¶Â¡: [1]">Â¾Ã£Â²zÂµnÂ¿Ã½Â­ÃˆÂªÃ…Â¶Â¡</ProgressText>
  
! <ProgressText Action="AppSearch" Template="Ã„ÃÂ©ÃŠ: [1], ÃƒÂ±Â¦W: [2]">Â·jÂ´MÂ¤wÂ¦wÂ¸Ã‹ÂªÂºÃ€Â³Â¥ÃŽÂµ{Â¦Â¡</ProgressText>
  
! <ProgressText Action="BindImage" Template="Ã€Ã‰Â®Ã—: [1]">Â¥Â¿Â¦bÂµÂ²Â¦XÂ¥iÂ°ÃµÃ€Ã‰</ProgressText>
  
! <ProgressText Action="CCPSearch">Â¥Â¿Â¦bÂ·jÂ´MÂ²Ã…Â¦XÂ±Ã¸Â¥Ã³ÂªÂºÂ²Â£Â«~</ProgressText>
  
! <ProgressText Action="CostFinalize">Â­pÂºÃ¢Â©Ã’Â»ÃÂªÃ…Â¶Â¡</ProgressText>
  
! <ProgressText Action="CostInitialize">Â­pÂºÃ¢Â©Ã’Â»ÃÂªÃ…Â¶Â¡</ProgressText>
  
! <ProgressText Action="CreateFolders" Template="Â¸ÃªÂ®Ã†Â§Â¨: [1]">Â¥Â¿Â¦bÂ«Ã˜Â¥ÃŸÂ¸ÃªÂ®Ã†Â§Â¨</ProgressText>
  
! <ProgressText Action="CreateShortcuts" Template="Â±Â¶Â®|: [1]">Â¥Â¿Â¦bÂ«Ã˜Â¥ÃŸÂ±Â¶Â®|</ProgressText>
  
! <ProgressText Action="DeleteServices" Template="ÂªAÂ°Ãˆ: [1]">Â§RÂ°Â£ÂªAÂ°Ãˆ</ProgressText>
  
! <ProgressText Action="DuplicateFiles" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9],  Â¤jÂ¤p: [6]">Â«Ã˜Â¥ÃŸÂ­Â«Â½Ã†Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="FileCost">Â­pÂºÃ¢Â©Ã’Â»ÃÂªÃ…Â¶Â¡</ProgressText>
  
! <ProgressText Action="FindRelatedProducts" Template="Â¤wÂ§Ã¤Â¨Ã¬Â¤Â§Ã€Â³Â¥ÃŽÂµ{Â¦Â¡: [1]">Â·jÂ´MÂ¬Ã›ÃƒÃ¶Ã€Â³Â¥ÃŽÂµ{Â¦Â¡</ProgressText>
  
! <ProgressText Action="GenerateScript" Template="[1]">Â¥Â¿Â¦bÂ¬Â°Â°ÃŠÂ§@Â²Â£Â¥Ã script Â¾ÃžÂ§@:</ProgressText>
  
! <ProgressText Action="InstallAdminPackage" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9], Â¤jÂ¤p: [6]">Â¥Â¿Â¦bÂ½Ã†Â»sÂºÃ´Â¸Ã´Â¦wÂ¸Ã‹Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="InstallFiles" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9],  Â¤jÂ¤p: [6]">Â¥Â¿Â¦bÂ½Ã†Â»sÂ·sÂªÂºÃ€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="InstallODBC">Â¦wÂ¸Ã‹ ODBC Â¤Â¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="InstallServices" Template="ÂªAÂ°Ãˆ: [2]">Â¦wÂ¸Ã‹</ProgressText>
  
! <ProgressText Action="InstallSFPCatalogFile" Template="Ã€Ã‰Â®Ã—: [1]Â¡AÂ¨ÃŒÂ¦sÂ©ÃŠ: [2]">Â¥Â¿Â¦bÂ¦wÂ¸Ã‹Â¨tÂ²ÃŽÃƒÃ¾Â§OÂ¥Ã˜Â¿Ã½</ProgressText>
  
! <ProgressText Action="InstallValidate">Ã…Ã§ÃƒÃ’Â¦wÂ¸Ã‹</ProgressText>
  
! <ProgressText Action="LaunchConditions">Ã€Ã‹Ã…Ã§Â°ÃµÂ¦Ã¦Â±Ã¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="MigrateFeatureStates" Template="Ã€Â³Â¥ÃŽÂµ{Â¦Â¡: [1]">Â±qÂ¬Ã›ÃƒÃ¶Ã€Â³Â¥ÃŽÂµ{Â¦Â¡Ã‚Ã Â´Â«Â¥\Â¯Ã ÂªÂ¬ÂºA</ProgressText>
  
! <ProgressText Action="MoveFiles" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9],  Â¤jÂ¤p: [6]">Â¥Â¿Â¦bÂ²Â¾Â°ÃŠÃ€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="MsiPublishAssemblies" Template="Ã€Â³Â¥ÃŽÂµ{Â¦Â¡Â¤ÂºÂ®e:[1], Â²Ã•Â¦XÂ¦WÂºÃ™:[2]">Â¥Â¿Â¦bÂ¤Â½Â§GÂ²Ã•Â¦XÂ¸ÃªÂ°T</ProgressText>
  
! <ProgressText Action="MsiUnpublishAssemblies" Template="Ã€Â³Â¥ÃŽÂµ{Â¦Â¡Â¤ÂºÂ®e:[1], Â²Ã•Â¦XÂ¦WÂºÃ™:[2]">Â¥Â¿Â¦bÂ¸Ã‘Â°Â£Â¤Â½Â§GÂ²Ã•Â¦XÂ¸ÃªÂ°T</ProgressText>
  
! <ProgressText Action="PatchFiles" Template="Ã€Ã‰Â®Ã—: [1],  Â¥Ã˜Â¿Ã½: [2],  Â¤jÂ¤p: [3]">Â­Ã—Â¸Ã‰Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="ProcessComponents">Â§Ã³Â·sÂ¤Â¸Â¥Ã³ÂµnÂ¿Ã½</ProgressText>
  
! <ProgressText Action="PublishComponents" Template="Â¤Â¸Â¥Ã³ ID: [1], Qualifier: [2]">ÂµoÂ§GÂ¦XÂ®Ã¦Â¤Â¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="PublishFeatures" Template="Â¥\Â¯Ã : [1]">ÂµoÂ§GÂ²Â£Â«~Â¥\Â¯Ã </ProgressText>
  
! <ProgressText Action="PublishProduct">ÂµoÂ§GÂ²Â£Â«~Â¸ÃªÂ°T</ProgressText>
  
! <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">ÂµnÂ¿Ã½ Class Â¦Ã¸ÂªAÂ¾Â¹</ProgressText>
  
! <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">ÂµnÂ¿Ã½ COM+ Ã€Â³Â¥ÃŽÂµ{Â¦Â¡Â¤ÃŽÂ¤Â¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="RegisterExtensionInfo" Template="Â©ÂµÂ¦Ã¹: [1]">ÂµnÂ¿Ã½Â©ÂµÂ¦Ã¹Â¦Ã¸ÂªAÂ¾Â¹</ProgressText>
  
! <ProgressText Action="RegisterFonts" Template="Â¦rÂ«Â¬: [1]">ÂµnÂ¿Ã½Â¦rÂ«Â¬</ProgressText>
  
! <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">ÂµnÂ¿Ã½ MIME Â¸ÃªÂ°T</ProgressText>
  
! <ProgressText Action="RegisterProduct" Template="[1]">Â¥Â¿Â¦bÂµnÂ¿Ã½Â²Â£Â«~</ProgressText>
  
! <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">ÂµnÂ¿Ã½Âµ{Â¦Â¡ÃƒÃ‘Â§O</ProgressText>
  
! <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">ÂµnÂ¿Ã½ type libraries</ProgressText>
  
! <ProgressText Action="RegisterUser" Template="[1]">Â¥Â¿Â¦bÂµnÂ¿Ã½Â¨ÃÂ¥ÃŽÂªÃŒ</ProgressText>
  
! <ProgressText Action="RemoveDuplicateFiles" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9]">Â²Â¾Â°Â£Â­Â«Â½Ã†Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="RemoveEnvironmentStrings" Template="Â¦WÂ¼Âµ: [1], Â­Ãˆ: [2], Â°ÃŠÂ§@ [3]">Â§Ã³Â·sÃ€Ã´Â¹Ã’Â¦rÂ¦Ãª</ProgressText>
  
! <ProgressText Action="RemoveExistingProducts" Template="Ã€Â³Â¥ÃŽÂµ{Â¦Â¡: [1], Â©RÂ¥OÂ¦C: [2]">Â²Â¾Â°Â£Ã€Â³Â¥ÃŽÂµ{Â¦Â¡</ProgressText>
  
! <ProgressText Action="RemoveFiles" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9]">Â¥Â¿Â¦bÂ²Â¾Â°Â£Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="RemoveFolders" Template="Â¸ÃªÂ®Ã†Â§Â¨: [1]">Â¥Â¿Â¦bÂ²Â¾Â°Â£Â¸ÃªÂ®Ã†Â§Â¨</ProgressText>
  
! <ProgressText Action="RemoveIniValues" Template="Ã€Ã‰Â®Ã—: [1],  Section: [2],  Key: [3], Value: [4]">Â¥Â¿Â¦bÂ²Â¾Â°Â£ INI Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="RemoveODBC">Â¥Â¿Â¦bÂ²Â¾Â°Â£ ODBC Â¤Â¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="RemoveRegistryValues" Template="Â¾Ã·Â½X: [1], Â¦WÂºÃ™: [2]">Â¥Â¿Â¦bÂ²Â¾Â°Â£Â¨tÂ²ÃŽÂµnÂ¿Ã½Â­Ãˆ</ProgressText>
  
! <ProgressText Action="RemoveShortcuts" Template="Â±Â¶Â®|: [1]">Â¥Â¿Â¦bÂ²Â¾Â°Â£Â±Â¶Â®|</ProgressText>
  
! <ProgressText Action="RMCCPSearch">Â¥Â¿Â¦bÂ·jÂ´MÂ²Ã…Â¦XÂ±Ã¸Â¥Ã³ÂªÂºÂ²Â£Â«~</ProgressText>
  
! <ProgressText Action="Rollback" Template="[1]">Â´_Â­Ã¬Â°ÃŠÂ§@:</ProgressText>
  
! <ProgressText Action="RollbackCleanup" Template="Ã€Ã‰Â®Ã—: [1]">Â¥Â¿Â¦bÂ²Â¾Â°Â£Â³Ã†Â¥Ã·Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="SelfRegModules" Template="Ã€Ã‰Â®Ã—: [1], Â¸ÃªÂ®Ã†Â§Â¨: [2]">Â¥Â¿Â¦bÂµnÂ¿Ã½Â¼Ã’Â²Ã•</ProgressText>
  
! <ProgressText Action="SelfUnregModules" Template="Ã€Ã‰Â®Ã—: [1], Â¸ÃªÂ®Ã†Â§Â¨: [2]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½Â¼Ã’Â²Ã•</ProgressText>
  
! <ProgressText Action="SetODBCFolders">Â±Ã’Â°ÃŠ ODBC Â¥Ã˜Â¿Ã½</ProgressText>
  
! <ProgressText Action="StartServices" Template="ÂªAÂ°Ãˆ: [1]">Â±Ã’Â°ÃŠÂªAÂ°Ãˆ</ProgressText>
  
! <ProgressText Action="StopServices" Template="ÂªAÂ°Ãˆ: [1]">Â°Â±Â¤Ã®ÂªAÂ°Ãˆ</ProgressText>
  
! <ProgressText Action="UnmoveFiles" Template="Ã€Ã‰Â®Ã—: [1], Â¥Ã˜Â¿Ã½: [9]">Â¥Â¿Â¦bÂ²Â¾Â°Â£Â³QÂ²Â¾Â°ÃŠÂªÂºÃ€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="UnpublishComponents" Template="Â¤Â¸Â¥Ã³ ID: [1], Qualifier: [2]">Â¸Ã‘Â°Â£ÂµoÂ§GÂ¦XÂ®Ã¦Â¤Â¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="UnpublishFeatures" Template="Â¥\Â¯Ã : [1]">Â¸Ã‘Â°Â£ÂµoÂ§GÂ²Â£Â«~Â¥\Â¯Ã </ProgressText>
  
! <ProgressText Action="UnpublishProduct">Â¸Ã‘Â°Â£ÂµoÂ§GÂ²Â£Â«~Â¸ÃªÂ°T</ProgressText>
  
! <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½ Class Â¦Ã¸ÂªAÂ¾Â¹</ProgressText>
  
! <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½ COM+ Ã€Â³Â¥ÃŽÂµ{Â¦Â¡Â¤ÃŽÂ¤Â¸Â¥Ã³</ProgressText>
  
! <ProgressText Action="UnregisterExtensionInfo" Template="Â©ÂµÂ¦Ã¹: [1]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½Â©ÂµÂ¦Ã¹Â¦Ã¸ÂªAÂ¾Â¹</ProgressText>
  
! <ProgressText Action="UnregisterFonts" Template="Â¦rÂ«Â¬: [1]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½Â¦rÂ«Â¬</ProgressText>
  
! <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½ MIME Â¸ÃªÂ°T</ProgressText>
  
! <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½Âµ{Â¦Â¡ÃƒÃ‘Â§O</ProgressText>
  
! <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Â¸Ã‘Â°Â£ÂµnÂ¿Ã½ type libraries</ProgressText>
  
! <ProgressText Action="WriteEnvironmentStrings" Template="Â¦WÂ¼Âµ: [1], Â­Ãˆ: [2], Â°ÃŠÂ§@ [3]">Â§Ã³Â·sÃ€Ã´Â¹Ã’Â¦rÂ¦Ãª</ProgressText>
  
! <ProgressText Action="WriteIniValues" Template="Ã€Ã‰Â®Ã—: [1],  Section: [2],  Key: [3], Value: [4]">Â¼gÂ¤J INI Ã€Ã‰Â®Ã—</ProgressText>
  
! <ProgressText Action="WriteRegistryValues" Template="Â¾Ã·Â½X: [1], Â¦WÂºÃ™: [2], Â­Ãˆ: [3]">Â¥Â¿Â¦bÂ¼gÂ¤JÂ¨tÂ²ÃŽÂµnÂ¿Ã½</ProgressText>
  
  </Include>
Index: openafs/src/afs/.cvsignore
diff -c openafs/src/afs/.cvsignore:1.2 openafs/src/afs/.cvsignore:1.2.14.3
*** openafs/src/afs/.cvsignore:1.2	Tue Mar 11 11:25:45 2003
--- openafs/src/afs/.cvsignore	Mon Jul 31 17:27:38 2006
***************
*** 5,7 ****
--- 5,8 ----
  afszcm.cat
  unified_afs.c
  unified_afs.h
+ _locks_
Index: openafs/src/afs/afs.h
diff -c openafs/src/afs/afs.h:1.85 openafs/src/afs/afs.h:1.85.2.3
*** openafs/src/afs/afs.h:1.85	Fri Feb 17 16:57:12 2006
--- openafs/src/afs/afs.h	Mon Jul 31 17:27:38 2006
***************
*** 224,229 ****
--- 224,230 ----
      time_t timeout;		/* data expire time, if non-zero */
      struct cell_name *cnamep;	/* pointer to our cell_name */
      afs_rwlock_t lock;		/* protects cell data */
+     unsigned char cellHandle[16];	/* deterministic handle for this cell */
  };
  
  struct cell_name {
***************
*** 248,253 ****
--- 249,255 ----
  #define UPrimary        4	/* on iff primary identity */
  #define UNeedsReset	8	/* needs afs_ResetAccessCache call done */
  #define UPAGCounted    16	/* entry seen during PAG search (for stats) */
+ #define UNFSGetCreds   32	/* getting creds for NFS client */
  /* A flag used by afs_GCPAGs to keep track of
   * which entries in afs_users need to be deleted.
   * The lifetime of its presence in the table is the
***************
*** 279,284 ****
--- 281,287 ----
      char *stp;			/* pointer to ticket itself */
      struct ClearToken ct;
      struct afs_exporter *exporter;	/* more info about the exporter for the remote user */
+     void *cellinfo;             /* pointer to cell info (PAG manager only) */
  };
  
  struct conn {
***************
*** 539,544 ****
--- 542,548 ----
  #endif
  #define CUnique		0x00001000	/* vc's uniquifier - latest unifiquier for fid */
  #define CForeign	0x00002000	/* this is a non-afs vcache */
+ #define CReadDir	0x00004000	/* readdir in progress */
  #define CUnlinked	0x00010000
  #define CBulkStat	0x00020000	/* loaded by a bulk stat, and not ref'd since */
  #define CUnlinkedDel	0x00040000
***************
*** 696,701 ****
--- 700,707 ----
      afs_uint32 vstates;		/* vstate bits */
  #endif				/* defined(AFS_SUN5_ENV) */
      struct dcache *dchint;
+     struct dcache *dcreaddir;	/* dcache for in-progress readdir */
+     unsigned int readdir_pid;   /* pid of the thread in readdir */
  #ifdef AFS_LINUX22_ENV
      u_short mapcnt;		/* Number of mappings of this file. */
  #endif
***************
*** 1044,1049 ****
--- 1050,1057 ----
  /*#define afs_DirtyPages(avc)	(((avc)->states & CDirty) || osi_VMDirty_p((avc)))*/
  #define	afs_DirtyPages(avc)	((avc)->states & CDirty)
  
+ #define afs_InReadDir(avc) (((avc)->states & CReadDir) && (avc)->readdir_pid == MyPidxx)
+ 
  /* The PFlush algorithm makes use of the fact that Fid.Unique is not used in
    below hash algorithms.  Change it if need be so that flushing algorithm
    doesn't move things from one hash chain to another
Index: openafs/src/afs/afs_analyze.c
diff -c openafs/src/afs/afs_analyze.c:1.22 openafs/src/afs/afs_analyze.c:1.22.14.3
*** openafs/src/afs/afs_analyze.c:1.22	Wed Aug 27 17:43:16 2003
--- openafs/src/afs/afs_analyze.c	Mon Jul 31 17:27:38 2006
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_analyze.c,v 1.22 2003/08/27 21:43:16 rees 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.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 71,290 ****
  afs_int32 hm_retry_RW = 0;	/* don't wait */
  afs_int32 hm_retry_int = 0;	/* don't wait */
  
- static int et2sys[512];
- 
- void
- init_et_to_sys_error(void)
- {
-     memset(&et2sys, 0, sizeof(et2sys));
-     et2sys[(UAEPERM - ERROR_TABLE_BASE_uae)] = EPERM;
-     et2sys[(UAENOENT - ERROR_TABLE_BASE_uae)] = ENOENT;
-     et2sys[(UAESRCH - ERROR_TABLE_BASE_uae)] = ESRCH;
-     et2sys[(UAEINTR - ERROR_TABLE_BASE_uae)] = EINTR;
-     et2sys[(UAEIO - ERROR_TABLE_BASE_uae)] = EIO;
-     et2sys[(UAENXIO - ERROR_TABLE_BASE_uae)] = ENXIO;
-     et2sys[(UAE2BIG - ERROR_TABLE_BASE_uae)] = E2BIG;
-     et2sys[(UAENOEXEC - ERROR_TABLE_BASE_uae)] = ENOEXEC;
-     et2sys[(UAEBADF - ERROR_TABLE_BASE_uae)] = EBADF;
-     et2sys[(UAECHILD - ERROR_TABLE_BASE_uae)] = ECHILD;
-     et2sys[(UAEAGAIN - ERROR_TABLE_BASE_uae)] = EAGAIN;
-     et2sys[(UAENOMEM - ERROR_TABLE_BASE_uae)] = ENOMEM;
-     et2sys[(UAEACCES - ERROR_TABLE_BASE_uae)] = EACCES;
-     et2sys[(UAEFAULT - ERROR_TABLE_BASE_uae)] = EFAULT;
-     et2sys[(UAENOTBLK - ERROR_TABLE_BASE_uae)] = ENOTBLK;
-     et2sys[(UAEBUSY - ERROR_TABLE_BASE_uae)] = EBUSY;
-     et2sys[(UAEEXIST - ERROR_TABLE_BASE_uae)] = EEXIST;
-     et2sys[(UAEXDEV - ERROR_TABLE_BASE_uae)] = EXDEV;
-     et2sys[(UAENODEV - ERROR_TABLE_BASE_uae)] = ENODEV;
-     et2sys[(UAENOTDIR - ERROR_TABLE_BASE_uae)] = ENOTDIR;
-     et2sys[(UAEISDIR - ERROR_TABLE_BASE_uae)] = EISDIR;
-     et2sys[(UAEINVAL - ERROR_TABLE_BASE_uae)] = EINVAL;
-     et2sys[(UAENFILE - ERROR_TABLE_BASE_uae)] = ENFILE;
-     et2sys[(UAEMFILE - ERROR_TABLE_BASE_uae)] = EMFILE;
-     et2sys[(UAENOTTY - ERROR_TABLE_BASE_uae)] = ENOTTY;
-     et2sys[(UAETXTBSY - ERROR_TABLE_BASE_uae)] = ETXTBSY;
-     et2sys[(UAEFBIG - ERROR_TABLE_BASE_uae)] = EFBIG;
-     et2sys[(UAENOSPC - ERROR_TABLE_BASE_uae)] = ENOSPC;
-     et2sys[(UAESPIPE - ERROR_TABLE_BASE_uae)] = ESPIPE;
-     et2sys[(UAEROFS - ERROR_TABLE_BASE_uae)] = EROFS;
-     et2sys[(UAEMLINK - ERROR_TABLE_BASE_uae)] = EMLINK;
-     et2sys[(UAEPIPE - ERROR_TABLE_BASE_uae)] = EPIPE;
-     et2sys[(UAEDOM - ERROR_TABLE_BASE_uae)] = EDOM;
-     et2sys[(UAERANGE - ERROR_TABLE_BASE_uae)] = ERANGE;
-     et2sys[(UAEDEADLK - ERROR_TABLE_BASE_uae)] = EDEADLK;
-     et2sys[(UAENAMETOOLONG - ERROR_TABLE_BASE_uae)] = ENAMETOOLONG;
-     et2sys[(UAENOLCK - ERROR_TABLE_BASE_uae)] = ENOLCK;
-     et2sys[(UAENOSYS - ERROR_TABLE_BASE_uae)] = ENOSYS;
-     et2sys[(UAENOTEMPTY - ERROR_TABLE_BASE_uae)] = ENOTEMPTY;
-     et2sys[(UAELOOP - ERROR_TABLE_BASE_uae)] = ELOOP;
-     et2sys[(UAEWOULDBLOCK - ERROR_TABLE_BASE_uae)] = EWOULDBLOCK;
-     et2sys[(UAENOMSG - ERROR_TABLE_BASE_uae)] = ENOMSG;
-     et2sys[(UAEIDRM - ERROR_TABLE_BASE_uae)] = EIDRM;
-     et2sys[(UAECHRNG - ERROR_TABLE_BASE_uae)] = ECHRNG;
-     et2sys[(UAEL2NSYNC - ERROR_TABLE_BASE_uae)] = EL2NSYNC;
-     et2sys[(UAEL3HLT - ERROR_TABLE_BASE_uae)] = EL3HLT;
-     et2sys[(UAEL3RST - ERROR_TABLE_BASE_uae)] = EL3RST;
-     et2sys[(UAELNRNG - ERROR_TABLE_BASE_uae)] = ELNRNG;
-     et2sys[(UAEUNATCH - ERROR_TABLE_BASE_uae)] = EUNATCH;
-     et2sys[(UAENOCSI - ERROR_TABLE_BASE_uae)] = ENOCSI;
-     et2sys[(UAEL2HLT - ERROR_TABLE_BASE_uae)] = EL2HLT;
-     et2sys[(UAEBADE - ERROR_TABLE_BASE_uae)] = EBADE;
-     et2sys[(UAEBADR - ERROR_TABLE_BASE_uae)] = EBADR;
-     et2sys[(UAEXFULL - ERROR_TABLE_BASE_uae)] = EXFULL;
-     et2sys[(UAENOANO - ERROR_TABLE_BASE_uae)] = ENOANO;
-     et2sys[(UAEBADRQC - ERROR_TABLE_BASE_uae)] = EBADRQC;
-     et2sys[(UAEBADSLT - ERROR_TABLE_BASE_uae)] = EBADSLT;
-     et2sys[(UAEBFONT - ERROR_TABLE_BASE_uae)] = EBFONT;
-     et2sys[(UAENOSTR - ERROR_TABLE_BASE_uae)] = ENOSTR;
-     et2sys[(UAENODATA - ERROR_TABLE_BASE_uae)] = ENODATA;
-     et2sys[(UAETIME - ERROR_TABLE_BASE_uae)] = ETIME;
-     et2sys[(UAENOSR - ERROR_TABLE_BASE_uae)] = ENOSR;
-     et2sys[(UAENONET - ERROR_TABLE_BASE_uae)] = ENONET;
-     et2sys[(UAENOPKG - ERROR_TABLE_BASE_uae)] = ENOPKG;
-     et2sys[(UAEREMOTE - ERROR_TABLE_BASE_uae)] = EREMOTE;
-     et2sys[(UAENOLINK - ERROR_TABLE_BASE_uae)] = ENOLINK;
-     et2sys[(UAEADV - ERROR_TABLE_BASE_uae)] = EADV;
-     et2sys[(UAESRMNT - ERROR_TABLE_BASE_uae)] = ESRMNT;
-     et2sys[(UAECOMM - ERROR_TABLE_BASE_uae)] = ECOMM;
-     et2sys[(UAEPROTO - ERROR_TABLE_BASE_uae)] = EPROTO;
-     et2sys[(UAEMULTIHOP - ERROR_TABLE_BASE_uae)] = EMULTIHOP;
-     et2sys[(UAEDOTDOT - ERROR_TABLE_BASE_uae)] = EDOTDOT;
-     et2sys[(UAEBADMSG - ERROR_TABLE_BASE_uae)] = EBADMSG;
-     et2sys[(UAEOVERFLOW - ERROR_TABLE_BASE_uae)] = EOVERFLOW;
-     et2sys[(UAENOTUNIQ - ERROR_TABLE_BASE_uae)] = ENOTUNIQ;
-     et2sys[(UAEBADFD - ERROR_TABLE_BASE_uae)] = EBADFD;
-     et2sys[(UAEREMCHG - ERROR_TABLE_BASE_uae)] = EREMCHG;
-     et2sys[(UAELIBACC - ERROR_TABLE_BASE_uae)] = ELIBACC;
-     et2sys[(UAELIBBAD - ERROR_TABLE_BASE_uae)] = ELIBBAD;
-     et2sys[(UAELIBSCN - ERROR_TABLE_BASE_uae)] = ELIBSCN;
-     et2sys[(UAELIBMAX - ERROR_TABLE_BASE_uae)] = ELIBMAX;
-     et2sys[(UAELIBEXEC - ERROR_TABLE_BASE_uae)] = ELIBEXEC;
-     et2sys[(UAEILSEQ - ERROR_TABLE_BASE_uae)] = EILSEQ;
-     et2sys[(UAERESTART - ERROR_TABLE_BASE_uae)] = ERESTART;
-     et2sys[(UAESTRPIPE - ERROR_TABLE_BASE_uae)] = ESTRPIPE;
-     et2sys[(UAEUSERS - ERROR_TABLE_BASE_uae)] = EUSERS;
-     et2sys[(UAENOTSOCK - ERROR_TABLE_BASE_uae)] = ENOTSOCK;
-     et2sys[(UAEDESTADDRREQ - ERROR_TABLE_BASE_uae)] = EDESTADDRREQ;
-     et2sys[(UAEMSGSIZE - ERROR_TABLE_BASE_uae)] = EMSGSIZE;
-     et2sys[(UAEPROTOTYPE - ERROR_TABLE_BASE_uae)] = EPROTOTYPE;
-     et2sys[(UAENOPROTOOPT - ERROR_TABLE_BASE_uae)] = ENOPROTOOPT;
-     et2sys[(UAEPROTONOSUPPORT - ERROR_TABLE_BASE_uae)] = EPROTONOSUPPORT;
-     et2sys[(UAESOCKTNOSUPPORT - ERROR_TABLE_BASE_uae)] = ESOCKTNOSUPPORT;
-     et2sys[(UAEOPNOTSUPP - ERROR_TABLE_BASE_uae)] = EOPNOTSUPP;
-     et2sys[(UAEPFNOSUPPORT - ERROR_TABLE_BASE_uae)] = EPFNOSUPPORT;
-     et2sys[(UAEAFNOSUPPORT - ERROR_TABLE_BASE_uae)] = EAFNOSUPPORT;
-     et2sys[(UAEADDRINUSE - ERROR_TABLE_BASE_uae)] = EADDRINUSE;
-     et2sys[(UAEADDRNOTAVAIL - ERROR_TABLE_BASE_uae)] = EADDRNOTAVAIL;
-     et2sys[(UAENETDOWN - ERROR_TABLE_BASE_uae)] = ENETDOWN;
-     et2sys[(UAENETUNREACH - ERROR_TABLE_BASE_uae)] = ENETUNREACH;
-     et2sys[(UAENETRESET - ERROR_TABLE_BASE_uae)] = ENETRESET;
-     et2sys[(UAECONNABORTED - ERROR_TABLE_BASE_uae)] = ECONNABORTED;
-     et2sys[(UAECONNRESET - ERROR_TABLE_BASE_uae)] = ECONNRESET;
-     et2sys[(UAENOBUFS - ERROR_TABLE_BASE_uae)] = ENOBUFS;
-     et2sys[(UAEISCONN - ERROR_TABLE_BASE_uae)] = EISCONN;
-     et2sys[(UAENOTCONN - ERROR_TABLE_BASE_uae)] = ENOTCONN;
-     et2sys[(UAESHUTDOWN - ERROR_TABLE_BASE_uae)] = ESHUTDOWN;
-     et2sys[(UAETOOMANYREFS - ERROR_TABLE_BASE_uae)] = ETOOMANYREFS;
-     et2sys[(UAETIMEDOUT - ERROR_TABLE_BASE_uae)] = ETIMEDOUT;
-     et2sys[(UAECONNREFUSED - ERROR_TABLE_BASE_uae)] = ECONNREFUSED;
-     et2sys[(UAEHOSTDOWN - ERROR_TABLE_BASE_uae)] = EHOSTDOWN;
-     et2sys[(UAEHOSTUNREACH - ERROR_TABLE_BASE_uae)] = EHOSTUNREACH;
-     et2sys[(UAEALREADY - ERROR_TABLE_BASE_uae)] = EALREADY;
-     et2sys[(UAEINPROGRESS - ERROR_TABLE_BASE_uae)] = EINPROGRESS;
-     et2sys[(UAESTALE - ERROR_TABLE_BASE_uae)] = ESTALE;
-     et2sys[(UAEUCLEAN - ERROR_TABLE_BASE_uae)] = EUCLEAN;
-     et2sys[(UAENOTNAM - ERROR_TABLE_BASE_uae)] = ENOTNAM;
-     et2sys[(UAENAVAIL - ERROR_TABLE_BASE_uae)] = ENAVAIL;
-     et2sys[(UAEISNAM - ERROR_TABLE_BASE_uae)] = EISNAM;
-     et2sys[(UAEREMOTEIO - ERROR_TABLE_BASE_uae)] = EREMOTEIO;
-     et2sys[(UAEDQUOT - ERROR_TABLE_BASE_uae)] = EDQUOT;
-     et2sys[(UAENOMEDIUM - ERROR_TABLE_BASE_uae)] = ENOMEDIUM;
-     et2sys[(UAEMEDIUMTYPE - ERROR_TABLE_BASE_uae)] = EMEDIUMTYPE;
- }
- 
- static afs_int32
- et_to_sys_error(afs_int32 in)
- {
-     if (in < ERROR_TABLE_BASE_uae || in >= ERROR_TABLE_BASE_uae + 512)
- 	return in;
-     if (et2sys[in - ERROR_TABLE_BASE_uae] != 0)
- 	return et2sys[in - ERROR_TABLE_BASE_uae];
-     return in;
- }
- 
- void
- afs_CopyError(register struct vrequest *afrom, register struct vrequest *ato)
- {
-     AFS_STATCNT(afs_CopyError);
-     if (!afrom->initd)
- 	return;
-     afs_FinalizeReq(ato);
-     if (afrom->accessError)
- 	ato->accessError = 1;
-     if (afrom->volumeError)
- 	ato->volumeError = 1;
-     if (afrom->networkError)
- 	ato->networkError = 1;
-     if (afrom->permWriteError)
- 	ato->permWriteError = 1;
- 
- }
- 
- void
- afs_FinalizeReq(register struct vrequest *areq)
- {
-     AFS_STATCNT(afs_FinalizeReq);
-     if (areq->initd)
- 	return;
-     areq->busyCount = 0;
-     areq->accessError = 0;
-     areq->volumeError = 0;
-     areq->networkError = 0;
-     areq->permWriteError = 0;
-     areq->initd = 1;
- 
- }
- 
- int
- afs_CheckCode(afs_int32 acode, struct vrequest *areq, int where)
- {
-     AFS_STATCNT(afs_CheckCode);
-     if (acode) {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_CHECKCODE, ICL_TYPE_INT32, acode,
- 		   ICL_TYPE_INT32, where);
-     }
-     if ((acode & ~0xff) == ERROR_TABLE_BASE_uae)
- 	acode = et_to_sys_error(acode);
-     if (!areq || !areq->initd)
- 	return acode;
-     if (areq->networkError)
- 	return ETIMEDOUT;
-     if (acode == 0)
- 	return 0;
-     if (areq->accessError)
- 	return EACCES;
-     if (areq->volumeError == VOLMISSING)
- 	return ENODEV;
-     if (areq->volumeError == VOLBUSY)
- 	return EWOULDBLOCK;
-     if (acode == VNOVNODE)
- 	return ENOENT;
-     if (acode == VDISKFULL)
- 	return ENOSPC;
-     if (acode == VOVERQUOTA)
- 	return
- #ifdef EDQUOT
- 	    EDQUOT
- #else
- 	    ENOSPC
- #endif
- 	    ;
- 
-     return acode;
- 
- }				/*afs_CheckCode */
- 
- 
  #define	VSleep(at)	afs_osi_Wait((at)*1000, 0, 0)
  
  
--- 71,76 ----
Index: openafs/src/afs/afs_call.c
diff -c openafs/src/afs/afs_call.c:1.86 openafs/src/afs/afs_call.c:1.86.4.4
*** openafs/src/afs/afs_call.c:1.86	Thu Jan 26 11:00:34 2006
--- openafs/src/afs/afs_call.c	Mon Jul 31 17:58:28 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_call.c,v 1.86 2006/01/26 16:00:34 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_call.c,v 1.86.4.4 2006/07/31 21:58:28 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 44,89 ****
  
  char afs_zeros[AFS_ZEROS];
  char afs_rootVolumeName[64] = "";
- struct afs_icl_set *afs_iclSetp = (struct afs_icl_set *)0;
- struct afs_icl_set *afs_iclLongTermSetp = (struct afs_icl_set *)0;
  afs_uint32 rx_bindhost;
  
- #if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV)
- kmutex_t afs_global_lock;
- #endif
- 
- #if defined(AFS_SGI_ENV) && !defined(AFS_SGI64_ENV)
- long afs_global_owner;
- #endif
- 
- #if defined(AFS_OSF_ENV)
- simple_lock_data_t afs_global_lock;
- #endif
- 
- #if defined(AFS_DARWIN_ENV) 
- #ifdef AFS_DARWIN80_ENV
- lck_mtx_t  *afs_global_lock;
- #else
- struct lock__bsd__ afs_global_lock;
- #endif
- #endif
- 
- #if defined(AFS_XBSD_ENV) && !defined(AFS_FBSD50_ENV)
- struct lock afs_global_lock;
- struct proc *afs_global_owner;
- #endif
- #ifdef AFS_FBSD50_ENV
- struct mtx afs_global_mtx;
- #endif
- 
- #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV)
- thread_t afs_global_owner;
- #endif /* AFS_OSF_ENV */
- 
- #if defined(AFS_AIX41_ENV)
- simple_lock_data afs_global_lock;
- #endif
- 
  afs_int32 afs_initState = 0;
  afs_int32 afs_termState = 0;
  afs_int32 afs_setTime = 0;
--- 44,51 ----
***************
*** 100,108 ****
  afs_int32 afs_rx_deadtime = AFS_RXDEADTIME;
  afs_int32 afs_rx_harddead = AFS_HARDDEADTIME;
  
- static int
-   Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval);
- 
  static int afscall_set_rxpck_received = 0;
  
  #if defined(AFS_HPUX_ENV)
--- 62,67 ----
***************
*** 668,675 ****
  	 * home cell flag (0x1 bit) and the nosuid flag (0x2 bit) */
  	struct afsop_cell *tcell = afs_osi_Alloc(sizeof(struct afsop_cell));
  
! 	AFS_COPYIN((char *)parm2, (char *)tcell->hosts, sizeof(tcell->hosts),
! 		   code);
  	if (!code) {
  	    if (parm4 > sizeof(tcell->cellName))
  		code = EFAULT;
--- 627,637 ----
  	 * home cell flag (0x1 bit) and the nosuid flag (0x2 bit) */
  	struct afsop_cell *tcell = afs_osi_Alloc(sizeof(struct afsop_cell));
  
! 	code = afs_InitDynroot();
! 	if (!code) {
! 	    AFS_COPYIN((char *)parm2, (char *)tcell->hosts, sizeof(tcell->hosts),
! 		       code);
! 	}
  	if (!code) {
  	    if (parm4 > sizeof(tcell->cellName))
  		code = EFAULT;
***************
*** 687,700 ****
  	char *tbuffer1 = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  	int cflags = parm4;
  
  #if 0
! 	/* wait for basic init - XXX can't find any reason we need this? */
! 	while (afs_initState < AFSOP_START_BKG)
! 	    afs_osi_Sleep(&afs_initState);
  #endif
  
! 	AFS_COPYIN((char *)parm2, (char *)tcell->hosts, sizeof(tcell->hosts),
! 		   code);
  	if (!code) {
  	    AFS_COPYINSTR((char *)parm3, tbuffer1, AFS_SMALLOCSIZ,
  			  &bufferSize, code);
--- 649,665 ----
  	char *tbuffer1 = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  	int cflags = parm4;
  
+ 	code = afs_InitDynroot();
+ 	if (!code) {
  #if 0
! 	    /* wait for basic init - XXX can't find any reason we need this? */
! 	    while (afs_initState < AFSOP_START_BKG)
! 		afs_osi_Sleep(&afs_initState);
  #endif
  
! 	    AFS_COPYIN((char *)parm2, (char *)tcell->hosts, sizeof(tcell->hosts),
! 		       code);
! 	}
  	if (!code) {
  	    AFS_COPYINSTR((char *)parm3, tbuffer1, AFS_SMALLOCSIZ,
  			  &bufferSize, code);
***************
*** 725,732 ****
  	char *aliasName = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  	char *cellName = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  
! 	AFS_COPYINSTR((char *)parm2, aliasName, AFS_SMALLOCSIZ, &bufferSize,
! 		      code);
  	if (!code)
  	    AFS_COPYINSTR((char *)parm3, cellName, AFS_SMALLOCSIZ,
  			  &bufferSize, code);
--- 690,700 ----
  	char *aliasName = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  	char *cellName = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  
! 	code = afs_InitDynroot();
! 	if (!code) {
! 	    AFS_COPYINSTR((char *)parm2, aliasName, AFS_SMALLOCSIZ, &bufferSize,
! 			  code);
! 	}
  	if (!code)
  	    AFS_COPYINSTR((char *)parm3, cellName, AFS_SMALLOCSIZ,
  			  &bufferSize, code);
***************
*** 741,747 ****
  	 */
  	char *cell = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  
! 	AFS_COPYINSTR((char *)parm2, cell, AFS_SMALLOCSIZ, &bufferSize, code);
  	if (!code)
  	    afs_SetPrimaryCell(cell);
  	osi_FreeSmallSpace(cell);
--- 709,718 ----
  	 */
  	char *cell = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
  
! 	code = afs_InitDynroot();
! 	if (!code) {
! 	    AFS_COPYINSTR((char *)parm2, cell, AFS_SMALLOCSIZ, &bufferSize, code);
! 	}
  	if (!code)
  	    afs_SetPrimaryCell(cell);
  	osi_FreeSmallSpace(cell);
***************
*** 760,778 ****
  	    goto out;
  	}
  	afs_CacheInit_Done = 1;
! 	{
! 	    struct afs_icl_log *logp;
! 	    /* initialize the ICL system */
! 	    code = afs_icl_CreateLog("cmfx", 60 * 1024, &logp);
! 	    if (code == 0)
! 		code =
! 		    afs_icl_CreateSetWithFlags("cm", logp, NULL,
! 					       ICL_CRSET_FLAG_DEFAULT_OFF,
! 					       &afs_iclSetp);
! 	    code =
! 		afs_icl_CreateSet("cmlongterm", logp, NULL,
! 				  &afs_iclLongTermSetp);
! 	}
  	afs_setTime = cparms.setTimeFlag;
  
  	code =
--- 731,737 ----
  	    goto out;
  	}
  	afs_CacheInit_Done = 1;
!         code = afs_icl_InitLogs();
  	afs_setTime = cparms.setTimeFlag;
  
  	code =
***************
*** 1086,1802 ****
  #endif
  }
  
- #ifdef AFS_AIX32_ENV
- 
- #include "sys/lockl.h"
- 
- /*
-  * syscall -	this is the VRMIX system call entry point.
-  *
-  * NOTE:
-  *	THIS SHOULD BE CHANGED TO afs_syscall(), but requires
-  *	all the user-level calls to `syscall' to change.
-  */
- syscall(syscall, p1, p2, p3, p4, p5, p6)
- {
-     register rval1 = 0, code;
-     register monster;
-     int retval = 0;
- #ifndef AFS_AIX41_ENV
-     extern lock_t kernel_lock;
-     monster = lockl(&kernel_lock, LOCK_SHORT);
- #endif /* !AFS_AIX41_ENV */
- 
-     AFS_STATCNT(syscall);
-     setuerror(0);
-     switch (syscall) {
-     case AFSCALL_CALL:
- 	rval1 = afs_syscall_call(p1, p2, p3, p4, p5, p6);
- 	break;
- 
-     case AFSCALL_SETPAG:
- 	AFS_GLOCK();
- 	rval1 = afs_setpag();
- 	AFS_GUNLOCK();
- 	break;
- 
-     case AFSCALL_PIOCTL:
- 	AFS_GLOCK();
- 	rval1 = afs_syscall_pioctl(p1, p2, p3, p4);
- 	AFS_GUNLOCK();
- 	break;
- 
-     case AFSCALL_ICREATE:
- 	rval1 = afs_syscall_icreate(p1, p2, p3, p4, p5, p6);
- 	break;
- 
-     case AFSCALL_IOPEN:
- 	rval1 = afs_syscall_iopen(p1, p2, p3);
- 	break;
- 
-     case AFSCALL_IDEC:
- 	rval1 = afs_syscall_iincdec(p1, p2, p3, -1);
- 	break;
- 
-     case AFSCALL_IINC:
- 	rval1 = afs_syscall_iincdec(p1, p2, p3, 1);
- 	break;
- 
-     case AFSCALL_ICL:
- 	AFS_GLOCK();
- 	code = Afscall_icl(p1, p2, p3, p4, p5, &retval);
- 	AFS_GUNLOCK();
- 	if (!code)
- 	    rval1 = retval;
- 	if (!rval1)
- 	    rval1 = code;
- 	break;
- 
-     default:
- 	rval1 = EINVAL;
- 	setuerror(EINVAL);
- 	break;
-     }
- 
-   out:
- #ifndef AFS_AIX41_ENV
-     if (monster != LOCK_NEST)
- 	unlockl(&kernel_lock);
- #endif /* !AFS_AIX41_ENV */
-     return getuerror()? -1 : rval1;
- }
- 
- /*
-  * lsetpag -	interface to afs_setpag().
-  */
- lsetpag()
- {
- 
-     AFS_STATCNT(lsetpag);
-     return syscall(AFSCALL_SETPAG, 0, 0, 0, 0, 0);
- }
- 
  /*
!  * lpioctl -	interface to pioctl()
   */
! lpioctl(path, cmd, cmarg, follow)
!      char *path, *cmarg;
  {
  
!     AFS_STATCNT(lpioctl);
!     return syscall(AFSCALL_PIOCTL, path, cmd, cmarg, follow);
  }
  
! #else /* !AFS_AIX32_ENV       */
! 
! #if defined(AFS_SGI_ENV)
! struct afsargs {
!     sysarg_t syscall;
!     sysarg_t parm1;
!     sysarg_t parm2;
!     sysarg_t parm3;
!     sysarg_t parm4;
!     sysarg_t parm5;
! };
! 
! 
! int
! Afs_syscall(struct afsargs *uap, rval_t * rvp)
  {
!     int error;
!     long retval;
  
!     AFS_STATCNT(afs_syscall);
!     switch (uap->syscall) {
!     case AFSCALL_ICL:
! 	retval = 0;
! 	AFS_GLOCK();
! 	error =
! 	    Afscall_icl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			uap->parm5, &retval);
! 	AFS_GUNLOCK();
! 	rvp->r_val1 = retval;
! 	break;
! #ifdef AFS_SGI_XFS_IOPS_ENV
!     case AFSCALL_IDEC64:
! 	error =
! 	    afs_syscall_idec64(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			       uap->parm5);
! 	break;
!     case AFSCALL_IINC64:
! 	error =
! 	    afs_syscall_iinc64(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			       uap->parm5);
! 	break;
!     case AFSCALL_ILISTINODE64:
! 	error =
! 	    afs_syscall_ilistinode64(uap->parm1, uap->parm2, uap->parm3,
! 				     uap->parm4, uap->parm5);
! 	break;
!     case AFSCALL_ICREATENAME64:
! 	error =
! 	    afs_syscall_icreatename64(uap->parm1, uap->parm2, uap->parm3,
! 				      uap->parm4, uap->parm5);
! 	break;
! #endif
! #ifdef AFS_SGI_VNODE_GLUE
!     case AFSCALL_INIT_KERNEL_CONFIG:
! 	error = afs_init_kernel_config(uap->parm1);
! 	break;
! #endif
!     default:
! 	error =
! 	    afs_syscall_call(uap->syscall, uap->parm1, uap->parm2, uap->parm3,
! 			     uap->parm4, uap->parm5);
      }
-     return error;
- }
- 
- #else /* AFS_SGI_ENV */
- 
- struct iparam {
-     long param1;
-     long param2;
-     long param3;
-     long param4;
- };
- 
- struct iparam32 {
-     int param1;
-     int param2;
-     int param3;
-     int param4;
- };
  
  
! #if defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV))
! static void
! iparam32_to_iparam(const struct iparam32 *src, struct iparam *dst)
! {
!     dst->param1 = src->param1;
!     dst->param2 = src->param2;
!     dst->param3 = src->param3;
!     dst->param4 = src->param4;
! }
  #endif
  
! /*
!  * If you need to change copyin_iparam(), you may also need to change
!  * copyin_afs_ioctl().
!  */
! 
! static int
! copyin_iparam(caddr_t cmarg, struct iparam *dst)
! {
!     int code;
! 
! #if defined(AFS_HPUX_64BIT_ENV)
!     struct iparam32 dst32;
! 
!     if (is_32bit(u.u_procp)) {	/* is_32bit() in proc_iface.h */
! 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
! 	if (!code)
! 	    iparam32_to_iparam(&dst32, dst);
! 	return code;
      }
! #endif /* AFS_HPUX_64BIT_ENV */
! 
! #if defined(AFS_SUN57_64BIT_ENV)
!     struct iparam32 dst32;
! 
!     if (get_udatamodel() == DATAMODEL_ILP32) {
! 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
! 	if (!code)
! 	    iparam32_to_iparam(&dst32, dst);
! 	return code;
      }
! #endif /* AFS_SUN57_64BIT_ENV */
! 
! #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)
!     struct iparam32 dst32;
! 
! #ifdef AFS_SPARC64_LINUX26_ENV
!     if (test_thread_flag(TIF_32BIT))
! #elif AFS_SPARC64_LINUX24_ENV
!     if (current->thread.flags & SPARC_FLAG_32BIT)
! #elif defined(AFS_SPARC64_LINUX20_ENV)
!     if (current->tss.flags & SPARC_FLAG_32BIT)
! 
! #elif defined(AFS_AMD64_LINUX26_ENV)
!     if (test_thread_flag(TIF_IA32))
! #elif defined(AFS_AMD64_LINUX20_ENV)
!     if (current->thread.flags & THREAD_IA32)
! 
! #elif defined(AFS_PPC64_LINUX26_ENV)
!     if (current->thread_info->flags & _TIF_32BIT) 
! #elif defined(AFS_PPC64_LINUX20_ENV)
!     if (current->thread.flags & PPC_FLAG_32BIT) 
! 
! #elif defined(AFS_S390X_LINUX26_ENV)
!     if (test_thread_flag(TIF_31BIT))
! #elif defined(AFS_S390X_LINUX20_ENV)
!     if (current->thread.flags & S390_FLAG_31BIT) 
! 
! #else
! #error iparam32 not done for this linux platform
! #endif
!     {
! 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
! 	if (!code)
! 	    iparam32_to_iparam(&dst32, dst);
! 	return code;
      }
! #endif /* AFS_LINUX_64BIT_KERNEL */
! 
!     AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code);
!     return code;
! }
! 
! /* Main entry of all afs system calls */
! #ifdef	AFS_SUN5_ENV
! extern int afs_sinited;
! 
! /** The 32 bit OS expects the members of this structure to be 32 bit
!  * quantities and the 64 bit OS expects them as 64 bit quanties. Hence
!  * to accomodate both, *long* is used instead of afs_int32
!  */
! 
! #ifdef AFS_SUN57_ENV
! struct afssysa {
!     long syscall;
!     long parm1;
!     long parm2;
!     long parm3;
!     long parm4;
!     long parm5;
!     long parm6;
! };
! #else
! struct afssysa {
!     afs_int32 syscall;
!     afs_int32 parm1;
!     afs_int32 parm2;
!     afs_int32 parm3;
!     afs_int32 parm4;
!     afs_int32 parm5;
!     afs_int32 parm6;
! };
  #endif
! 
! Afs_syscall(register struct afssysa *uap, rval_t * rvp)
! {
!     int *retval = &rvp->r_val1;
! #else /* AFS_SUN5_ENV */
! #if	defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
! int
! afs3_syscall(p, args, retval)
! #ifdef AFS_FBSD50_ENV
!      struct thread *p;
! #else
!      struct proc *p;
  #endif
!      void *args;
!      long *retval;
! {
!     register struct a {
! 	long syscall;
! 	long parm1;
! 	long parm2;
! 	long parm3;
! 	long parm4;
! 	long parm5;
! 	long parm6;
!     } *uap = (struct a *)args;
! #else /* AFS_OSF_ENV */
! #ifdef AFS_LINUX20_ENV
! struct afssysargs {
!     long syscall;
!     long parm1;
!     long parm2;
!     long parm3;
!     long parm4;
!     long parm5;
!     long parm6;			/* not actually used - should be removed */
! };
! /* Linux system calls only set up for 5 arguments. */
! asmlinkage long
! afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4)
! {
!     struct afssysargs args, *uap = &args;
!     long linux_ret = 0;
!     long *retval = &linux_ret;
!     long eparm[4];		/* matches AFSCALL_ICL in fstrace.c */
! #ifdef AFS_SPARC64_LINUX24_ENV
!     afs_int32 eparm32[4];
  #endif
-     /* eparm is also used by AFSCALL_CALL in afsd.c */
- #else
- #if defined(UKERNEL)
- Afs_syscall()
- {
-     register struct a {
- 	long syscall;
- 	long parm1;
- 	long parm2;
- 	long parm3;
- 	long parm4;
- 	long parm5;
- 	long parm6;
-     } *uap = (struct a *)u.u_ap;
- #else /* UKERNEL */
- int
- Afs_syscall()
- {
-     register struct a {
- 	long syscall;
- 	long parm1;
- 	long parm2;
- 	long parm3;
- 	long parm4;
- 	long parm5;
- 	long parm6;
-     } *uap = (struct a *)u.u_ap;
- #endif /* UKERNEL */
- #if defined(AFS_HPUX_ENV)
-     long *retval = &u.u_rval1;
  #else
!     int *retval = &u.u_rval1;
  #endif
! #endif /* AFS_LINUX20_ENV */
! #endif /* AFS_OSF_ENV */
! #endif /* AFS_SUN5_ENV */
!     register int code = 0;
  
!     AFS_STATCNT(afs_syscall);
! #ifdef        AFS_SUN5_ENV
!     rvp->r_vals = 0;
!     if (!afs_sinited) {
! 	return (ENODEV);
      }
! #endif
! #ifdef AFS_LINUX20_ENV
!     lock_kernel();
!     /* setup uap for use below - pull out the magic decoder ring to know
!      * which syscalls have folded argument lists.
!      */
!     uap->syscall = syscall;
!     uap->parm1 = parm1;
!     uap->parm2 = parm2;
!     uap->parm3 = parm3;
!     if (syscall == AFSCALL_ICL || syscall == AFSCALL_CALL) {
! #ifdef AFS_SPARC64_LINUX24_ENV
! /* from arch/sparc64/kernel/sys_sparc32.c */
! #define AA(__x)                                \
! ({     unsigned long __ret;            \
!        __asm__ ("srl   %0, 0, %0"      \
!                 : "=r" (__ret)         \
!                 : "0" (__x));          \
!        __ret;                          \
! })
! 
! 
! #ifdef AFS_SPARC64_LINUX26_ENV
! 	if (test_thread_flag(TIF_32BIT))
! #else
! 	if (current->thread.flags & SPARC_FLAG_32BIT)
! #endif
! 	{
! 	    AFS_COPYIN((char *)parm4, (char *)eparm32, sizeof(eparm32), code);
! 	    eparm[0] = AA(eparm32[0]);
! 	    eparm[1] = AA(eparm32[1]);
! 	    eparm[2] = AA(eparm32[2]);
! #undef AA
! 	} else
! #endif
! 	    AFS_COPYIN((char *)parm4, (char *)eparm, sizeof(eparm), code);
! 	uap->parm4 = eparm[0];
! 	uap->parm5 = eparm[1];
! 	uap->parm6 = eparm[2];
!     } else {
! 	uap->parm4 = parm4;
! 	uap->parm5 = 0;
! 	uap->parm6 = 0;
!     }
! #endif
! #if defined(AFS_DARWIN80_ENV)
!     get_vfs_context();
!     osi_Assert(*retval == 0);
! #endif
! #if defined(AFS_HPUX_ENV)
!     /*
!      * There used to be code here (duplicated from osi_Init()) for
!      * initializing the semaphore used by AFS_GLOCK().  Was the
!      * duplication to handle the case of a dynamically loaded kernel
!      * module?
!      */
!     osi_InitGlock();
! #endif
!     if (uap->syscall == AFSCALL_CALL) {
! #ifdef	AFS_SUN5_ENV
! 	code =
! 	    afs_syscall_call(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			     uap->parm5, uap->parm6, rvp, CRED());
! #else
! 	code =
! 	    afs_syscall_call(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			     uap->parm5, uap->parm6);
! #endif
!     } else if (uap->syscall == AFSCALL_SETPAG) {
! #ifdef	AFS_SUN5_ENV
! 	register proc_t *procp;
! 
! 	procp = ttoproc(curthread);
! 	AFS_GLOCK();
! 	code = afs_setpag(&procp->p_cred);
! 	AFS_GUNLOCK();
! #else
! 	AFS_GLOCK();
! #if	defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
! 	code = afs_setpag(p, args, retval);
! #else /* AFS_OSF_ENV */
! 	code = afs_setpag();
! #endif
! 	AFS_GUNLOCK();
! #endif
!     } else if (uap->syscall == AFSCALL_PIOCTL) {
! 	AFS_GLOCK();
! #if defined(AFS_SUN5_ENV)
! 	code =
! 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			       rvp, CRED());
! #elif defined(AFS_FBSD50_ENV)
! 	code =
! 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			       p->td_ucred);
! #elif defined(AFS_DARWIN80_ENV)
! 	code =
! 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			       kauth_cred_get());
! #elif defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
! 	code =
! 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			       p->p_cred->pc_ucred);
! #else
! 	code =
! 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3,
! 			       uap->parm4);
! #endif
! 	AFS_GUNLOCK();
!     } else if (uap->syscall == AFSCALL_ICREATE) {
! 	struct iparam iparams;
! 
! 	code = copyin_iparam((char *)uap->parm3, &iparams);
! 	if (code) {
! #if defined(KERNEL_HAVE_UERROR)
! 	    setuerror(code);
! #endif
! 	} else
! #ifdef	AFS_SUN5_ENV
! 	    code =
! 		afs_syscall_icreate(uap->parm1, uap->parm2, iparams.param1,
! 				    iparams.param2, iparams.param3,
! 				    iparams.param4, rvp, CRED());
! #else
! 	    code =
! 		afs_syscall_icreate(uap->parm1, uap->parm2, iparams.param1,
! 				    iparams.param2,
! #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
! 				    iparams.param3, iparams.param4, retval);
! #else
! 				    iparams.param3, iparams.param4);
! #endif
! #endif /* AFS_SUN5_ENV */
!     } else if (uap->syscall == AFSCALL_IOPEN) {
! #ifdef	AFS_SUN5_ENV
! 	code =
! 	    afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3, rvp,
! 			      CRED());
! #else
! #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
! 	code = afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3, retval);
! #else
! 	code = afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3);
! #endif
! #endif /* AFS_SUN5_ENV */
!     } else if (uap->syscall == AFSCALL_IDEC) {
! #ifdef	AFS_SUN5_ENV
! 	code =
! 	    afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, -1, rvp,
! 				CRED());
! #else
! 	code = afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, -1);
! #endif /* AFS_SUN5_ENV */
!     } else if (uap->syscall == AFSCALL_IINC) {
! #ifdef	AFS_SUN5_ENV
! 	code =
! 	    afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, 1, rvp,
! 				CRED());
! #else
! 	code = afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, 1);
! #endif /* AFS_SUN5_ENV */
!     } else if (uap->syscall == AFSCALL_ICL) {
! 	AFS_GLOCK();
! 	code =
! 	    Afscall_icl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
! 			uap->parm5, retval);
! 	AFS_GUNLOCK();
! #ifdef AFS_LINUX20_ENV
! 	if (!code) {
! 	    /* ICL commands can return values. */
! 	    code = -linux_ret;	/* Gets negated again at exit below */
! 	}
! #else
! 	if (code) {
! #if defined(KERNEL_HAVE_UERROR)
! 	    setuerror(code);
! #endif
! 	}
! #endif /* !AFS_LINUX20_ENV */
!     } else {
! #if defined(KERNEL_HAVE_UERROR)
! 	setuerror(EINVAL);
! #else
! 	code = EINVAL;
! #endif
!     }
! 
! #if defined(AFS_DARWIN80_ENV)
!     put_vfs_context();
! #endif
! #ifdef AFS_LINUX20_ENV
!     code = -code;
!     unlock_kernel();
! #endif
!     return code;
! }
! #endif /* AFS_SGI_ENV */
! #endif /* !AFS_AIX32_ENV       */
! 
! /*
!  * Initstate in the range 0 < x < 100 are early initialization states.
!  * Initstate of 100 means a AFSOP_START operation has been done.  After this,
!  *  the cache may be initialized.
!  * Initstate of 101 means a AFSOP_GO operation has been done.  This operation
!  *  is done after all the cache initialization has been done.
!  * Initstate of 200 means that the volume has been looked up once, possibly
!  *  incorrectly.
!  * Initstate of 300 means that the volume has been *successfully* looked up.
!  */
! int
! afs_CheckInit(void)
! {
!     register int code = 0;
! 
!     AFS_STATCNT(afs_CheckInit);
!     if (afs_initState <= 100)
! 	code = ENXIO;		/* never finished init phase */
!     else if (afs_initState == 101) {	/* init done, wait for afs_daemon */
! 	while (afs_initState < 200)
! 	    afs_osi_Sleep(&afs_initState);
!     } else if (afs_initState == 200)
! 	code = ETIMEDOUT;	/* didn't find root volume */
!     return code;
! }
! 
! int afs_shuttingdown = 0;
! void
! afs_shutdown(void)
! {
!     extern short afs_brsDaemons;
!     extern afs_int32 afs_CheckServerDaemonStarted;
!     extern struct afs_osi_WaitHandle AFS_WaitHandler, AFS_CSWaitHandler;
!     extern struct osi_file *afs_cacheInodep;
! 
!     AFS_STATCNT(afs_shutdown);
!     if (afs_initState == 0) {
!         afs_warn("AFS not initialized - not shutting down\n");
!       return;
!     }
! 
!     if (afs_shuttingdown)
! 	return;
!     afs_shuttingdown = 1;
!     if (afs_cold_shutdown)
! 	afs_warn("COLD ");
!     else
! 	afs_warn("WARM ");
!     afs_warn("shutting down of: CB... ");
! 
!     afs_termState = AFSOP_STOP_RXCALLBACK;
!     rx_WakeupServerProcs();
! #ifdef AFS_AIX51_ENV
!     shutdown_rxkernel();
! #endif
!     /* shutdown_rxkernel(); */
!     while (afs_termState == AFSOP_STOP_RXCALLBACK)
! 	afs_osi_Sleep(&afs_termState);
! 
!     afs_warn("afs... ");
!     while (afs_termState == AFSOP_STOP_AFS) {
! 	afs_osi_CancelWait(&AFS_WaitHandler);
! 	afs_osi_Sleep(&afs_termState);
!     }
!     if (afs_CheckServerDaemonStarted) {
! 	while (afs_termState == AFSOP_STOP_CS) {
! 	    afs_osi_CancelWait(&AFS_CSWaitHandler);
! 	    afs_osi_Sleep(&afs_termState);
! 	}
!     }
!     afs_warn("BkG... ");
!     /* Wake-up afs_brsDaemons so that we don't have to wait for a bkg job! */
!     while (afs_termState == AFSOP_STOP_BKG) {
! 	afs_osi_Wakeup(&afs_brsDaemons);
! 	afs_osi_Sleep(&afs_termState);
!     }
!     afs_warn("CTrunc... ");
!     /* Cancel cache truncate daemon. */
!     while (afs_termState == AFSOP_STOP_TRUNCDAEMON) {
! 	afs_osi_Wakeup((char *)&afs_CacheTruncateDaemon);
! 	afs_osi_Sleep(&afs_termState);
!     }
! #ifdef AFS_AFSDB_ENV
!     afs_warn("AFSDB... ");
!     afs_StopAFSDB();
!     while (afs_termState == AFSOP_STOP_AFSDB)
! 	afs_osi_Sleep(&afs_termState);
! #endif
! #if	defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV)
!     afs_warn("RxEvent... ");
!     /* cancel rx event daemon */
!     while (afs_termState == AFSOP_STOP_RXEVENT)
! 	afs_osi_Sleep(&afs_termState);
! #if defined(RXK_LISTENER_ENV)
! #ifndef UKERNEL
!     afs_warn("UnmaskRxkSignals... ");
!     afs_osi_UnmaskRxkSignals();
! #endif
!     /* cancel rx listener */
!     afs_warn("RxListener... ");
!     osi_StopListener();		/* This closes rx_socket. */
!     while (afs_termState == AFSOP_STOP_RXK_LISTENER) {
! 	afs_warn("Sleep... ");
! 	afs_osi_Sleep(&afs_termState);
!     }
! #endif
! #else
!     afs_termState = AFSOP_STOP_COMPLETE;
! #endif
!     afs_warn("\n");
! 
!     /* Close file only after daemons which can write to it are stopped. */
!     if (afs_cacheInodep) {	/* memcache won't set this */
! 	osi_UFSClose(afs_cacheInodep);	/* Since we always leave it open */
! 	afs_cacheInodep = 0;
!     }
!     return;			/* Just kill daemons for now */
! #ifdef notdef
!     shutdown_CB();
!     shutdown_AFS();
!     shutdown_rxkernel();
!     shutdown_rxevent();
!     shutdown_rx();
!     afs_shutdown_BKG();
!     shutdown_bufferpackage();
  #endif
  #ifdef AFS_AIX51_ENV
      shutdown_daemons();
--- 1045,1175 ----
  #endif
  }
  
  /*
!  * Initstate in the range 0 < x < 100 are early initialization states.
!  * Initstate of 100 means a AFSOP_START operation has been done.  After this,
!  *  the cache may be initialized.
!  * Initstate of 101 means a AFSOP_GO operation has been done.  This operation
!  *  is done after all the cache initialization has been done.
!  * Initstate of 200 means that the volume has been looked up once, possibly
!  *  incorrectly.
!  * Initstate of 300 means that the volume has been *successfully* looked up.
   */
! int
! afs_CheckInit(void)
  {
+     register int code = 0;
  
!     AFS_STATCNT(afs_CheckInit);
!     if (afs_initState <= 100)
! 	code = ENXIO;		/* never finished init phase */
!     else if (afs_initState == 101) {	/* init done, wait for afs_daemon */
! 	while (afs_initState < 200)
! 	    afs_osi_Sleep(&afs_initState);
!     } else if (afs_initState == 200)
! 	code = ETIMEDOUT;	/* didn't find root volume */
!     return code;
  }
  
! int afs_shuttingdown = 0;
! void
! afs_shutdown(void)
  {
!     extern short afs_brsDaemons;
!     extern afs_int32 afs_CheckServerDaemonStarted;
!     extern struct afs_osi_WaitHandle AFS_WaitHandler, AFS_CSWaitHandler;
!     extern struct osi_file *afs_cacheInodep;
  
!     AFS_STATCNT(afs_shutdown);
!     if (afs_initState == 0) {
!         afs_warn("AFS not initialized - not shutting down\n");
!       return;
      }
  
+     if (afs_shuttingdown)
+ 	return;
+     afs_shuttingdown = 1;
+     if (afs_cold_shutdown)
+ 	afs_warn("COLD ");
+     else
+ 	afs_warn("WARM ");
+     afs_warn("shutting down of: CB... ");
  
!     afs_termState = AFSOP_STOP_RXCALLBACK;
!     rx_WakeupServerProcs();
! #ifdef AFS_AIX51_ENV
!     shutdown_rxkernel();
  #endif
+     /* shutdown_rxkernel(); */
+     while (afs_termState == AFSOP_STOP_RXCALLBACK)
+ 	afs_osi_Sleep(&afs_termState);
  
!     afs_warn("afs... ");
!     while (afs_termState == AFSOP_STOP_AFS) {
! 	afs_osi_CancelWait(&AFS_WaitHandler);
! 	afs_osi_Sleep(&afs_termState);
      }
!     if (afs_CheckServerDaemonStarted) {
! 	while (afs_termState == AFSOP_STOP_CS) {
! 	    afs_osi_CancelWait(&AFS_CSWaitHandler);
! 	    afs_osi_Sleep(&afs_termState);
! 	}
      }
!     afs_warn("BkG... ");
!     /* Wake-up afs_brsDaemons so that we don't have to wait for a bkg job! */
!     while (afs_termState == AFSOP_STOP_BKG) {
! 	afs_osi_Wakeup(&afs_brsDaemons);
! 	afs_osi_Sleep(&afs_termState);
      }
!     afs_warn("CTrunc... ");
!     /* Cancel cache truncate daemon. */
!     while (afs_termState == AFSOP_STOP_TRUNCDAEMON) {
! 	afs_osi_Wakeup((char *)&afs_CacheTruncateDaemon);
! 	afs_osi_Sleep(&afs_termState);
!     }
! #ifdef AFS_AFSDB_ENV
!     afs_warn("AFSDB... ");
!     afs_StopAFSDB();
!     while (afs_termState == AFSOP_STOP_AFSDB)
! 	afs_osi_Sleep(&afs_termState);
  #endif
! #if	defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV)
!     afs_warn("RxEvent... ");
!     /* cancel rx event daemon */
!     while (afs_termState == AFSOP_STOP_RXEVENT)
! 	afs_osi_Sleep(&afs_termState);
! #if defined(RXK_LISTENER_ENV)
! #ifndef UKERNEL
!     afs_warn("UnmaskRxkSignals... ");
!     afs_osi_UnmaskRxkSignals();
  #endif
!     /* cancel rx listener */
!     afs_warn("RxListener... ");
!     osi_StopListener();		/* This closes rx_socket. */
!     while (afs_termState == AFSOP_STOP_RXK_LISTENER) {
! 	afs_warn("Sleep... ");
! 	afs_osi_Sleep(&afs_termState);
!     }
  #endif
  #else
!     afs_termState = AFSOP_STOP_COMPLETE;
  #endif
!     afs_warn("\n");
  
!     /* Close file only after daemons which can write to it are stopped. */
!     if (afs_cacheInodep) {	/* memcache won't set this */
! 	osi_UFSClose(afs_cacheInodep);	/* Since we always leave it open */
! 	afs_cacheInodep = 0;
      }
!     return;			/* Just kill daemons for now */
! #ifdef notdef
!     shutdown_CB();
!     shutdown_AFS();
!     shutdown_rxkernel();
!     shutdown_rxevent();
!     shutdown_rx();
!     afs_shutdown_BKG();
!     shutdown_bufferpackage();
  #endif
  #ifdef AFS_AIX51_ENV
      shutdown_daemons();
***************
*** 1844,3319 ****
  {
      AFS_STATCNT(shutdown_BKG);
  }
- 
- 
- #if defined(AFS_OSF_ENV) || defined(AFS_SGI61_ENV)
- /* For SGI 6.2, this can is changed to 1 if it's a 32 bit kernel. */
- #if defined(AFS_SGI62_ENV) && defined(KERNEL) && !defined(_K64U64)
- int afs_icl_sizeofLong = 1;
- #else
- int afs_icl_sizeofLong = 2;
- #endif /* SGI62 */
- #else
- #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
- int afs_icl_sizeofLong = 2;
- #else
- int afs_icl_sizeofLong = 1;
- #endif
- #endif
- 
- int afs_icl_inited = 0;
- 
- /* init function, called once, under afs_icl_lock */
- int
- afs_icl_Init(void)
- {
-     afs_icl_inited = 1;
-     return 0;
- }
- 
- extern struct afs_icl_log *afs_icl_FindLog();
- extern struct afs_icl_set *afs_icl_FindSet();
- 
- 
- static int
- Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval)
- {
-     afs_int32 *lp, elts, flags;
-     register afs_int32 code;
-     struct afs_icl_log *logp;
-     struct afs_icl_set *setp;
- #if defined(AFS_SGI61_ENV) || defined(AFS_SUN57_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
-     size_t temp;
- #else /* AFS_SGI61_ENV */
- #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
-     afs_uint64 temp;
- #else
-     afs_uint32 temp;
- #endif
- #endif /* AFS_SGI61_ENV */
-     char tname[65];
-     afs_int32 startCookie;
-     afs_int32 allocated;
-     struct afs_icl_log *tlp;
- 
- #ifdef	AFS_SUN5_ENV
-     if (!afs_suser(CRED())) {	/* only root can run this code */
- 	return (EACCES);
-     }
- #else
-     if (!afs_suser(NULL)) {	/* only root can run this code */
- #if defined(KERNEL_HAVE_UERROR)
- 	setuerror(EACCES);
- 	return EACCES;
- #else
- 	return EPERM;
- #endif
-     }
- #endif
-     switch (opcode) {
-     case ICL_OP_COPYOUTCLR:	/* copy out data then clear */
-     case ICL_OP_COPYOUT:	/* copy ouy data */
- 	/* copyout: p1=logname, p2=&buffer, p3=size(words), p4=&cookie
- 	 * return flags<<24 + nwords.
- 	 * updates cookie to updated start (not end) if we had to
- 	 * skip some records.
- 	 */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	AFS_COPYIN((char *)p4, (char *)&startCookie, sizeof(afs_int32), code);
- 	if (code)
- 	    return code;
- 	logp = afs_icl_FindLog(tname);
- 	if (!logp)
- 	    return ENOENT;
- #define	BUFFERSIZE	AFS_LRALLOCSIZ
- 	lp = (afs_int32 *) osi_AllocLargeSpace(AFS_LRALLOCSIZ);
- 	elts = BUFFERSIZE / sizeof(afs_int32);
- 	if (p3 < elts)
- 	    elts = p3;
- 	flags = (opcode == ICL_OP_COPYOUT) ? 0 : ICL_COPYOUTF_CLRAFTERREAD;
- 	code =
- 	    afs_icl_CopyOut(logp, lp, &elts, (afs_uint32 *) & startCookie,
- 			    &flags);
- 	if (code) {
- 	    osi_FreeLargeSpace((struct osi_buffer *)lp);
- 	    break;
- 	}
- 	AFS_COPYOUT((char *)lp, (char *)p2, elts * sizeof(afs_int32), code);
- 	if (code)
- 	    goto done;
- 	AFS_COPYOUT((char *)&startCookie, (char *)p4, sizeof(afs_int32),
- 		    code);
- 	if (code)
- 	    goto done;
- #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
- 	if (!(IS64U))
- 	    *retval = ((long)((flags << 24) | (elts & 0xffffff))) << 32;
- 	else
- #endif
- 	    *retval = (flags << 24) | (elts & 0xffffff);
-       done:
- 	afs_icl_LogRele(logp);
- 	osi_FreeLargeSpace((struct osi_buffer *)lp);
- 	break;
- 
-     case ICL_OP_ENUMLOGS:	/* enumerate logs */
- 	/* enumerate logs: p1=index, p2=&name, p3=sizeof(name), p4=&size.
- 	 * return 0 for success, otherwise error.
- 	 */
- 	for (tlp = afs_icl_allLogs; tlp; tlp = tlp->nextp) {
- 	    if (p1-- == 0)
- 		break;
- 	}
- 	if (!tlp)
- 	    return ENOENT;	/* past the end of file */
- 	temp = strlen(tlp->name) + 1;
- 	if (temp > p3)
- 	    return EINVAL;
- 	AFS_COPYOUT(tlp->name, (char *)p2, temp, code);
- 	if (!code)		/* copy out size of log */
- 	    AFS_COPYOUT((char *)&tlp->logSize, (char *)p4, sizeof(afs_int32),
- 			code);
- 	break;
- 
-     case ICL_OP_ENUMLOGSBYSET:	/* enumerate logs by set name */
- 	/* enumerate logs: p1=setname, p2=index, p3=&name, p4=sizeof(name).
- 	 * return 0 for success, otherwise error.
- 	 */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	setp = afs_icl_FindSet(tname);
- 	if (!setp)
- 	    return ENOENT;
- 	if (p2 > ICL_LOGSPERSET)
- 	    return EINVAL;
- 	if (!(tlp = setp->logs[p2]))
- 	    return EBADF;
- 	temp = strlen(tlp->name) + 1;
- 	if (temp > p4)
- 	    return EINVAL;
- 	AFS_COPYOUT(tlp->name, (char *)p3, temp, code);
- 	break;
- 
-     case ICL_OP_CLRLOG:	/* clear specified log */
- 	/* zero out the specified log: p1=logname */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	logp = afs_icl_FindLog(tname);
- 	if (!logp)
- 	    return ENOENT;
- 	code = afs_icl_ZeroLog(logp);
- 	afs_icl_LogRele(logp);
- 	break;
- 
-     case ICL_OP_CLRSET:	/* clear specified set */
- 	/* zero out the specified set: p1=setname */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	setp = afs_icl_FindSet(tname);
- 	if (!setp)
- 	    return ENOENT;
- 	code = afs_icl_ZeroSet(setp);
- 	afs_icl_SetRele(setp);
- 	break;
- 
-     case ICL_OP_CLRALL:	/* clear all logs */
- 	/* zero out all logs -- no args */
- 	code = 0;
- 	ObtainWriteLock(&afs_icl_lock, 178);
- 	for (tlp = afs_icl_allLogs; tlp; tlp = tlp->nextp) {
- 	    tlp->refCount++;	/* hold this guy */
- 	    ReleaseWriteLock(&afs_icl_lock);
- 	    /* don't clear persistent logs */
- 	    if ((tlp->states & ICL_LOGF_PERSISTENT) == 0)
- 		code = afs_icl_ZeroLog(tlp);
- 	    ObtainWriteLock(&afs_icl_lock, 179);
- 	    if (--tlp->refCount == 0)
- 		afs_icl_ZapLog(tlp);
- 	    if (code)
- 		break;
- 	}
- 	ReleaseWriteLock(&afs_icl_lock);
- 	break;
- 
-     case ICL_OP_ENUMSETS:	/* enumerate all sets */
- 	/* enumerate sets: p1=index, p2=&name, p3=sizeof(name), p4=&states.
- 	 * return 0 for success, otherwise error.
- 	 */
- 	for (setp = afs_icl_allSets; setp; setp = setp->nextp) {
- 	    if (p1-- == 0)
- 		break;
- 	}
- 	if (!setp)
- 	    return ENOENT;	/* past the end of file */
- 	temp = strlen(setp->name) + 1;
- 	if (temp > p3)
- 	    return EINVAL;
- 	AFS_COPYOUT(setp->name, (char *)p2, temp, code);
- 	if (!code)		/* copy out size of log */
- 	    AFS_COPYOUT((char *)&setp->states, (char *)p4, sizeof(afs_int32),
- 			code);
- 	break;
- 
-     case ICL_OP_SETSTAT:	/* set status on a set */
- 	/* activate the specified set: p1=setname, p2=op */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	setp = afs_icl_FindSet(tname);
- 	if (!setp)
- 	    return ENOENT;
- 	code = afs_icl_SetSetStat(setp, p2);
- 	afs_icl_SetRele(setp);
- 	break;
- 
-     case ICL_OP_SETSTATALL:	/* set status on all sets */
- 	/* activate the specified set: p1=op */
- 	code = 0;
- 	ObtainWriteLock(&afs_icl_lock, 180);
- 	for (setp = afs_icl_allSets; setp; setp = setp->nextp) {
- 	    setp->refCount++;	/* hold this guy */
- 	    ReleaseWriteLock(&afs_icl_lock);
- 	    /* don't set states on persistent sets */
- 	    if ((setp->states & ICL_SETF_PERSISTENT) == 0)
- 		code = afs_icl_SetSetStat(setp, p1);
- 	    ObtainWriteLock(&afs_icl_lock, 181);
- 	    if (--setp->refCount == 0)
- 		afs_icl_ZapSet(setp);
- 	    if (code)
- 		break;
- 	}
- 	ReleaseWriteLock(&afs_icl_lock);
- 	break;
- 
-     case ICL_OP_SETLOGSIZE:	/* set size of log */
- 	/* set the size of the specified log: p1=logname, p2=size (in words) */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	logp = afs_icl_FindLog(tname);
- 	if (!logp)
- 	    return ENOENT;
- 	code = afs_icl_LogSetSize(logp, p2);
- 	afs_icl_LogRele(logp);
- 	break;
- 
-     case ICL_OP_GETLOGINFO:	/* get size of log */
- 	/* zero out the specified log: p1=logname, p2=&logSize, p3=&allocated */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	logp = afs_icl_FindLog(tname);
- 	if (!logp)
- 	    return ENOENT;
- 	allocated = !!logp->datap;
- 	AFS_COPYOUT((char *)&logp->logSize, (char *)p2, sizeof(afs_int32),
- 		    code);
- 	if (!code)
- 	    AFS_COPYOUT((char *)&allocated, (char *)p3, sizeof(afs_int32),
- 			code);
- 	afs_icl_LogRele(logp);
- 	break;
- 
-     case ICL_OP_GETSETINFO:	/* get state of set */
- 	/* zero out the specified set: p1=setname, p2=&state */
- 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
- 	if (code)
- 	    return code;
- 	setp = afs_icl_FindSet(tname);
- 	if (!setp)
- 	    return ENOENT;
- 	AFS_COPYOUT((char *)&setp->states, (char *)p2, sizeof(afs_int32),
- 		    code);
- 	afs_icl_SetRele(setp);
- 	break;
- 
-     default:
- 	code = EINVAL;
-     }
- 
-     return code;
- }
- 
- 
- afs_lock_t afs_icl_lock;
- 
- /* exported routine: a 4 parameter event */
- int
- afs_icl_Event4(register struct afs_icl_set *setp, afs_int32 eventID,
- 	       afs_int32 lAndT, long p1, long p2, long p3, long p4)
- {
-     afs_int32 mask;
-     register int i;
-     register afs_int32 tmask;
-     int ix;
- 
-     /* If things aren't init'ed yet (or the set is inactive), don't panic */
-     if (!ICL_SETACTIVE(setp))
- 	return 0;
- 
-     AFS_ASSERT_GLOCK();
-     mask = lAndT >> 24 & 0xff;	/* mask of which logs to log to */
-     ix = ICL_EVENTBYTE(eventID);
-     ObtainReadLock(&setp->lock);
-     if (setp->eventFlags[ix] & ICL_EVENTMASK(eventID)) {
- 	for (i = 0, tmask = 1; i < ICL_LOGSPERSET; i++, tmask <<= 1) {
- 	    if (mask & tmask) {
- 		afs_icl_AppendRecord(setp->logs[i], eventID, lAndT & 0xffffff,
- 				     p1, p2, p3, p4);
- 	    }
- 	    mask &= ~tmask;
- 	    if (mask == 0)
- 		break;		/* break early */
- 	}
-     }
-     ReleaseReadLock(&setp->lock);
-     return 0;
- }
- 
- /* Next 4 routines should be implemented via var-args or something.
-  * Whole purpose is to avoid compiler warnings about parameter # mismatches.
-  * Otherwise, could call afs_icl_Event4 directly.
-  */
- int
- afs_icl_Event3(register struct afs_icl_set *setp, afs_int32 eventID,
- 	       afs_int32 lAndT, long p1, long p2, long p3)
- {
-     return afs_icl_Event4(setp, eventID, lAndT, p1, p2, p3, (long)0);
- }
- 
- int
- afs_icl_Event2(register struct afs_icl_set *setp, afs_int32 eventID,
- 	       afs_int32 lAndT, long p1, long p2)
- {
-     return afs_icl_Event4(setp, eventID, lAndT, p1, p2, (long)0, (long)0);
- }
- 
- int
- afs_icl_Event1(register struct afs_icl_set *setp, afs_int32 eventID,
- 	       afs_int32 lAndT, long p1)
- {
-     return afs_icl_Event4(setp, eventID, lAndT, p1, (long)0, (long)0,
- 			  (long)0);
- }
- 
- int
- afs_icl_Event0(register struct afs_icl_set *setp, afs_int32 eventID,
- 	       afs_int32 lAndT)
- {
-     return afs_icl_Event4(setp, eventID, lAndT, (long)0, (long)0, (long)0,
- 			  (long)0);
- }
- 
- struct afs_icl_log *afs_icl_allLogs = 0;
- 
- /* function to purge records from the start of the log, until there
-  * is at least minSpace long's worth of space available without
-  * making the head and the tail point to the same word.
-  *
-  * Log must be write-locked.
-  */
- static void
- afs_icl_GetLogSpace(register struct afs_icl_log *logp, afs_int32 minSpace)
- {
-     register unsigned int tsize;
- 
-     while (logp->logSize - logp->logElements <= minSpace) {
- 	/* eat a record */
- 	tsize = ((logp->datap[logp->firstUsed]) >> 24) & 0xff;
- 	logp->logElements -= tsize;
- 	logp->firstUsed += tsize;
- 	if (logp->firstUsed >= logp->logSize)
- 	    logp->firstUsed -= logp->logSize;
- 	logp->baseCookie += tsize;
-     }
- }
- 
- /* append string astr to buffer, including terminating null char.
-  *
-  * log must be write-locked.
-  */
- #define ICL_CHARSPERLONG	4
- static void
- afs_icl_AppendString(struct afs_icl_log *logp, char *astr)
- {
-     char *op;			/* ptr to char to write */
-     int tc;
-     register int bib;		/* bytes in buffer */
- 
-     bib = 0;
-     op = (char *)&(logp->datap[logp->firstFree]);
-     while (1) {
- 	tc = *astr++;
- 	*op++ = tc;
- 	if (++bib >= ICL_CHARSPERLONG) {
- 	    /* new word */
- 	    bib = 0;
- 	    if (++(logp->firstFree) >= logp->logSize) {
- 		logp->firstFree = 0;
- 		op = (char *)&(logp->datap[0]);
- 	    }
- 	    logp->logElements++;
- 	}
- 	if (tc == 0)
- 	    break;
-     }
-     if (bib > 0) {
- 	/* if we've used this word at all, allocate it */
- 	if (++(logp->firstFree) >= logp->logSize) {
- 	    logp->firstFree = 0;
- 	}
- 	logp->logElements++;
-     }
- }
- 
- /* add a long to the log, ignoring overflow (checked already) */
- #define ICL_APPENDINT32(lp, x) \
-     MACRO_BEGIN \
-         (lp)->datap[(lp)->firstFree] = (x); \
- 	if (++((lp)->firstFree) >= (lp)->logSize) { \
- 		(lp)->firstFree = 0; \
- 	} \
-         (lp)->logElements++; \
-     MACRO_END
- 
- #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
- #define ICL_APPENDLONG(lp, x) \
-     MACRO_BEGIN \
- 	ICL_APPENDINT32((lp), ((x) >> 32) & 0xffffffffL); \
- 	ICL_APPENDINT32((lp), (x) & 0xffffffffL); \
-     MACRO_END
- 
- #else /* AFS_OSF_ENV */
- #define ICL_APPENDLONG(lp, x) ICL_APPENDINT32((lp), (x))
- #endif /* AFS_OSF_ENV */
- 
- /* routine to tell whether we're dealing with the address or the
-  * object itself
-  */
- int
- afs_icl_UseAddr(int type)
- {
-     if (type == ICL_TYPE_HYPER || type == ICL_TYPE_STRING
- 	|| type == ICL_TYPE_FID || type == ICL_TYPE_INT64)
- 	return 1;
-     else
- 	return 0;
- }
- 
- /* Function to append a record to the log.  Written for speed
-  * since we know that we're going to have to make this work fast
-  * pretty soon, anyway.  The log must be unlocked.
-  */
- 
- void
- afs_icl_AppendRecord(register struct afs_icl_log *logp, afs_int32 op,
- 		     afs_int32 types, long p1, long p2, long p3, long p4)
- {
-     int rsize;			/* record size in longs */
-     register int tsize;		/* temp size */
-     osi_timeval_t tv;
-     int t1, t2, t3, t4;
- 
-     t4 = types & 0x3f;		/* decode types */
-     types >>= 6;
-     t3 = types & 0x3f;
-     types >>= 6;
-     t2 = types & 0x3f;
-     types >>= 6;
-     t1 = types & 0x3f;
- 
-     osi_GetTime(&tv);		/* It panics for solaris if inside */
-     ObtainWriteLock(&logp->lock, 182);
-     if (!logp->datap) {
- 	ReleaseWriteLock(&logp->lock);
- 	return;
-     }
- 
-     /* get timestamp as # of microseconds since some time that doesn't
-      * change that often.  This algorithm ticks over every 20 minutes
-      * or so (1000 seconds).  Write a timestamp record if it has.
-      */
-     if (tv.tv_sec - logp->lastTS > 1024) {
- 	/* the timer has wrapped -- write a timestamp record */
- 	if (logp->logSize - logp->logElements <= 5)
- 	    afs_icl_GetLogSpace(logp, 5);
- 
- 	ICL_APPENDINT32(logp,
- 			(afs_int32) (5 << 24) + (ICL_TYPE_UNIXDATE << 18));
- 	ICL_APPENDINT32(logp, (afs_int32) ICL_INFO_TIMESTAMP);
- 	ICL_APPENDINT32(logp, (afs_int32) 0);	/* use thread ID zero for clocks */
- 	ICL_APPENDINT32(logp,
- 			(afs_int32) (tv.tv_sec & 0x3ff) * 1000000 +
- 			tv.tv_usec);
- 	ICL_APPENDINT32(logp, (afs_int32) tv.tv_sec);
- 
- 	logp->lastTS = tv.tv_sec;
-     }
- 
-     rsize = 4;			/* base case */
-     if (t1) {
- 	/* compute size of parameter p1.  Only tricky case is string.
- 	 * In that case, we have to call strlen to get the string length.
- 	 */
- 	ICL_SIZEHACK(t1, p1);
-     }
-     if (t2) {
- 	/* compute size of parameter p2.  Only tricky case is string.
- 	 * In that case, we have to call strlen to get the string length.
- 	 */
- 	ICL_SIZEHACK(t2, p2);
-     }
-     if (t3) {
- 	/* compute size of parameter p3.  Only tricky case is string.
- 	 * In that case, we have to call strlen to get the string length.
- 	 */
- 	ICL_SIZEHACK(t3, p3);
-     }
-     if (t4) {
- 	/* compute size of parameter p4.  Only tricky case is string.
- 	 * In that case, we have to call strlen to get the string length.
- 	 */
- 	ICL_SIZEHACK(t4, p4);
-     }
- 
-     /* At this point, we've computed all of the parameter sizes, and
-      * have in rsize the size of the entire record we want to append.
-      * Next, we check that we actually have room in the log to do this
-      * work, and then we do the append.
-      */
-     if (rsize > 255) {
- 	ReleaseWriteLock(&logp->lock);
- 	return;			/* log record too big to express */
-     }
- 
-     if (logp->logSize - logp->logElements <= rsize)
- 	afs_icl_GetLogSpace(logp, rsize);
- 
-     ICL_APPENDINT32(logp,
- 		    (afs_int32) (rsize << 24) + (t1 << 18) + (t2 << 12) +
- 		    (t3 << 6) + t4);
-     ICL_APPENDINT32(logp, (afs_int32) op);
-     ICL_APPENDINT32(logp, (afs_int32) osi_ThreadUnique());
-     ICL_APPENDINT32(logp,
- 		    (afs_int32) (tv.tv_sec & 0x3ff) * 1000000 + tv.tv_usec);
- 
-     if (t1) {
- 	/* marshall parameter 1 now */
- 	if (t1 == ICL_TYPE_STRING) {
- 	    afs_icl_AppendString(logp, (char *)p1);
- 	} else if (t1 == ICL_TYPE_HYPER) {
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p1)->high);
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p1)->low);
- 	} else if (t1 == ICL_TYPE_INT64) {
- #ifdef AFSLITTLE_ENDIAN
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) p1);
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- #endif /* AFS_64BIT_CLIENT */
- #else /* AFSLITTLE_ENDIAN */
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- 	    ICL_APPENDINT32(logp, (afs_int32) p1);
- #endif /* AFS_64BIT_CLIENT */
- #endif /* AFSLITTLE_ENDIAN */
- 	} else if (t1 == ICL_TYPE_FID) {
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[2]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[3]);
- 	}
- #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
- 	else if (t1 == ICL_TYPE_INT32)
- 	    ICL_APPENDINT32(logp, (afs_int32) p1);
- #endif /* AFS_OSF_ENV */
- 	else
- 	    ICL_APPENDLONG(logp, p1);
-     }
-     if (t2) {
- 	/* marshall parameter 2 now */
- 	if (t2 == ICL_TYPE_STRING)
- 	    afs_icl_AppendString(logp, (char *)p2);
- 	else if (t2 == ICL_TYPE_HYPER) {
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p2)->high);
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p2)->low);
- 	} else if (t2 == ICL_TYPE_INT64) {
- #ifdef AFSLITTLE_ENDIAN
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) p2);
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- #endif /* AFS_64BIT_CLIENT */
- #else /* AFSLITTLE_ENDIAN */
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- 	    ICL_APPENDINT32(logp, (afs_int32) p2);
- #endif /* AFS_64BIT_CLIENT */
- #endif /* AFSLITTLE_ENDIAN */
- 	} else if (t2 == ICL_TYPE_FID) {
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[2]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[3]);
- 	}
- #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
- 	else if (t2 == ICL_TYPE_INT32)
- 	    ICL_APPENDINT32(logp, (afs_int32) p2);
- #endif /* AFS_OSF_ENV */
- 	else
- 	    ICL_APPENDLONG(logp, p2);
-     }
-     if (t3) {
- 	/* marshall parameter 3 now */
- 	if (t3 == ICL_TYPE_STRING)
- 	    afs_icl_AppendString(logp, (char *)p3);
- 	else if (t3 == ICL_TYPE_HYPER) {
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p3)->high);
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p3)->low);
- 	} else if (t3 == ICL_TYPE_INT64) {
- #ifdef AFSLITTLE_ENDIAN
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) p3);
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- #endif /* AFS_64BIT_CLIENT */
- #else /* AFSLITTLE_ENDIAN */
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- 	    ICL_APPENDINT32(logp, (afs_int32) p3);
- #endif /* AFS_64BIT_CLIENT */
- #endif /* AFSLITTLE_ENDIAN */
- 	} else if (t3 == ICL_TYPE_FID) {
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[2]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[3]);
- 	}
- #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
- 	else if (t3 == ICL_TYPE_INT32)
- 	    ICL_APPENDINT32(logp, (afs_int32) p3);
- #endif /* AFS_OSF_ENV */
- 	else
- 	    ICL_APPENDLONG(logp, p3);
-     }
-     if (t4) {
- 	/* marshall parameter 4 now */
- 	if (t4 == ICL_TYPE_STRING)
- 	    afs_icl_AppendString(logp, (char *)p4);
- 	else if (t4 == ICL_TYPE_HYPER) {
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p4)->high);
- 	    ICL_APPENDINT32(logp,
- 			    (afs_int32) ((struct afs_hyper_t *)p4)->low);
- 	} else if (t4 == ICL_TYPE_INT64) {
- #ifdef AFSLITTLE_ENDIAN
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) p4);
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- #endif /* AFS_64BIT_CLIENT */
- #else /* AFSLITTLE_ENDIAN */
- #ifdef AFS_64BIT_CLIENT
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]);
- #else /* AFS_64BIT_CLIENT */
- 	    ICL_APPENDINT32(logp, (afs_int32) 0);
- 	    ICL_APPENDINT32(logp, (afs_int32) p4);
- #endif /* AFS_64BIT_CLIENT */
- #endif /* AFSLITTLE_ENDIAN */
- 	} else if (t4 == ICL_TYPE_FID) {
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[2]);
- 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[3]);
- 	}
- #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
- 	else if (t4 == ICL_TYPE_INT32)
- 	    ICL_APPENDINT32(logp, (afs_int32) p4);
- #endif /* AFS_OSF_ENV */
- 	else
- 	    ICL_APPENDLONG(logp, p4);
-     }
-     ReleaseWriteLock(&logp->lock);
- }
- 
- /* create a log with size logSize; return it in *outLogpp and tag
-  * it with name "name."
-  */
- int
- afs_icl_CreateLog(char *name, afs_int32 logSize,
- 		  struct afs_icl_log **outLogpp)
- {
-     return afs_icl_CreateLogWithFlags(name, logSize, /*flags */ 0, outLogpp);
- }
- 
- /* create a log with size logSize; return it in *outLogpp and tag
-  * it with name "name."  'flags' can be set to make the log unclearable.
-  */
- int
- afs_icl_CreateLogWithFlags(char *name, afs_int32 logSize, afs_uint32 flags,
- 			   struct afs_icl_log **outLogpp)
- {
-     register struct afs_icl_log *logp;
- 
-     /* add into global list under lock */
-     ObtainWriteLock(&afs_icl_lock, 183);
-     if (!afs_icl_inited)
- 	afs_icl_Init();
- 
-     for (logp = afs_icl_allLogs; logp; logp = logp->nextp) {
- 	if (strcmp(logp->name, name) == 0) {
- 	    /* found it already created, just return it */
- 	    logp->refCount++;
- 	    *outLogpp = logp;
- 	    if (flags & ICL_CRLOG_FLAG_PERSISTENT) {
- 		ObtainWriteLock(&logp->lock, 184);
- 		logp->states |= ICL_LOGF_PERSISTENT;
- 		ReleaseWriteLock(&logp->lock);
- 	    }
- 	    ReleaseWriteLock(&afs_icl_lock);
- 	    return 0;
- 	}
-     }
- 
-     logp = (struct afs_icl_log *)
- 	osi_AllocSmallSpace(sizeof(struct afs_icl_log));
-     memset((caddr_t) logp, 0, sizeof(*logp));
- 
-     logp->refCount = 1;
-     logp->name = osi_AllocSmallSpace(strlen(name) + 1);
-     strcpy(logp->name, name);
-     LOCK_INIT(&logp->lock, "logp lock");
-     logp->logSize = logSize;
-     logp->datap = NULL;		/* don't allocate it until we need it */
- 
-     if (flags & ICL_CRLOG_FLAG_PERSISTENT)
- 	logp->states |= ICL_LOGF_PERSISTENT;
- 
-     logp->nextp = afs_icl_allLogs;
-     afs_icl_allLogs = logp;
-     ReleaseWriteLock(&afs_icl_lock);
- 
-     *outLogpp = logp;
-     return 0;
- }
- 
- /* called with a log, a pointer to a buffer, the size of the buffer
-  * (in *bufSizep), the starting cookie (in *cookiep, use 0 at the start)
-  * and returns data in the provided buffer, and returns output flags
-  * in *flagsp.  The flag ICL_COPYOUTF_MISSEDSOME is set if we can't
-  * find the record with cookie value cookie.
-  */
- int
- afs_icl_CopyOut(register struct afs_icl_log *logp, afs_int32 * bufferp,
- 		afs_int32 * bufSizep, afs_uint32 * cookiep,
- 		afs_int32 * flagsp)
- {
-     afs_int32 nwords;		/* number of words to copy out */
-     afs_uint32 startCookie;	/* first cookie to use */
-     afs_int32 outWords;		/* words we've copied out */
-     afs_int32 inWords;		/* max words to copy out */
-     afs_int32 code;		/* return code */
-     afs_int32 ix;		/* index we're copying from */
-     afs_int32 outFlags;		/* return flags */
-     afs_int32 inFlags;		/* flags passed in */
-     afs_int32 end;
- 
-     inWords = *bufSizep;	/* max to copy out */
-     outWords = 0;		/* amount copied out */
-     startCookie = *cookiep;
-     outFlags = 0;
-     inFlags = *flagsp;
-     code = 0;
- 
-     ObtainWriteLock(&logp->lock, 185);
-     if (!logp->datap) {
- 	ReleaseWriteLock(&logp->lock);
- 	goto done;
-     }
- 
-     /* first, compute the index of the start cookie we've been passed */
-     while (1) {
- 	/* (re-)compute where we should start */
- 	if (startCookie < logp->baseCookie) {
- 	    if (startCookie)	/* missed some output */
- 		outFlags |= ICL_COPYOUTF_MISSEDSOME;
- 	    /* skip to the first available record */
- 	    startCookie = logp->baseCookie;
- 	    *cookiep = startCookie;
- 	}
- 
- 	/* compute where we find the first element to copy out */
- 	ix = logp->firstUsed + startCookie - logp->baseCookie;
- 	if (ix >= logp->logSize)
- 	    ix -= logp->logSize;
- 
- 	/* if have some data now, break out and process it */
- 	if (startCookie - logp->baseCookie < logp->logElements)
- 	    break;
- 
- 	/* At end of log, so clear it if we need to */
- 	if (inFlags & ICL_COPYOUTF_CLRAFTERREAD) {
- 	    logp->firstUsed = logp->firstFree = 0;
- 	    logp->logElements = 0;
- 	}
- 	/* otherwise, either wait for the data to arrive, or return */
- 	if (!(inFlags & ICL_COPYOUTF_WAITIO)) {
- 	    ReleaseWriteLock(&logp->lock);
- 	    code = 0;
- 	    goto done;
- 	}
- 	logp->states |= ICL_LOGF_WAITING;
- 	ReleaseWriteLock(&logp->lock);
- 	afs_osi_Sleep(&logp->lock);
- 	ObtainWriteLock(&logp->lock, 186);
-     }
-     /* copy out data from ix to logSize or firstFree, depending
-      * upon whether firstUsed <= firstFree (no wrap) or otherwise.
-      * be careful not to copy out more than nwords.
-      */
-     if (ix >= logp->firstUsed) {
- 	if (logp->firstUsed <= logp->firstFree)
- 	    /* no wrapping */
- 	    end = logp->firstFree;	/* first element not to copy */
- 	else
- 	    end = logp->logSize;
- 	nwords = inWords;	/* don't copy more than this */
- 	if (end - ix < nwords)
- 	    nwords = end - ix;
- 	if (nwords > 0) {
- 	    memcpy((char *)bufferp, (char *)&logp->datap[ix],
- 		   sizeof(afs_int32) * nwords);
- 	    outWords += nwords;
- 	    inWords -= nwords;
- 	    bufferp += nwords;
- 	}
- 	/* if we're going to copy more out below, we'll start here */
- 	ix = 0;
-     }
-     /* now, if active part of the log has wrapped, there's more stuff
-      * starting at the head of the log.  Copy out more from there.
-      */
-     if (logp->firstUsed > logp->firstFree && ix < logp->firstFree
- 	&& inWords > 0) {
- 	/* (more to) copy out from the wrapped section at the
- 	 * start of the log.  May get here even if didn't copy any
- 	 * above, if the cookie points directly into the wrapped section.
- 	 */
- 	nwords = inWords;
- 	if (logp->firstFree - ix < nwords)
- 	    nwords = logp->firstFree - ix;
- 	memcpy((char *)bufferp, (char *)&logp->datap[ix],
- 	       sizeof(afs_int32) * nwords);
- 	outWords += nwords;
- 	inWords -= nwords;
- 	bufferp += nwords;
-     }
- 
-     ReleaseWriteLock(&logp->lock);
- 
-   done:
-     if (code == 0) {
- 	*bufSizep = outWords;
- 	*flagsp = outFlags;
-     }
-     return code;
- }
- 
- /* return basic parameter information about a log */
- int
- afs_icl_GetLogParms(struct afs_icl_log *logp, afs_int32 * maxSizep,
- 		    afs_int32 * curSizep)
- {
-     ObtainReadLock(&logp->lock);
-     *maxSizep = logp->logSize;
-     *curSizep = logp->logElements;
-     ReleaseReadLock(&logp->lock);
-     return 0;
- }
- 
- 
- /* hold and release logs */
- int
- afs_icl_LogHold(register struct afs_icl_log *logp)
- {
-     ObtainWriteLock(&afs_icl_lock, 187);
-     logp->refCount++;
-     ReleaseWriteLock(&afs_icl_lock);
-     return 0;
- }
- 
- /* hold and release logs, called with lock already held */
- int
- afs_icl_LogHoldNL(register struct afs_icl_log *logp)
- {
-     logp->refCount++;
-     return 0;
- }
- 
- /* keep track of how many sets believe the log itself is allocated */
- int
- afs_icl_LogUse(register struct afs_icl_log *logp)
- {
-     ObtainWriteLock(&logp->lock, 188);
-     if (logp->setCount == 0) {
- 	/* this is the first set actually using the log -- allocate it */
- 	if (logp->logSize == 0) {
- 	    /* we weren't passed in a hint and it wasn't set */
- 	    logp->logSize = ICL_DEFAULT_LOGSIZE;
- 	}
- 	logp->datap =
- 	    (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logp->logSize);
- #ifdef	KERNEL_HAVE_PIN
- 	pin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
- #endif
-     }
-     logp->setCount++;
-     ReleaseWriteLock(&logp->lock);
-     return 0;
- }
- 
- /* decrement the number of real users of the log, free if possible */
- int
- afs_icl_LogFreeUse(register struct afs_icl_log *logp)
- {
-     ObtainWriteLock(&logp->lock, 189);
-     if (--logp->setCount == 0) {
- 	/* no more users -- free it (but keep log structure around) */
- #ifdef	KERNEL_HAVE_PIN
- 	unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
- #endif
- 	afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize);
- 	logp->firstUsed = logp->firstFree = 0;
- 	logp->logElements = 0;
- 	logp->datap = NULL;
-     }
-     ReleaseWriteLock(&logp->lock);
-     return 0;
- }
- 
- /* set the size of the log to 'logSize' */
- int
- afs_icl_LogSetSize(register struct afs_icl_log *logp, afs_int32 logSize)
- {
-     ObtainWriteLock(&logp->lock, 190);
-     if (!logp->datap) {
- 	/* nothing to worry about since it's not allocated */
- 	logp->logSize = logSize;
-     } else {
- 	/* reset log */
- 	logp->firstUsed = logp->firstFree = 0;
- 	logp->logElements = 0;
- 
- 	/* free and allocate a new one */
- #ifdef	KERNEL_HAVE_PIN
- 	unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
- #endif
- 	afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize);
- 	logp->datap =
- 	    (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logSize);
- #ifdef	KERNEL_HAVE_PIN
- 	pin((char *)logp->datap, sizeof(afs_int32) * logSize);
- #endif
- 	logp->logSize = logSize;
-     }
-     ReleaseWriteLock(&logp->lock);
- 
-     return 0;
- }
- 
- /* free a log.  Called with afs_icl_lock locked. */
- int
- afs_icl_ZapLog(register struct afs_icl_log *logp)
- {
-     register struct afs_icl_log **lpp, *tp;
- 
-     for (lpp = &afs_icl_allLogs, tp = *lpp; tp; lpp = &tp->nextp, tp = *lpp) {
- 	if (tp == logp) {
- 	    /* found the dude we want to remove */
- 	    *lpp = logp->nextp;
- 	    osi_FreeSmallSpace(logp->name);
- #ifdef KERNEL_HAVE_PIN
- 	    unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
- #endif
- 	    afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize);
- 	    osi_FreeSmallSpace(logp);
- 	    break;		/* won't find it twice */
- 	}
-     }
-     return 0;
- }
- 
- /* do the release, watching for deleted entries */
- int
- afs_icl_LogRele(register struct afs_icl_log *logp)
- {
-     ObtainWriteLock(&afs_icl_lock, 191);
-     if (--logp->refCount == 0 && (logp->states & ICL_LOGF_DELETED)) {
- 	afs_icl_ZapLog(logp);	/* destroys logp's lock! */
-     }
-     ReleaseWriteLock(&afs_icl_lock);
-     return 0;
- }
- 
- /* do the release, watching for deleted entries, log already held */
- int
- afs_icl_LogReleNL(register struct afs_icl_log *logp)
- {
-     if (--logp->refCount == 0 && (logp->states & ICL_LOGF_DELETED)) {
- 	afs_icl_ZapLog(logp);	/* destroys logp's lock! */
-     }
-     return 0;
- }
- 
- /* zero out the log */
- int
- afs_icl_ZeroLog(register struct afs_icl_log *logp)
- {
-     ObtainWriteLock(&logp->lock, 192);
-     logp->firstUsed = logp->firstFree = 0;
-     logp->logElements = 0;
-     logp->baseCookie = 0;
-     ReleaseWriteLock(&logp->lock);
-     return 0;
- }
- 
- /* free a log entry, and drop its reference count */
- int
- afs_icl_LogFree(register struct afs_icl_log *logp)
- {
-     ObtainWriteLock(&logp->lock, 193);
-     logp->states |= ICL_LOGF_DELETED;
-     ReleaseWriteLock(&logp->lock);
-     afs_icl_LogRele(logp);
-     return 0;
- }
- 
- /* find a log by name, returning it held */
- struct afs_icl_log *
- afs_icl_FindLog(char *name)
- {
-     register struct afs_icl_log *tp;
-     ObtainWriteLock(&afs_icl_lock, 194);
-     for (tp = afs_icl_allLogs; tp; tp = tp->nextp) {
- 	if (strcmp(tp->name, name) == 0) {
- 	    /* this is the dude we want */
- 	    tp->refCount++;
- 	    break;
- 	}
-     }
-     ReleaseWriteLock(&afs_icl_lock);
-     return tp;
- }
- 
- int
- afs_icl_EnumerateLogs(int (*aproc)
- 		        (char *name, char *arock, struct afs_icl_log * tp),
- 		      char *arock)
- {
-     register struct afs_icl_log *tp;
-     register afs_int32 code;
- 
-     code = 0;
-     ObtainWriteLock(&afs_icl_lock, 195);
-     for (tp = afs_icl_allLogs; tp; tp = tp->nextp) {
- 	tp->refCount++;		/* hold this guy */
- 	ReleaseWriteLock(&afs_icl_lock);
- 	ObtainReadLock(&tp->lock);
- 	code = (*aproc) (tp->name, arock, tp);
- 	ReleaseReadLock(&tp->lock);
- 	ObtainWriteLock(&afs_icl_lock, 196);
- 	if (--tp->refCount == 0)
- 	    afs_icl_ZapLog(tp);
- 	if (code)
- 	    break;
-     }
-     ReleaseWriteLock(&afs_icl_lock);
-     return code;
- }
- 
- struct afs_icl_set *afs_icl_allSets = 0;
- 
- int
- afs_icl_CreateSet(char *name, struct afs_icl_log *baseLogp,
- 		  struct afs_icl_log *fatalLogp,
- 		  struct afs_icl_set **outSetpp)
- {
-     return afs_icl_CreateSetWithFlags(name, baseLogp, fatalLogp,
- 				      /*flags */ 0, outSetpp);
- }
- 
- /* create a set, given pointers to base and fatal logs, if any.
-  * Logs are unlocked, but referenced, and *outSetpp is returned
-  * referenced.  Function bumps reference count on logs, since it
-  * addds references from the new afs_icl_set.  When the set is destroyed,
-  * those references will be released.
-  */
- int
- afs_icl_CreateSetWithFlags(char *name, struct afs_icl_log *baseLogp,
- 			   struct afs_icl_log *fatalLogp, afs_uint32 flags,
- 			   struct afs_icl_set **outSetpp)
- {
-     register struct afs_icl_set *setp;
-     register int i;
-     afs_int32 states = ICL_DEFAULT_SET_STATES;
- 
-     ObtainWriteLock(&afs_icl_lock, 197);
-     if (!afs_icl_inited)
- 	afs_icl_Init();
- 
-     for (setp = afs_icl_allSets; setp; setp = setp->nextp) {
- 	if (strcmp(setp->name, name) == 0) {
- 	    setp->refCount++;
- 	    *outSetpp = setp;
- 	    if (flags & ICL_CRSET_FLAG_PERSISTENT) {
- 		ObtainWriteLock(&setp->lock, 198);
- 		setp->states |= ICL_SETF_PERSISTENT;
- 		ReleaseWriteLock(&setp->lock);
- 	    }
- 	    ReleaseWriteLock(&afs_icl_lock);
- 	    return 0;
- 	}
-     }
- 
-     /* determine initial state */
-     if (flags & ICL_CRSET_FLAG_DEFAULT_ON)
- 	states = ICL_SETF_ACTIVE;
-     else if (flags & ICL_CRSET_FLAG_DEFAULT_OFF)
- 	states = ICL_SETF_FREED;
-     if (flags & ICL_CRSET_FLAG_PERSISTENT)
- 	states |= ICL_SETF_PERSISTENT;
- 
-     setp = (struct afs_icl_set *)afs_osi_Alloc(sizeof(struct afs_icl_set));
-     memset((caddr_t) setp, 0, sizeof(*setp));
-     setp->refCount = 1;
-     if (states & ICL_SETF_FREED)
- 	states &= ~ICL_SETF_ACTIVE;	/* if freed, can't be active */
-     setp->states = states;
- 
-     LOCK_INIT(&setp->lock, "setp lock");
-     /* next lock is obtained in wrong order, hierarchy-wise, but
-      * it doesn't matter, since no one can find this lock yet, since
-      * the afs_icl_lock is still held, and thus the obtain can't block.
-      */
-     ObtainWriteLock(&setp->lock, 199);
-     setp->name = osi_AllocSmallSpace(strlen(name) + 1);
-     strcpy(setp->name, name);
-     setp->nevents = ICL_DEFAULTEVENTS;
-     setp->eventFlags = afs_osi_Alloc(ICL_DEFAULTEVENTS);
- #ifdef	KERNEL_HAVE_PIN
-     pin((char *)setp->eventFlags, ICL_DEFAULTEVENTS);
- #endif
-     for (i = 0; i < ICL_DEFAULTEVENTS; i++)
- 	setp->eventFlags[i] = 0xff;	/* default to enabled */
- 
-     /* update this global info under the afs_icl_lock */
-     setp->nextp = afs_icl_allSets;
-     afs_icl_allSets = setp;
-     ReleaseWriteLock(&afs_icl_lock);
- 
-     /* set's basic lock is still held, so we can finish init */
-     if (baseLogp) {
- 	setp->logs[0] = baseLogp;
- 	afs_icl_LogHold(baseLogp);
- 	if (!(setp->states & ICL_SETF_FREED))
- 	    afs_icl_LogUse(baseLogp);	/* log is actually being used */
-     }
-     if (fatalLogp) {
- 	setp->logs[1] = fatalLogp;
- 	afs_icl_LogHold(fatalLogp);
- 	if (!(setp->states & ICL_SETF_FREED))
- 	    afs_icl_LogUse(fatalLogp);	/* log is actually being used */
-     }
-     ReleaseWriteLock(&setp->lock);
- 
-     *outSetpp = setp;
-     return 0;
- }
- 
- /* function to change event enabling information for a particular set */
- int
- afs_icl_SetEnable(struct afs_icl_set *setp, afs_int32 eventID, int setValue)
- {
-     char *tp;
- 
-     ObtainWriteLock(&setp->lock, 200);
-     if (!ICL_EVENTOK(setp, eventID)) {
- 	ReleaseWriteLock(&setp->lock);
- 	return -1;
-     }
-     tp = &setp->eventFlags[ICL_EVENTBYTE(eventID)];
-     if (setValue)
- 	*tp |= ICL_EVENTMASK(eventID);
-     else
- 	*tp &= ~(ICL_EVENTMASK(eventID));
-     ReleaseWriteLock(&setp->lock);
-     return 0;
- }
- 
- /* return indication of whether a particular event ID is enabled
-  * for tracing.  If *getValuep is set to 0, the event is disabled,
-  * otherwise it is enabled.  All events start out enabled by default.
-  */
- int
- afs_icl_GetEnable(struct afs_icl_set *setp, afs_int32 eventID, int *getValuep)
- {
-     ObtainReadLock(&setp->lock);
-     if (!ICL_EVENTOK(setp, eventID)) {
- 	ReleaseWriteLock(&setp->lock);
- 	return -1;
-     }
-     if (setp->eventFlags[ICL_EVENTBYTE(eventID)] & ICL_EVENTMASK(eventID))
- 	*getValuep = 1;
-     else
- 	*getValuep = 0;
-     ReleaseReadLock(&setp->lock);
-     return 0;
- }
- 
- /* hold and release event sets */
- int
- afs_icl_SetHold(register struct afs_icl_set *setp)
- {
-     ObtainWriteLock(&afs_icl_lock, 201);
-     setp->refCount++;
-     ReleaseWriteLock(&afs_icl_lock);
-     return 0;
- }
- 
- /* free a set.  Called with afs_icl_lock locked */
- int
- afs_icl_ZapSet(register struct afs_icl_set *setp)
- {
-     register struct afs_icl_set **lpp, *tp;
-     int i;
-     register struct afs_icl_log *tlp;
- 
-     for (lpp = &afs_icl_allSets, tp = *lpp; tp; lpp = &tp->nextp, tp = *lpp) {
- 	if (tp == setp) {
- 	    /* found the dude we want to remove */
- 	    *lpp = setp->nextp;
- 	    osi_FreeSmallSpace(setp->name);
- #ifdef	KERNEL_HAVE_PIN
- 	    unpin((char *)setp->eventFlags, ICL_DEFAULTEVENTS);
- #endif
- 	    afs_osi_Free(setp->eventFlags, ICL_DEFAULTEVENTS);
- 	    for (i = 0; i < ICL_LOGSPERSET; i++) {
- 		if ((tlp = setp->logs[i]))
- 		    afs_icl_LogReleNL(tlp);
- 	    }
- 	    osi_FreeSmallSpace(setp);
- 	    break;		/* won't find it twice */
- 	}
-     }
-     return 0;
- }
- 
- /* do the release, watching for deleted entries */
- int
- afs_icl_SetRele(register struct afs_icl_set *setp)
- {
-     ObtainWriteLock(&afs_icl_lock, 202);
-     if (--setp->refCount == 0 && (setp->states & ICL_SETF_DELETED)) {
- 	afs_icl_ZapSet(setp);	/* destroys setp's lock! */
-     }
-     ReleaseWriteLock(&afs_icl_lock);
-     return 0;
- }
- 
- /* free a set entry, dropping its reference count */
- int
- afs_icl_SetFree(register struct afs_icl_set *setp)
- {
-     ObtainWriteLock(&setp->lock, 203);
-     setp->states |= ICL_SETF_DELETED;
-     ReleaseWriteLock(&setp->lock);
-     afs_icl_SetRele(setp);
-     return 0;
- }
- 
- /* find a set by name, returning it held */
- struct afs_icl_set *
- afs_icl_FindSet(char *name)
- {
-     register struct afs_icl_set *tp;
-     ObtainWriteLock(&afs_icl_lock, 204);
-     for (tp = afs_icl_allSets; tp; tp = tp->nextp) {
- 	if (strcmp(tp->name, name) == 0) {
- 	    /* this is the dude we want */
- 	    tp->refCount++;
- 	    break;
- 	}
-     }
-     ReleaseWriteLock(&afs_icl_lock);
-     return tp;
- }
- 
- /* zero out all the logs in the set */
- int
- afs_icl_ZeroSet(struct afs_icl_set *setp)
- {
-     register int i;
-     int code = 0;
-     int tcode;
-     struct afs_icl_log *logp;
- 
-     ObtainReadLock(&setp->lock);
-     for (i = 0; i < ICL_LOGSPERSET; i++) {
- 	logp = setp->logs[i];
- 	if (logp) {
- 	    afs_icl_LogHold(logp);
- 	    tcode = afs_icl_ZeroLog(logp);
- 	    if (tcode != 0)
- 		code = tcode;	/* save the last bad one */
- 	    afs_icl_LogRele(logp);
- 	}
-     }
-     ReleaseReadLock(&setp->lock);
-     return code;
- }
- 
- int
- afs_icl_EnumerateSets(int (*aproc)
- 		        (char *name, char *arock, struct afs_icl_log * tp),
- 		      char *arock)
- {
-     register struct afs_icl_set *tp, *np;
-     register afs_int32 code;
- 
-     code = 0;
-     ObtainWriteLock(&afs_icl_lock, 205);
-     for (tp = afs_icl_allSets; tp; tp = np) {
- 	tp->refCount++;		/* hold this guy */
- 	ReleaseWriteLock(&afs_icl_lock);
- 	code = (*aproc) (tp->name, arock, (struct afs_icl_log *)tp);
- 	ObtainWriteLock(&afs_icl_lock, 206);
- 	np = tp->nextp;		/* tp may disappear next, but not np */
- 	if (--tp->refCount == 0 && (tp->states & ICL_SETF_DELETED))
- 	    afs_icl_ZapSet(tp);
- 	if (code)
- 	    break;
-     }
-     ReleaseWriteLock(&afs_icl_lock);
-     return code;
- }
- 
- int
- afs_icl_AddLogToSet(struct afs_icl_set *setp, struct afs_icl_log *newlogp)
- {
-     register int i;
-     int code = -1;
- 
-     ObtainWriteLock(&setp->lock, 207);
-     for (i = 0; i < ICL_LOGSPERSET; i++) {
- 	if (!setp->logs[i]) {
- 	    setp->logs[i] = newlogp;
- 	    code = i;
- 	    afs_icl_LogHold(newlogp);
- 	    if (!(setp->states & ICL_SETF_FREED)) {
- 		/* bump up the number of sets using the log */
- 		afs_icl_LogUse(newlogp);
- 	    }
- 	    break;
- 	}
-     }
-     ReleaseWriteLock(&setp->lock);
-     return code;
- }
- 
- int
- afs_icl_SetSetStat(struct afs_icl_set *setp, int op)
- {
-     int i;
-     afs_int32 code;
-     struct afs_icl_log *logp;
- 
-     ObtainWriteLock(&setp->lock, 208);
-     switch (op) {
-     case ICL_OP_SS_ACTIVATE:	/* activate a log */
- 	/*
- 	 * If we are not already active, see if we have released
- 	 * our demand that the log be allocated (FREED set).  If
- 	 * we have, reassert our desire.
- 	 */
- 	if (!(setp->states & ICL_SETF_ACTIVE)) {
- 	    if (setp->states & ICL_SETF_FREED) {
- 		/* have to reassert desire for logs */
- 		for (i = 0; i < ICL_LOGSPERSET; i++) {
- 		    logp = setp->logs[i];
- 		    if (logp) {
- 			afs_icl_LogHold(logp);
- 			afs_icl_LogUse(logp);
- 			afs_icl_LogRele(logp);
- 		    }
- 		}
- 		setp->states &= ~ICL_SETF_FREED;
- 	    }
- 	    setp->states |= ICL_SETF_ACTIVE;
- 	}
- 	code = 0;
- 	break;
- 
-     case ICL_OP_SS_DEACTIVATE:	/* deactivate a log */
- 	/* this doesn't require anything beyond clearing the ACTIVE flag */
- 	setp->states &= ~ICL_SETF_ACTIVE;
- 	code = 0;
- 	break;
- 
-     case ICL_OP_SS_FREE:	/* deassert design for log */
- 	/* 
- 	 * if we are already in this state, do nothing; otherwise
- 	 * deassert desire for log
- 	 */
- 	if (setp->states & ICL_SETF_ACTIVE)
- 	    code = EINVAL;
- 	else {
- 	    if (!(setp->states & ICL_SETF_FREED)) {
- 		for (i = 0; i < ICL_LOGSPERSET; i++) {
- 		    logp = setp->logs[i];
- 		    if (logp) {
- 			afs_icl_LogHold(logp);
- 			afs_icl_LogFreeUse(logp);
- 			afs_icl_LogRele(logp);
- 		    }
- 		}
- 		setp->states |= ICL_SETF_FREED;
- 	    }
- 	    code = 0;
- 	}
- 	break;
- 
-     default:
- 	code = EINVAL;
-     }
-     ReleaseWriteLock(&setp->lock);
-     return code;
- }
--- 1217,1219 ----
Index: openafs/src/afs/afs_cell.c
diff -c openafs/src/afs/afs_cell.c:1.34 openafs/src/afs/afs_cell.c:1.34.4.3
*** openafs/src/afs/afs_cell.c:1.34	Sat Oct 15 10:37:10 2005
--- openafs/src/afs/afs_cell.c	Mon Jul 31 17:27:38 2006
***************
*** 14,26 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_cell.c,v 1.34 2005/10/15 14:37:10 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* afs statistics */
  #include "afs/afs_osi.h"
  
  /* Local variables. */
  afs_rwlock_t afs_xcell;		/* Export for cmdebug peeking at locks */
--- 14,27 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_cell.c,v 1.34.4.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* afs statistics */
  #include "afs/afs_osi.h"
+ #include "afs/afs_md5.h"
  
  /* Local variables. */
  afs_rwlock_t afs_xcell;		/* Export for cmdebug peeking at locks */
***************
*** 571,576 ****
--- 572,588 ----
  }
  
  static void *
+ afs_choose_cell_by_handle(struct cell *cell, void *arg)
+ {
+     if (!arg) {
+ 	/* Safety net */
+ 	return cell;
+     } else {
+ 	return memcmp(cell->cellHandle, (char *)arg, 16) ? NULL : cell;
+     }
+ }
+ 
+ static void *
  afs_choose_cell_by_num(struct cell *cell, void *arg)
  {
      return (cell->cellNum == *((afs_int32 *) arg)) ? cell : NULL;
***************
*** 657,662 ****
--- 669,685 ----
  }
  
  struct cell *
+ afs_GetCellByHandle(void *handle, afs_int32 locktype)
+ {
+     struct cell *tc;
+ 
+     tc = afs_TraverseCells(&afs_choose_cell_by_handle, handle);
+     if (tc)
+ 	afs_UpdateCellLRU(tc);
+     return tc;
+ }
+ 
+ struct cell *
  afs_GetPrimaryCell(afs_int32 locktype)
  {
      return afs_GetCellByName(afs_thiscell, locktype);
***************
*** 725,730 ****
--- 748,754 ----
  	tc->cellName = afs_strdup(acellName);
  	tc->fsport = AFS_FSPORT;
  	tc->vlport = AFS_VLPORT;
+ 	AFS_MD5_String(tc->cellHandle, tc->cellName, strlen(tc->cellName));
  	RWLOCK_INIT(&tc->lock, "cell lock");
  	newc = 1;
  	if (afs_thiscell && !strcmp(acellName, afs_thiscell))
Index: openafs/src/afs/afs_dcache.c
diff -c openafs/src/afs/afs_dcache.c:1.64 openafs/src/afs/afs_dcache.c:1.64.4.2
*** openafs/src/afs/afs_dcache.c:1.64	Thu Oct 13 11:12:07 2005
--- openafs/src/afs/afs_dcache.c	Mon Jul 31 17:27:38 2006
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_dcache.c,v 1.64 2005/10/13 15:12:07 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.2 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 2228,2233 ****
--- 2228,2277 ----
  
  	    tdc->validPos = Position + size;
  	    afs_CFileTruncate(file, size);	/* prune it */
+         } else if (afs_IsDynrootMount(avc)) {
+ 	    char *dynrootDir;
+ 	    int dynrootLen;
+ 
+ 	    afs_GetDynrootMount(&dynrootDir, &dynrootLen, &tsmall->OutStatus);
+ 
+ 	    dynrootDir += Position;
+ 	    dynrootLen -= Position;
+ 	    if (size > dynrootLen)
+ 		size = dynrootLen;
+ 	    if (size < 0)
+ 		size = 0;
+ 	    code = afs_CFileWrite(file, 0, dynrootDir, size);
+ 	    afs_PutDynroot();
+ 
+ 	    if (code == size)
+ 		code = 0;
+ 	    else
+ 		code = -1;
+ 
+ 	    tdc->validPos = Position + size;
+ 	    afs_CFileTruncate(file, size);	/* prune it */
+         } else if (afs_IsDynrootMount(avc)) {
+ 	    char *dynrootDir;
+ 	    int dynrootLen;
+ 
+ 	    afs_GetDynrootMount(&dynrootDir, &dynrootLen, &tsmall->OutStatus);
+ 
+ 	    dynrootDir += Position;
+ 	    dynrootLen -= Position;
+ 	    if (size > dynrootLen)
+ 		size = dynrootLen;
+ 	    if (size < 0)
+ 		size = 0;
+ 	    code = afs_CFileWrite(file, 0, dynrootDir, size);
+ 	    afs_PutDynroot();
+ 
+ 	    if (code == size)
+ 		code = 0;
+ 	    else
+ 		code = -1;
+ 
+ 	    tdc->validPos = Position + size;
+ 	    afs_CFileTruncate(file, size);	/* prune it */
  	} else
  	    /*
  	     * Not a dynamic vnode:  do the real fetch.
Index: openafs/src/afs/afs_dynroot.c
diff -c openafs/src/afs/afs_dynroot.c:1.12 openafs/src/afs/afs_dynroot.c:1.12.6.3
*** openafs/src/afs/afs_dynroot.c:1.12	Sun Mar 20 15:08:06 2005
--- openafs/src/afs/afs_dynroot.c	Mon Jul 31 17:27:38 2006
***************
*** 12,19 ****
--- 12,24 ----
   *
   * Implements:
   * afs_IsDynrootFid
+  * afs_IsDynrootMountFid
+  * afs_IsDynrootAnyFid
   * afs_GetDynrootFid
+  * afs_GetDynrootMountFid
   * afs_IsDynroot
+  * afs_IsDynrootMount
+  * afs_IsDynrootAny
   * afs_DynrootInvalidate
   * afs_GetDynroot
   * afs_PutDynroot
***************
*** 37,69 ****
  
  #include "afs/prs_fs.h"
  #include "afs/dir.h"
  
  #define AFS_DYNROOT_CELLNAME	"dynroot"
  #define AFS_DYNROOT_VOLUME	1
  #define AFS_DYNROOT_VNODE	1
  #define AFS_DYNROOT_UNIQUE	1
  
! /*
!  * Vnode numbers in dynroot are composed of a type field (upper 8 bits)
!  * and a type-specific identifier in the lower 24 bits.
!  */
! #define VN_TYPE_CELL		0x01	/* Corresponds to a struct cell */
! #define VN_TYPE_ALIAS		0x02	/* Corresponds to a struct cell_alias */
! #define VN_TYPE_SYMLINK		0x03	/* User-created symlink in /afs */
! 
! #define VNUM_TO_VNTYPE(vnum)	((vnum) >> 24)
! #define VNUM_TO_VNID(vnum)	((vnum) & 0x00ffffff)
! #define VNUM_FROM_TYPEID(type, id) \
! 				((type) << 24 | (id))
! #define VNUM_TO_CIDX(vnum)	(VNUM_TO_VNID(vnum) >> 2)
! #define VNUM_TO_RW(vnum)	(VNUM_TO_VNID(vnum) >> 1 & 1)
! #define VNUM_FROM_CIDX_RW(cidx, rw) \
! 				VNUM_FROM_TYPEID(VN_TYPE_CELL, \
! 						 ((cidx) << 2 | (rw) << 1))
! #define VNUM_FROM_CAIDX_RW(caidx, rw) \
! 				VNUM_FROM_TYPEID(VN_TYPE_ALIAS, \
! 						 ((caidx) << 2 | (rw) << 1))
! 
  static int afs_dynrootEnable = 0;
  static int afs_dynrootCell = 0;
  
--- 42,56 ----
  
  #include "afs/prs_fs.h"
  #include "afs/dir.h"
+ #include "afs/afs_dynroot.h"
  
  #define AFS_DYNROOT_CELLNAME	"dynroot"
  #define AFS_DYNROOT_VOLUME	1
  #define AFS_DYNROOT_VNODE	1
+ #define AFS_DYNROOT_MOUNT_VNODE 3
  #define AFS_DYNROOT_UNIQUE	1
  
! static int afs_dynrootInit = 0;
  static int afs_dynrootEnable = 0;
  static int afs_dynrootCell = 0;
  
***************
*** 71,76 ****
--- 58,65 ----
  /* Start of variables protected by afs_dynrootDirLock */
  static char *afs_dynrootDir = NULL;
  static int afs_dynrootDirLen;
+ static char *afs_dynrootMountDir = NULL;
+ static int afs_dynrootMountDirLen;
  static int afs_dynrootDirLinkcnt;
  static int afs_dynrootDirVersion;
  static int afs_dynrootVersion = 1;
***************
*** 97,103 ****
  static int
  afs_dynrootCellInit()
  {
!     if (afs_dynrootEnable && !afs_dynrootCell) {
  	afs_int32 cellHosts[MAXCELLHOSTS];
  	struct cell *tc;
  	int code;
--- 86,92 ----
  static int
  afs_dynrootCellInit()
  {
!     if (!afs_dynrootCell) {
  	afs_int32 cellHosts[MAXCELLHOSTS];
  	struct cell *tc;
  	int code;
***************
*** 121,135 ****
  /*
   * Returns non-zero iff fid corresponds to the top of the dynroot volume.
   */
  int
  afs_IsDynrootFid(struct VenusFid *fid)
  {
!     return (afs_dynrootEnable && fid->Cell == afs_dynrootCell
  	    && fid->Fid.Volume == AFS_DYNROOT_VOLUME
! 	    && fid->Fid.Vnode == AFS_DYNROOT_VNODE
  	    && fid->Fid.Unique == AFS_DYNROOT_UNIQUE);
  }
  
  /*
   * Obtain the magic dynroot volume Fid.
   */
--- 110,146 ----
  /*
   * Returns non-zero iff fid corresponds to the top of the dynroot volume.
   */
+ static int
+ _afs_IsDynrootFid(struct VenusFid *fid)
+ {
+     return (fid->Cell == afs_dynrootCell
+ 	    && fid->Fid.Volume == AFS_DYNROOT_VOLUME
+ 	    && fid->Fid.Vnode == AFS_DYNROOT_VNODE
+ 	    && fid->Fid.Unique == AFS_DYNROOT_UNIQUE);
+ }
+ 
  int
  afs_IsDynrootFid(struct VenusFid *fid)
  {
!     return (afs_dynrootEnable && _afs_IsDynrootFid(fid));
! }
! 
! int
! afs_IsDynrootMountFid(struct VenusFid *fid)
! {
!     return (fid->Cell == afs_dynrootCell
  	    && fid->Fid.Volume == AFS_DYNROOT_VOLUME
! 	    && fid->Fid.Vnode == AFS_DYNROOT_MOUNT_VNODE
  	    && fid->Fid.Unique == AFS_DYNROOT_UNIQUE);
  }
  
+ int
+ afs_IsDynrootAnyFid(struct VenusFid *fid)
+ {
+     return (fid->Cell == afs_dynrootCell
+ 	    && fid->Fid.Volume == AFS_DYNROOT_VOLUME);
+ }
+ 
  /*
   * Obtain the magic dynroot volume Fid.
   */
***************
*** 142,147 ****
--- 153,167 ----
      fid->Fid.Unique = AFS_DYNROOT_UNIQUE;
  }
  
+ void
+ afs_GetDynrootMountFid(struct VenusFid *fid)
+ {
+     fid->Cell = afs_dynrootCell;
+     fid->Fid.Volume = AFS_DYNROOT_VOLUME;
+     fid->Fid.Vnode = AFS_DYNROOT_MOUNT_VNODE;
+     fid->Fid.Unique = AFS_DYNROOT_UNIQUE;
+ }
+ 
  /*
   * Returns non-zero iff avc is a pointer to the dynroot /afs vnode.
   */
***************
*** 151,156 ****
--- 171,188 ----
      return afs_IsDynrootFid(&avc->fid);
  }
  
+ int
+ afs_IsDynrootMount(struct vcache *avc)
+ {
+     return afs_IsDynrootMountFid(&avc->fid);
+ }
+ 
+ int
+ afs_IsDynrootAny(struct vcache *avc)
+ {
+     return afs_IsDynrootAnyFid(&avc->fid);
+ }
+ 
  /*
   * Given the current page and chunk pointers in a directory, adjust them
   * appropriately so that the given file name can be appended.  Used for
***************
*** 302,307 ****
--- 334,342 ----
      /* Reserve space for "." and ".." */
      curChunk += 2;
  
+     /* Reserve space for the dynamic-mount directory */
+     afs_dynroot_computeDirEnt(AFS_DYNROOT_MOUNTNAME, &curPage, &curChunk);
+ 
      for (cellidx = 0;; cellidx++) {
  	c = afs_GetCellByIndex(cellidx, READ_LOCK);
  	if (!c)
***************
*** 371,380 ****
      for (i = 0; i < NHASHENT; i++)
  	dirHeader->hashTable[i] = 0;
  
!     /* Install "." and ".." */
      afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, ".", 1);
      afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, "..", 1);
!     linkCount += 2;
  
      for (cellidx = 0; cellidx < maxcellidx; cellidx++) {
  	c = afs_GetCellByIndex(cellidx, READ_LOCK);
--- 406,417 ----
      for (i = 0; i < NHASHENT; i++)
  	dirHeader->hashTable[i] = 0;
  
!     /* Install ".", "..", and the dynamic mount directory */
      afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, ".", 1);
      afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, "..", 1);
!     afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk,
! 			  AFS_DYNROOT_MOUNTNAME, AFS_DYNROOT_MOUNT_VNODE);
!     linkCount += 3;
  
      for (cellidx = 0; cellidx < maxcellidx; cellidx++) {
  	c = afs_GetCellByIndex(cellidx, READ_LOCK);
***************
*** 433,438 ****
--- 470,518 ----
      ReleaseWriteLock(&afs_dynrootDirLock);
  }
  
+ static void
+ afs_RebuildDynrootMount(void)
+ {
+     int i;
+     int curChunk, curPage;
+     char *newDir;
+     struct DirHeader *dirHeader;
+ 
+     newDir = afs_osi_Alloc(AFS_PAGESIZE);
+ 
+     /*
+      * Now actually construct the directory.
+      */
+     curChunk = 13;
+     curPage = 0;
+     dirHeader = (struct DirHeader *)newDir;
+ 
+     dirHeader->header.pgcount = 0;
+     dirHeader->header.tag = htons(1234);
+     dirHeader->header.freecount = 0;
+ 
+     dirHeader->header.freebitmap[0] = 0xff;
+     dirHeader->header.freebitmap[1] = 0x1f;
+     for (i = 2; i < EPP / 8; i++)
+ 	dirHeader->header.freebitmap[i] = 0;
+     dirHeader->alloMap[0] = EPP - DHE - 1;
+     for (i = 1; i < MAXPAGES; i++)
+ 	dirHeader->alloMap[i] = EPP;
+     for (i = 0; i < NHASHENT; i++)
+ 	dirHeader->hashTable[i] = 0;
+ 
+     /* Install "." and ".." */
+     afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, ".", 1);
+     afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, "..", 1);
+ 
+     ObtainWriteLock(&afs_dynrootDirLock, 549);
+     if (afs_dynrootMountDir)
+ 	afs_osi_Free(afs_dynrootMountDir, afs_dynrootMountDirLen);
+     afs_dynrootMountDir = newDir;
+     afs_dynrootMountDirLen = AFS_PAGESIZE;
+     ReleaseWriteLock(&afs_dynrootDirLock);
+ }
+ 
  /*
   * Returns a pointer to the base of the dynroot directory in memory,
   * length thereof, and a FetchStatus.
***************
*** 468,473 ****
--- 548,584 ----
      }
  }
  
+ void
+ afs_GetDynrootMount(char **dynrootDir, int *dynrootLen,
+ 		    struct AFSFetchStatus *status)
+ {
+     ObtainReadLock(&afs_dynrootDirLock);
+     if (!afs_dynrootMountDir) {
+ 	ReleaseReadLock(&afs_dynrootDirLock);
+ 	afs_RebuildDynrootMount();
+ 	ObtainReadLock(&afs_dynrootDirLock);
+     }
+ 
+     if (dynrootDir)
+ 	*dynrootDir = afs_dynrootMountDir;
+     if (dynrootLen)
+ 	*dynrootLen = afs_dynrootMountDirLen;
+ 
+     if (status) {
+ 	memset(status, 0, sizeof(struct AFSFetchStatus));
+ 	status->FileType = Directory;
+ 	status->LinkCount = 1;
+ 	status->Length = afs_dynrootMountDirLen;
+ 	status->DataVersion = 1;
+ 	status->CallerAccess = PRSFS_LOOKUP | PRSFS_READ;
+ 	status->AnonymousAccess = PRSFS_LOOKUP | PRSFS_READ;
+ 	status->UnixModeBits = 0755;
+ 	status->ParentVnode = 1;
+ 	status->ParentUnique = 1;
+ 	status->dataVersionHigh = 0;
+     }
+ }
+ 
  /*
   * Puts back the dynroot read lock.
   */
***************
*** 485,499 ****
  int
  afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status)
  {
!     if (!afs_dynrootEnable)
! 	return 0;
  
!     if (afs_IsDynroot(avc)) {
  	afs_GetDynroot(0, 0, status);
  	afs_PutDynroot();
  	return 1;
      }
  
      /*
       * Check if this is an entry under /afs, e.g. /afs/cellname.
       */
--- 596,617 ----
  int
  afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status)
  {
!     char *bp, tbuf[CVBS];
  
!     if (_afs_IsDynrootFid(&avc->fid)) {
! 	if (!afs_dynrootEnable)
! 	    return 0;
  	afs_GetDynroot(0, 0, status);
  	afs_PutDynroot();
  	return 1;
      }
  
+     if (afs_IsDynrootMount(avc)) {
+ 	afs_GetDynrootMount(0, 0, status);
+ 	afs_PutDynroot();
+ 	return 1;
+     }
+ 
      /*
       * Check if this is an entry under /afs, e.g. /afs/cellname.
       */
***************
*** 540,546 ****
  	}
  
  	if (VNUM_TO_VNTYPE(avc->fid.Fid.Vnode) != VN_TYPE_CELL
! 	    && VNUM_TO_VNTYPE(avc->fid.Fid.Vnode) != VN_TYPE_ALIAS) {
  	    afs_warn("dynroot vnode inconsistency, unknown VNTYPE %d\n",
  		     VNUM_TO_VNTYPE(avc->fid.Fid.Vnode));
  	    return 0;
--- 658,665 ----
  	}
  
  	if (VNUM_TO_VNTYPE(avc->fid.Fid.Vnode) != VN_TYPE_CELL
! 	    && VNUM_TO_VNTYPE(avc->fid.Fid.Vnode) != VN_TYPE_ALIAS
! 	    && VNUM_TO_VNTYPE(avc->fid.Fid.Vnode) != VN_TYPE_MOUNT) {
  	    afs_warn("dynroot vnode inconsistency, unknown VNTYPE %d\n",
  		     VNUM_TO_VNTYPE(avc->fid.Fid.Vnode));
  	    return 0;
***************
*** 579,584 ****
--- 698,728 ----
  
  	    status->UnixModeBits = 0755;
  	    afs_PutCellAlias(ca);
+ 
+ 	} else if (VNUM_TO_VNTYPE(avc->fid.Fid.Vnode) == VN_TYPE_MOUNT) {
+ 	    c = afs_GetCellByIndex(cellidx, READ_LOCK);
+ 	    if (!c) {
+ 		afs_warn("dynroot vnode inconsistency, can't find cell %d\n",
+ 			 cellidx);
+ 		return 0;
+ 	    }
+ 
+ 	    /*
+ 	     * linkData needs to contain "%cell:volumeid"
+ 	     */
+ 	    namelen = strlen(c->cellName);
+ 	    bp = afs_cv2string(&tbuf[CVBS], avc->fid.Fid.Unique);
+ 	    linklen = 2 + namelen + strlen(bp);
+ 	    avc->linkData = afs_osi_Alloc(linklen + 1);
+ 	    strcpy(avc->linkData, "%");
+ 	    afs_strcat(avc->linkData, c->cellName);
+ 	    afs_strcat(avc->linkData, ":");
+ 	    afs_strcat(avc->linkData, bp);
+ 
+ 	    status->UnixModeBits = 0644;
+ 	    status->ParentVnode = AFS_DYNROOT_MOUNT_VNODE;
+ 	    afs_PutCell(c, READ_LOCK);
+ 
  	} else {
  	    c = afs_GetCellByIndex(cellidx, READ_LOCK);
  	    if (!c) {
***************
*** 609,626 ****
  }
  
  /*
!  * Enable or disable dynroot.  Returns 0 if successful.
   */
  int
! afs_SetDynrootEnable(int enable)
  {
      RWLOCK_INIT(&afs_dynrootDirLock, "afs_dynrootDirLock");
      RWLOCK_INIT(&afs_dynSymlinkLock, "afs_dynSymlinkLock");
!     afs_dynrootEnable = enable;
      return afs_dynrootCellInit();
  }
  
  /*
   * Check if dynroot support is enabled.
   */
  int
--- 753,782 ----
  }
  
  /*
!  * Make sure dynroot initialization has been done.
   */
  int
! afs_InitDynroot(void)
  {
+     if (afs_dynrootInit)
+ 	return 0;
      RWLOCK_INIT(&afs_dynrootDirLock, "afs_dynrootDirLock");
      RWLOCK_INIT(&afs_dynSymlinkLock, "afs_dynSymlinkLock");
!     afs_dynrootInit = 0;
      return afs_dynrootCellInit();
  }
  
  /*
+  * Enable or disable dynroot.  Returns 0 if successful.
+  */
+ int
+ afs_SetDynrootEnable(int enable)
+ {
+     afs_dynrootEnable = enable;
+     return afs_InitDynroot();
+ }
+ 
+ /*
   * Check if dynroot support is enabled.
   */
  int
Index: openafs/src/afs/afs_dynroot.h
diff -c /dev/null openafs/src/afs/afs_dynroot.h:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_dynroot.h	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,32 ----
+ /*
+  * 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
+  */
+ 
+ /*
+  * Vnode numbers in dynroot are composed of a type field (upper 8 bits)
+  * and a type-specific identifier in the lower 24 bits.
+  */
+ #define VN_TYPE_CELL		0x01	/* Corresponds to a struct cell */
+ #define VN_TYPE_ALIAS		0x02	/* Corresponds to a struct cell_alias */
+ #define VN_TYPE_SYMLINK		0x03	/* User-created symlink in /afs */
+ #define VN_TYPE_MOUNT  		0x04	/* Mount point by volume ID */
+ 
+ #define VNUM_TO_VNTYPE(vnum)	((vnum) >> 24)
+ #define VNUM_TO_VNID(vnum)	((vnum) & 0x00ffffff)
+ #define VNUM_FROM_TYPEID(type, id) \
+ 				((type) << 24 | (id))
+ #define VNUM_TO_CIDX(vnum)	(VNUM_TO_VNID(vnum) >> 2)
+ #define VNUM_TO_RW(vnum)	(VNUM_TO_VNID(vnum) >> 1 & 1)
+ #define VNUM_FROM_CIDX_RW(cidx, rw) \
+ 				VNUM_FROM_TYPEID(VN_TYPE_CELL, \
+ 						 ((cidx) << 2 | (rw) << 1))
+ #define VNUM_FROM_CAIDX_RW(caidx, rw) \
+ 				VNUM_FROM_TYPEID(VN_TYPE_ALIAS, \
+ 						 ((caidx) << 2 | (rw) << 1))
+ 
+ #define AFS_DYNROOT_MOUNTNAME	".:mount"
Index: openafs/src/afs/afs_error.c
diff -c /dev/null openafs/src/afs/afs_error.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_error.c	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,279 ----
+ /*
+  * 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
+  */
+ 
+ /*
+  * Implements:
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_error.c,v 1.1.2.2 2006/07/31 21:27:38 shadow Exp $");
+ 
+ #include "afs/stds.h"
+ #include "afs/sysincludes.h"	/* Standard vendor system headers */
+ 
+ #ifndef UKERNEL
+ #if !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV)
+ #include <net/if.h>
+ #include <netinet/in.h>
+ #endif
+ 
+ #ifdef AFS_SGI62_ENV
+ #include "h/hashing.h"
+ #endif
+ #if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV) && !defined(AFS_DARWIN60_ENV)
+ #include <netinet/in_var.h>
+ #endif
+ #endif /* !UKERNEL */
+ 
+ #include "afsincludes.h"	/* Afs-based standard headers */
+ #include "afs/afs_stats.h"	/* afs statistics */
+ #include "afs/afs_util.h"
+ #include "afs/unified_afs.h"
+ 
+ #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
+ 
+ 
+ /* shouldn't do it this way, but for now will do */
+ #ifndef ERROR_TABLE_BASE_U
+ #define ERROR_TABLE_BASE_U	(5376L)
+ #endif /* ubik error base define */
+ 
+ /* shouldn't do it this way, but for now will do */
+ #ifndef ERROR_TABLE_BASE_uae
+ #define ERROR_TABLE_BASE_uae	(49733376L)
+ #endif /* unified afs error base define */
+ 
+ /* same hack for vlserver error base as for ubik error base */
+ #ifndef ERROR_TABLE_BASE_VL
+ #define ERROR_TABLE_BASE_VL	(363520L)
+ #define VL_NOENT		(363524L)
+ #endif /* vlserver error base define */
+ 
+ 
+ static int et2sys[512];
+ 
+ void
+ init_et_to_sys_error(void)
+ {
+     memset(&et2sys, 0, sizeof(et2sys));
+     et2sys[(UAEPERM - ERROR_TABLE_BASE_uae)] = EPERM;
+     et2sys[(UAENOENT - ERROR_TABLE_BASE_uae)] = ENOENT;
+     et2sys[(UAESRCH - ERROR_TABLE_BASE_uae)] = ESRCH;
+     et2sys[(UAEINTR - ERROR_TABLE_BASE_uae)] = EINTR;
+     et2sys[(UAEIO - ERROR_TABLE_BASE_uae)] = EIO;
+     et2sys[(UAENXIO - ERROR_TABLE_BASE_uae)] = ENXIO;
+     et2sys[(UAE2BIG - ERROR_TABLE_BASE_uae)] = E2BIG;
+     et2sys[(UAENOEXEC - ERROR_TABLE_BASE_uae)] = ENOEXEC;
+     et2sys[(UAEBADF - ERROR_TABLE_BASE_uae)] = EBADF;
+     et2sys[(UAECHILD - ERROR_TABLE_BASE_uae)] = ECHILD;
+     et2sys[(UAEAGAIN - ERROR_TABLE_BASE_uae)] = EAGAIN;
+     et2sys[(UAENOMEM - ERROR_TABLE_BASE_uae)] = ENOMEM;
+     et2sys[(UAEACCES - ERROR_TABLE_BASE_uae)] = EACCES;
+     et2sys[(UAEFAULT - ERROR_TABLE_BASE_uae)] = EFAULT;
+     et2sys[(UAENOTBLK - ERROR_TABLE_BASE_uae)] = ENOTBLK;
+     et2sys[(UAEBUSY - ERROR_TABLE_BASE_uae)] = EBUSY;
+     et2sys[(UAEEXIST - ERROR_TABLE_BASE_uae)] = EEXIST;
+     et2sys[(UAEXDEV - ERROR_TABLE_BASE_uae)] = EXDEV;
+     et2sys[(UAENODEV - ERROR_TABLE_BASE_uae)] = ENODEV;
+     et2sys[(UAENOTDIR - ERROR_TABLE_BASE_uae)] = ENOTDIR;
+     et2sys[(UAEISDIR - ERROR_TABLE_BASE_uae)] = EISDIR;
+     et2sys[(UAEINVAL - ERROR_TABLE_BASE_uae)] = EINVAL;
+     et2sys[(UAENFILE - ERROR_TABLE_BASE_uae)] = ENFILE;
+     et2sys[(UAEMFILE - ERROR_TABLE_BASE_uae)] = EMFILE;
+     et2sys[(UAENOTTY - ERROR_TABLE_BASE_uae)] = ENOTTY;
+     et2sys[(UAETXTBSY - ERROR_TABLE_BASE_uae)] = ETXTBSY;
+     et2sys[(UAEFBIG - ERROR_TABLE_BASE_uae)] = EFBIG;
+     et2sys[(UAENOSPC - ERROR_TABLE_BASE_uae)] = ENOSPC;
+     et2sys[(UAESPIPE - ERROR_TABLE_BASE_uae)] = ESPIPE;
+     et2sys[(UAEROFS - ERROR_TABLE_BASE_uae)] = EROFS;
+     et2sys[(UAEMLINK - ERROR_TABLE_BASE_uae)] = EMLINK;
+     et2sys[(UAEPIPE - ERROR_TABLE_BASE_uae)] = EPIPE;
+     et2sys[(UAEDOM - ERROR_TABLE_BASE_uae)] = EDOM;
+     et2sys[(UAERANGE - ERROR_TABLE_BASE_uae)] = ERANGE;
+     et2sys[(UAEDEADLK - ERROR_TABLE_BASE_uae)] = EDEADLK;
+     et2sys[(UAENAMETOOLONG - ERROR_TABLE_BASE_uae)] = ENAMETOOLONG;
+     et2sys[(UAENOLCK - ERROR_TABLE_BASE_uae)] = ENOLCK;
+     et2sys[(UAENOSYS - ERROR_TABLE_BASE_uae)] = ENOSYS;
+     et2sys[(UAENOTEMPTY - ERROR_TABLE_BASE_uae)] = ENOTEMPTY;
+     et2sys[(UAELOOP - ERROR_TABLE_BASE_uae)] = ELOOP;
+     et2sys[(UAEWOULDBLOCK - ERROR_TABLE_BASE_uae)] = EWOULDBLOCK;
+     et2sys[(UAENOMSG - ERROR_TABLE_BASE_uae)] = ENOMSG;
+     et2sys[(UAEIDRM - ERROR_TABLE_BASE_uae)] = EIDRM;
+     et2sys[(UAECHRNG - ERROR_TABLE_BASE_uae)] = ECHRNG;
+     et2sys[(UAEL2NSYNC - ERROR_TABLE_BASE_uae)] = EL2NSYNC;
+     et2sys[(UAEL3HLT - ERROR_TABLE_BASE_uae)] = EL3HLT;
+     et2sys[(UAEL3RST - ERROR_TABLE_BASE_uae)] = EL3RST;
+     et2sys[(UAELNRNG - ERROR_TABLE_BASE_uae)] = ELNRNG;
+     et2sys[(UAEUNATCH - ERROR_TABLE_BASE_uae)] = EUNATCH;
+     et2sys[(UAENOCSI - ERROR_TABLE_BASE_uae)] = ENOCSI;
+     et2sys[(UAEL2HLT - ERROR_TABLE_BASE_uae)] = EL2HLT;
+     et2sys[(UAEBADE - ERROR_TABLE_BASE_uae)] = EBADE;
+     et2sys[(UAEBADR - ERROR_TABLE_BASE_uae)] = EBADR;
+     et2sys[(UAEXFULL - ERROR_TABLE_BASE_uae)] = EXFULL;
+     et2sys[(UAENOANO - ERROR_TABLE_BASE_uae)] = ENOANO;
+     et2sys[(UAEBADRQC - ERROR_TABLE_BASE_uae)] = EBADRQC;
+     et2sys[(UAEBADSLT - ERROR_TABLE_BASE_uae)] = EBADSLT;
+     et2sys[(UAEBFONT - ERROR_TABLE_BASE_uae)] = EBFONT;
+     et2sys[(UAENOSTR - ERROR_TABLE_BASE_uae)] = ENOSTR;
+     et2sys[(UAENODATA - ERROR_TABLE_BASE_uae)] = ENODATA;
+     et2sys[(UAETIME - ERROR_TABLE_BASE_uae)] = ETIME;
+     et2sys[(UAENOSR - ERROR_TABLE_BASE_uae)] = ENOSR;
+     et2sys[(UAENONET - ERROR_TABLE_BASE_uae)] = ENONET;
+     et2sys[(UAENOPKG - ERROR_TABLE_BASE_uae)] = ENOPKG;
+     et2sys[(UAEREMOTE - ERROR_TABLE_BASE_uae)] = EREMOTE;
+     et2sys[(UAENOLINK - ERROR_TABLE_BASE_uae)] = ENOLINK;
+     et2sys[(UAEADV - ERROR_TABLE_BASE_uae)] = EADV;
+     et2sys[(UAESRMNT - ERROR_TABLE_BASE_uae)] = ESRMNT;
+     et2sys[(UAECOMM - ERROR_TABLE_BASE_uae)] = ECOMM;
+     et2sys[(UAEPROTO - ERROR_TABLE_BASE_uae)] = EPROTO;
+     et2sys[(UAEMULTIHOP - ERROR_TABLE_BASE_uae)] = EMULTIHOP;
+     et2sys[(UAEDOTDOT - ERROR_TABLE_BASE_uae)] = EDOTDOT;
+     et2sys[(UAEBADMSG - ERROR_TABLE_BASE_uae)] = EBADMSG;
+     et2sys[(UAEOVERFLOW - ERROR_TABLE_BASE_uae)] = EOVERFLOW;
+     et2sys[(UAENOTUNIQ - ERROR_TABLE_BASE_uae)] = ENOTUNIQ;
+     et2sys[(UAEBADFD - ERROR_TABLE_BASE_uae)] = EBADFD;
+     et2sys[(UAEREMCHG - ERROR_TABLE_BASE_uae)] = EREMCHG;
+     et2sys[(UAELIBACC - ERROR_TABLE_BASE_uae)] = ELIBACC;
+     et2sys[(UAELIBBAD - ERROR_TABLE_BASE_uae)] = ELIBBAD;
+     et2sys[(UAELIBSCN - ERROR_TABLE_BASE_uae)] = ELIBSCN;
+     et2sys[(UAELIBMAX - ERROR_TABLE_BASE_uae)] = ELIBMAX;
+     et2sys[(UAELIBEXEC - ERROR_TABLE_BASE_uae)] = ELIBEXEC;
+     et2sys[(UAEILSEQ - ERROR_TABLE_BASE_uae)] = EILSEQ;
+     et2sys[(UAERESTART - ERROR_TABLE_BASE_uae)] = ERESTART;
+     et2sys[(UAESTRPIPE - ERROR_TABLE_BASE_uae)] = ESTRPIPE;
+     et2sys[(UAEUSERS - ERROR_TABLE_BASE_uae)] = EUSERS;
+     et2sys[(UAENOTSOCK - ERROR_TABLE_BASE_uae)] = ENOTSOCK;
+     et2sys[(UAEDESTADDRREQ - ERROR_TABLE_BASE_uae)] = EDESTADDRREQ;
+     et2sys[(UAEMSGSIZE - ERROR_TABLE_BASE_uae)] = EMSGSIZE;
+     et2sys[(UAEPROTOTYPE - ERROR_TABLE_BASE_uae)] = EPROTOTYPE;
+     et2sys[(UAENOPROTOOPT - ERROR_TABLE_BASE_uae)] = ENOPROTOOPT;
+     et2sys[(UAEPROTONOSUPPORT - ERROR_TABLE_BASE_uae)] = EPROTONOSUPPORT;
+     et2sys[(UAESOCKTNOSUPPORT - ERROR_TABLE_BASE_uae)] = ESOCKTNOSUPPORT;
+     et2sys[(UAEOPNOTSUPP - ERROR_TABLE_BASE_uae)] = EOPNOTSUPP;
+     et2sys[(UAEPFNOSUPPORT - ERROR_TABLE_BASE_uae)] = EPFNOSUPPORT;
+     et2sys[(UAEAFNOSUPPORT - ERROR_TABLE_BASE_uae)] = EAFNOSUPPORT;
+     et2sys[(UAEADDRINUSE - ERROR_TABLE_BASE_uae)] = EADDRINUSE;
+     et2sys[(UAEADDRNOTAVAIL - ERROR_TABLE_BASE_uae)] = EADDRNOTAVAIL;
+     et2sys[(UAENETDOWN - ERROR_TABLE_BASE_uae)] = ENETDOWN;
+     et2sys[(UAENETUNREACH - ERROR_TABLE_BASE_uae)] = ENETUNREACH;
+     et2sys[(UAENETRESET - ERROR_TABLE_BASE_uae)] = ENETRESET;
+     et2sys[(UAECONNABORTED - ERROR_TABLE_BASE_uae)] = ECONNABORTED;
+     et2sys[(UAECONNRESET - ERROR_TABLE_BASE_uae)] = ECONNRESET;
+     et2sys[(UAENOBUFS - ERROR_TABLE_BASE_uae)] = ENOBUFS;
+     et2sys[(UAEISCONN - ERROR_TABLE_BASE_uae)] = EISCONN;
+     et2sys[(UAENOTCONN - ERROR_TABLE_BASE_uae)] = ENOTCONN;
+     et2sys[(UAESHUTDOWN - ERROR_TABLE_BASE_uae)] = ESHUTDOWN;
+     et2sys[(UAETOOMANYREFS - ERROR_TABLE_BASE_uae)] = ETOOMANYREFS;
+     et2sys[(UAETIMEDOUT - ERROR_TABLE_BASE_uae)] = ETIMEDOUT;
+     et2sys[(UAECONNREFUSED - ERROR_TABLE_BASE_uae)] = ECONNREFUSED;
+     et2sys[(UAEHOSTDOWN - ERROR_TABLE_BASE_uae)] = EHOSTDOWN;
+     et2sys[(UAEHOSTUNREACH - ERROR_TABLE_BASE_uae)] = EHOSTUNREACH;
+     et2sys[(UAEALREADY - ERROR_TABLE_BASE_uae)] = EALREADY;
+     et2sys[(UAEINPROGRESS - ERROR_TABLE_BASE_uae)] = EINPROGRESS;
+     et2sys[(UAESTALE - ERROR_TABLE_BASE_uae)] = ESTALE;
+     et2sys[(UAEUCLEAN - ERROR_TABLE_BASE_uae)] = EUCLEAN;
+     et2sys[(UAENOTNAM - ERROR_TABLE_BASE_uae)] = ENOTNAM;
+     et2sys[(UAENAVAIL - ERROR_TABLE_BASE_uae)] = ENAVAIL;
+     et2sys[(UAEISNAM - ERROR_TABLE_BASE_uae)] = EISNAM;
+     et2sys[(UAEREMOTEIO - ERROR_TABLE_BASE_uae)] = EREMOTEIO;
+     et2sys[(UAEDQUOT - ERROR_TABLE_BASE_uae)] = EDQUOT;
+     et2sys[(UAENOMEDIUM - ERROR_TABLE_BASE_uae)] = ENOMEDIUM;
+     et2sys[(UAEMEDIUMTYPE - ERROR_TABLE_BASE_uae)] = EMEDIUMTYPE;
+ }
+ 
+ afs_int32
+ et_to_sys_error(afs_int32 in)
+ {
+     if (in < ERROR_TABLE_BASE_uae || in >= ERROR_TABLE_BASE_uae + 512)
+ 	return in;
+     if (et2sys[in - ERROR_TABLE_BASE_uae] != 0)
+ 	return et2sys[in - ERROR_TABLE_BASE_uae];
+     return in;
+ }
+ 
+ void
+ afs_CopyError(register struct vrequest *afrom, register struct vrequest *ato)
+ {
+     AFS_STATCNT(afs_CopyError);
+     if (!afrom->initd)
+ 	return;
+     afs_FinalizeReq(ato);
+     if (afrom->accessError)
+ 	ato->accessError = 1;
+     if (afrom->volumeError)
+ 	ato->volumeError = 1;
+     if (afrom->networkError)
+ 	ato->networkError = 1;
+     if (afrom->permWriteError)
+ 	ato->permWriteError = 1;
+ 
+ }
+ 
+ void
+ afs_FinalizeReq(register struct vrequest *areq)
+ {
+     AFS_STATCNT(afs_FinalizeReq);
+     if (areq->initd)
+ 	return;
+     areq->busyCount = 0;
+     areq->accessError = 0;
+     areq->volumeError = 0;
+     areq->networkError = 0;
+     areq->permWriteError = 0;
+     areq->initd = 1;
+ 
+ }
+ 
+ int
+ afs_CheckCode(afs_int32 acode, struct vrequest *areq, int where)
+ {
+     AFS_STATCNT(afs_CheckCode);
+     if (acode) {
+ 	afs_Trace2(afs_iclSetp, CM_TRACE_CHECKCODE, ICL_TYPE_INT32, acode,
+ 		   ICL_TYPE_INT32, where);
+     }
+     if ((acode & ~0xff) == ERROR_TABLE_BASE_uae)
+ 	acode = et_to_sys_error(acode);
+     if (!areq || !areq->initd)
+ 	return acode;
+     if (areq->networkError)
+ 	return ETIMEDOUT;
+     if (acode == 0)
+ 	return 0;
+     if (areq->accessError)
+ 	return EACCES;
+     if (areq->volumeError == VOLMISSING)
+ 	return ENODEV;
+     if (areq->volumeError == VOLBUSY)
+ 	return EWOULDBLOCK;
+     if (acode == VNOVNODE)
+ 	return ENOENT;
+     if (acode == VDISKFULL)
+ 	return ENOSPC;
+     if (acode == VOVERQUOTA)
+ 	return
+ #ifdef EDQUOT
+ 	    EDQUOT
+ #else
+ 	    ENOSPC
+ #endif
+ 	    ;
+ 
+     return acode;
+ 
+ }				/*afs_CheckCode */
Index: openafs/src/afs/afs_icl.c
diff -c /dev/null openafs/src/afs/afs_icl.c:1.1.2.3
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_icl.c	Wed Aug  2 15:01:22 2006
***************
*** 0 ****
--- 1,1527 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_icl.c,v 1.1.2.3 2006/08/02 19:01:22 shadow Exp $");
+ 
+ #include "afs/sysincludes.h"	/* Standard vendor system headers */
+ #include "afsincludes.h"	/* Afs-based standard headers */
+ #include "afs/afs_stats.h"
+ #include "rx/rx_globals.h"
+ #if !defined(UKERNEL) && !defined(AFS_LINUX20_ENV)
+ #include "net/if.h"
+ #ifdef AFS_SGI62_ENV
+ #include "h/hashing.h"
+ #endif
+ #if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN60_ENV)
+ #include "netinet/in_var.h"
+ #endif
+ #endif /* !defined(UKERNEL) */
+ #ifdef AFS_LINUX22_ENV
+ #include "h/smp_lock.h"
+ #endif
+ 
+ 
+ struct afs_icl_set *afs_iclSetp = (struct afs_icl_set *)0;
+ struct afs_icl_set *afs_iclLongTermSetp = (struct afs_icl_set *)0;
+ 
+ #if defined(AFS_OSF_ENV) || defined(AFS_SGI61_ENV)
+ /* For SGI 6.2, this can is changed to 1 if it's a 32 bit kernel. */
+ #if defined(AFS_SGI62_ENV) && defined(KERNEL) && !defined(_K64U64)
+ int afs_icl_sizeofLong = 1;
+ #else
+ int afs_icl_sizeofLong = 2;
+ #endif /* SGI62 */
+ #else
+ #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
+ int afs_icl_sizeofLong = 2;
+ #else
+ int afs_icl_sizeofLong = 1;
+ #endif
+ #endif
+ 
+ int afs_icl_inited = 0;
+ 
+ /* init function, called once, under afs_icl_lock */
+ int
+ afs_icl_Init(void)
+ {
+     afs_icl_inited = 1;
+     return 0;
+ }
+ 
+ int
+ afs_icl_InitLogs(void)
+ {
+     struct afs_icl_log *logp;
+     int code;
+ 
+     /* initialize the ICL system */
+     code = afs_icl_CreateLog("cmfx", 60 * 1024, &logp);
+     if (code == 0)
+ 	code =
+ 	    afs_icl_CreateSetWithFlags("cm", logp, NULL,
+ 				       ICL_CRSET_FLAG_DEFAULT_OFF,
+ 				       &afs_iclSetp);
+     code =
+ 	afs_icl_CreateSet("cmlongterm", logp, NULL,
+ 			  &afs_iclLongTermSetp);
+     return code;
+ }
+ 
+ 
+ struct afs_icl_log *afs_icl_FindLog();
+ struct afs_icl_set *afs_icl_FindSet();
+ 
+ 
+ int
+ Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval)
+ {
+     afs_int32 *lp, elts, flags;
+     register afs_int32 code;
+     struct afs_icl_log *logp;
+     struct afs_icl_set *setp;
+ #if defined(AFS_SGI61_ENV) || defined(AFS_SUN57_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+     size_t temp;
+ #else /* AFS_SGI61_ENV */
+ #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
+     afs_uint64 temp;
+ #else
+     afs_uint32 temp;
+ #endif
+ #endif /* AFS_SGI61_ENV */
+     char tname[65];
+     afs_int32 startCookie;
+     afs_int32 allocated;
+     struct afs_icl_log *tlp;
+ 
+ #ifdef	AFS_SUN5_ENV
+     if (!afs_suser(CRED())) {	/* only root can run this code */
+ 	return (EACCES);
+     }
+ #else
+     if (!afs_suser(NULL)) {	/* only root can run this code */
+ #if defined(KERNEL_HAVE_UERROR)
+ 	setuerror(EACCES);
+ 	return EACCES;
+ #else
+ 	return EPERM;
+ #endif
+     }
+ #endif
+     switch (opcode) {
+     case ICL_OP_COPYOUTCLR:	/* copy out data then clear */
+     case ICL_OP_COPYOUT:	/* copy ouy data */
+ 	/* copyout: p1=logname, p2=&buffer, p3=size(words), p4=&cookie
+ 	 * return flags<<24 + nwords.
+ 	 * updates cookie to updated start (not end) if we had to
+ 	 * skip some records.
+ 	 */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	AFS_COPYIN((char *)p4, (char *)&startCookie, sizeof(afs_int32), code);
+ 	if (code)
+ 	    return code;
+ 	logp = afs_icl_FindLog(tname);
+ 	if (!logp)
+ 	    return ENOENT;
+ #define	BUFFERSIZE	AFS_LRALLOCSIZ
+ 	lp = (afs_int32 *) osi_AllocLargeSpace(AFS_LRALLOCSIZ);
+ 	elts = BUFFERSIZE / sizeof(afs_int32);
+ 	if (p3 < elts)
+ 	    elts = p3;
+ 	flags = (opcode == ICL_OP_COPYOUT) ? 0 : ICL_COPYOUTF_CLRAFTERREAD;
+ 	code =
+ 	    afs_icl_CopyOut(logp, lp, &elts, (afs_uint32 *) & startCookie,
+ 			    &flags);
+ 	if (code) {
+ 	    osi_FreeLargeSpace((struct osi_buffer *)lp);
+ 	    break;
+ 	}
+ 	AFS_COPYOUT((char *)lp, (char *)p2, elts * sizeof(afs_int32), code);
+ 	if (code)
+ 	    goto done;
+ 	AFS_COPYOUT((char *)&startCookie, (char *)p4, sizeof(afs_int32),
+ 		    code);
+ 	if (code)
+ 	    goto done;
+ #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
+ 	if (!(IS64U))
+ 	    *retval = ((long)((flags << 24) | (elts & 0xffffff))) << 32;
+ 	else
+ #endif
+ 	    *retval = (flags << 24) | (elts & 0xffffff);
+       done:
+ 	afs_icl_LogRele(logp);
+ 	osi_FreeLargeSpace((struct osi_buffer *)lp);
+ 	break;
+ 
+     case ICL_OP_ENUMLOGS:	/* enumerate logs */
+ 	/* enumerate logs: p1=index, p2=&name, p3=sizeof(name), p4=&size.
+ 	 * return 0 for success, otherwise error.
+ 	 */
+ 	for (tlp = afs_icl_allLogs; tlp; tlp = tlp->nextp) {
+ 	    if (p1-- == 0)
+ 		break;
+ 	}
+ 	if (!tlp)
+ 	    return ENOENT;	/* past the end of file */
+ 	temp = strlen(tlp->name) + 1;
+ 	if (temp > p3)
+ 	    return EINVAL;
+ 	AFS_COPYOUT(tlp->name, (char *)p2, temp, code);
+ 	if (!code)		/* copy out size of log */
+ 	    AFS_COPYOUT((char *)&tlp->logSize, (char *)p4, sizeof(afs_int32),
+ 			code);
+ 	break;
+ 
+     case ICL_OP_ENUMLOGSBYSET:	/* enumerate logs by set name */
+ 	/* enumerate logs: p1=setname, p2=index, p3=&name, p4=sizeof(name).
+ 	 * return 0 for success, otherwise error.
+ 	 */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	setp = afs_icl_FindSet(tname);
+ 	if (!setp)
+ 	    return ENOENT;
+ 	if (p2 > ICL_LOGSPERSET)
+ 	    return EINVAL;
+ 	if (!(tlp = setp->logs[p2]))
+ 	    return EBADF;
+ 	temp = strlen(tlp->name) + 1;
+ 	if (temp > p4)
+ 	    return EINVAL;
+ 	AFS_COPYOUT(tlp->name, (char *)p3, temp, code);
+ 	break;
+ 
+     case ICL_OP_CLRLOG:	/* clear specified log */
+ 	/* zero out the specified log: p1=logname */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	logp = afs_icl_FindLog(tname);
+ 	if (!logp)
+ 	    return ENOENT;
+ 	code = afs_icl_ZeroLog(logp);
+ 	afs_icl_LogRele(logp);
+ 	break;
+ 
+     case ICL_OP_CLRSET:	/* clear specified set */
+ 	/* zero out the specified set: p1=setname */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	setp = afs_icl_FindSet(tname);
+ 	if (!setp)
+ 	    return ENOENT;
+ 	code = afs_icl_ZeroSet(setp);
+ 	afs_icl_SetRele(setp);
+ 	break;
+ 
+     case ICL_OP_CLRALL:	/* clear all logs */
+ 	/* zero out all logs -- no args */
+ 	code = 0;
+ 	ObtainWriteLock(&afs_icl_lock, 178);
+ 	for (tlp = afs_icl_allLogs; tlp; tlp = tlp->nextp) {
+ 	    tlp->refCount++;	/* hold this guy */
+ 	    ReleaseWriteLock(&afs_icl_lock);
+ 	    /* don't clear persistent logs */
+ 	    if ((tlp->states & ICL_LOGF_PERSISTENT) == 0)
+ 		code = afs_icl_ZeroLog(tlp);
+ 	    ObtainWriteLock(&afs_icl_lock, 179);
+ 	    if (--tlp->refCount == 0)
+ 		afs_icl_ZapLog(tlp);
+ 	    if (code)
+ 		break;
+ 	}
+ 	ReleaseWriteLock(&afs_icl_lock);
+ 	break;
+ 
+     case ICL_OP_ENUMSETS:	/* enumerate all sets */
+ 	/* enumerate sets: p1=index, p2=&name, p3=sizeof(name), p4=&states.
+ 	 * return 0 for success, otherwise error.
+ 	 */
+ 	for (setp = afs_icl_allSets; setp; setp = setp->nextp) {
+ 	    if (p1-- == 0)
+ 		break;
+ 	}
+ 	if (!setp)
+ 	    return ENOENT;	/* past the end of file */
+ 	temp = strlen(setp->name) + 1;
+ 	if (temp > p3)
+ 	    return EINVAL;
+ 	AFS_COPYOUT(setp->name, (char *)p2, temp, code);
+ 	if (!code)		/* copy out size of log */
+ 	    AFS_COPYOUT((char *)&setp->states, (char *)p4, sizeof(afs_int32),
+ 			code);
+ 	break;
+ 
+     case ICL_OP_SETSTAT:	/* set status on a set */
+ 	/* activate the specified set: p1=setname, p2=op */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	setp = afs_icl_FindSet(tname);
+ 	if (!setp)
+ 	    return ENOENT;
+ 	code = afs_icl_SetSetStat(setp, p2);
+ 	afs_icl_SetRele(setp);
+ 	break;
+ 
+     case ICL_OP_SETSTATALL:	/* set status on all sets */
+ 	/* activate the specified set: p1=op */
+ 	code = 0;
+ 	ObtainWriteLock(&afs_icl_lock, 180);
+ 	for (setp = afs_icl_allSets; setp; setp = setp->nextp) {
+ 	    setp->refCount++;	/* hold this guy */
+ 	    ReleaseWriteLock(&afs_icl_lock);
+ 	    /* don't set states on persistent sets */
+ 	    if ((setp->states & ICL_SETF_PERSISTENT) == 0)
+ 		code = afs_icl_SetSetStat(setp, p1);
+ 	    ObtainWriteLock(&afs_icl_lock, 181);
+ 	    if (--setp->refCount == 0)
+ 		afs_icl_ZapSet(setp);
+ 	    if (code)
+ 		break;
+ 	}
+ 	ReleaseWriteLock(&afs_icl_lock);
+ 	break;
+ 
+     case ICL_OP_SETLOGSIZE:	/* set size of log */
+ 	/* set the size of the specified log: p1=logname, p2=size (in words) */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	logp = afs_icl_FindLog(tname);
+ 	if (!logp)
+ 	    return ENOENT;
+ 	code = afs_icl_LogSetSize(logp, p2);
+ 	afs_icl_LogRele(logp);
+ 	break;
+ 
+     case ICL_OP_GETLOGINFO:	/* get size of log */
+ 	/* zero out the specified log: p1=logname, p2=&logSize, p3=&allocated */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	logp = afs_icl_FindLog(tname);
+ 	if (!logp)
+ 	    return ENOENT;
+ 	allocated = !!logp->datap;
+ 	AFS_COPYOUT((char *)&logp->logSize, (char *)p2, sizeof(afs_int32),
+ 		    code);
+ 	if (!code)
+ 	    AFS_COPYOUT((char *)&allocated, (char *)p3, sizeof(afs_int32),
+ 			code);
+ 	afs_icl_LogRele(logp);
+ 	break;
+ 
+     case ICL_OP_GETSETINFO:	/* get state of set */
+ 	/* zero out the specified set: p1=setname, p2=&state */
+ 	AFS_COPYINSTR((char *)p1, tname, sizeof(tname), &temp, code);
+ 	if (code)
+ 	    return code;
+ 	setp = afs_icl_FindSet(tname);
+ 	if (!setp)
+ 	    return ENOENT;
+ 	AFS_COPYOUT((char *)&setp->states, (char *)p2, sizeof(afs_int32),
+ 		    code);
+ 	afs_icl_SetRele(setp);
+ 	break;
+ 
+     default:
+ 	code = EINVAL;
+     }
+ 
+     return code;
+ }
+ 
+ 
+ afs_lock_t afs_icl_lock;
+ 
+ /* exported routine: a 4 parameter event */
+ int
+ afs_icl_Event4(register struct afs_icl_set *setp, afs_int32 eventID,
+ 	       afs_int32 lAndT, long p1, long p2, long p3, long p4)
+ {
+     afs_int32 mask;
+     register int i;
+     register afs_int32 tmask;
+     int ix;
+ 
+     /* If things aren't init'ed yet (or the set is inactive), don't panic */
+     if (!ICL_SETACTIVE(setp))
+ 	return 0;
+ 
+     AFS_ASSERT_GLOCK();
+     mask = lAndT >> 24 & 0xff;	/* mask of which logs to log to */
+     ix = ICL_EVENTBYTE(eventID);
+     ObtainReadLock(&setp->lock);
+     if (setp->eventFlags[ix] & ICL_EVENTMASK(eventID)) {
+ 	for (i = 0, tmask = 1; i < ICL_LOGSPERSET; i++, tmask <<= 1) {
+ 	    if (mask & tmask) {
+ 		afs_icl_AppendRecord(setp->logs[i], eventID, lAndT & 0xffffff,
+ 				     p1, p2, p3, p4);
+ 	    }
+ 	    mask &= ~tmask;
+ 	    if (mask == 0)
+ 		break;		/* break early */
+ 	}
+     }
+     ReleaseReadLock(&setp->lock);
+     return 0;
+ }
+ 
+ /* Next 4 routines should be implemented via var-args or something.
+  * Whole purpose is to avoid compiler warnings about parameter # mismatches.
+  * Otherwise, could call afs_icl_Event4 directly.
+  */
+ int
+ afs_icl_Event3(register struct afs_icl_set *setp, afs_int32 eventID,
+ 	       afs_int32 lAndT, long p1, long p2, long p3)
+ {
+     return afs_icl_Event4(setp, eventID, lAndT, p1, p2, p3, (long)0);
+ }
+ 
+ int
+ afs_icl_Event2(register struct afs_icl_set *setp, afs_int32 eventID,
+ 	       afs_int32 lAndT, long p1, long p2)
+ {
+     return afs_icl_Event4(setp, eventID, lAndT, p1, p2, (long)0, (long)0);
+ }
+ 
+ int
+ afs_icl_Event1(register struct afs_icl_set *setp, afs_int32 eventID,
+ 	       afs_int32 lAndT, long p1)
+ {
+     return afs_icl_Event4(setp, eventID, lAndT, p1, (long)0, (long)0,
+ 			  (long)0);
+ }
+ 
+ int
+ afs_icl_Event0(register struct afs_icl_set *setp, afs_int32 eventID,
+ 	       afs_int32 lAndT)
+ {
+     return afs_icl_Event4(setp, eventID, lAndT, (long)0, (long)0, (long)0,
+ 			  (long)0);
+ }
+ 
+ struct afs_icl_log *afs_icl_allLogs = 0;
+ 
+ /* function to purge records from the start of the log, until there
+  * is at least minSpace long's worth of space available without
+  * making the head and the tail point to the same word.
+  *
+  * Log must be write-locked.
+  */
+ static void
+ afs_icl_GetLogSpace(register struct afs_icl_log *logp, afs_int32 minSpace)
+ {
+     register unsigned int tsize;
+ 
+     while (logp->logSize - logp->logElements <= minSpace) {
+ 	/* eat a record */
+ 	tsize = ((logp->datap[logp->firstUsed]) >> 24) & 0xff;
+ 	logp->logElements -= tsize;
+ 	logp->firstUsed += tsize;
+ 	if (logp->firstUsed >= logp->logSize)
+ 	    logp->firstUsed -= logp->logSize;
+ 	logp->baseCookie += tsize;
+     }
+ }
+ 
+ /* append string astr to buffer, including terminating null char.
+  *
+  * log must be write-locked.
+  */
+ #define ICL_CHARSPERLONG	4
+ static void
+ afs_icl_AppendString(struct afs_icl_log *logp, char *astr)
+ {
+     char *op;			/* ptr to char to write */
+     int tc;
+     register int bib;		/* bytes in buffer */
+ 
+     bib = 0;
+     op = (char *)&(logp->datap[logp->firstFree]);
+     while (1) {
+ 	tc = *astr++;
+ 	*op++ = tc;
+ 	if (++bib >= ICL_CHARSPERLONG) {
+ 	    /* new word */
+ 	    bib = 0;
+ 	    if (++(logp->firstFree) >= logp->logSize) {
+ 		logp->firstFree = 0;
+ 		op = (char *)&(logp->datap[0]);
+ 	    }
+ 	    logp->logElements++;
+ 	}
+ 	if (tc == 0)
+ 	    break;
+     }
+     if (bib > 0) {
+ 	/* if we've used this word at all, allocate it */
+ 	if (++(logp->firstFree) >= logp->logSize) {
+ 	    logp->firstFree = 0;
+ 	}
+ 	logp->logElements++;
+     }
+ }
+ 
+ /* add a long to the log, ignoring overflow (checked already) */
+ #define ICL_APPENDINT32(lp, x) \
+     MACRO_BEGIN \
+         (lp)->datap[(lp)->firstFree] = (x); \
+ 	if (++((lp)->firstFree) >= (lp)->logSize) { \
+ 		(lp)->firstFree = 0; \
+ 	} \
+         (lp)->logElements++; \
+     MACRO_END
+ 
+ #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
+ #define ICL_APPENDLONG(lp, x) \
+     MACRO_BEGIN \
+ 	ICL_APPENDINT32((lp), ((x) >> 32) & 0xffffffffL); \
+ 	ICL_APPENDINT32((lp), (x) & 0xffffffffL); \
+     MACRO_END
+ 
+ #else /* AFS_OSF_ENV */
+ #define ICL_APPENDLONG(lp, x) ICL_APPENDINT32((lp), (x))
+ #endif /* AFS_OSF_ENV */
+ 
+ /* routine to tell whether we're dealing with the address or the
+  * object itself
+  */
+ int
+ afs_icl_UseAddr(int type)
+ {
+     if (type == ICL_TYPE_HYPER || type == ICL_TYPE_STRING
+ 	|| type == ICL_TYPE_FID || type == ICL_TYPE_INT64)
+ 	return 1;
+     else
+ 	return 0;
+ }
+ 
+ /* Function to append a record to the log.  Written for speed
+  * since we know that we're going to have to make this work fast
+  * pretty soon, anyway.  The log must be unlocked.
+  */
+ 
+ void
+ afs_icl_AppendRecord(register struct afs_icl_log *logp, afs_int32 op,
+ 		     afs_int32 types, long p1, long p2, long p3, long p4)
+ {
+     int rsize;			/* record size in longs */
+     register int tsize;		/* temp size */
+     osi_timeval_t tv;
+     int t1, t2, t3, t4;
+ 
+     t4 = types & 0x3f;		/* decode types */
+     types >>= 6;
+     t3 = types & 0x3f;
+     types >>= 6;
+     t2 = types & 0x3f;
+     types >>= 6;
+     t1 = types & 0x3f;
+ 
+     osi_GetTime(&tv);		/* It panics for solaris if inside */
+     ObtainWriteLock(&logp->lock, 182);
+     if (!logp->datap) {
+ 	ReleaseWriteLock(&logp->lock);
+ 	return;
+     }
+ 
+     /* get timestamp as # of microseconds since some time that doesn't
+      * change that often.  This algorithm ticks over every 20 minutes
+      * or so (1000 seconds).  Write a timestamp record if it has.
+      */
+     if (tv.tv_sec - logp->lastTS > 1024) {
+ 	/* the timer has wrapped -- write a timestamp record */
+ 	if (logp->logSize - logp->logElements <= 5)
+ 	    afs_icl_GetLogSpace(logp, 5);
+ 
+ 	ICL_APPENDINT32(logp,
+ 			(afs_int32) (5 << 24) + (ICL_TYPE_UNIXDATE << 18));
+ 	ICL_APPENDINT32(logp, (afs_int32) ICL_INFO_TIMESTAMP);
+ 	ICL_APPENDINT32(logp, (afs_int32) 0);	/* use thread ID zero for clocks */
+ 	ICL_APPENDINT32(logp,
+ 			(afs_int32) (tv.tv_sec & 0x3ff) * 1000000 +
+ 			tv.tv_usec);
+ 	ICL_APPENDINT32(logp, (afs_int32) tv.tv_sec);
+ 
+ 	logp->lastTS = tv.tv_sec;
+     }
+ 
+     rsize = 4;			/* base case */
+     if (t1) {
+ 	/* compute size of parameter p1.  Only tricky case is string.
+ 	 * In that case, we have to call strlen to get the string length.
+ 	 */
+ 	ICL_SIZEHACK(t1, p1);
+     }
+     if (t2) {
+ 	/* compute size of parameter p2.  Only tricky case is string.
+ 	 * In that case, we have to call strlen to get the string length.
+ 	 */
+ 	ICL_SIZEHACK(t2, p2);
+     }
+     if (t3) {
+ 	/* compute size of parameter p3.  Only tricky case is string.
+ 	 * In that case, we have to call strlen to get the string length.
+ 	 */
+ 	ICL_SIZEHACK(t3, p3);
+     }
+     if (t4) {
+ 	/* compute size of parameter p4.  Only tricky case is string.
+ 	 * In that case, we have to call strlen to get the string length.
+ 	 */
+ 	ICL_SIZEHACK(t4, p4);
+     }
+ 
+     /* At this point, we've computed all of the parameter sizes, and
+      * have in rsize the size of the entire record we want to append.
+      * Next, we check that we actually have room in the log to do this
+      * work, and then we do the append.
+      */
+     if (rsize > 255) {
+ 	ReleaseWriteLock(&logp->lock);
+ 	return;			/* log record too big to express */
+     }
+ 
+     if (logp->logSize - logp->logElements <= rsize)
+ 	afs_icl_GetLogSpace(logp, rsize);
+ 
+     ICL_APPENDINT32(logp,
+ 		    (afs_int32) (rsize << 24) + (t1 << 18) + (t2 << 12) +
+ 		    (t3 << 6) + t4);
+     ICL_APPENDINT32(logp, (afs_int32) op);
+     ICL_APPENDINT32(logp, (afs_int32) osi_ThreadUnique());
+     ICL_APPENDINT32(logp,
+ 		    (afs_int32) (tv.tv_sec & 0x3ff) * 1000000 + tv.tv_usec);
+ 
+     if (t1) {
+ 	/* marshall parameter 1 now */
+ 	if (t1 == ICL_TYPE_STRING) {
+ 	    afs_icl_AppendString(logp, (char *)p1);
+ 	} else if (t1 == ICL_TYPE_HYPER) {
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p1)->high);
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p1)->low);
+ 	} else if (t1 == ICL_TYPE_INT64) {
+ #ifndef WORDS_BIGENDIAN
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) p1);
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ #endif /* AFS_64BIT_CLIENT */
+ #else /* AFSLITTLE_ENDIAN */
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ 	    ICL_APPENDINT32(logp, (afs_int32) p1);
+ #endif /* AFS_64BIT_CLIENT */
+ #endif /* AFSLITTLE_ENDIAN */
+ 	} else if (t1 == ICL_TYPE_FID) {
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[2]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[3]);
+ 	}
+ #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
+ 	else if (t1 == ICL_TYPE_INT32)
+ 	    ICL_APPENDINT32(logp, (afs_int32) p1);
+ #endif /* AFS_OSF_ENV */
+ 	else
+ 	    ICL_APPENDLONG(logp, p1);
+     }
+     if (t2) {
+ 	/* marshall parameter 2 now */
+ 	if (t2 == ICL_TYPE_STRING)
+ 	    afs_icl_AppendString(logp, (char *)p2);
+ 	else if (t2 == ICL_TYPE_HYPER) {
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p2)->high);
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p2)->low);
+ 	} else if (t2 == ICL_TYPE_INT64) {
+ #ifndef WORDS_BIGENDIAN
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) p2);
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ #endif /* AFS_64BIT_CLIENT */
+ #else /* AFSLITTLE_ENDIAN */
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ 	    ICL_APPENDINT32(logp, (afs_int32) p2);
+ #endif /* AFS_64BIT_CLIENT */
+ #endif /* AFSLITTLE_ENDIAN */
+ 	} else if (t2 == ICL_TYPE_FID) {
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[2]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[3]);
+ 	}
+ #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
+ 	else if (t2 == ICL_TYPE_INT32)
+ 	    ICL_APPENDINT32(logp, (afs_int32) p2);
+ #endif /* AFS_OSF_ENV */
+ 	else
+ 	    ICL_APPENDLONG(logp, p2);
+     }
+     if (t3) {
+ 	/* marshall parameter 3 now */
+ 	if (t3 == ICL_TYPE_STRING)
+ 	    afs_icl_AppendString(logp, (char *)p3);
+ 	else if (t3 == ICL_TYPE_HYPER) {
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p3)->high);
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p3)->low);
+ 	} else if (t3 == ICL_TYPE_INT64) {
+ #ifndef WORDS_BIGENDIAN
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) p3);
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ #endif /* AFS_64BIT_CLIENT */
+ #else /* AFSLITTLE_ENDIAN */
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ 	    ICL_APPENDINT32(logp, (afs_int32) p3);
+ #endif /* AFS_64BIT_CLIENT */
+ #endif /* AFSLITTLE_ENDIAN */
+ 	} else if (t3 == ICL_TYPE_FID) {
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[2]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[3]);
+ 	}
+ #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
+ 	else if (t3 == ICL_TYPE_INT32)
+ 	    ICL_APPENDINT32(logp, (afs_int32) p3);
+ #endif /* AFS_OSF_ENV */
+ 	else
+ 	    ICL_APPENDLONG(logp, p3);
+     }
+     if (t4) {
+ 	/* marshall parameter 4 now */
+ 	if (t4 == ICL_TYPE_STRING)
+ 	    afs_icl_AppendString(logp, (char *)p4);
+ 	else if (t4 == ICL_TYPE_HYPER) {
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p4)->high);
+ 	    ICL_APPENDINT32(logp,
+ 			    (afs_int32) ((struct afs_hyper_t *)p4)->low);
+ 	} else if (t4 == ICL_TYPE_INT64) {
+ #ifndef WORDS_BIGENDIAN
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) p4);
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ #endif /* AFS_64BIT_CLIENT */
+ #else /* AFSLITTLE_ENDIAN */
+ #ifdef AFS_64BIT_CLIENT
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]);
+ #else /* AFS_64BIT_CLIENT */
+ 	    ICL_APPENDINT32(logp, (afs_int32) 0);
+ 	    ICL_APPENDINT32(logp, (afs_int32) p4);
+ #endif /* AFS_64BIT_CLIENT */
+ #endif /* AFSLITTLE_ENDIAN */
+ 	} else if (t4 == ICL_TYPE_FID) {
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[2]);
+ 	    ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[3]);
+ 	}
+ #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL))
+ 	else if (t4 == ICL_TYPE_INT32)
+ 	    ICL_APPENDINT32(logp, (afs_int32) p4);
+ #endif /* AFS_OSF_ENV */
+ 	else
+ 	    ICL_APPENDLONG(logp, p4);
+     }
+     ReleaseWriteLock(&logp->lock);
+ }
+ 
+ /* create a log with size logSize; return it in *outLogpp and tag
+  * it with name "name."
+  */
+ int
+ afs_icl_CreateLog(char *name, afs_int32 logSize,
+ 		  struct afs_icl_log **outLogpp)
+ {
+     return afs_icl_CreateLogWithFlags(name, logSize, /*flags */ 0, outLogpp);
+ }
+ 
+ /* create a log with size logSize; return it in *outLogpp and tag
+  * it with name "name."  'flags' can be set to make the log unclearable.
+  */
+ int
+ afs_icl_CreateLogWithFlags(char *name, afs_int32 logSize, afs_uint32 flags,
+ 			   struct afs_icl_log **outLogpp)
+ {
+     register struct afs_icl_log *logp;
+ 
+     /* add into global list under lock */
+     ObtainWriteLock(&afs_icl_lock, 183);
+     if (!afs_icl_inited)
+ 	afs_icl_Init();
+ 
+     for (logp = afs_icl_allLogs; logp; logp = logp->nextp) {
+ 	if (strcmp(logp->name, name) == 0) {
+ 	    /* found it already created, just return it */
+ 	    logp->refCount++;
+ 	    *outLogpp = logp;
+ 	    if (flags & ICL_CRLOG_FLAG_PERSISTENT) {
+ 		ObtainWriteLock(&logp->lock, 184);
+ 		logp->states |= ICL_LOGF_PERSISTENT;
+ 		ReleaseWriteLock(&logp->lock);
+ 	    }
+ 	    ReleaseWriteLock(&afs_icl_lock);
+ 	    return 0;
+ 	}
+     }
+ 
+     logp = (struct afs_icl_log *)
+ 	osi_AllocSmallSpace(sizeof(struct afs_icl_log));
+     memset((caddr_t) logp, 0, sizeof(*logp));
+ 
+     logp->refCount = 1;
+     logp->name = osi_AllocSmallSpace(strlen(name) + 1);
+     strcpy(logp->name, name);
+     LOCK_INIT(&logp->lock, "logp lock");
+     logp->logSize = logSize;
+     logp->datap = NULL;		/* don't allocate it until we need it */
+ 
+     if (flags & ICL_CRLOG_FLAG_PERSISTENT)
+ 	logp->states |= ICL_LOGF_PERSISTENT;
+ 
+     logp->nextp = afs_icl_allLogs;
+     afs_icl_allLogs = logp;
+     ReleaseWriteLock(&afs_icl_lock);
+ 
+     *outLogpp = logp;
+     return 0;
+ }
+ 
+ /* called with a log, a pointer to a buffer, the size of the buffer
+  * (in *bufSizep), the starting cookie (in *cookiep, use 0 at the start)
+  * and returns data in the provided buffer, and returns output flags
+  * in *flagsp.  The flag ICL_COPYOUTF_MISSEDSOME is set if we can't
+  * find the record with cookie value cookie.
+  */
+ int
+ afs_icl_CopyOut(register struct afs_icl_log *logp, afs_int32 * bufferp,
+ 		afs_int32 * bufSizep, afs_uint32 * cookiep,
+ 		afs_int32 * flagsp)
+ {
+     afs_int32 nwords;		/* number of words to copy out */
+     afs_uint32 startCookie;	/* first cookie to use */
+     afs_int32 outWords;		/* words we've copied out */
+     afs_int32 inWords;		/* max words to copy out */
+     afs_int32 code;		/* return code */
+     afs_int32 ix;		/* index we're copying from */
+     afs_int32 outFlags;		/* return flags */
+     afs_int32 inFlags;		/* flags passed in */
+     afs_int32 end;
+ 
+     inWords = *bufSizep;	/* max to copy out */
+     outWords = 0;		/* amount copied out */
+     startCookie = *cookiep;
+     outFlags = 0;
+     inFlags = *flagsp;
+     code = 0;
+ 
+     ObtainWriteLock(&logp->lock, 185);
+     if (!logp->datap) {
+ 	ReleaseWriteLock(&logp->lock);
+ 	goto done;
+     }
+ 
+     /* first, compute the index of the start cookie we've been passed */
+     while (1) {
+ 	/* (re-)compute where we should start */
+ 	if (startCookie < logp->baseCookie) {
+ 	    if (startCookie)	/* missed some output */
+ 		outFlags |= ICL_COPYOUTF_MISSEDSOME;
+ 	    /* skip to the first available record */
+ 	    startCookie = logp->baseCookie;
+ 	    *cookiep = startCookie;
+ 	}
+ 
+ 	/* compute where we find the first element to copy out */
+ 	ix = logp->firstUsed + startCookie - logp->baseCookie;
+ 	if (ix >= logp->logSize)
+ 	    ix -= logp->logSize;
+ 
+ 	/* if have some data now, break out and process it */
+ 	if (startCookie - logp->baseCookie < logp->logElements)
+ 	    break;
+ 
+ 	/* At end of log, so clear it if we need to */
+ 	if (inFlags & ICL_COPYOUTF_CLRAFTERREAD) {
+ 	    logp->firstUsed = logp->firstFree = 0;
+ 	    logp->logElements = 0;
+ 	}
+ 	/* otherwise, either wait for the data to arrive, or return */
+ 	if (!(inFlags & ICL_COPYOUTF_WAITIO)) {
+ 	    ReleaseWriteLock(&logp->lock);
+ 	    code = 0;
+ 	    goto done;
+ 	}
+ 	logp->states |= ICL_LOGF_WAITING;
+ 	ReleaseWriteLock(&logp->lock);
+ 	afs_osi_Sleep(&logp->lock);
+ 	ObtainWriteLock(&logp->lock, 186);
+     }
+     /* copy out data from ix to logSize or firstFree, depending
+      * upon whether firstUsed <= firstFree (no wrap) or otherwise.
+      * be careful not to copy out more than nwords.
+      */
+     if (ix >= logp->firstUsed) {
+ 	if (logp->firstUsed <= logp->firstFree)
+ 	    /* no wrapping */
+ 	    end = logp->firstFree;	/* first element not to copy */
+ 	else
+ 	    end = logp->logSize;
+ 	nwords = inWords;	/* don't copy more than this */
+ 	if (end - ix < nwords)
+ 	    nwords = end - ix;
+ 	if (nwords > 0) {
+ 	    memcpy((char *)bufferp, (char *)&logp->datap[ix],
+ 		   sizeof(afs_int32) * nwords);
+ 	    outWords += nwords;
+ 	    inWords -= nwords;
+ 	    bufferp += nwords;
+ 	}
+ 	/* if we're going to copy more out below, we'll start here */
+ 	ix = 0;
+     }
+     /* now, if active part of the log has wrapped, there's more stuff
+      * starting at the head of the log.  Copy out more from there.
+      */
+     if (logp->firstUsed > logp->firstFree && ix < logp->firstFree
+ 	&& inWords > 0) {
+ 	/* (more to) copy out from the wrapped section at the
+ 	 * start of the log.  May get here even if didn't copy any
+ 	 * above, if the cookie points directly into the wrapped section.
+ 	 */
+ 	nwords = inWords;
+ 	if (logp->firstFree - ix < nwords)
+ 	    nwords = logp->firstFree - ix;
+ 	memcpy((char *)bufferp, (char *)&logp->datap[ix],
+ 	       sizeof(afs_int32) * nwords);
+ 	outWords += nwords;
+ 	inWords -= nwords;
+ 	bufferp += nwords;
+     }
+ 
+     ReleaseWriteLock(&logp->lock);
+ 
+   done:
+     if (code == 0) {
+ 	*bufSizep = outWords;
+ 	*flagsp = outFlags;
+     }
+     return code;
+ }
+ 
+ /* return basic parameter information about a log */
+ int
+ afs_icl_GetLogParms(struct afs_icl_log *logp, afs_int32 * maxSizep,
+ 		    afs_int32 * curSizep)
+ {
+     ObtainReadLock(&logp->lock);
+     *maxSizep = logp->logSize;
+     *curSizep = logp->logElements;
+     ReleaseReadLock(&logp->lock);
+     return 0;
+ }
+ 
+ 
+ /* hold and release logs */
+ int
+ afs_icl_LogHold(register struct afs_icl_log *logp)
+ {
+     ObtainWriteLock(&afs_icl_lock, 187);
+     logp->refCount++;
+     ReleaseWriteLock(&afs_icl_lock);
+     return 0;
+ }
+ 
+ /* hold and release logs, called with lock already held */
+ int
+ afs_icl_LogHoldNL(register struct afs_icl_log *logp)
+ {
+     logp->refCount++;
+     return 0;
+ }
+ 
+ /* keep track of how many sets believe the log itself is allocated */
+ int
+ afs_icl_LogUse(register struct afs_icl_log *logp)
+ {
+     ObtainWriteLock(&logp->lock, 188);
+     if (logp->setCount == 0) {
+ 	/* this is the first set actually using the log -- allocate it */
+ 	if (logp->logSize == 0) {
+ 	    /* we weren't passed in a hint and it wasn't set */
+ 	    logp->logSize = ICL_DEFAULT_LOGSIZE;
+ 	}
+ 	logp->datap =
+ 	    (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logp->logSize);
+ #ifdef	KERNEL_HAVE_PIN
+ 	pin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
+ #endif
+     }
+     logp->setCount++;
+     ReleaseWriteLock(&logp->lock);
+     return 0;
+ }
+ 
+ /* decrement the number of real users of the log, free if possible */
+ int
+ afs_icl_LogFreeUse(register struct afs_icl_log *logp)
+ {
+     ObtainWriteLock(&logp->lock, 189);
+     if (--logp->setCount == 0) {
+ 	/* no more users -- free it (but keep log structure around) */
+ #ifdef	KERNEL_HAVE_PIN
+ 	unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
+ #endif
+ 	afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize);
+ 	logp->firstUsed = logp->firstFree = 0;
+ 	logp->logElements = 0;
+ 	logp->datap = NULL;
+     }
+     ReleaseWriteLock(&logp->lock);
+     return 0;
+ }
+ 
+ /* set the size of the log to 'logSize' */
+ int
+ afs_icl_LogSetSize(register struct afs_icl_log *logp, afs_int32 logSize)
+ {
+     ObtainWriteLock(&logp->lock, 190);
+     if (!logp->datap) {
+ 	/* nothing to worry about since it's not allocated */
+ 	logp->logSize = logSize;
+     } else {
+ 	/* reset log */
+ 	logp->firstUsed = logp->firstFree = 0;
+ 	logp->logElements = 0;
+ 
+ 	/* free and allocate a new one */
+ #ifdef	KERNEL_HAVE_PIN
+ 	unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
+ #endif
+ 	afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize);
+ 	logp->datap =
+ 	    (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logSize);
+ #ifdef	KERNEL_HAVE_PIN
+ 	pin((char *)logp->datap, sizeof(afs_int32) * logSize);
+ #endif
+ 	logp->logSize = logSize;
+     }
+     ReleaseWriteLock(&logp->lock);
+ 
+     return 0;
+ }
+ 
+ /* free a log.  Called with afs_icl_lock locked. */
+ int
+ afs_icl_ZapLog(register struct afs_icl_log *logp)
+ {
+     register struct afs_icl_log **lpp, *tp;
+ 
+     for (lpp = &afs_icl_allLogs, tp = *lpp; tp; lpp = &tp->nextp, tp = *lpp) {
+ 	if (tp == logp) {
+ 	    /* found the dude we want to remove */
+ 	    *lpp = logp->nextp;
+ 	    osi_FreeSmallSpace(logp->name);
+ #ifdef KERNEL_HAVE_PIN
+ 	    unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
+ #endif
+ 	    afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize);
+ 	    osi_FreeSmallSpace(logp);
+ 	    break;		/* won't find it twice */
+ 	}
+     }
+     return 0;
+ }
+ 
+ /* do the release, watching for deleted entries */
+ int
+ afs_icl_LogRele(register struct afs_icl_log *logp)
+ {
+     ObtainWriteLock(&afs_icl_lock, 191);
+     if (--logp->refCount == 0 && (logp->states & ICL_LOGF_DELETED)) {
+ 	afs_icl_ZapLog(logp);	/* destroys logp's lock! */
+     }
+     ReleaseWriteLock(&afs_icl_lock);
+     return 0;
+ }
+ 
+ /* do the release, watching for deleted entries, log already held */
+ int
+ afs_icl_LogReleNL(register struct afs_icl_log *logp)
+ {
+     if (--logp->refCount == 0 && (logp->states & ICL_LOGF_DELETED)) {
+ 	afs_icl_ZapLog(logp);	/* destroys logp's lock! */
+     }
+     return 0;
+ }
+ 
+ /* zero out the log */
+ int
+ afs_icl_ZeroLog(register struct afs_icl_log *logp)
+ {
+     ObtainWriteLock(&logp->lock, 192);
+     logp->firstUsed = logp->firstFree = 0;
+     logp->logElements = 0;
+     logp->baseCookie = 0;
+     ReleaseWriteLock(&logp->lock);
+     return 0;
+ }
+ 
+ /* free a log entry, and drop its reference count */
+ int
+ afs_icl_LogFree(register struct afs_icl_log *logp)
+ {
+     ObtainWriteLock(&logp->lock, 193);
+     logp->states |= ICL_LOGF_DELETED;
+     ReleaseWriteLock(&logp->lock);
+     afs_icl_LogRele(logp);
+     return 0;
+ }
+ 
+ /* find a log by name, returning it held */
+ struct afs_icl_log *
+ afs_icl_FindLog(char *name)
+ {
+     register struct afs_icl_log *tp;
+     ObtainWriteLock(&afs_icl_lock, 194);
+     for (tp = afs_icl_allLogs; tp; tp = tp->nextp) {
+ 	if (strcmp(tp->name, name) == 0) {
+ 	    /* this is the dude we want */
+ 	    tp->refCount++;
+ 	    break;
+ 	}
+     }
+     ReleaseWriteLock(&afs_icl_lock);
+     return tp;
+ }
+ 
+ int
+ afs_icl_EnumerateLogs(int (*aproc)
+ 		        (char *name, char *arock, struct afs_icl_log * tp),
+ 		      char *arock)
+ {
+     register struct afs_icl_log *tp;
+     register afs_int32 code;
+ 
+     code = 0;
+     ObtainWriteLock(&afs_icl_lock, 195);
+     for (tp = afs_icl_allLogs; tp; tp = tp->nextp) {
+ 	tp->refCount++;		/* hold this guy */
+ 	ReleaseWriteLock(&afs_icl_lock);
+ 	ObtainReadLock(&tp->lock);
+ 	code = (*aproc) (tp->name, arock, tp);
+ 	ReleaseReadLock(&tp->lock);
+ 	ObtainWriteLock(&afs_icl_lock, 196);
+ 	if (--tp->refCount == 0)
+ 	    afs_icl_ZapLog(tp);
+ 	if (code)
+ 	    break;
+     }
+     ReleaseWriteLock(&afs_icl_lock);
+     return code;
+ }
+ 
+ struct afs_icl_set *afs_icl_allSets = 0;
+ 
+ int
+ afs_icl_CreateSet(char *name, struct afs_icl_log *baseLogp,
+ 		  struct afs_icl_log *fatalLogp,
+ 		  struct afs_icl_set **outSetpp)
+ {
+     return afs_icl_CreateSetWithFlags(name, baseLogp, fatalLogp,
+ 				      /*flags */ 0, outSetpp);
+ }
+ 
+ /* create a set, given pointers to base and fatal logs, if any.
+  * Logs are unlocked, but referenced, and *outSetpp is returned
+  * referenced.  Function bumps reference count on logs, since it
+  * addds references from the new afs_icl_set.  When the set is destroyed,
+  * those references will be released.
+  */
+ int
+ afs_icl_CreateSetWithFlags(char *name, struct afs_icl_log *baseLogp,
+ 			   struct afs_icl_log *fatalLogp, afs_uint32 flags,
+ 			   struct afs_icl_set **outSetpp)
+ {
+     register struct afs_icl_set *setp;
+     register int i;
+     afs_int32 states = ICL_DEFAULT_SET_STATES;
+ 
+     ObtainWriteLock(&afs_icl_lock, 197);
+     if (!afs_icl_inited)
+ 	afs_icl_Init();
+ 
+     for (setp = afs_icl_allSets; setp; setp = setp->nextp) {
+ 	if (strcmp(setp->name, name) == 0) {
+ 	    setp->refCount++;
+ 	    *outSetpp = setp;
+ 	    if (flags & ICL_CRSET_FLAG_PERSISTENT) {
+ 		ObtainWriteLock(&setp->lock, 198);
+ 		setp->states |= ICL_SETF_PERSISTENT;
+ 		ReleaseWriteLock(&setp->lock);
+ 	    }
+ 	    ReleaseWriteLock(&afs_icl_lock);
+ 	    return 0;
+ 	}
+     }
+ 
+     /* determine initial state */
+     if (flags & ICL_CRSET_FLAG_DEFAULT_ON)
+ 	states = ICL_SETF_ACTIVE;
+     else if (flags & ICL_CRSET_FLAG_DEFAULT_OFF)
+ 	states = ICL_SETF_FREED;
+     if (flags & ICL_CRSET_FLAG_PERSISTENT)
+ 	states |= ICL_SETF_PERSISTENT;
+ 
+     setp = (struct afs_icl_set *)afs_osi_Alloc(sizeof(struct afs_icl_set));
+     memset((caddr_t) setp, 0, sizeof(*setp));
+     setp->refCount = 1;
+     if (states & ICL_SETF_FREED)
+ 	states &= ~ICL_SETF_ACTIVE;	/* if freed, can't be active */
+     setp->states = states;
+ 
+     LOCK_INIT(&setp->lock, "setp lock");
+     /* next lock is obtained in wrong order, hierarchy-wise, but
+      * it doesn't matter, since no one can find this lock yet, since
+      * the afs_icl_lock is still held, and thus the obtain can't block.
+      */
+     ObtainWriteLock(&setp->lock, 199);
+     setp->name = osi_AllocSmallSpace(strlen(name) + 1);
+     strcpy(setp->name, name);
+     setp->nevents = ICL_DEFAULTEVENTS;
+     setp->eventFlags = afs_osi_Alloc(ICL_DEFAULTEVENTS);
+ #ifdef	KERNEL_HAVE_PIN
+     pin((char *)setp->eventFlags, ICL_DEFAULTEVENTS);
+ #endif
+     for (i = 0; i < ICL_DEFAULTEVENTS; i++)
+ 	setp->eventFlags[i] = 0xff;	/* default to enabled */
+ 
+     /* update this global info under the afs_icl_lock */
+     setp->nextp = afs_icl_allSets;
+     afs_icl_allSets = setp;
+     ReleaseWriteLock(&afs_icl_lock);
+ 
+     /* set's basic lock is still held, so we can finish init */
+     if (baseLogp) {
+ 	setp->logs[0] = baseLogp;
+ 	afs_icl_LogHold(baseLogp);
+ 	if (!(setp->states & ICL_SETF_FREED))
+ 	    afs_icl_LogUse(baseLogp);	/* log is actually being used */
+     }
+     if (fatalLogp) {
+ 	setp->logs[1] = fatalLogp;
+ 	afs_icl_LogHold(fatalLogp);
+ 	if (!(setp->states & ICL_SETF_FREED))
+ 	    afs_icl_LogUse(fatalLogp);	/* log is actually being used */
+     }
+     ReleaseWriteLock(&setp->lock);
+ 
+     *outSetpp = setp;
+     return 0;
+ }
+ 
+ /* function to change event enabling information for a particular set */
+ int
+ afs_icl_SetEnable(struct afs_icl_set *setp, afs_int32 eventID, int setValue)
+ {
+     char *tp;
+ 
+     ObtainWriteLock(&setp->lock, 200);
+     if (!ICL_EVENTOK(setp, eventID)) {
+ 	ReleaseWriteLock(&setp->lock);
+ 	return -1;
+     }
+     tp = &setp->eventFlags[ICL_EVENTBYTE(eventID)];
+     if (setValue)
+ 	*tp |= ICL_EVENTMASK(eventID);
+     else
+ 	*tp &= ~(ICL_EVENTMASK(eventID));
+     ReleaseWriteLock(&setp->lock);
+     return 0;
+ }
+ 
+ /* return indication of whether a particular event ID is enabled
+  * for tracing.  If *getValuep is set to 0, the event is disabled,
+  * otherwise it is enabled.  All events start out enabled by default.
+  */
+ int
+ afs_icl_GetEnable(struct afs_icl_set *setp, afs_int32 eventID, int *getValuep)
+ {
+     ObtainReadLock(&setp->lock);
+     if (!ICL_EVENTOK(setp, eventID)) {
+ 	ReleaseWriteLock(&setp->lock);
+ 	return -1;
+     }
+     if (setp->eventFlags[ICL_EVENTBYTE(eventID)] & ICL_EVENTMASK(eventID))
+ 	*getValuep = 1;
+     else
+ 	*getValuep = 0;
+     ReleaseReadLock(&setp->lock);
+     return 0;
+ }
+ 
+ /* hold and release event sets */
+ int
+ afs_icl_SetHold(register struct afs_icl_set *setp)
+ {
+     ObtainWriteLock(&afs_icl_lock, 201);
+     setp->refCount++;
+     ReleaseWriteLock(&afs_icl_lock);
+     return 0;
+ }
+ 
+ /* free a set.  Called with afs_icl_lock locked */
+ int
+ afs_icl_ZapSet(register struct afs_icl_set *setp)
+ {
+     register struct afs_icl_set **lpp, *tp;
+     int i;
+     register struct afs_icl_log *tlp;
+ 
+     for (lpp = &afs_icl_allSets, tp = *lpp; tp; lpp = &tp->nextp, tp = *lpp) {
+ 	if (tp == setp) {
+ 	    /* found the dude we want to remove */
+ 	    *lpp = setp->nextp;
+ 	    osi_FreeSmallSpace(setp->name);
+ #ifdef	KERNEL_HAVE_PIN
+ 	    unpin((char *)setp->eventFlags, ICL_DEFAULTEVENTS);
+ #endif
+ 	    afs_osi_Free(setp->eventFlags, ICL_DEFAULTEVENTS);
+ 	    for (i = 0; i < ICL_LOGSPERSET; i++) {
+ 		if ((tlp = setp->logs[i]))
+ 		    afs_icl_LogReleNL(tlp);
+ 	    }
+ 	    osi_FreeSmallSpace(setp);
+ 	    break;		/* won't find it twice */
+ 	}
+     }
+     return 0;
+ }
+ 
+ /* do the release, watching for deleted entries */
+ int
+ afs_icl_SetRele(register struct afs_icl_set *setp)
+ {
+     ObtainWriteLock(&afs_icl_lock, 202);
+     if (--setp->refCount == 0 && (setp->states & ICL_SETF_DELETED)) {
+ 	afs_icl_ZapSet(setp);	/* destroys setp's lock! */
+     }
+     ReleaseWriteLock(&afs_icl_lock);
+     return 0;
+ }
+ 
+ /* free a set entry, dropping its reference count */
+ int
+ afs_icl_SetFree(register struct afs_icl_set *setp)
+ {
+     ObtainWriteLock(&setp->lock, 203);
+     setp->states |= ICL_SETF_DELETED;
+     ReleaseWriteLock(&setp->lock);
+     afs_icl_SetRele(setp);
+     return 0;
+ }
+ 
+ /* find a set by name, returning it held */
+ struct afs_icl_set *
+ afs_icl_FindSet(char *name)
+ {
+     register struct afs_icl_set *tp;
+     ObtainWriteLock(&afs_icl_lock, 204);
+     for (tp = afs_icl_allSets; tp; tp = tp->nextp) {
+ 	if (strcmp(tp->name, name) == 0) {
+ 	    /* this is the dude we want */
+ 	    tp->refCount++;
+ 	    break;
+ 	}
+     }
+     ReleaseWriteLock(&afs_icl_lock);
+     return tp;
+ }
+ 
+ /* zero out all the logs in the set */
+ int
+ afs_icl_ZeroSet(struct afs_icl_set *setp)
+ {
+     register int i;
+     int code = 0;
+     int tcode;
+     struct afs_icl_log *logp;
+ 
+     ObtainReadLock(&setp->lock);
+     for (i = 0; i < ICL_LOGSPERSET; i++) {
+ 	logp = setp->logs[i];
+ 	if (logp) {
+ 	    afs_icl_LogHold(logp);
+ 	    tcode = afs_icl_ZeroLog(logp);
+ 	    if (tcode != 0)
+ 		code = tcode;	/* save the last bad one */
+ 	    afs_icl_LogRele(logp);
+ 	}
+     }
+     ReleaseReadLock(&setp->lock);
+     return code;
+ }
+ 
+ int
+ afs_icl_EnumerateSets(int (*aproc)
+ 		        (char *name, char *arock, struct afs_icl_log * tp),
+ 		      char *arock)
+ {
+     register struct afs_icl_set *tp, *np;
+     register afs_int32 code;
+ 
+     code = 0;
+     ObtainWriteLock(&afs_icl_lock, 205);
+     for (tp = afs_icl_allSets; tp; tp = np) {
+ 	tp->refCount++;		/* hold this guy */
+ 	ReleaseWriteLock(&afs_icl_lock);
+ 	code = (*aproc) (tp->name, arock, (struct afs_icl_log *)tp);
+ 	ObtainWriteLock(&afs_icl_lock, 206);
+ 	np = tp->nextp;		/* tp may disappear next, but not np */
+ 	if (--tp->refCount == 0 && (tp->states & ICL_SETF_DELETED))
+ 	    afs_icl_ZapSet(tp);
+ 	if (code)
+ 	    break;
+     }
+     ReleaseWriteLock(&afs_icl_lock);
+     return code;
+ }
+ 
+ int
+ afs_icl_AddLogToSet(struct afs_icl_set *setp, struct afs_icl_log *newlogp)
+ {
+     register int i;
+     int code = -1;
+ 
+     ObtainWriteLock(&setp->lock, 207);
+     for (i = 0; i < ICL_LOGSPERSET; i++) {
+ 	if (!setp->logs[i]) {
+ 	    setp->logs[i] = newlogp;
+ 	    code = i;
+ 	    afs_icl_LogHold(newlogp);
+ 	    if (!(setp->states & ICL_SETF_FREED)) {
+ 		/* bump up the number of sets using the log */
+ 		afs_icl_LogUse(newlogp);
+ 	    }
+ 	    break;
+ 	}
+     }
+     ReleaseWriteLock(&setp->lock);
+     return code;
+ }
+ 
+ int
+ afs_icl_SetSetStat(struct afs_icl_set *setp, int op)
+ {
+     int i;
+     afs_int32 code;
+     struct afs_icl_log *logp;
+ 
+     ObtainWriteLock(&setp->lock, 208);
+     switch (op) {
+     case ICL_OP_SS_ACTIVATE:	/* activate a log */
+ 	/*
+ 	 * If we are not already active, see if we have released
+ 	 * our demand that the log be allocated (FREED set).  If
+ 	 * we have, reassert our desire.
+ 	 */
+ 	if (!(setp->states & ICL_SETF_ACTIVE)) {
+ 	    if (setp->states & ICL_SETF_FREED) {
+ 		/* have to reassert desire for logs */
+ 		for (i = 0; i < ICL_LOGSPERSET; i++) {
+ 		    logp = setp->logs[i];
+ 		    if (logp) {
+ 			afs_icl_LogHold(logp);
+ 			afs_icl_LogUse(logp);
+ 			afs_icl_LogRele(logp);
+ 		    }
+ 		}
+ 		setp->states &= ~ICL_SETF_FREED;
+ 	    }
+ 	    setp->states |= ICL_SETF_ACTIVE;
+ 	}
+ 	code = 0;
+ 	break;
+ 
+     case ICL_OP_SS_DEACTIVATE:	/* deactivate a log */
+ 	/* this doesn't require anything beyond clearing the ACTIVE flag */
+ 	setp->states &= ~ICL_SETF_ACTIVE;
+ 	code = 0;
+ 	break;
+ 
+     case ICL_OP_SS_FREE:	/* deassert design for log */
+ 	/* 
+ 	 * if we are already in this state, do nothing; otherwise
+ 	 * deassert desire for log
+ 	 */
+ 	if (setp->states & ICL_SETF_ACTIVE)
+ 	    code = EINVAL;
+ 	else {
+ 	    if (!(setp->states & ICL_SETF_FREED)) {
+ 		for (i = 0; i < ICL_LOGSPERSET; i++) {
+ 		    logp = setp->logs[i];
+ 		    if (logp) {
+ 			afs_icl_LogHold(logp);
+ 			afs_icl_LogFreeUse(logp);
+ 			afs_icl_LogRele(logp);
+ 		    }
+ 		}
+ 		setp->states |= ICL_SETF_FREED;
+ 	    }
+ 	    code = 0;
+ 	}
+ 	break;
+ 
+     default:
+ 	code = EINVAL;
+     }
+     ReleaseWriteLock(&setp->lock);
+     return code;
+ }
Index: openafs/src/afs/afs_init.c
diff -c openafs/src/afs/afs_init.c:1.37 openafs/src/afs/afs_init.c:1.37.4.3
*** openafs/src/afs/afs_init.c:1.37	Thu Oct 13 11:12:07 2005
--- openafs/src/afs/afs_init.c	Mon Jul 31 17:27:38 2006
***************
*** 17,23 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_init.c,v 1.37 2005/10/13 15:12:07 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.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 39,44 ****
--- 39,45 ----
  				 * local value of @sys */
  char *afs_sysnamelist[MAXNUMSYSNAMES];	/* For support of a list of sysname */
  int afs_sysnamecount = 0;
+ int afs_sysnamegen = 0;
  struct volume *Initialafs_freeVolList;
  int afs_memvolumes = 0;
  #if defined(AFS_XBSD_ENV)
***************
*** 492,497 ****
--- 493,499 ----
  	afs_sysname = afs_sysnamelist[0];
  	strcpy(afs_sysname, SYS_NAME);
  	afs_sysnamecount = 1;
+ 	afs_sysnamegen++;
      }
  
      secobj = rxnull_NewServerSecurityObject();
Index: openafs/src/afs/afs_md5.c
diff -c /dev/null openafs/src/afs/afs_md5.c:1.1.2.3
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_md5.c	Wed Aug  2 15:01:22 2006
***************
*** 0 ****
--- 1,285 ----
+ /*
+  * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan
+  * (Royal Institute of Technology, Stockholm, Sweden).
+  * All rights reserved.
+  * 
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  * 
+  * 3. Neither the name of the Institute nor the names of its contributors
+  *    may be used to endorse or promote products derived from this software
+  *    without specific prior written permission.
+  * 
+  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  * SUCH DAMAGE.
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ #include "afs/sysincludes.h"
+ #include "afsincludes.h"
+ 
+ 
+ RCSID("$Id: afs_md5.c,v 1.1.2.3 2006/08/02 19:01:22 shadow Exp $");
+ 
+ #include "afs_md5.h"
+ 
+ #define A m->counter[0]
+ #define B m->counter[1]
+ #define C m->counter[2]
+ #define D m->counter[3]
+ #define X data
+ 
+ void
+ AFS_MD5_Init(struct afs_md5 *m)
+ {
+     m->sz[0] = 0;
+     m->sz[1] = 0;
+     D = 0x10325476;
+     C = 0x98badcfe;
+     B = 0xefcdab89;
+     A = 0x67452301;
+ }
+ 
+ #define F(x,y,z) CRAYFIX((x & y) | (~x & z))
+ #define G(x,y,z) CRAYFIX((x & z) | (y & ~z))
+ #define H(x,y,z) (x ^ y ^ z)
+ #define I(x,y,z) CRAYFIX(y ^ (x | ~z))
+ 
+ #define DOIT(a,b,c,d,k,s,i,OP) \
+ a = b + cshift(a + OP(b,c,d) + X[k] + (i), s)
+ 
+ #define DO1(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,F)
+ #define DO2(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,G)
+ #define DO3(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,H)
+ #define DO4(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,I)
+ 
+ static inline void
+ calc(struct afs_md5 *m, afs_uint32 * data)
+ {
+     afs_uint32 AA, BB, CC, DD;
+ 
+     AA = A;
+     BB = B;
+     CC = C;
+     DD = D;
+ 
+     /* Round 1 */
+ 
+     DO1(A, B, C, D, 0, 7, 0xd76aa478);
+     DO1(D, A, B, C, 1, 12, 0xe8c7b756);
+     DO1(C, D, A, B, 2, 17, 0x242070db);
+     DO1(B, C, D, A, 3, 22, 0xc1bdceee);
+ 
+     DO1(A, B, C, D, 4, 7, 0xf57c0faf);
+     DO1(D, A, B, C, 5, 12, 0x4787c62a);
+     DO1(C, D, A, B, 6, 17, 0xa8304613);
+     DO1(B, C, D, A, 7, 22, 0xfd469501);
+ 
+     DO1(A, B, C, D, 8, 7, 0x698098d8);
+     DO1(D, A, B, C, 9, 12, 0x8b44f7af);
+     DO1(C, D, A, B, 10, 17, 0xffff5bb1);
+     DO1(B, C, D, A, 11, 22, 0x895cd7be);
+ 
+     DO1(A, B, C, D, 12, 7, 0x6b901122);
+     DO1(D, A, B, C, 13, 12, 0xfd987193);
+     DO1(C, D, A, B, 14, 17, 0xa679438e);
+     DO1(B, C, D, A, 15, 22, 0x49b40821);
+ 
+     /* Round 2 */
+ 
+     DO2(A, B, C, D, 1, 5, 0xf61e2562);
+     DO2(D, A, B, C, 6, 9, 0xc040b340);
+     DO2(C, D, A, B, 11, 14, 0x265e5a51);
+     DO2(B, C, D, A, 0, 20, 0xe9b6c7aa);
+ 
+     DO2(A, B, C, D, 5, 5, 0xd62f105d);
+     DO2(D, A, B, C, 10, 9, 0x2441453);
+     DO2(C, D, A, B, 15, 14, 0xd8a1e681);
+     DO2(B, C, D, A, 4, 20, 0xe7d3fbc8);
+ 
+     DO2(A, B, C, D, 9, 5, 0x21e1cde6);
+     DO2(D, A, B, C, 14, 9, 0xc33707d6);
+     DO2(C, D, A, B, 3, 14, 0xf4d50d87);
+     DO2(B, C, D, A, 8, 20, 0x455a14ed);
+ 
+     DO2(A, B, C, D, 13, 5, 0xa9e3e905);
+     DO2(D, A, B, C, 2, 9, 0xfcefa3f8);
+     DO2(C, D, A, B, 7, 14, 0x676f02d9);
+     DO2(B, C, D, A, 12, 20, 0x8d2a4c8a);
+ 
+     /* Round 3 */
+ 
+     DO3(A, B, C, D, 5, 4, 0xfffa3942);
+     DO3(D, A, B, C, 8, 11, 0x8771f681);
+     DO3(C, D, A, B, 11, 16, 0x6d9d6122);
+     DO3(B, C, D, A, 14, 23, 0xfde5380c);
+ 
+     DO3(A, B, C, D, 1, 4, 0xa4beea44);
+     DO3(D, A, B, C, 4, 11, 0x4bdecfa9);
+     DO3(C, D, A, B, 7, 16, 0xf6bb4b60);
+     DO3(B, C, D, A, 10, 23, 0xbebfbc70);
+ 
+     DO3(A, B, C, D, 13, 4, 0x289b7ec6);
+     DO3(D, A, B, C, 0, 11, 0xeaa127fa);
+     DO3(C, D, A, B, 3, 16, 0xd4ef3085);
+     DO3(B, C, D, A, 6, 23, 0x4881d05);
+ 
+     DO3(A, B, C, D, 9, 4, 0xd9d4d039);
+     DO3(D, A, B, C, 12, 11, 0xe6db99e5);
+     DO3(C, D, A, B, 15, 16, 0x1fa27cf8);
+     DO3(B, C, D, A, 2, 23, 0xc4ac5665);
+ 
+     /* Round 4 */
+ 
+     DO4(A, B, C, D, 0, 6, 0xf4292244);
+     DO4(D, A, B, C, 7, 10, 0x432aff97);
+     DO4(C, D, A, B, 14, 15, 0xab9423a7);
+     DO4(B, C, D, A, 5, 21, 0xfc93a039);
+ 
+     DO4(A, B, C, D, 12, 6, 0x655b59c3);
+     DO4(D, A, B, C, 3, 10, 0x8f0ccc92);
+     DO4(C, D, A, B, 10, 15, 0xffeff47d);
+     DO4(B, C, D, A, 1, 21, 0x85845dd1);
+ 
+     DO4(A, B, C, D, 8, 6, 0x6fa87e4f);
+     DO4(D, A, B, C, 15, 10, 0xfe2ce6e0);
+     DO4(C, D, A, B, 6, 15, 0xa3014314);
+     DO4(B, C, D, A, 13, 21, 0x4e0811a1);
+ 
+     DO4(A, B, C, D, 4, 6, 0xf7537e82);
+     DO4(D, A, B, C, 11, 10, 0xbd3af235);
+     DO4(C, D, A, B, 2, 15, 0x2ad7d2bb);
+     DO4(B, C, D, A, 9, 21, 0xeb86d391);
+ 
+     A += AA;
+     B += BB;
+     C += CC;
+     D += DD;
+ }
+ 
+ /*
+  * From `Performance analysis of MD5' by Joseph D. Touch <touch@isi.edu>
+  */
+ 
+ #if defined(WORDS_BIGENDIAN)
+ static inline afs_uint32
+ swap_afs_uint32(afs_uint32 t)
+ {
+     afs_uint32 temp1, temp2;
+ 
+     temp1 = cshift(t, 16);
+     temp2 = temp1 >> 8;
+     temp1 &= 0x00ff00ff;
+     temp2 &= 0x00ff00ff;
+     temp1 <<= 8;
+     return temp1 | temp2;
+ }
+ #endif
+ 
+ struct x32 {
+     unsigned int a:32;
+     unsigned int b:32;
+ };
+ 
+ void
+ AFS_MD5_Update(struct afs_md5 *m, const void *v, size_t len)
+ {
+     const unsigned char *p = v;
+     size_t old_sz = m->sz[0];
+     size_t offset;
+ 
+     m->sz[0] += len * 8;
+     if (m->sz[0] < old_sz)
+ 	++m->sz[1];
+     offset = (old_sz / 8) % 64;
+     while (len > 0) {
+ 	size_t l = min(len, 64 - offset);
+ 	memcpy(m->save + offset, p, l);
+ 	offset += l;
+ 	p += l;
+ 	len -= l;
+ 	if (offset == 64) {
+ #if defined(WORDS_BIGENDIAN)
+ 	    int i;
+ 	    afs_uint32 cur[16];
+ 	    struct x32 *ui = (struct x32 *)m->save;
+ 	    for (i = 0; i < 8; i++) {
+ 		cur[2 * i + 0] = swap_afs_uint32(ui[i].a);
+ 		cur[2 * i + 1] = swap_afs_uint32(ui[i].b);
+ 	    }
+ 	    calc(m, cur);
+ #else
+ 	    calc(m, (afs_uint32 *) m->save);
+ #endif
+ 	    offset = 0;
+ 	}
+     }
+ }
+ 
+ void
+ AFS_MD5_Final(void *res, struct afs_md5 *m)
+ {
+     static unsigned char zeros[72];
+     unsigned offset = (m->sz[0] / 8) % 64;
+     unsigned int dstart = (120 - offset - 1) % 64 + 1;
+ 
+     *zeros = 0x80;
+     memset(zeros + 1, 0, sizeof(zeros) - 1);
+     zeros[dstart + 0] = (m->sz[0] >> 0) & 0xff;
+     zeros[dstart + 1] = (m->sz[0] >> 8) & 0xff;
+     zeros[dstart + 2] = (m->sz[0] >> 16) & 0xff;
+     zeros[dstart + 3] = (m->sz[0] >> 24) & 0xff;
+     zeros[dstart + 4] = (m->sz[1] >> 0) & 0xff;
+     zeros[dstart + 5] = (m->sz[1] >> 8) & 0xff;
+     zeros[dstart + 6] = (m->sz[1] >> 16) & 0xff;
+     zeros[dstart + 7] = (m->sz[1] >> 24) & 0xff;
+     AFS_MD5_Update(m, zeros, dstart + 8);
+     {
+ 	int i;
+ 	unsigned char *r = (unsigned char *)res;
+ 
+ 	for (i = 0; i < 4; ++i) {
+ 	    r[4 * i] = m->counter[i] & 0xFF;
+ 	    r[4 * i + 1] = (m->counter[i] >> 8) & 0xFF;
+ 	    r[4 * i + 2] = (m->counter[i] >> 16) & 0xFF;
+ 	    r[4 * i + 3] = (m->counter[i] >> 24) & 0xFF;
+ 	}
+     }
+ #if 0
+     {
+ 	int i;
+ 	afs_uint32 *r = (afs_uint32 *) res;
+ 
+ 	for (i = 0; i < 4; ++i)
+ 	    r[i] = swap_afs_uint32(m->counter[i]);
+     }
+ #endif
+ }
+ 
+ void
+ AFS_MD5_String(void *res, const void *v, size_t len)
+ {
+     struct afs_md5 m;
+ 
+     AFS_MD5_Init(&m);
+     AFS_MD5_Update(&m, v, len);
+     AFS_MD5_Final(res, &m);
+ }
Index: openafs/src/afs/afs_md5.h
diff -c /dev/null openafs/src/afs/afs_md5.h:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_md5.h	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,76 ----
+ /*
+  * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan
+  * (Royal Institute of Technology, Stockholm, Sweden).
+  * All rights reserved.
+  * 
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  * 
+  * 3. Neither the name of the Institute nor the names of its contributors
+  *    may be used to endorse or promote products derived from this software
+  *    without specific prior written permission.
+  * 
+  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  * SUCH DAMAGE.
+  */
+ 
+ /* $Id: afs_md5.h,v 1.1.2.2 2006/07/31 21:27:38 shadow Exp $ */
+ 
+ 
+ struct afs_md5 {
+     unsigned int sz[2];
+     afs_uint32 counter[4];
+     unsigned char save[64];
+ };
+ 
+ void AFS_MD5_Init(struct afs_md5 *m);
+ void AFS_MD5_Update(struct afs_md5 *m, const void *p, size_t len);
+ void AFS_MD5_Final(void *res, struct afs_md5 *m);	/* afs_uint32 res[4] */
+ void AFS_MD5_String(void *res, const void *v, size_t len);
+ 
+ /* stuff in common between md4, md5, and sha1 */
+ 
+ #ifndef min
+ #define min(a,b) (((a)>(b))?(b):(a))
+ #endif
+ 
+ /* Vector Crays doesn't have a good 32-bit type, or more precisely,
+    int32_t as defined by <bind/bitypes.h> isn't 32 bits, and we don't
+    want to depend in being able to redefine this type.  To cope with
+    this we have to clamp the result in some places to [0,2^32); no
+    need to do this on other machines.  Did I say this was a mess?
+    */
+ 
+ #ifdef _CRAY
+ #define CRAYFIX(X) ((X) & 0xffffffff)
+ #else
+ #define CRAYFIX(X) (X)
+ #endif
+ 
+ #if !defined(inline) && !defined(__GNUC__)
+ #define inline
+ #endif
+ 
+ static inline afs_uint32
+ cshift(afs_uint32 x, unsigned int n)
+ {
+     x = CRAYFIX(x);
+     return CRAYFIX((x << n) | (x >> (32 - n)));
+ }
Index: openafs/src/afs/afs_nfsclnt.c
diff -c openafs/src/afs/afs_nfsclnt.c:1.13 openafs/src/afs/afs_nfsclnt.c:1.13.6.3
*** openafs/src/afs/afs_nfsclnt.c:1.13	Sun Apr  3 14:09:05 2005
--- openafs/src/afs/afs_nfsclnt.c	Mon Jul 31 17:27:38 2006
***************
*** 11,26 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_nfsclnt.c,v 1.13 2005/04/03 18:09:05 shadow Exp $");
  
  #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* statistics */
  #include "afs/nfsclient.h"
  
! int afs_nfsclient_reqhandler(), afs_nfsclient_hold(), afs_PutNfsClientPag();
! int afs_nfsclient_sysname(), afs_nfsclient_GC(), afs_nfsclient_stats();
  #ifdef AFS_AIX_IAUTH_ENV
  int afs_allnfsreqs, afs_nfscalls;
  #endif
--- 11,30 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_nfsclnt.c,v 1.13.6.3 2006/07/31 21:27:38 shadow Exp $");
  
  #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* statistics */
  #include "afs/nfsclient.h"
+ #include "rx/rx_globals.h"
+ #include "afs/pagcb.h"
  
! void afs_nfsclient_hold(), afs_PutNfsClientPag(), afs_nfsclient_GC();
! static void afs_nfsclient_getcreds();
! int afs_nfsclient_sysname(), afs_nfsclient_stats(), afs_nfsclient_checkhost();
! afs_int32 afs_nfsclient_gethost();
  #ifdef AFS_AIX_IAUTH_ENV
  int afs_allnfsreqs, afs_nfscalls;
  #endif
***************
*** 33,38 ****
--- 37,44 ----
      afs_nfsclient_sysname,
      afs_nfsclient_GC,
      afs_nfsclient_stats,
+     afs_nfsclient_checkhost,
+     afs_nfsclient_gethost
  };
  
  
***************
*** 89,95 ****
  
  /* Decrement refCount; must always match a previous afs_FindNfsClientPag/afs_GetNfsClientPag call .
  It's also called whenever a unixuser structure belonging to the remote user associated with the nfsclientpag structure, np, is garbage collected. */
! int
  afs_PutNfsClientPag(np)
       register struct nfsclientpag *np;
  {
--- 95,101 ----
  
  /* Decrement refCount; must always match a previous afs_FindNfsClientPag/afs_GetNfsClientPag call .
  It's also called whenever a unixuser structure belonging to the remote user associated with the nfsclientpag structure, np, is garbage collected. */
! void
  afs_PutNfsClientPag(np)
       register struct nfsclientpag *np;
  {
***************
*** 146,152 ****
   */
  struct afs_exporter *afs_nfsexported = 0;
  static afs_int32 init_nfsexporter = 0;
! afs_nfsclient_init()
  {
  #if defined(AFS_SGIMP_ENV)
      osi_Assert(ISAFS_GLOCK());
--- 152,160 ----
   */
  struct afs_exporter *afs_nfsexported = 0;
  static afs_int32 init_nfsexporter = 0;
! 
! void
! afs_nfsclient_init(void)
  {
  #if defined(AFS_SGIMP_ENV)
      osi_Assert(ISAFS_GLOCK());
***************
*** 166,181 ****
   * phases of any remote call (via the NFS server or pioctl).
   */
  int
! afs_nfsclient_reqhandler(exporter, cred, host, pagparam, outexporter)
!      register struct afs_exporter *exporter, **outexporter;
!      struct AFS_UCRED **cred;
!      register afs_int32 host;
!      afs_int32 *pagparam;
  {
      register struct nfsclientpag *np, *tnp;
      extern struct unixuser *afs_FindUser(), *afs_GetUser();
      register struct unixuser *au = 0;
!     afs_int32 pag, code = 0;
  
      AFS_ASSERT_GLOCK();
      AFS_STATCNT(afs_nfsclient_reqhandler);
--- 174,188 ----
   * phases of any remote call (via the NFS server or pioctl).
   */
  int
! afs_nfsclient_reqhandler(struct afs_exporter *exporter,
! 			 struct AFS_UCRED **cred,
! 			 afs_int32 host, afs_int32 *pagparam,
! 			 struct afs_exporter **outexporter)
  {
      register struct nfsclientpag *np, *tnp;
      extern struct unixuser *afs_FindUser(), *afs_GetUser();
      register struct unixuser *au = 0;
!     afs_int32 uid, pag, code = 0;
  
      AFS_ASSERT_GLOCK();
      AFS_STATCNT(afs_nfsclient_reqhandler);
***************
*** 191,202 ****
      }
  /*    ObtainWriteLock(&afs_xnfsreq); */
      pag = PagInCred(*cred);
!     if (pag != NOPAG) {
  	/* Do some minimal pag verification */
  	if (pag > getpag()) {
  	    pag = NOPAG;	/* treat it as not paged since couldn't be good  */
  	} else {
! 	    if (au = afs_FindUser(pag, -1, READ_LOCK)) {
  		if (!au->exporter) {
  		    pag = NOPAG;
  		    afs_PutUser(au, READ_LOCK);
--- 198,212 ----
      }
  /*    ObtainWriteLock(&afs_xnfsreq); */
      pag = PagInCred(*cred);
!     uid = (*cred)->cr_uid;
!     if ((afs_nfsexporter->exp_states & EXP_CLIPAGS) && pag != NOPAG) {
! 	uid = pag;
!     } else if (pag != NOPAG) {
  	/* Do some minimal pag verification */
  	if (pag > getpag()) {
  	    pag = NOPAG;	/* treat it as not paged since couldn't be good  */
  	} else {
! 	    if ((au = afs_FindUser(pag, -1, READ_LOCK))) {
  		if (!au->exporter) {
  		    pag = NOPAG;
  		    afs_PutUser(au, READ_LOCK);
***************
*** 206,221 ****
  		pag = NOPAG;	/*  No unixuser struct so pag not trusted  */
  	}
      }
!     np = afs_FindNfsClientPag((*cred)->cr_uid, host, 0);
      afs_Trace4(afs_iclSetp, CM_TRACE_NFSREQH, ICL_TYPE_INT32, pag,
  	       ICL_TYPE_LONG, (*cred)->cr_uid, ICL_TYPE_INT32, host,
  	       ICL_TYPE_POINTER, np);
      if (!np) {
  	/* Even if there is a "good" pag coming in we don't accept it if no nfsclientpag struct exists for the user since that would mean that the translator rebooted and therefore we ignore all older pag values */
  #ifdef	AFS_OSF_ENV
! 	if (code = setpag(u.u_procp, cred, -1, &pag, 1)) {	/* XXX u.u_procp is a no-op XXX */
  #else
! 	if (code = setpag(cred, -1, &pag, 1)) {
  #endif
  	    if (au)
  		afs_PutUser(au, READ_LOCK);
--- 216,239 ----
  		pag = NOPAG;	/*  No unixuser struct so pag not trusted  */
  	}
      }
!     np = afs_FindNfsClientPag(uid, host, 0);
      afs_Trace4(afs_iclSetp, CM_TRACE_NFSREQH, ICL_TYPE_INT32, pag,
  	       ICL_TYPE_LONG, (*cred)->cr_uid, ICL_TYPE_INT32, host,
  	       ICL_TYPE_POINTER, np);
+     /* If remote-pags are enabled, we are no longer interested in what PAG
+      * they claimed, and from here on we should behave as if they claimed
+      * none at all, which is to say we use the (local) pag named in the
+      * nfsclientpag structure (if any).  This is deferred until here so
+      * that we can log the PAG they claimed.
+      */
+     if ((afs_nfsexporter->exp_states & EXP_CLIPAGS))
+        	pag = NOPAG;
      if (!np) {
  	/* Even if there is a "good" pag coming in we don't accept it if no nfsclientpag struct exists for the user since that would mean that the translator rebooted and therefore we ignore all older pag values */
  #ifdef	AFS_OSF_ENV
! 	if (code = setpag(u.u_procp, cred, -1, &pag, 0)) {	/* XXX u.u_procp is a no-op XXX */
  #else
! 	if ((code = setpag(cred, -1, &pag, 0))) {
  #endif
  	    if (au)
  		afs_PutUser(au, READ_LOCK);
***************
*** 225,238 ****
  #endif
  	    return (code);
  	}
! 	np = afs_GetNfsClientPag((*cred)->cr_uid, host);
  	np->pag = pag;
      } else {
  	if (pag == NOPAG) {
  #ifdef	AFS_OSF_ENV
! 	    if (code = setpag(u.u_procp, cred, np->pag, &pag, 1)) {	/* XXX u.u_procp is a no-op XXX */
  #else
! 	    if (code = setpag(cred, np->pag, &pag, 1)) {
  #endif
  		afs_PutNfsClientPag(np);
  /*		ReleaseWriteLock(&afs_xnfsreq);	*/
--- 243,257 ----
  #endif
  	    return (code);
  	}
! 	np = afs_GetNfsClientPag(uid, host);
  	np->pag = pag;
+ 	np->client_uid = (*cred)->cr_uid;
      } else {
  	if (pag == NOPAG) {
  #ifdef	AFS_OSF_ENV
! 	    if (code = setpag(u.u_procp, cred, np->pag, &pag, 0)) {	/* XXX u.u_procp is a no-op XXX */
  #else
! 	    if ((code = setpag(cred, np->pag, &pag, 0))) {
  #endif
  		afs_PutNfsClientPag(np);
  /*		ReleaseWriteLock(&afs_xnfsreq);	*/
***************
*** 247,255 ****
  	    if (tnp->uid && (tnp->uid != (afs_int32) - 2)) {	/* allow "root" initiators */
  		/* Pag doesn't belong to caller; treat it as an unpaged call too */
  #ifdef	AFS_OSF_ENV
! 		if (code = setpag(u.u_procp, cred, np->pag, &pag, 1)) {	/* XXX u.u_procp is a no-op XXX */
  #else
! 		if (code = setpag(cred, np->pag, &pag, 1)) {
  #endif
  		    afs_PutNfsClientPag(np);
  		    afs_PutUser(au, READ_LOCK);
--- 266,274 ----
  	    if (tnp->uid && (tnp->uid != (afs_int32) - 2)) {	/* allow "root" initiators */
  		/* Pag doesn't belong to caller; treat it as an unpaged call too */
  #ifdef	AFS_OSF_ENV
! 		if (code = setpag(u.u_procp, cred, np->pag, &pag, 0)) {	/* XXX u.u_procp is a no-op XXX */
  #else
! 		if ((code = setpag(cred, np->pag, &pag, 0))) {
  #endif
  		    afs_PutNfsClientPag(np);
  		    afs_PutUser(au, READ_LOCK);
***************
*** 269,274 ****
--- 288,297 ----
      if (!(au->exporter)) {	/* Created new unixuser struct */
  	np->refCount++;		/* so it won't disappear */
  	au->exporter = (struct afs_exporter *)np;
+ 	if ((afs_nfsexporter->exp_states & EXP_CALLBACK))
+ 	    afs_nfsclient_getcreds(au);
+     } else while (au->states & UNFSGetCreds) {
+ 	afs_osi_Sleep((void *)au);
      }
      *pagparam = pag;
      *outexporter = (struct afs_exporter *)np;
***************
*** 282,290 ****
      return 0;
  }
  
  
  /* It's called whenever a new unixuser structure is created for the remote user associated with the nfsclientpag structure, np */
! int
  afs_nfsclient_hold(np)
       register struct nfsclientpag *np;
  {
--- 305,427 ----
      return 0;
  }
  
+ void
+ afs_nfsclient_getcreds(au)
+     struct unixuser *au;
+ {
+     struct nfsclientpag *np = (struct nfsclientpag *)(au->exporter);
+     struct rx_securityClass *csec;
+     struct rx_connection *tconn;
+     SysNameList tsysnames;
+     CredInfos tcreds;
+     CredInfo *tcred;
+     struct unixuser *tu;
+     struct cell *tcell;
+     int code, i, cellnum;
+ 
+     au->states |= UNFSGetCreds;
+     memset(&tcreds, 0, sizeof(tcreds));
+     memset(&tsysnames, 0, sizeof(tsysnames));
+ 
+     /* Get a connection */
+     /* This sucks a little.  We should cache the connections or something.
+      * But at this point I don't yet think it's worth the effort.
+      */
+     csec = rxnull_NewClientSecurityObject();
+     AFS_GUNLOCK();
+     tconn = rx_NewConnection(np->host, htons(7001), PAGCB_SERVICEID, csec, 0);
+     AFS_GLOCK();
+ 
+     /* Get the sysname, if needed */
+     if (!np->sysnamecount) {
+ 	AFS_GUNLOCK();
+ 	code = PAGCB_GetSysName(tconn, np->uid, &tsysnames);
+ 	AFS_GLOCK();
+ 	if (code ||
+ 	    tsysnames.SysNameList_len <= 0 ||
+ 	    tsysnames.SysNameList_len > MAXNUMSYSNAMES)
+ 	    goto done;
+     
+ 	for(i = 0; i < np->sysnamecount; i++)
+ 	    afs_osi_Free(np->sysname[i], MAXSYSNAME);
+ 
+ 	np->sysnamecount = tsysnames.SysNameList_len;
+ 	for(i = 0; i < np->sysnamecount; i++)
+ 	    np->sysname[i] = tsysnames.SysNameList_val[i].sysname;
+         afs_osi_Free(tsysnames.SysNameList_val,
+                      tsysnames.SysNameList_len * sizeof(SysNameEnt));
+     }
+ 
+     /* Get credentials */
+     AFS_GUNLOCK();
+     code = PAGCB_GetCreds(tconn, np->uid, &tcreds);
+     AFS_GLOCK();
+     if (code)
+ 	goto done;
+ 
+     /* Now, set the credentials they gave us... */
+     for (i = 0; i < tcreds.CredInfos_len; i++) {
+ 	tcred = &tcreds.CredInfos_val[i];
+ 
+ 	/* Find the cell.  If it is unknown to us, punt this entry. */
+ 	tcell = afs_GetCellByName(tcred->cellname, READ_LOCK);
+ 	afs_osi_Free(tcred->cellname, strlen(tcred->cellname) + 1);
+ 	if (!tcell) {
+ 	    memset(tcred->ct.HandShakeKey, 0, 8);
+ 	    memset(tcred->st.st_val, 0, tcred->st.st_len);
+ 	    afs_osi_Free(tcred->st.st_val, tcred->st.st_len);
+ 	    continue;
+ 	}
+ 	cellnum = tcell->cellNum;
+ 	afs_PutCell(tcell, READ_LOCK);
+ 
+ 	/* Find the appropriate unixuser.  This might be the same as
+ 	 * the one we were passed (au), but that's OK.
+ 	 */
+ 	tu = afs_GetUser(np->pag, cellnum, WRITE_LOCK);
+ 	if (!(tu->exporter)) {	/* Created new unixuser struct */
+ 	    np->refCount++;		/* so it won't disappear */
+ 	    tu->exporter = (struct afs_exporter *)np;
+ 	}
+ 
+ 	/* free any old secret token, and keep the new one */
+ 	if (tu->stp != NULL) {
+ 	    afs_osi_Free(tu->stp, tu->stLen);
+ 	}
+ 	tu->stp = tcred->st.st_val;
+ 	tu->stLen = tcred->st.st_len;
+ 
+ 	/* copy the clear token */
+ 	memset(&tu->ct, 0, sizeof(tu->ct));
+ 	memcpy(tu->ct.HandShakeKey, tcred->ct.HandShakeKey, 8);
+ 	memset(tcred->ct.HandShakeKey, 0, 8);
+ 	tu->ct.AuthHandle     = tcred->ct.AuthHandle;
+ 	tu->ct.ViceId         = tcred->ct.ViceId;
+ 	tu->ct.BeginTimestamp = tcred->ct.BeginTimestamp;
+ 	tu->ct.EndTimestamp   = tcred->ct.EndTimestamp;
+ 
+ 	/* Set everything else, reset connections, and move on. */
+ 	tu->vid = tcred->vid;
+ 	tu->states |= UHasTokens;
+ 	tu->states &= ~UTokensBad;
+ 	afs_SetPrimary(tu, !!(tcred->states & UPrimary));
+ 	tu->tokenTime = osi_Time();
+ 	afs_ResetUserConns(tu);
+ 	afs_PutUser(tu, WRITE_LOCK);
+     }
+     afs_osi_Free(tcreds.CredInfos_val, tcreds.CredInfos_len * sizeof(CredInfo));
+ 
+ done:
+     AFS_GUNLOCK();
+     rx_DestroyConnection(tconn);
+     AFS_GLOCK();
+     au->states &= ~UNFSGetCreds;
+     afs_osi_Wakeup((void *)au);
+ }
+ 
  
  /* It's called whenever a new unixuser structure is created for the remote user associated with the nfsclientpag structure, np */
! void
  afs_nfsclient_hold(np)
       register struct nfsclientpag *np;
  {
***************
*** 296,312 ****
  }
  
  
  /* if inname is non-null, a new system name value is set for the remote user (inname contains the new sysname). In all cases, outname returns the current sysname value for this remote user */
  int 
  afs_nfsclient_sysname(register struct nfsclientpag *np, char *inname, 
! 		      char **outname[], int *num)
  {
      char *cp;
      int count, t;
  #if defined(AFS_SGIMP_ENV)
      osi_Assert(ISAFS_GLOCK());
  #endif
      AFS_STATCNT(afs_nfsclient_sysname);
      if (inname) {
  	if (np->sysname) {
  	    for(count=0; count < np->sysnamecount;++count) {
--- 433,483 ----
  }
  
  
+ /* check if this exporter corresponds to the specified host */
+ int
+ afs_nfsclient_checkhost(np, host)
+     register struct nfsclientpag *np;
+ {
+     if (np->type != EXP_NFS)
+ 	return 0;
+     return np->host == host;
+ }
+ 
+ 
+ /* get the host for this exporter, or 0 if there is an error */
+ afs_int32
+ afs_nfsclient_gethost(np)
+     register struct nfsclientpag *np;
+ {
+     if (np->type != EXP_NFS)
+ 	return 0;
+     return np->host;
+ }
+ 
+ 
  /* if inname is non-null, a new system name value is set for the remote user (inname contains the new sysname). In all cases, outname returns the current sysname value for this remote user */
  int 
  afs_nfsclient_sysname(register struct nfsclientpag *np, char *inname, 
! 		      char ***outname, int *num, int allpags)
  {
+     register struct nfsclientpag *tnp;
+     register afs_int32 i;
      char *cp;
      int count, t;
  #if defined(AFS_SGIMP_ENV)
      osi_Assert(ISAFS_GLOCK());
  #endif
      AFS_STATCNT(afs_nfsclient_sysname);
+     if (allpags > 0) {
+ 	/* update every client, not just the one making the request */
+ 	i = NHash(np->host);
+ 	MObtainWriteLock(&afs_xnfspag, 315);
+ 	for (tnp = afs_nfspags[i]; tnp; tnp = tnp->next) {
+ 	    if (tnp != np && tnp->host == np->host)
+ 		afs_nfsclient_sysname(tnp, inname, outname, num, -1);
+ 	}
+ 	MReleaseWriteLock(&afs_xnfspag);
+     }
      if (inname) {
  	if (np->sysname) {
  	    for(count=0; count < np->sysnamecount;++count) {
***************
*** 323,339 ****
  	    cp += t+1;
  	}
  	np->sysnamecount = *num;
!     } else if (!np->sysname) {
  	return ENODEV;      /* XXX */
      }
!     *outname = np->sysname;
!     *num = np->sysnamecount;
      return 0;
  }
  
  
  /* Garbage collect routine for the nfs exporter. When pag is -1 then all entries are removed (used by the nfsclient_shutdown routine); else if it's non zero then only the entry with that pag is removed, else all "timedout" entries are removed. TimedOut entries are those who have no "unixuser" structures associated with them (i.e. unixusercnt == 0) and they haven't had any activity the last NFSCLIENTGC seconds */
! int
  afs_nfsclient_GC(exporter, pag)
       register struct afs_exporter *exporter;
       register afs_int32 pag;
--- 494,513 ----
  	    cp += t+1;
  	}
  	np->sysnamecount = *num;
!     } else if (!np->sysnamecount) {
  	return ENODEV;      /* XXX */
      }
!     if (allpags >= 0) {
! 	/* Don't touch our arguments when called recursively */
! 	*outname = np->sysname;
! 	*num = np->sysnamecount;
!     }
      return 0;
  }
  
  
  /* Garbage collect routine for the nfs exporter. When pag is -1 then all entries are removed (used by the nfsclient_shutdown routine); else if it's non zero then only the entry with that pag is removed, else all "timedout" entries are removed. TimedOut entries are those who have no "unixuser" structures associated with them (i.e. unixusercnt == 0) and they haven't had any activity the last NFSCLIENTGC seconds */
! void
  afs_nfsclient_GC(exporter, pag)
       register struct afs_exporter *exporter;
       register afs_int32 pag;
***************
*** 457,462 ****
--- 631,637 ----
  
  
  
+ void
  shutdown_nfsclnt()
  {
  #if defined(AFS_SGIMP_ENV)
Index: openafs/src/afs/afs_osi.c
diff -c openafs/src/afs/afs_osi.c:1.58 openafs/src/afs/afs_osi.c:1.58.2.3
*** openafs/src/afs/afs_osi.c:1.58	Wed Feb 15 15:53:02 2006
--- openafs/src/afs/afs_osi.c	Mon Jul 31 17:27:38 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.58 2006/02/15 20:53:02 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_osi.c,v 1.58.2.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 20,37 ****
  #include <sys/adspace.h>	/* for vm_att(), vm_det() */
  #endif
  
- static char memZero;		/* address of 0 bytes for kmem_alloc */
- 
- struct osimem {
-     struct osimem *next;
- };
- 
  /* osi_Init -- do once per kernel installation initialization.
   *     -- On Solaris this is called from modload initialization.
   *     -- On AIX called from afs_config.
   *     -- On HP called from afsc_link.
   *     -- On SGI called from afs_init. */
  
  #ifdef AFS_SGI53_ENV
  lock_t afs_event_lock;
  #endif
--- 20,33 ----
  #include <sys/adspace.h>	/* for vm_att(), vm_det() */
  #endif
  
  /* osi_Init -- do once per kernel installation initialization.
   *     -- On Solaris this is called from modload initialization.
   *     -- On AIX called from afs_config.
   *     -- On HP called from afsc_link.
   *     -- On SGI called from afs_init. */
  
+ afs_lock_t afs_ftf;		/* flush text lock */
+ 
  #ifdef AFS_SGI53_ENV
  lock_t afs_event_lock;
  #endif
***************
*** 42,47 ****
--- 38,80 ----
  
  struct AFS_UCRED *afs_osi_credp;
  
+ #if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV)
+ kmutex_t afs_global_lock;
+ kmutex_t afs_rxglobal_lock;
+ #endif
+ 
+ #if defined(AFS_SGI_ENV) && !defined(AFS_SGI64_ENV)
+ long afs_global_owner;
+ #endif
+ 
+ #if defined(AFS_OSF_ENV)
+ simple_lock_data_t afs_global_lock;
+ #endif
+ 
+ #if defined(AFS_DARWIN_ENV) 
+ #ifdef AFS_DARWIN80_ENV
+ lck_mtx_t  *afs_global_lock;
+ #else
+ struct lock__bsd__ afs_global_lock;
+ #endif
+ #endif
+ 
+ #if defined(AFS_XBSD_ENV) && !defined(AFS_FBSD50_ENV)
+ struct lock afs_global_lock;
+ struct proc *afs_global_owner;
+ #endif
+ #ifdef AFS_FBSD50_ENV
+ struct mtx afs_global_mtx;
+ #endif
+ 
+ #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV)
+ thread_t afs_global_owner;
+ #endif /* AFS_OSF_ENV */
+ 
+ #if defined(AFS_AIX41_ENV)
+ simple_lock_data afs_global_lock;
+ #endif
+ 
  void
  osi_Init(void)
  {
***************
*** 105,246 ****
      init_et_to_sys_error();
  }
  
- int
- osi_Active(register struct vcache *avc)
- {
-     AFS_STATCNT(osi_Active);
- #if defined(AFS_AIX_ENV) || defined(AFS_OSF_ENV) || defined(AFS_SUN5_ENV) || (AFS_LINUX20_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
-     if ((avc->opens > 0) || (avc->states & CMAPPED))
- 	return 1;		/* XXX: Warning, verify this XXX  */
- #elif defined(AFS_SGI_ENV)
-     if ((avc->opens > 0) || AFS_VN_MAPPED(AFSTOV(avc)))
- 	return 1;
- #else
-     if (avc->opens > 0 || (AFSTOV(avc)->v_flag & VTEXT))
- 	return (1);
- #endif
-     return 0;
- }
- 
- /* this call, unlike osi_FlushText, is supposed to discard caches that may
-    contain invalid information if a file is written remotely, but that may
-    contain valid information that needs to be written back if the file is
-    being written locally.  It doesn't subsume osi_FlushText, since the latter
-    function may be needed to flush caches that are invalidated by local writes.
- 
-    avc->pvnLock is already held, avc->lock is guaranteed not to be held (by
-    us, of course).
- */
- void
- osi_FlushPages(register struct vcache *avc, struct AFS_UCRED *credp)
- {
-     afs_hyper_t origDV;
-     ObtainReadLock(&avc->lock);
-     /* If we've already purged this version, or if we're the ones
-      * writing this version, don't flush it (could lose the
-      * data we're writing). */
-     if ((hcmp((avc->m.DataVersion), (avc->mapDV)) <= 0)
- 	|| ((avc->execsOrWriters > 0) && afs_DirtyPages(avc))) {
- 	ReleaseReadLock(&avc->lock);
- 	return;
-     }
-     ReleaseReadLock(&avc->lock);
-     ObtainWriteLock(&avc->lock, 10);
-     /* Check again */
-     if ((hcmp((avc->m.DataVersion), (avc->mapDV)) <= 0)
- 	|| ((avc->execsOrWriters > 0) && afs_DirtyPages(avc))) {
- 	ReleaseWriteLock(&avc->lock);
- 	return;
-     }
-     if (hiszero(avc->mapDV)) {
- 	hset(avc->mapDV, avc->m.DataVersion);
- 	ReleaseWriteLock(&avc->lock);
- 	return;
-     }
- 
-     AFS_STATCNT(osi_FlushPages);
-     hset(origDV, avc->m.DataVersion);
-     afs_Trace3(afs_iclSetp, CM_TRACE_FLUSHPAGES, ICL_TYPE_POINTER, avc,
- 	       ICL_TYPE_INT32, origDV.low, ICL_TYPE_INT32, avc->m.Length);
- 
-     ReleaseWriteLock(&avc->lock);
-     AFS_GUNLOCK();
-     osi_VM_FlushPages(avc, credp);
-     AFS_GLOCK();
-     ObtainWriteLock(&avc->lock, 88);
- 
-     /* do this last, and to original version, since stores may occur
-      * while executing above PUTPAGE call */
-     hset(avc->mapDV, origDV);
-     ReleaseWriteLock(&avc->lock);
- }
- 
- afs_lock_t afs_ftf;		/* flush text lock */
- 
- #ifdef	AFS_TEXT_ENV
- 
- /* This call is supposed to flush all caches that might be invalidated
-  * by either a local write operation or a write operation done on
-  * another client.  This call may be called repeatedly on the same
-  * version of a file, even while a file is being written, so it
-  * shouldn't do anything that would discard newly written data before
-  * it is written to the file system. */
- 
- void
- osi_FlushText_really(register struct vcache *vp)
- {
-     afs_hyper_t fdv;		/* version before which we'll flush */
- 
-     AFS_STATCNT(osi_FlushText);
-     /* see if we've already flushed this data version */
-     if (hcmp(vp->m.DataVersion, vp->flushDV) <= 0)
- 	return;
- 
-     MObtainWriteLock(&afs_ftf, 317);
-     hset(fdv, vp->m.DataVersion);
- 
-     /* why this disgusting code below?
-      *    xuntext, called by xrele, doesn't notice when it is called
-      * with a freed text object.  Sun continually calls xrele or xuntext
-      * without any locking, as long as VTEXT is set on the
-      * corresponding vnode.
-      *    But, if the text object is locked when you check the VTEXT
-      * flag, several processes can wait in xuntext, waiting for the
-      * text lock; when the second one finally enters xuntext's
-      * critical region, the text object is already free, but the check
-      * was already done by xuntext's caller.
-      *    Even worse, it turns out that xalloc locks the text object
-      * before reading or stating a file via the vnode layer.  Thus, we
-      * could end up in getdcache, being asked to bring in a new
-      * version of a file, but the corresponding text object could be
-      * locked.  We can't flush the text object without causing
-      * deadlock, so now we just don't try to lock the text object
-      * unless it is guaranteed to work.  And we try to flush the text
-      * when we need to a bit more often at the vnode layer.  Sun
-      * really blew the vm-cache flushing interface.
-      */
- 
- #if defined (AFS_HPUX_ENV)
-     if (vp->v.v_flag & VTEXT) {
- 	xrele(vp);
- 
- 	if (vp->v.v_flag & VTEXT) {	/* still has a text object? */
- 	    MReleaseWriteLock(&afs_ftf);
- 	    return;
- 	}
-     }
- #endif
- 
-     /* next do the stuff that need not check for deadlock problems */
-     mpurge(vp);
- 
-     /* finally, record that we've done it */
-     hset(vp->flushDV, fdv);
-     MReleaseWriteLock(&afs_ftf);
- 
- }
- #endif /* AFS_TEXT_ENV */
- 
  /* mask signals in afsds */
  void
  afs_osi_MaskSignals(void)
--- 138,143 ----
***************
*** 389,575 ****
  #endif /* AFS_LINUX20_ENV */
  
  
- void *
- afs_osi_Alloc(size_t x)
- {
- #if !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV)
-     register struct osimem *tm = NULL;
-     register int size;
- #endif
- 
-     AFS_STATCNT(osi_Alloc);
-     /* 0-length allocs may return NULL ptr from AFS_KALLOC, so we special-case
-      * things so that NULL returned iff an error occurred */
-     if (x == 0)
- 	return &memZero;
- 
-     AFS_STATS(afs_stats_cmperf.OutStandingAllocs++);
-     AFS_STATS(afs_stats_cmperf.OutStandingMemUsage += x);
- #ifdef AFS_LINUX20_ENV
-     return osi_linux_alloc(x, 1);
- #elif defined(AFS_FBSD_ENV)
-     return osi_fbsd_alloc(x, 1);
- #else
-     size = x;
-     tm = (struct osimem *)AFS_KALLOC(size);
- #ifdef	AFS_SUN5_ENV
-     if (!tm)
- 	osi_Panic("osi_Alloc: Couldn't allocate %d bytes; out of memory!\n",
- 		  size);
- #endif
-     return (void *)tm;
- #endif
- }
- 
- #if	defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV)
- 
- void *
- afs_osi_Alloc_NoSleep(size_t x)
- {
-     register struct osimem *tm;
-     register int size;
- 
-     AFS_STATCNT(osi_Alloc);
-     /* 0-length allocs may return NULL ptr from AFS_KALLOC, so we special-case
-      * things so that NULL returned iff an error occurred */
-     if (x == 0)
- 	return &memZero;
- 
-     size = x;
-     AFS_STATS(afs_stats_cmperf.OutStandingAllocs++);
-     AFS_STATS(afs_stats_cmperf.OutStandingMemUsage += x);
-     tm = (struct osimem *)AFS_KALLOC_NOSLEEP(size);
-     return (void *)tm;
- }
- 
- #endif /* SUN || SGI */
- 
- void
- afs_osi_Free(void *x, size_t asize)
- {
-     AFS_STATCNT(osi_Free);
-     if (x == &memZero)
- 	return;			/* check for putting memZero back */
- 
-     AFS_STATS(afs_stats_cmperf.OutStandingAllocs--);
-     AFS_STATS(afs_stats_cmperf.OutStandingMemUsage -= asize);
- #if defined(AFS_LINUX20_ENV)
-     osi_linux_free(x);
- #elif defined(AFS_FBSD_ENV)
-     osi_fbsd_free(x);
- #else
-     AFS_KFREE((struct osimem *)x, asize);
- #endif
- }
- 
- void
- afs_osi_FreeStr(char *x)
- {
-     afs_osi_Free(x, strlen(x) + 1);
- }
- 
- /* ? is it moderately likely that there are dirty VM pages associated with
-  * this vnode?
-  *
-  *  Prereqs:  avc must be write-locked
-  *
-  *  System Dependencies:  - *must* support each type of system for which
-  *                          memory mapped files are supported, even if all
-  *                          it does is return TRUE;
-  *
-  * NB:  this routine should err on the side of caution for ProcessFS to work
-  *      correctly (or at least, not to introduce worse bugs than already exist)
-  */
- #ifdef	notdef
- int
- osi_VMDirty_p(struct vcache *avc)
- {
-     int dirtyPages;
- 
-     if (avc->execsOrWriters <= 0)
- 	return 0;		/* can't be many dirty pages here, I guess */
- 
- #if defined (AFS_AIX32_ENV)
- #ifdef	notdef
-     /* because of the level of hardware involvment with VM and all the
-      * warnings about "This routine must be called at VMM interrupt
-      * level", I thought it would be safest to disable interrupts while
-      * looking at the software page fault table.  */
- 
-     /* convert vm handle into index into array:  I think that stoinio is
-      * always zero...  Look into this XXX  */
- #define VMHASH(handle) ( \
- 			( ((handle) & ~vmker.stoinio)  \
- 			 ^ ((((handle) & ~vmker.stoinio) & vmker.stoimask) << vmker.stoihash) \
- 			 ) & 0x000fffff)
- 
-     if (avc->segid) {
- 	unsigned int pagef, pri, index, next;
- 
- 	index = VMHASH(avc->segid);
- 	if (scb_valid(index)) {	/* could almost be an ASSERT */
- 
- 	    pri = disable_ints();
- 	    for (pagef = scb_sidlist(index); pagef >= 0; pagef = next) {
- 		next = pft_sidfwd(pagef);
- 		if (pft_modbit(pagef)) {	/* has page frame been modified? */
- 		    enable_ints(pri);
- 		    return 1;
- 		}
- 	    }
- 	    enable_ints(pri);
- 	}
-     }
- #undef VMHASH
- #endif
- #endif /* AFS_AIX32_ENV */
- 
- #if defined (AFS_SUN5_ENV)
-     if (avc->states & CMAPPED) {
- 	struct page *pg;
- 	for (pg = avc->v.v_s.v_Pages; pg; pg = pg->p_vpnext) {
- 	    if (pg->p_mod) {
- 		return 1;
- 	    }
- 	}
-     }
- #endif
-     return 0;
- }
- #endif /* notdef */
- 
- 
- /*
-  * Solaris osi_ReleaseVM should not drop and re-obtain the vcache entry lock.
-  * This leads to bad races when osi_ReleaseVM() is called from
-  * afs_InvalidateAllSegments().
- 
-  * We can do this because Solaris osi_VM_Truncate() doesn't care whether the
-  * vcache entry lock is held or not.
-  *
-  * For other platforms, in some cases osi_VM_Truncate() doesn't care, but
-  * there may be cases where it does care.  If so, it would be good to fix
-  * them so they don't care.  Until then, we assume the worst.
-  *
-  * Locking:  the vcache entry lock is held.  It is dropped and re-obtained.
-  */
- void
- osi_ReleaseVM(struct vcache *avc, struct AFS_UCRED *acred)
- {
- #ifdef	AFS_SUN5_ENV
-     AFS_GUNLOCK();
-     osi_VM_Truncate(avc, 0, acred);
-     AFS_GLOCK();
- #else
-     ReleaseWriteLock(&avc->lock);
-     AFS_GUNLOCK();
-     osi_VM_Truncate(avc, 0, acred);
-     AFS_GLOCK();
-     ObtainWriteLock(&avc->lock, 80);
- #endif
- }
- 
- 
  void
  shutdown_osi(void)
  {
--- 286,291 ----
***************
*** 598,1101 ****
  #endif
  }
  #endif
- 
- #if AFS_GCPAGS
- 
- /* afs_osi_TraverseProcTable() - Walk through the systems process
-  * table, calling afs_GCPAGs_perproc_func() for each process.
-  */
- 
- #if defined(AFS_SUN5_ENV)
- void
- afs_osi_TraverseProcTable(void)
- {
-     struct proc *prp;
-     for (prp = practive; prp != NULL; prp = prp->p_next) {
- 	afs_GCPAGs_perproc_func(prp);
-     }
- }
- #endif
- 
- #if defined(AFS_HPUX_ENV)
- 
- /*
-  * NOTE: h/proc_private.h gives the process table locking rules
-  * It indicates that access to p_cred must be protected by
-  * mp_mtproc_lock(p);
-  * mp_mtproc_unlock(p);
-  *
-  * The code in sys/pm_prot.c uses pcred_lock() to protect access to
-  * the process creds, and uses mp_mtproc_lock() only for audit-related
-  * changes.  To be safe, we use both.
-  */
- 
- void
- afs_osi_TraverseProcTable(void)
- {
-     register proc_t *p;
-     int endchain = 0;
- 
-     MP_SPINLOCK(activeproc_lock);
-     MP_SPINLOCK(sched_lock);
-     pcred_lock();
- 
-     /*
-      * Instead of iterating through all of proc[], traverse only
-      * the list of active processes.  As an example of this,
-      * see foreach_process() in sys/vm_sched.c.
-      *
-      * We hold the locks for the entire scan in order to get a
-      * consistent view of the current set of creds.
-      */
- 
-     for (p = proc; endchain == 0; p = &proc[p->p_fandx]) {
- 	if (p->p_fandx == 0) {
- 	    endchain = 1;
- 	}
- 
- 	if (system_proc(p))
- 	    continue;
- 
- 	mp_mtproc_lock(p);
- 	afs_GCPAGs_perproc_func(p);
- 	mp_mtproc_unlock(p);
-     }
- 
-     pcred_unlock();
-     MP_SPINUNLOCK(sched_lock);
-     MP_SPINUNLOCK(activeproc_lock);
- }
- #endif
- 
- #if defined(AFS_SGI_ENV)
- 
- #ifdef AFS_SGI65_ENV
- /* TODO: Fix this later. */
- static int
- SGI_ProcScanFunc(void *p, void *arg, int mode)
- {
-     return 0;
- }
- #else /* AFS_SGI65_ENV */
- static int
- SGI_ProcScanFunc(proc_t * p, void *arg, int mode)
- {
-     afs_int32(*perproc_func) (struct proc *) = arg;
-     int code = 0;
-     /* we pass in the function pointer for arg,
-      * mode ==0 for startup call, ==1 for each valid proc,
-      * and ==2 for terminate call.
-      */
-     if (mode == 1) {
- 	code = perproc_func(p);
-     }
-     return code;
- }
- #endif /* AFS_SGI65_ENV */
- 
- void
- afs_osi_TraverseProcTable(void)
- {
-     procscan(SGI_ProcScanFunc, afs_GCPAGs_perproc_func);
- }
- #endif /* AFS_SGI_ENV */
- 
- #if defined(AFS_AIX_ENV)
- #ifdef AFS_AIX51_ENV
- #define max_proc v.ve_proc
- #endif
- void
- afs_osi_TraverseProcTable(void)
- {
-     struct proc *p;
-     int i;
- 
-     /*
-      * For binary compatibility, on AIX we need to be careful to use the
-      * proper size of a struct proc, even if it is different from what
-      * we were compiled with.
-      */
-     if (!afs_gcpags_procsize)
- 	return;
- 
- #ifndef AFS_AIX51_ENV
-     simple_lock(&proc_tbl_lock);
- #endif
-     for (p = (struct proc *)v.vb_proc, i = 0; p < max_proc;
- 	 p = (struct proc *)((char *)p + afs_gcpags_procsize), i++) {
- 
- #ifdef AFS_AIX51_ENV
- 	if (p->p_pvprocp->pv_stat == SNONE)
- 	    continue;
- 	if (p->p_pvprocp->pv_stat == SIDL)
- 	    continue;
- 	if (p->p_pvprocp->pv_stat == SEXIT)
- 	    continue;
- #else
- 	if (p->p_stat == SNONE)
- 	    continue;
- 	if (p->p_stat == SIDL)
- 	    continue;
- 	if (p->p_stat == SEXIT)
- 	    continue;
- #endif
- 
- 	/* sanity check */
- 
- 	if (PROCMASK(p->p_pid) != i) {
- 	    afs_gcpags = AFS_GCPAGS_EPIDCHECK;
- 	    break;
- 	}
- 
- 	/* sanity check */
- 
- 	if ((p->p_nice < P_NICE_MIN) || (P_NICE_MAX < p->p_nice)) {
- 	    afs_gcpags = AFS_GCPAGS_ENICECHECK;
- 	    break;
- 	}
- 
- 	afs_GCPAGs_perproc_func(p);
-     }
- #ifndef AFS_AIX51_ENV
-     simple_unlock(&proc_tbl_lock);
- #endif
- }
- #endif
- 
- #if defined(AFS_OSF_ENV)
- 
- #ifdef AFS_DUX50_ENV
- extern struct pid_entry *pidtab;
- extern int npid; 
- #endif
- 
- void
- afs_osi_TraverseProcTable(void)
- {
-     struct pid_entry *pe;
- #ifdef AFS_DUX50_ENV
- #define pidNPID (pidtab + npid)
- #define PID_LOCK()
- #define PID_UNLOCK()
- #endif
-     PID_LOCK();
-     for (pe = pidtab; pe < pidNPID; ++pe) {
- 	if (pe->pe_proc != PROC_NULL)
- 	    afs_GCPAGs_perproc_func(pe->pe_proc);
-     }
-     PID_UNLOCK();
- }
- #endif
- 
- #if (defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN80_ENV)) || defined(AFS_FBSD_ENV)
- void
- afs_osi_TraverseProcTable(void)
- {
-     struct proc *p;
-     LIST_FOREACH(p, &allproc, p_list) {
- 	if (p->p_stat == SIDL)
- 	    continue;
- 	if (p->p_stat == SZOMB)
- 	    continue;
- 	if (p->p_flag & P_SYSTEM)
- 	    continue;
- 	afs_GCPAGs_perproc_func(p);
-     }
- }
- #endif
- 
- #if defined(AFS_LINUX22_ENV)
- extern rwlock_t tasklist_lock __attribute__((weak));
- void
- afs_osi_TraverseProcTable()
- {
-     struct task_struct *p;
-     if (&tasklist_lock)
-        read_lock(&tasklist_lock);
- #ifdef DEFINED_FOR_EACH_PROCESS
-     for_each_process(p) if (p->pid) {
- #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE
- 	if (p->exit_state)
- 	    continue;
- #else
- 	if (p->state & TASK_ZOMBIE)
- 	    continue;
- #endif
- 	afs_GCPAGs_perproc_func(p);
-     }
- #else
-     for_each_task(p) if (p->pid) {
- #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE
- 	if (p->exit_state)
- 	    continue;
- #else
- 	if (p->state & TASK_ZOMBIE)
- 	    continue;
- #endif
- 	afs_GCPAGs_perproc_func(p);
-     }
- #endif
-     if (&tasklist_lock)
-        read_unlock(&tasklist_lock);
- }
- #endif
- 
- /* return a pointer (sometimes a static copy ) to the cred for a
-  * given AFS_PROC.
-  * subsequent calls may overwrite the previously returned value.
-  */
- 
- #if defined(AFS_SGI65_ENV)
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * p)
- {
-     return NULL;
- }
- #elif defined(AFS_HPUX_ENV)
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * p)
- {
-     if (!p)
- 	return;
- 
-     /*
-      * Cannot use afs_warnuser() here, as the code path
-      * eventually wants to grab sched_lock, which is
-      * already held here
-      */
- 
-     return p_cred(p);
- }
- #elif defined(AFS_AIX_ENV)
- 
- /* GLOBAL DECLARATIONS */
- 
- /*
-  * LOCKS: the caller must do
-  *  simple_lock(&proc_tbl_lock);
-  *  simple_unlock(&proc_tbl_lock);
-  * around calls to this function.
-  */
- 
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * pproc)
- {
-     struct AFS_UCRED *pcred = 0;
- 
-     /*
-      * pointer to process user structure valid in *our*
-      * address space
-      *
-      * The user structure for a process is stored in the user
-      * address space (as distinct from the kernel address
-      * space), and so to refer to the user structure of a
-      * different process we must employ special measures.
-      *
-      * I followed the example used in the AIX getproc() system
-      * call in bos/kernel/proc/getproc.c
-      */
-     struct user *xmem_userp;
- 
-     struct xmem dp;		/* ptr to xmem descriptor */
-     int xm;			/* xmem result */
- 
-     if (!pproc) {
- 	return pcred;
-     }
- 
-     /*
-      * The process private segment in which the user
-      * area is located may disappear. We need to increment
-      * its use count. Therefore we
-      *    - get the proc_tbl_lock to hold the segment.
-      *    - get the p_lock to lockout vm_cleardata.
-      *    - vm_att to load the segment register (no check)
-      *    - xmattach to bump its use count.
-      *    - release the p_lock.
-      *    - release the proc_tbl_lock.
-      *    - do whatever we need.
-      *    - xmdetach to decrement the use count.
-      *    - vm_det to free the segment register (no check)
-      */
- 
-     xmem_userp = NULL;
-     xm = XMEM_FAIL;
-     /* simple_lock(&proc_tbl_lock); */
- #ifdef __64BIT__
-     if (pproc->p_adspace != vm_handle(NULLSEGID, (int32long64_t) 0)) {
- #else
-     if (pproc->p_adspace != NULLSEGVAL) {
- #endif
- 
- #ifdef AFS_AIX51_ENV
- 	simple_lock(&pproc->p_pvprocp->pv_lock);
- #else
- 	simple_lock(&pproc->p_lock);
- #endif
- 
- 	if (pproc->p_threadcount &&
- #ifdef AFS_AIX51_ENV
- 	    pproc->p_pvprocp->pv_threadlist) {
- #else
- 	    pproc->p_threadlist) {
- #endif
- 
- 	    /*
- 	     * arbitrarily pick the first thread in pproc
- 	     */
- 	    struct thread *pproc_thread =
- #ifdef AFS_AIX51_ENV
- 		pproc->p_pvprocp->pv_threadlist;
- #else
- 		pproc->p_threadlist;
- #endif
- 
- 	    /*
- 	     * location of 'struct user' in pproc's
- 	     * address space
- 	     */
- 	    struct user *pproc_userp = pproc_thread->t_userp;
- 
- 	    /*
- 	     * create a pointer valid in my own address space
- 	     */
- 
- 	    xmem_userp = (struct user *)vm_att(pproc->p_adspace, pproc_userp);
- 
- 	    dp.aspace_id = XMEM_INVAL;
- 	    xm = xmattach(xmem_userp, sizeof(*xmem_userp), &dp, SYS_ADSPACE);
- 	}
- 
- #ifdef AFS_AIX51_ENV
- 	simple_unlock(&pproc->p_pvprocp->pv_lock);
- #else
- 	simple_unlock(&pproc->p_lock);
- #endif
-     }
-     /* simple_unlock(&proc_tbl_lock); */
-     if (xm == XMEM_SUCC) {
- 
- 	static struct AFS_UCRED cred;
- 
- 	/*
- 	 * What locking should we use to protect access to the user
- 	 * area?  If needed also change the code in AIX/osi_groups.c.
- 	 */
- 
- 	/* copy cred to local address space */
- 	cred = *xmem_userp->U_cred;
- 	pcred = &cred;
- 
- 	xmdetach(&dp);
-     }
-     if (xmem_userp) {
- 	vm_det((void *)xmem_userp);
-     }
- 
-     return pcred;
- }
- 
- #elif defined(AFS_OSF_ENV)
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * pr)
- {
-     struct AFS_UCRED *rv = NULL;
- 
-     if (pr == NULL) {
- 	return NULL;
-     }
- 
-     if ((pr->p_stat == SSLEEP) || (pr->p_stat == SRUN)
- 	|| (pr->p_stat == SSTOP))
- 	rv = pr->p_rcred;
- 
-     return rv;
- }
- #elif defined(AFS_DARWIN80_ENV) 
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * pr)
- {
-     struct AFS_UCRED *rv = NULL;
-     static struct AFS_UCRED cr;
-     struct ucred *pcred;
- 
-     if (pr == NULL) {
- 	return NULL;
-     }
-     pcred = proc_ucred(pr);
-     cr.cr_ref = 1;
-     cr.cr_uid = pcred->cr_uid;
-     cr.cr_ngroups = pcred->cr_ngroups;
-     memcpy(cr.cr_groups, pcred->cr_groups,
-            NGROUPS * sizeof(gid_t));
-     return &cr;
- }
- #elif defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * pr)
- {
-     struct AFS_UCRED *rv = NULL;
-     static struct AFS_UCRED cr;
- 
-     if (pr == NULL) {
- 	return NULL;
-     }
- 
-     if ((pr->p_stat == SSLEEP) || (pr->p_stat == SRUN)
- 	|| (pr->p_stat == SSTOP)) {
- 	pcred_readlock(pr);
- 	cr.cr_ref = 1;
- 	cr.cr_uid = pr->p_cred->pc_ucred->cr_uid;
- 	cr.cr_ngroups = pr->p_cred->pc_ucred->cr_ngroups;
- 	memcpy(cr.cr_groups, pr->p_cred->pc_ucred->cr_groups,
- 	       NGROUPS * sizeof(gid_t));
- 	pcred_unlock(pr);
- 	rv = &cr;
-     }
- 
-     return rv;
- }
- #elif defined(AFS_LINUX22_ENV)
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * pr)
- {
-     struct AFS_UCRED *rv = NULL;
-     static struct AFS_UCRED cr;
- 
-     if (pr == NULL) {
- 	return NULL;
-     }
- 
-     if ((pr->state == TASK_RUNNING) || (pr->state == TASK_INTERRUPTIBLE)
- 	|| (pr->state == TASK_UNINTERRUPTIBLE)
- 	|| (pr->state == TASK_STOPPED)) {
- 	cr.cr_ref = 1;
- 	cr.cr_uid = pr->uid;
- #if defined(AFS_LINUX26_ENV)
- 	get_group_info(pr->group_info);
- 	cr.cr_group_info = pr->group_info;
- #else
- 	cr.cr_ngroups = pr->ngroups;
- 	memcpy(cr.cr_groups, pr->groups, NGROUPS * sizeof(gid_t));
- #endif
- 	rv = &cr;
-     }
- 
-     return rv;
- }
- #else
- const struct AFS_UCRED *
- afs_osi_proc2cred(AFS_PROC * pr)
- {
-     struct AFS_UCRED *rv = NULL;
- 
-     if (pr == NULL) {
- 	return NULL;
-     }
-     rv = pr->p_cred;
- 
-     return rv;
- }
- #endif
- 
- #endif /* AFS_GCPAGS */
--- 314,316 ----
Index: openafs/src/afs/afs_osi_alloc.c
diff -c openafs/src/afs/afs_osi_alloc.c:1.11 openafs/src/afs/afs_osi_alloc.c:1.11.6.3
*** openafs/src/afs/afs_osi_alloc.c:1.11	Sun Apr  3 14:13:30 2005
--- openafs/src/afs/afs_osi_alloc.c	Mon Jul 31 17:27:38 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi_alloc.c,v 1.11 2005/04/03 18:13:30 shadow Exp $");
  
  
  
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi_alloc.c,v 1.11.6.3 2006/07/31 21:27:38 shadow Exp $");
  
  
  
***************
*** 38,43 ****
--- 38,130 ----
  } *freePacketList = NULL, *freeSmallList;
  afs_lock_t osi_flplock;
  
+ static char memZero;		/* address of 0 bytes for kmem_alloc */
+ 
+ struct osimem {
+     struct osimem *next;
+ };
+ 
+ 
+ void *
+ afs_osi_Alloc(size_t x)
+ {
+ #if !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV)
+     register struct osimem *tm = NULL;
+     register int size;
+ #endif
+ 
+     AFS_STATCNT(osi_Alloc);
+     /* 0-length allocs may return NULL ptr from AFS_KALLOC, so we special-case
+      * things so that NULL returned iff an error occurred */
+     if (x == 0)
+ 	return &memZero;
+ 
+     AFS_STATS(afs_stats_cmperf.OutStandingAllocs++);
+     AFS_STATS(afs_stats_cmperf.OutStandingMemUsage += x);
+ #ifdef AFS_LINUX20_ENV
+     return osi_linux_alloc(x, 1);
+ #elif defined(AFS_FBSD_ENV)
+     return osi_fbsd_alloc(x, 1);
+ #else
+     size = x;
+     tm = (struct osimem *)AFS_KALLOC(size);
+ #ifdef	AFS_SUN5_ENV
+     if (!tm)
+ 	osi_Panic("osi_Alloc: Couldn't allocate %d bytes; out of memory!\n",
+ 		  size);
+ #endif
+     return (void *)tm;
+ #endif
+ }
+ 
+ #if	defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV)
+ 
+ void *
+ afs_osi_Alloc_NoSleep(size_t x)
+ {
+     register struct osimem *tm;
+     register int size;
+ 
+     AFS_STATCNT(osi_Alloc);
+     /* 0-length allocs may return NULL ptr from AFS_KALLOC, so we special-case
+      * things so that NULL returned iff an error occurred */
+     if (x == 0)
+ 	return &memZero;
+ 
+     size = x;
+     AFS_STATS(afs_stats_cmperf.OutStandingAllocs++);
+     AFS_STATS(afs_stats_cmperf.OutStandingMemUsage += x);
+     tm = (struct osimem *)AFS_KALLOC_NOSLEEP(size);
+     return (void *)tm;
+ }
+ 
+ #endif /* SUN || SGI */
+ 
+ void
+ afs_osi_Free(void *x, size_t asize)
+ {
+     AFS_STATCNT(osi_Free);
+     if (x == &memZero)
+ 	return;			/* check for putting memZero back */
+ 
+     AFS_STATS(afs_stats_cmperf.OutStandingAllocs--);
+     AFS_STATS(afs_stats_cmperf.OutStandingMemUsage -= asize);
+ #if defined(AFS_LINUX20_ENV)
+     osi_linux_free(x);
+ #elif defined(AFS_FBSD_ENV)
+     osi_fbsd_free(x);
+ #else
+     AFS_KFREE((struct osimem *)x, asize);
+ #endif
+ }
+ 
+ void
+ afs_osi_FreeStr(char *x)
+ {
+     afs_osi_Free(x, strlen(x) + 1);
+ }
+ 
+ 
  
  /* free space allocated by AllocLargeSpace.  Also called by mclput when freeing
   * a packet allocated by osi_NetReceive. */
Index: openafs/src/afs/afs_osi_gcpags.c
diff -c /dev/null openafs/src/afs/afs_osi_gcpags.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_osi_gcpags.c	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,522 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_osi_gcpags.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 */
+ #include "afs/afs_stats.h"	/* afs statistics */
+ #ifdef AFS_AIX_ENV
+ #include <sys/adspace.h>	/* for vm_att(), vm_det() */
+ #endif
+ 
+ #if AFS_GCPAGS
+ 
+ /* afs_osi_TraverseProcTable() - Walk through the systems process
+  * table, calling afs_GCPAGs_perproc_func() for each process.
+  */
+ 
+ #if defined(AFS_SUN5_ENV)
+ void
+ afs_osi_TraverseProcTable(void)
+ {
+     struct proc *prp;
+     for (prp = practive; prp != NULL; prp = prp->p_next) {
+ 	afs_GCPAGs_perproc_func(prp);
+     }
+ }
+ #endif
+ 
+ #if defined(AFS_HPUX_ENV)
+ 
+ /*
+  * NOTE: h/proc_private.h gives the process table locking rules
+  * It indicates that access to p_cred must be protected by
+  * mp_mtproc_lock(p);
+  * mp_mtproc_unlock(p);
+  *
+  * The code in sys/pm_prot.c uses pcred_lock() to protect access to
+  * the process creds, and uses mp_mtproc_lock() only for audit-related
+  * changes.  To be safe, we use both.
+  */
+ 
+ void
+ afs_osi_TraverseProcTable(void)
+ {
+     register proc_t *p;
+     int endchain = 0;
+ 
+     MP_SPINLOCK(activeproc_lock);
+     MP_SPINLOCK(sched_lock);
+     pcred_lock();
+ 
+     /*
+      * Instead of iterating through all of proc[], traverse only
+      * the list of active processes.  As an example of this,
+      * see foreach_process() in sys/vm_sched.c.
+      *
+      * We hold the locks for the entire scan in order to get a
+      * consistent view of the current set of creds.
+      */
+ 
+     for (p = proc; endchain == 0; p = &proc[p->p_fandx]) {
+ 	if (p->p_fandx == 0) {
+ 	    endchain = 1;
+ 	}
+ 
+ 	if (system_proc(p))
+ 	    continue;
+ 
+ 	mp_mtproc_lock(p);
+ 	afs_GCPAGs_perproc_func(p);
+ 	mp_mtproc_unlock(p);
+     }
+ 
+     pcred_unlock();
+     MP_SPINUNLOCK(sched_lock);
+     MP_SPINUNLOCK(activeproc_lock);
+ }
+ #endif
+ 
+ #if defined(AFS_SGI_ENV)
+ 
+ #ifdef AFS_SGI65_ENV
+ /* TODO: Fix this later. */
+ static int
+ SGI_ProcScanFunc(void *p, void *arg, int mode)
+ {
+     return 0;
+ }
+ #else /* AFS_SGI65_ENV */
+ static int
+ SGI_ProcScanFunc(proc_t * p, void *arg, int mode)
+ {
+     afs_int32(*perproc_func) (struct proc *) = arg;
+     int code = 0;
+     /* we pass in the function pointer for arg,
+      * mode ==0 for startup call, ==1 for each valid proc,
+      * and ==2 for terminate call.
+      */
+     if (mode == 1) {
+ 	code = perproc_func(p);
+     }
+     return code;
+ }
+ #endif /* AFS_SGI65_ENV */
+ 
+ void
+ afs_osi_TraverseProcTable(void)
+ {
+     procscan(SGI_ProcScanFunc, afs_GCPAGs_perproc_func);
+ }
+ #endif /* AFS_SGI_ENV */
+ 
+ #if defined(AFS_AIX_ENV)
+ #ifdef AFS_AIX51_ENV
+ #define max_proc v.ve_proc
+ #endif
+ void
+ afs_osi_TraverseProcTable(void)
+ {
+     struct proc *p;
+     int i;
+ 
+     /*
+      * For binary compatibility, on AIX we need to be careful to use the
+      * proper size of a struct proc, even if it is different from what
+      * we were compiled with.
+      */
+     if (!afs_gcpags_procsize)
+ 	return;
+ 
+ #ifndef AFS_AIX51_ENV
+     simple_lock(&proc_tbl_lock);
+ #endif
+     for (p = (struct proc *)v.vb_proc, i = 0; p < max_proc;
+ 	 p = (struct proc *)((char *)p + afs_gcpags_procsize), i++) {
+ 
+ #ifdef AFS_AIX51_ENV
+ 	if (p->p_pvprocp->pv_stat == SNONE)
+ 	    continue;
+ 	if (p->p_pvprocp->pv_stat == SIDL)
+ 	    continue;
+ 	if (p->p_pvprocp->pv_stat == SEXIT)
+ 	    continue;
+ #else
+ 	if (p->p_stat == SNONE)
+ 	    continue;
+ 	if (p->p_stat == SIDL)
+ 	    continue;
+ 	if (p->p_stat == SEXIT)
+ 	    continue;
+ #endif
+ 
+ 	/* sanity check */
+ 
+ 	if (PROCMASK(p->p_pid) != i) {
+ 	    afs_gcpags = AFS_GCPAGS_EPIDCHECK;
+ 	    break;
+ 	}
+ 
+ 	/* sanity check */
+ 
+ 	if ((p->p_nice < P_NICE_MIN) || (P_NICE_MAX < p->p_nice)) {
+ 	    afs_gcpags = AFS_GCPAGS_ENICECHECK;
+ 	    break;
+ 	}
+ 
+ 	afs_GCPAGs_perproc_func(p);
+     }
+ #ifndef AFS_AIX51_ENV
+     simple_unlock(&proc_tbl_lock);
+ #endif
+ }
+ #endif
+ 
+ #if defined(AFS_OSF_ENV)
+ 
+ #ifdef AFS_DUX50_ENV
+ extern struct pid_entry *pidtab;
+ extern int npid; 
+ #endif
+ 
+ void
+ afs_osi_TraverseProcTable(void)
+ {
+     struct pid_entry *pe;
+ #ifdef AFS_DUX50_ENV
+ #define pidNPID (pidtab + npid)
+ #define PID_LOCK()
+ #define PID_UNLOCK()
+ #endif
+     PID_LOCK();
+     for (pe = pidtab; pe < pidNPID; ++pe) {
+ 	if (pe->pe_proc != PROC_NULL)
+ 	    afs_GCPAGs_perproc_func(pe->pe_proc);
+     }
+     PID_UNLOCK();
+ }
+ #endif
+ 
+ #if (defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN80_ENV)) || defined(AFS_FBSD_ENV)
+ void
+ afs_osi_TraverseProcTable(void)
+ {
+     struct proc *p;
+     LIST_FOREACH(p, &allproc, p_list) {
+ 	if (p->p_stat == SIDL)
+ 	    continue;
+ 	if (p->p_stat == SZOMB)
+ 	    continue;
+ 	if (p->p_flag & P_SYSTEM)
+ 	    continue;
+ 	afs_GCPAGs_perproc_func(p);
+     }
+ }
+ #endif
+ 
+ #if defined(AFS_LINUX22_ENV)
+ extern rwlock_t tasklist_lock __attribute__((weak));
+ void
+ afs_osi_TraverseProcTable()
+ {
+     struct task_struct *p;
+     if (&tasklist_lock)
+        read_lock(&tasklist_lock);
+ #ifdef DEFINED_FOR_EACH_PROCESS
+     for_each_process(p) if (p->pid) {
+ #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE
+ 	if (p->exit_state)
+ 	    continue;
+ #else
+ 	if (p->state & TASK_ZOMBIE)
+ 	    continue;
+ #endif
+ 	afs_GCPAGs_perproc_func(p);
+     }
+ #else
+     for_each_task(p) if (p->pid) {
+ #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE
+ 	if (p->exit_state)
+ 	    continue;
+ #else
+ 	if (p->state & TASK_ZOMBIE)
+ 	    continue;
+ #endif
+ 	afs_GCPAGs_perproc_func(p);
+     }
+ #endif
+     if (&tasklist_lock)
+        read_unlock(&tasklist_lock);
+ }
+ #endif
+ 
+ /* return a pointer (sometimes a static copy ) to the cred for a
+  * given AFS_PROC.
+  * subsequent calls may overwrite the previously returned value.
+  */
+ 
+ #if defined(AFS_SGI65_ENV)
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * p)
+ {
+     return NULL;
+ }
+ #elif defined(AFS_HPUX_ENV)
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * p)
+ {
+     if (!p)
+ 	return;
+ 
+     /*
+      * Cannot use afs_warnuser() here, as the code path
+      * eventually wants to grab sched_lock, which is
+      * already held here
+      */
+ 
+     return p_cred(p);
+ }
+ #elif defined(AFS_AIX_ENV)
+ 
+ /* GLOBAL DECLARATIONS */
+ 
+ /*
+  * LOCKS: the caller must do
+  *  simple_lock(&proc_tbl_lock);
+  *  simple_unlock(&proc_tbl_lock);
+  * around calls to this function.
+  */
+ 
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * pproc)
+ {
+     struct AFS_UCRED *pcred = 0;
+ 
+     /*
+      * pointer to process user structure valid in *our*
+      * address space
+      *
+      * The user structure for a process is stored in the user
+      * address space (as distinct from the kernel address
+      * space), and so to refer to the user structure of a
+      * different process we must employ special measures.
+      *
+      * I followed the example used in the AIX getproc() system
+      * call in bos/kernel/proc/getproc.c
+      */
+     struct user *xmem_userp;
+ 
+     struct xmem dp;		/* ptr to xmem descriptor */
+     int xm;			/* xmem result */
+ 
+     if (!pproc) {
+ 	return pcred;
+     }
+ 
+     /*
+      * The process private segment in which the user
+      * area is located may disappear. We need to increment
+      * its use count. Therefore we
+      *    - get the proc_tbl_lock to hold the segment.
+      *    - get the p_lock to lockout vm_cleardata.
+      *    - vm_att to load the segment register (no check)
+      *    - xmattach to bump its use count.
+      *    - release the p_lock.
+      *    - release the proc_tbl_lock.
+      *    - do whatever we need.
+      *    - xmdetach to decrement the use count.
+      *    - vm_det to free the segment register (no check)
+      */
+ 
+     xmem_userp = NULL;
+     xm = XMEM_FAIL;
+     /* simple_lock(&proc_tbl_lock); */
+ #ifdef __64BIT__
+     if (pproc->p_adspace != vm_handle(NULLSEGID, (int32long64_t) 0)) {
+ #else
+     if (pproc->p_adspace != NULLSEGVAL) {
+ #endif
+ 
+ #ifdef AFS_AIX51_ENV
+ 	simple_lock(&pproc->p_pvprocp->pv_lock);
+ #else
+ 	simple_lock(&pproc->p_lock);
+ #endif
+ 
+ 	if (pproc->p_threadcount &&
+ #ifdef AFS_AIX51_ENV
+ 	    pproc->p_pvprocp->pv_threadlist) {
+ #else
+ 	    pproc->p_threadlist) {
+ #endif
+ 
+ 	    /*
+ 	     * arbitrarily pick the first thread in pproc
+ 	     */
+ 	    struct thread *pproc_thread =
+ #ifdef AFS_AIX51_ENV
+ 		pproc->p_pvprocp->pv_threadlist;
+ #else
+ 		pproc->p_threadlist;
+ #endif
+ 
+ 	    /*
+ 	     * location of 'struct user' in pproc's
+ 	     * address space
+ 	     */
+ 	    struct user *pproc_userp = pproc_thread->t_userp;
+ 
+ 	    /*
+ 	     * create a pointer valid in my own address space
+ 	     */
+ 
+ 	    xmem_userp = (struct user *)vm_att(pproc->p_adspace, pproc_userp);
+ 
+ 	    dp.aspace_id = XMEM_INVAL;
+ 	    xm = xmattach(xmem_userp, sizeof(*xmem_userp), &dp, SYS_ADSPACE);
+ 	}
+ 
+ #ifdef AFS_AIX51_ENV
+ 	simple_unlock(&pproc->p_pvprocp->pv_lock);
+ #else
+ 	simple_unlock(&pproc->p_lock);
+ #endif
+     }
+     /* simple_unlock(&proc_tbl_lock); */
+     if (xm == XMEM_SUCC) {
+ 
+ 	static struct AFS_UCRED cred;
+ 
+ 	/*
+ 	 * What locking should we use to protect access to the user
+ 	 * area?  If needed also change the code in AIX/osi_groups.c.
+ 	 */
+ 
+ 	/* copy cred to local address space */
+ 	cred = *xmem_userp->U_cred;
+ 	pcred = &cred;
+ 
+ 	xmdetach(&dp);
+     }
+     if (xmem_userp) {
+ 	vm_det((void *)xmem_userp);
+     }
+ 
+     return pcred;
+ }
+ 
+ #elif defined(AFS_OSF_ENV)
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * pr)
+ {
+     struct AFS_UCRED *rv = NULL;
+ 
+     if (pr == NULL) {
+ 	return NULL;
+     }
+ 
+     if ((pr->p_stat == SSLEEP) || (pr->p_stat == SRUN)
+ 	|| (pr->p_stat == SSTOP))
+ 	rv = pr->p_rcred;
+ 
+     return rv;
+ }
+ #elif defined(AFS_DARWIN80_ENV) 
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * pr)
+ {
+     struct AFS_UCRED *rv = NULL;
+     static struct AFS_UCRED cr;
+     struct ucred *pcred;
+ 
+     if (pr == NULL) {
+ 	return NULL;
+     }
+     pcred = proc_ucred(pr);
+     cr.cr_ref = 1;
+     cr.cr_uid = pcred->cr_uid;
+     cr.cr_ngroups = pcred->cr_ngroups;
+     memcpy(cr.cr_groups, pcred->cr_groups,
+            NGROUPS * sizeof(gid_t));
+     return &cr;
+ }
+ #elif defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * pr)
+ {
+     struct AFS_UCRED *rv = NULL;
+     static struct AFS_UCRED cr;
+ 
+     if (pr == NULL) {
+ 	return NULL;
+     }
+ 
+     if ((pr->p_stat == SSLEEP) || (pr->p_stat == SRUN)
+ 	|| (pr->p_stat == SSTOP)) {
+ 	pcred_readlock(pr);
+ 	cr.cr_ref = 1;
+ 	cr.cr_uid = pr->p_cred->pc_ucred->cr_uid;
+ 	cr.cr_ngroups = pr->p_cred->pc_ucred->cr_ngroups;
+ 	memcpy(cr.cr_groups, pr->p_cred->pc_ucred->cr_groups,
+ 	       NGROUPS * sizeof(gid_t));
+ 	pcred_unlock(pr);
+ 	rv = &cr;
+     }
+ 
+     return rv;
+ }
+ #elif defined(AFS_LINUX22_ENV)
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * pr)
+ {
+     struct AFS_UCRED *rv = NULL;
+     static struct AFS_UCRED cr;
+ 
+     if (pr == NULL) {
+ 	return NULL;
+     }
+ 
+     if ((pr->state == TASK_RUNNING) || (pr->state == TASK_INTERRUPTIBLE)
+ 	|| (pr->state == TASK_UNINTERRUPTIBLE)
+ 	|| (pr->state == TASK_STOPPED)) {
+ 	cr.cr_ref = 1;
+ 	cr.cr_uid = pr->uid;
+ #if defined(AFS_LINUX26_ENV)
+ 	get_group_info(pr->group_info);
+ 	cr.cr_group_info = pr->group_info;
+ #else
+ 	cr.cr_ngroups = pr->ngroups;
+ 	memcpy(cr.cr_groups, pr->groups, NGROUPS * sizeof(gid_t));
+ #endif
+ 	rv = &cr;
+     }
+ 
+     return rv;
+ }
+ #else
+ const struct AFS_UCRED *
+ afs_osi_proc2cred(AFS_PROC * pr)
+ {
+     struct AFS_UCRED *rv = NULL;
+ 
+     if (pr == NULL) {
+ 	return NULL;
+     }
+     rv = pr->p_cred;
+ 
+     return rv;
+ }
+ #endif
+ 
+ #endif /* AFS_GCPAGS */
Index: openafs/src/afs/afs_osi_pag.c
diff -c openafs/src/afs/afs_osi_pag.c:1.29 openafs/src/afs/afs_osi_pag.c:1.29.4.3
*** openafs/src/afs/afs_osi_pag.c:1.29	Thu Oct 13 11:12:07 2005
--- openafs/src/afs/afs_osi_pag.c	Mon Jul 31 17:27:38 2006
***************
*** 23,29 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi_pag.c,v 1.29 2005/10/13 15:12:07 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/afs_osi_pag.c,v 1.29.4.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 407,415 ****
--- 407,424 ----
  int
  afs_InitReq(register struct vrequest *av, struct AFS_UCRED *acred)
  {
+     int code;
+ 
      AFS_STATCNT(afs_InitReq);
+     memset(av, 0, sizeof(*av));
      if (afs_shuttingdown)
  	return EIO;
+ 
+ #ifdef AFS_LINUX26_ENV
+     if (osi_linux_nfs_initreq(av, acred, &code))
+ 	return code;
+ #endif
+ 
      av->uid = PagInCred(acred);
      if (av->uid == NOPAG) {
  	/* Afs doesn't use the unix uid for anuthing except a handle
Index: openafs/src/afs/afs_osi_vm.c
diff -c /dev/null openafs/src/afs/afs_osi_vm.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_osi_vm.c	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,256 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_osi_vm.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 */
+ #include "afs/afs_stats.h"	/* afs statistics */
+ #ifdef AFS_AIX_ENV
+ #include <sys/adspace.h>	/* for vm_att(), vm_det() */
+ #endif
+ 
+ int
+ osi_Active(register struct vcache *avc)
+ {
+     AFS_STATCNT(osi_Active);
+ #if defined(AFS_AIX_ENV) || defined(AFS_OSF_ENV) || defined(AFS_SUN5_ENV) || (AFS_LINUX20_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+     if ((avc->opens > 0) || (avc->states & CMAPPED))
+ 	return 1;		/* XXX: Warning, verify this XXX  */
+ #elif defined(AFS_SGI_ENV)
+     if ((avc->opens > 0) || AFS_VN_MAPPED(AFSTOV(avc)))
+ 	return 1;
+ #else
+     if (avc->opens > 0 || (AFSTOV(avc)->v_flag & VTEXT))
+ 	return (1);
+ #endif
+     return 0;
+ }
+ 
+ /* this call, unlike osi_FlushText, is supposed to discard caches that may
+    contain invalid information if a file is written remotely, but that may
+    contain valid information that needs to be written back if the file is
+    being written locally.  It doesn't subsume osi_FlushText, since the latter
+    function may be needed to flush caches that are invalidated by local writes.
+ 
+    avc->pvnLock is already held, avc->lock is guaranteed not to be held (by
+    us, of course).
+ */
+ void
+ osi_FlushPages(register struct vcache *avc, struct AFS_UCRED *credp)
+ {
+     afs_hyper_t origDV;
+     ObtainReadLock(&avc->lock);
+     /* If we've already purged this version, or if we're the ones
+      * writing this version, don't flush it (could lose the
+      * data we're writing). */
+     if ((hcmp((avc->m.DataVersion), (avc->mapDV)) <= 0)
+ 	|| ((avc->execsOrWriters > 0) && afs_DirtyPages(avc))) {
+ 	ReleaseReadLock(&avc->lock);
+ 	return;
+     }
+     ReleaseReadLock(&avc->lock);
+     ObtainWriteLock(&avc->lock, 10);
+     /* Check again */
+     if ((hcmp((avc->m.DataVersion), (avc->mapDV)) <= 0)
+ 	|| ((avc->execsOrWriters > 0) && afs_DirtyPages(avc))) {
+ 	ReleaseWriteLock(&avc->lock);
+ 	return;
+     }
+     if (hiszero(avc->mapDV)) {
+ 	hset(avc->mapDV, avc->m.DataVersion);
+ 	ReleaseWriteLock(&avc->lock);
+ 	return;
+     }
+ 
+     AFS_STATCNT(osi_FlushPages);
+     hset(origDV, avc->m.DataVersion);
+     afs_Trace3(afs_iclSetp, CM_TRACE_FLUSHPAGES, ICL_TYPE_POINTER, avc,
+ 	       ICL_TYPE_INT32, origDV.low, ICL_TYPE_INT32, avc->m.Length);
+ 
+     ReleaseWriteLock(&avc->lock);
+     AFS_GUNLOCK();
+     osi_VM_FlushPages(avc, credp);
+     AFS_GLOCK();
+     ObtainWriteLock(&avc->lock, 88);
+ 
+     /* do this last, and to original version, since stores may occur
+      * while executing above PUTPAGE call */
+     hset(avc->mapDV, origDV);
+     ReleaseWriteLock(&avc->lock);
+ }
+ 
+ #ifdef	AFS_TEXT_ENV
+ 
+ /* This call is supposed to flush all caches that might be invalidated
+  * by either a local write operation or a write operation done on
+  * another client.  This call may be called repeatedly on the same
+  * version of a file, even while a file is being written, so it
+  * shouldn't do anything that would discard newly written data before
+  * it is written to the file system. */
+ 
+ void
+ osi_FlushText_really(register struct vcache *vp)
+ {
+     afs_hyper_t fdv;		/* version before which we'll flush */
+ 
+     AFS_STATCNT(osi_FlushText);
+     /* see if we've already flushed this data version */
+     if (hcmp(vp->m.DataVersion, vp->flushDV) <= 0)
+ 	return;
+ 
+     MObtainWriteLock(&afs_ftf, 317);
+     hset(fdv, vp->m.DataVersion);
+ 
+     /* why this disgusting code below?
+      *    xuntext, called by xrele, doesn't notice when it is called
+      * with a freed text object.  Sun continually calls xrele or xuntext
+      * without any locking, as long as VTEXT is set on the
+      * corresponding vnode.
+      *    But, if the text object is locked when you check the VTEXT
+      * flag, several processes can wait in xuntext, waiting for the
+      * text lock; when the second one finally enters xuntext's
+      * critical region, the text object is already free, but the check
+      * was already done by xuntext's caller.
+      *    Even worse, it turns out that xalloc locks the text object
+      * before reading or stating a file via the vnode layer.  Thus, we
+      * could end up in getdcache, being asked to bring in a new
+      * version of a file, but the corresponding text object could be
+      * locked.  We can't flush the text object without causing
+      * deadlock, so now we just don't try to lock the text object
+      * unless it is guaranteed to work.  And we try to flush the text
+      * when we need to a bit more often at the vnode layer.  Sun
+      * really blew the vm-cache flushing interface.
+      */
+ 
+ #if defined (AFS_HPUX_ENV)
+     if (vp->v.v_flag & VTEXT) {
+ 	xrele(vp);
+ 
+ 	if (vp->v.v_flag & VTEXT) {	/* still has a text object? */
+ 	    MReleaseWriteLock(&afs_ftf);
+ 	    return;
+ 	}
+     }
+ #endif
+ 
+     /* next do the stuff that need not check for deadlock problems */
+     mpurge(vp);
+ 
+     /* finally, record that we've done it */
+     hset(vp->flushDV, fdv);
+     MReleaseWriteLock(&afs_ftf);
+ 
+ }
+ #endif /* AFS_TEXT_ENV */
+ 
+ /* ? is it moderately likely that there are dirty VM pages associated with
+  * this vnode?
+  *
+  *  Prereqs:  avc must be write-locked
+  *
+  *  System Dependencies:  - *must* support each type of system for which
+  *                          memory mapped files are supported, even if all
+  *                          it does is return TRUE;
+  *
+  * NB:  this routine should err on the side of caution for ProcessFS to work
+  *      correctly (or at least, not to introduce worse bugs than already exist)
+  */
+ #ifdef	notdef
+ int
+ osi_VMDirty_p(struct vcache *avc)
+ {
+     int dirtyPages;
+ 
+     if (avc->execsOrWriters <= 0)
+ 	return 0;		/* can't be many dirty pages here, I guess */
+ 
+ #if defined (AFS_AIX32_ENV)
+ #ifdef	notdef
+     /* because of the level of hardware involvment with VM and all the
+      * warnings about "This routine must be called at VMM interrupt
+      * level", I thought it would be safest to disable interrupts while
+      * looking at the software page fault table.  */
+ 
+     /* convert vm handle into index into array:  I think that stoinio is
+      * always zero...  Look into this XXX  */
+ #define VMHASH(handle) ( \
+ 			( ((handle) & ~vmker.stoinio)  \
+ 			 ^ ((((handle) & ~vmker.stoinio) & vmker.stoimask) << vmker.stoihash) \
+ 			 ) & 0x000fffff)
+ 
+     if (avc->segid) {
+ 	unsigned int pagef, pri, index, next;
+ 
+ 	index = VMHASH(avc->segid);
+ 	if (scb_valid(index)) {	/* could almost be an ASSERT */
+ 
+ 	    pri = disable_ints();
+ 	    for (pagef = scb_sidlist(index); pagef >= 0; pagef = next) {
+ 		next = pft_sidfwd(pagef);
+ 		if (pft_modbit(pagef)) {	/* has page frame been modified? */
+ 		    enable_ints(pri);
+ 		    return 1;
+ 		}
+ 	    }
+ 	    enable_ints(pri);
+ 	}
+     }
+ #undef VMHASH
+ #endif
+ #endif /* AFS_AIX32_ENV */
+ 
+ #if defined (AFS_SUN5_ENV)
+     if (avc->states & CMAPPED) {
+ 	struct page *pg;
+ 	for (pg = avc->v.v_s.v_Pages; pg; pg = pg->p_vpnext) {
+ 	    if (pg->p_mod) {
+ 		return 1;
+ 	    }
+ 	}
+     }
+ #endif
+     return 0;
+ }
+ #endif /* notdef */
+ 
+ 
+ /*
+  * Solaris osi_ReleaseVM should not drop and re-obtain the vcache entry lock.
+  * This leads to bad races when osi_ReleaseVM() is called from
+  * afs_InvalidateAllSegments().
+ 
+  * We can do this because Solaris osi_VM_Truncate() doesn't care whether the
+  * vcache entry lock is held or not.
+  *
+  * For other platforms, in some cases osi_VM_Truncate() doesn't care, but
+  * there may be cases where it does care.  If so, it would be good to fix
+  * them so they don't care.  Until then, we assume the worst.
+  *
+  * Locking:  the vcache entry lock is held.  It is dropped and re-obtained.
+  */
+ void
+ osi_ReleaseVM(struct vcache *avc, struct AFS_UCRED *acred)
+ {
+ #ifdef	AFS_SUN5_ENV
+     AFS_GUNLOCK();
+     osi_VM_Truncate(avc, 0, acred);
+     AFS_GLOCK();
+ #else
+     ReleaseWriteLock(&avc->lock);
+     AFS_GUNLOCK();
+     osi_VM_Truncate(avc, 0, acred);
+     AFS_GLOCK();
+     ObtainWriteLock(&avc->lock, 80);
+ #endif
+ }
Index: openafs/src/afs/afs_pag_call.c
diff -c /dev/null openafs/src/afs/afs_pag_call.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_pag_call.c	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,560 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #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 */
+ #include "afs/afs_stats.h"
+ #include "rx/rx_globals.h"
+ #if !defined(UKERNEL) && !defined(AFS_LINUX20_ENV)
+ #include "net/if.h"
+ #ifdef AFS_SGI62_ENV
+ #include "h/hashing.h"
+ #endif
+ #if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN60_ENV)
+ #include "netinet/in_var.h"
+ #endif
+ #endif /* !defined(UKERNEL) */
+ #ifdef AFS_LINUX22_ENV
+ #include "h/smp_lock.h"
+ #endif
+ #include "rmtsys.h"
+ #include "pagcb.h"
+ 
+ 
+ afs_int32 afs_termState = 0;
+ afs_int32 afs_gcpags = AFS_GCPAGS;
+ int afs_shuttingdown = 0;
+ int afs_cold_shutdown = 0;
+ int afs_resourceinit_flag = 0;
+ afs_int32 afs_nfs_server_addr;
+ struct interfaceAddr afs_cb_interface;
+ struct afs_osi_WaitHandle AFS_WaitHandler;
+ static struct rx_securityClass *srv_secobj;
+ static struct rx_securityClass *clt_secobj;
+ static struct rx_service *stats_svc;
+ static struct rx_service *pagcb_svc;
+ static struct rx_connection *rmtsys_conn;
+ char *afs_sysname = 0;
+ char *afs_sysnamelist[MAXNUMSYSNAMES];
+ int afs_sysnamecount = 0;
+ int afs_sysnamegen = 0;
+ 
+ 
+ void afs_Daemon(void)
+ {
+     afs_int32 now, last10MinCheck, last60MinCheck;
+ 
+     last10MinCheck = 0;
+     last60MinCheck = 0;
+     while (1) {
+ 	rx_CheckPackets();
+ 	now = osi_Time();
+ 
+ 	if (last10MinCheck + 600 < now) {
+ 	    afs_GCUserData(0);
+ 	}
+ 
+ 	if (last60MinCheck + 3600 < now) {
+ 	    afs_int32 didany;
+ 	    afs_GCPAGs(&didany);
+ 	}
+ 
+ 	now = 20000 - (osi_Time() - now);
+ 	afs_osi_Wait(now, &AFS_WaitHandler, 0);
+ 
+ 	if (afs_termState == AFSOP_STOP_AFS) {
+ #if defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV)
+ 	    afs_termState = AFSOP_STOP_RXEVENT;
+ #else
+ 	    afs_termState = AFSOP_STOP_COMPLETE;
+ #endif
+ 	    afs_osi_Wakeup(&afs_termState);
+ 	    return;
+ 	}
+     }
+ }
+ 
+ 
+ void afspag_Init(afs_int32 nfs_server_addr)
+ {
+     struct clientcred ccred;
+     struct rmtbulk idata, odata;
+     afs_int32 code, err, addr, obuf;
+     int i;
+ 
+     afs_uuid_create(&afs_cb_interface.uuid);
+ 
+     AFS_GLOCK();
+ 
+     afs_InitStats();
+     rx_Init(htons(7001));
+ 
+     AFS_STATCNT(afs_ResourceInit);
+     RWLOCK_INIT(&afs_xuser, "afs_xuser");
+     RWLOCK_INIT(&afs_xpagcell, "afs_xpagcell");
+     RWLOCK_INIT(&afs_xpagsys, "afs_xpagsys");
+     RWLOCK_INIT(&afs_icl_lock, "afs_icl_lock");
+ #ifndef AFS_FBSD_ENV
+     LOCK_INIT(&osi_fsplock, "osi_fsplock");
+     LOCK_INIT(&osi_flplock, "osi_flplock");
+ #endif
+ 
+     afs_resourceinit_flag = 1;
+     afs_nfs_server_addr = nfs_server_addr;
+     for (i = 0; i < MAXNUMSYSNAMES; i++)
+ 	afs_sysnamelist[i] = afs_osi_Alloc(MAXSYSNAME);
+     afs_sysname = afs_sysnamelist[0];
+     strcpy(afs_sysname, SYS_NAME);
+     afs_sysnamecount = 1;
+     afs_sysnamegen++;
+ 
+     srv_secobj = rxnull_NewServerSecurityObject();
+     stats_svc = rx_NewService(0, RX_STATS_SERVICE_ID, "rpcstats", &srv_secobj,
+ 			      1, RXSTATS_ExecuteRequest);
+     pagcb_svc = rx_NewService(0, PAGCB_SERVICEID, "pagcb", &srv_secobj,
+ 			      1, PAGCB_ExecuteRequest);
+     rx_StartServer(0);
+ 
+     clt_secobj = rxnull_NewClientSecurityObject();
+     rmtsys_conn = rx_NewConnection(nfs_server_addr, htons(7009),
+ 				   RMTSYS_SERVICEID, clt_secobj, 0);
+ 
+ #ifdef RXK_LISTENER_ENV
+     afs_start_thread(rxk_Listener,       "Rx Listener");
+ #endif
+     afs_start_thread(rx_ServerProc,      "Rx Server Thread");
+     afs_start_thread(afs_rxevent_daemon, "Rx Event Daemon");
+     afs_start_thread(afs_Daemon,         "AFS PAG Daemon");
+ 
+     afs_icl_InitLogs();
+ 
+     AFS_GUNLOCK();
+ 
+     /* If it's reachable, tell the translator to nuke our creds.
+      * We should be more agressive about making sure this gets done,
+      * even if the translator is unreachable when we boot.
+      */
+     addr = obuf = err = 0;
+     idata.rmtbulk_len = sizeof(addr);
+     idata.rmtbulk_val = (char *)&addr;
+     odata.rmtbulk_len = sizeof(obuf);
+     odata.rmtbulk_val = (char *)&obuf;
+     memset(&ccred, 0, sizeof(ccred));
+     code = RMTSYS_Pioctl(rmtsys_conn, &ccred, NIL_PATHP, 0x4F01, 0,
+                          &idata, &odata, &err);
+ }				/*afs_ResourceInit */
+ 
+ 
+ /* called with the GLOCK held */
+ void afspag_Shutdown(void)
+ {
+     if (afs_shuttingdown)
+ 	return;
+     afs_shuttingdown = 1;
+     afs_termState = AFSOP_STOP_RXCALLBACK;
+     rx_WakeupServerProcs();
+     while (afs_termState == AFSOP_STOP_RXCALLBACK)
+ 	afs_osi_Sleep(&afs_termState);
+     /* rx_ServerProc sets AFS_STOP_AFS */
+ 
+     while (afs_termState == AFSOP_STOP_AFS) {
+ 	afs_osi_CancelWait(&AFS_WaitHandler);
+ 	afs_osi_Sleep(&afs_termState);
+     }
+     /* afs_Daemon sets AFS_STOP_RXEVENT */
+ 
+ #if defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV)
+     while (afs_termState == AFSOP_STOP_RXEVENT)
+ 	afs_osi_Sleep(&afs_termState);
+     /* afs_rxevent_daemon sets AFSOP_STOP_RXK_LISTENER */
+ 
+ #if defined(RXK_LISTENER_ENV)
+     afs_osi_UnmaskRxkSignals();
+     osi_StopListener();
+     while (afs_termState == AFSOP_STOP_RXK_LISTENER)
+ 	afs_osi_Sleep(&afs_termState);
+     /* rxk_Listener sets AFSOP_STOP_COMPLETE */
+ #endif
+ #endif
+ }
+ 
+ static void token_conversion(char *buffer, int buf_size, int in)
+ {
+     struct ClearToken *ticket;
+     afs_int32 *lptr, n;
+ 
+     /* secret ticket */
+     if (buf_size < 4) return;
+     lptr = (afs_int32 *)buffer;
+     buffer += 4; buf_size -= 4;
+     if (in) {
+ 	*lptr = ntohl(*lptr);
+ 	n = *lptr;
+     } else {
+ 	n = *lptr;
+ 	*lptr = htonl(*lptr);
+     }
+     if (n < 0 || buf_size < n) return;
+     buffer += n; buf_size -= n;
+ 
+     /* clear token */
+     if (buf_size < 4) return;
+     lptr = (afs_int32 *)buffer;
+     buffer += 4; buf_size -= 4;
+     if (in) {
+ 	*lptr = ntohl(*lptr);
+ 	n = *lptr;
+     } else {
+ 	n = *lptr;
+ 	*lptr = htonl(*lptr);
+     }
+     if (n < 0 || buf_size < n) return;
+     if (n >= sizeof(struct ClearToken)) {
+ 	ticket = (struct ClearToken *)buffer;
+ 	if (in) {
+ 	    ticket->AuthHandle     = ntohl(ticket->AuthHandle);
+ 	    ticket->ViceId         = ntohl(ticket->ViceId);
+ 	    ticket->BeginTimestamp = ntohl(ticket->BeginTimestamp);
+ 	    ticket->EndTimestamp   = ntohl(ticket->EndTimestamp);
+ 	} else {
+ 	    ticket->AuthHandle     = htonl(ticket->AuthHandle);
+ 	    ticket->ViceId         = htonl(ticket->ViceId);
+ 	    ticket->BeginTimestamp = htonl(ticket->BeginTimestamp);
+ 	    ticket->EndTimestamp   = htonl(ticket->EndTimestamp);
+ 	}
+     }
+     buffer += n; buf_size -= n;
+ 
+     /* primary flag */
+     if (buf_size < 4) return;
+     lptr = (afs_int32 *)buffer;
+     if (in) {
+ 	*lptr = ntohl(*lptr);
+     } else {
+ 	*lptr = htonl((*lptr) & ~0x8000);
+     }
+     return;
+ }
+ 
+ static void FetchVolumeStatus_conversion(char *buffer, int buf_size, int in)
+ {
+     AFSFetchVolumeStatus *status = (AFSFetchVolumeStatus *)buffer;
+ 
+     if (buf_size < sizeof(AFSFetchVolumeStatus))
+ 	return;
+     if (in) {
+ 	status->Vid              = ntohl(status->Vid);
+ 	status->ParentId         = ntohl(status->ParentId);
+ 	status->Type             = ntohl(status->Type);
+ 	status->MinQuota         = ntohl(status->MinQuota);
+ 	status->MaxQuota         = ntohl(status->MaxQuota);
+ 	status->BlocksInUse      = ntohl(status->BlocksInUse);
+ 	status->PartBlocksAvail  = ntohl(status->PartBlocksAvail);
+ 	status->PartMaxBlocks    = ntohl(status->PartMaxBlocks);
+     } else {
+ 	status->Vid              = htonl(status->Vid);
+ 	status->ParentId         = htonl(status->ParentId);
+ 	status->Type             = htonl(status->Type);
+ 	status->MinQuota         = htonl(status->MinQuota);
+ 	status->MaxQuota         = htonl(status->MaxQuota);
+ 	status->BlocksInUse      = htonl(status->BlocksInUse);
+ 	status->PartBlocksAvail  = htonl(status->PartBlocksAvail);
+ 	status->PartMaxBlocks    = htonl(status->PartMaxBlocks);
+     }
+ }
+ 
+ static void inparam_conversion(int cmd, char *buffer, int buf_size, int in)
+ {
+     afs_int32 *lptr = (afs_int32 *)buffer;
+ 
+     switch (cmd & 0xffff) {
+ 	case (0x5600 |  3): /* VIOCSETTOK */
+ 	    token_conversion(buffer, buf_size, in);
+ 	    return;
+ 
+ 	case (0x5600 |  5): /* VIOCSETVOLSTAT */
+ 	    FetchVolumeStatus_conversion(buffer, buf_size, in);
+ 	    return;
+ 
+ 	case (0x5600 |  8): /* VIOCGETTOK */
+ 	case (0x5600 | 10): /* VIOCCKSERV */
+ 	case (0x5600 | 20): /* VIOCACCESS */
+ 	case (0x5600 | 24): /* VIOCSETCACHESIZE */
+ 	case (0x5600 | 27): /* VIOCGETCELL */
+ 	case (0x5600 | 32): /* VIOC_AFS_MARINER_HOST */
+ 	case (0x5600 | 34): /* VIOC_VENUSLOG */
+ 	case (0x5600 | 38): /* VIOC_AFS_SYSNAME */
+ 	case (0x5600 | 39): /* VIOC_EXPORTAFS */
+ 	    /* one 32-bit integer */
+ 	    if (buf_size >= 4) {
+ 		if (in) lptr[0] = ntohl(lptr[0]);
+ 		else    lptr[0] = htonl(lptr[0]);
+ 	    }
+ 	    return;
+ 
+ 	case (0x5600 | 36): /* VIOCSETCELLSTATUS */
+ 	    /* two 32-bit integers */
+ 	    if (buf_size >= 4) {
+ 		if (in) lptr[0] = ntohl(lptr[0]);
+ 		else    lptr[0] = htonl(lptr[0]);
+ 	    }
+ 	    if (buf_size >= 8) {
+ 		if (in) lptr[1] = ntohl(lptr[1]);
+ 		else    lptr[1] = htonl(lptr[1]);
+ 	    }
+ 	    return;
+     }
+ }
+ 
+ static void outparam_conversion(int cmd, char *buffer, int buf_size, int in)
+ {
+     afs_int32 *lptr = (afs_int32 *)buffer;
+     int i;
+ 
+     switch (cmd & 0xffff) {
+ 	case (0x5600 |  4): /* VIOCGETVOLSTAT */
+ 	case (0x5600 |  5): /* VIOCSETVOLSTAT */
+ 	    FetchVolumeStatus_conversion(buffer, buf_size, in);
+ 	    return;
+ 
+ 	case (0x5600 |  8): /* VIOCGETTOK */
+ 	    token_conversion(buffer, buf_size, in);
+ 	    return;
+ 
+ 	case (0x5600 | 12): /* VIOCCKCONN */
+ 	case (0x5600 | 32): /* VIOC_AFS_MARINER_HOST */
+ 	case (0x5600 | 34): /* VIOC_VENUSLOG */
+ 	case (0x5600 | 35): /* VIOC_GETCELLSTATUS */
+ 	case (0x5600 | 38): /* VIOC_AFS_SYSNAME */
+ 	case (0x5600 | 39): /* VIOC_EXPORTAFS */
+ 	    /* one 32-bit integer */
+ 	    if (buf_size >= 4) {
+ 		if (in) lptr[0] = ntohl(lptr[0]);
+ 		else    lptr[0] = htonl(lptr[0]);
+ 	    }
+ 	    return;
+ 
+ 	case (0x5600 | 40): /* VIOCGETCACHEPARMS */
+ 	    /* sixteen 32-bit integers */
+ 	    for (i = 0; i < 16 && buf_size >= 4; i++) {
+ 		if (in) lptr[i] = ntohl(lptr[i]);
+ 		else    lptr[i] = htonl(lptr[i]);
+ 		buf_size -= 4;
+ 	    }
+ 	    return;
+     }
+ }
+ 
+ 
+ /* called with the GLOCK held */
+ int
+ #ifdef	AFS_SUN5_ENV
+ afs_syscall_pioctl(path, com, cmarg, follow, rvp, credp)
+      rval_t *rvp;
+      struct AFS_UCRED *credp;
+ #else
+ #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ afs_syscall_pioctl(path, com, cmarg, follow, credp)
+      struct AFS_UCRED *credp;
+ #else
+ afs_syscall_pioctl(path, com, cmarg, follow)
+ #endif
+ #endif
+      char *path;
+      unsigned int com;
+      caddr_t cmarg;
+      int follow;
+ {
+ #ifdef	AFS_AIX41_ENV
+     struct ucred *credp = crref();	/* don't free until done! */
+ #endif
+ #ifdef AFS_LINUX22_ENV
+     cred_t *credp = crref();	/* don't free until done! */
+ #endif
+     struct afs_ioctl data;
+     struct clientcred ccred;
+     struct rmtbulk idata, odata;
+     short in_size, out_size;
+     afs_int32 code = 0, pag, err;
+     gid_t g0, g1;
+     char *abspath, *pathbuf = 0;
+ 
+     AFS_STATCNT(afs_syscall_pioctl);
+     if (follow)
+ 	follow = 1;		/* compat. with old venus */
+     code = copyin_afs_ioctl(cmarg, &data);
+     if (code) goto out;
+ 
+     if ((com & 0xff) == 90) {
+ 	/* PSetClientContext, in any space */
+ 	code = EINVAL;
+ 	goto out;
+     }
+ 
+     /* Special handling for a few pioctls */
+     switch (com & 0xffff) {
+ 	case (0x5600 |  3): /* VIOCSETTOK */
+ 	    code = afspag_PSetTokens(data.in, data.in_size, &credp);
+ 	    if (code) goto out;
+ 	    break;
+ 
+ 	case (0x5600 |  9): /* VIOCUNLOG */
+ 	case (0x5600 | 21): /* VIOCUNPAG */
+ 	    code = afspag_PUnlog(data.in, data.in_size, &credp);
+ 	    if (code) goto out;
+ 	    break;
+ 
+ 	case (0x5600 | 38): /* VIOC_AFS_SYSNAME */
+ 	    code = afspag_PSetSysName(data.in, data.in_size, &credp);
+ 	    if (code) goto out;
+ 	    break;
+     }
+ 
+     /* Set up credentials */
+     memset(&ccred, 0, sizeof(ccred));
+     pag = PagInCred(credp);
+     ccred.uid = credp->cr_uid;
+     if (pag != NOPAG) {
+ 	 afs_get_groups_from_pag(pag, &g0, &g1);
+ 	 ccred.group0 = g0;
+ 	 ccred.group1 = g1;
+     }
+ 
+     /*
+      * Copy the path and convert to absolute, if one was given.
+      * NB: We can only use osI_AllocLargeSpace here as long as
+      * RMTSYS_MAXPATHLEN is less than AFS_LRALLOCSIZ.
+      */
+     if (path) {
+ 	pathbuf = osi_AllocLargeSpace(RMTSYS_MAXPATHLEN);
+ 	if (!pathbuf) {
+ 	    code = ENOMEM;
+ 	    goto out;
+ 	}
+ 	code = osi_abspath(path, pathbuf, RMTSYS_MAXPATHLEN, 0, &abspath);
+ 	if (code)
+ 	    goto out_path;
+     } else {
+ 	abspath = NIL_PATHP;
+     }
+ 
+     /* Allocate, copy, and convert incoming data */
+     idata.rmtbulk_len = in_size = data.in_size;
+     if (in_size  < 0 || in_size  > MAXBUFFERLEN) {
+ 	code = EINVAL;
+ 	goto out_path;
+     }
+     if (in_size > AFS_LRALLOCSIZ)
+ 	 idata.rmtbulk_val = osi_Alloc(in_size);
+     else
+ 	 idata.rmtbulk_val = osi_AllocLargeSpace(AFS_LRALLOCSIZ);
+     if (!idata.rmtbulk_val) {
+ 	code = ENOMEM;
+ 	goto out_path;
+     }
+     if (in_size) {
+ 	AFS_COPYIN(data.in, idata.rmtbulk_val, in_size, code);
+ 	if (code)
+ 	    goto out_idata;
+ 	inparam_conversion(com, idata.rmtbulk_val, in_size, 0);
+     }
+ 
+     /* Allocate space for outgoing data */
+     odata.rmtbulk_len = out_size = data.out_size;
+     if (out_size < 0 || out_size > MAXBUFFERLEN) {
+ 	code = EINVAL;
+ 	goto out_idata;
+     }
+     if (out_size > AFS_LRALLOCSIZ)
+ 	 odata.rmtbulk_val = osi_Alloc(out_size);
+     else
+ 	 odata.rmtbulk_val = osi_AllocLargeSpace(AFS_LRALLOCSIZ);
+     if (!odata.rmtbulk_val) {
+ 	code = ENOMEM;
+ 	goto out_idata;
+     }
+ 
+     AFS_GUNLOCK();
+     code = RMTSYS_Pioctl(rmtsys_conn, &ccred, abspath, com, follow,
+ 			 &idata, &odata, &err);
+     AFS_GLOCK();
+     if (code)
+ 	goto out_odata;
+ 
+     /* Convert and copy out the result */
+     if (odata.rmtbulk_len > out_size) {
+ 	code = E2BIG;
+ 	goto out_odata;
+     }
+     if (odata.rmtbulk_len) {
+ 	outparam_conversion(com, odata.rmtbulk_val, odata.rmtbulk_len, 1);
+ 	AFS_COPYOUT(odata.rmtbulk_val, data.out, odata.rmtbulk_len, code);
+     }
+     if (!code)
+ 	code = err;
+ 
+ out_odata:
+     if (out_size > AFS_LRALLOCSIZ)
+ 	osi_Free(odata.rmtbulk_val, out_size);
+     else
+ 	osi_FreeLargeSpace(odata.rmtbulk_val);
+ 
+ out_idata:
+     if (in_size > AFS_LRALLOCSIZ)
+ 	osi_Free(idata.rmtbulk_val, in_size);
+     else
+ 	osi_FreeLargeSpace(idata.rmtbulk_val);
+ 
+ out_path:
+     if (path)
+ 	osi_FreeLargeSpace(pathbuf);
+ 
+ out:
+ #if defined(AFS_LINUX22_ENV) || defined(AFS_AIX41_ENV)
+     crfree(credp);
+ #endif
+ #if defined(KERNEL_HAVE_UERROR)
+     if (!getuerror())
+ 	setuerror(code);
+     return (getuerror());
+ #else
+     return (code);
+ #endif
+ }
+ 
+ 
+ int
+ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
+      long parm, parm2, parm3, parm4, parm5, parm6;
+ {
+     /* superusers may shut us down, as with afsd --shutdown */
+ #ifdef AFS_SUN5_ENV
+     if (parm == AFSOP_SHUTDOWN && afs_suser(CRED()))
+ #else
+     if (parm == AFSOP_SHUTDOWN && afs_suser(NULL))
+ #endif
+     {
+ 	AFS_GLOCK();
+ 	afspag_Shutdown();
+ 	AFS_GUNLOCK();
+ 	return 0;
+     }
+ 
+     /* otherwise, we don't support afs_syscall_call, period */
+ #if defined(KERNEL_HAVE_UERROR)
+     setuerror(EPERM);
+ #endif
+     return EPERM;
+ }
Index: openafs/src/afs/afs_pag_cred.c
diff -c /dev/null openafs/src/afs/afs_pag_cred.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_pag_cred.c	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,404 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_pag_cred.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 */
+ #include "afs/afs_stats.h"
+ #include "afs/unified_afs.h"
+ #include "rx/rx_globals.h"
+ #include "pagcb.h"
+ 
+ 
+ struct afspag_cell {
+     struct afspag_cell *next;
+     char *cellname;
+     afs_int32 cellnum;
+ };
+ 
+ afs_rwlock_t afs_xpagcell;
+ afs_rwlock_t afs_xpagsys;
+ static int lastcell = 0;
+ static struct afspag_cell *cells = 0;
+ static struct afspag_cell *primary_cell = 0;
+ 
+ 
+ struct afspag_cell *afspag_GetCell(char *acell)
+ {
+     struct afspag_cell *tcell;
+ 
+     ObtainWriteLock(&afs_xpagcell, 820);
+ 
+     for (tcell = cells; tcell; tcell = tcell->next) {
+ 	if (!strcmp(acell, tcell->cellname))
+ 	    break;
+     }
+ 
+     if (!tcell) {
+ 	tcell = (struct afspag_cell *)afs_osi_Alloc(sizeof(struct afspag_cell));
+ 	if (!tcell)
+ 	    goto out;
+ 	tcell->cellname = (char *)afs_osi_Alloc(strlen(acell) + 1);
+ 	if (!tcell->cellname) {
+ 	    afs_osi_Free(tcell, sizeof(struct afspag_cell));
+ 	    tcell = 0;
+ 	    goto out;
+ 	}
+ 	strcpy(tcell->cellname, acell);
+ 	tcell->cellnum = ++lastcell;
+ 	tcell->next = cells;
+ 	cells = tcell;
+ 	if (!primary_cell) primary_cell = tcell;
+     }
+ 
+ out:
+     ReleaseWriteLock(&afs_xpagcell);
+     return tcell;
+ }
+ 
+ 
+ struct afspag_cell *afspag_GetPrimaryCell()
+ {
+     struct afspag_cell *tcell;
+ 
+     ObtainWriteLock(&afs_xpagcell, 821);
+     tcell = primary_cell;
+     ReleaseWriteLock(&afs_xpagcell);
+     return tcell;
+ }
+ 
+ 
+ void afspag_SetPrimaryCell(char *acell)
+ {
+     struct afspag_cell *tcell;
+ 
+     tcell = afspag_GetCell(acell);
+     ObtainWriteLock(&afs_xpagcell, 822);
+     primary_cell = tcell;
+     ReleaseWriteLock(&afs_xpagcell);
+ }
+ 
+ 
+ int afspag_PUnlog(char *ain, afs_int32 ainSize, struct AFS_UCRED **acred)
+ {
+     register afs_int32 i;
+     register struct unixuser *tu;
+     afs_int32 pag, uid;
+ 
+     AFS_STATCNT(PUnlog);
+     if (!afs_resourceinit_flag)	/* afs daemons haven't started yet */
+ 	return EIO;		/* Inappropriate ioctl for device */
+ 
+     pag = PagInCred(*acred);
+     uid = (pag == NOPAG) ? (*acred)->cr_uid : pag;
+     i = UHash(uid);
+     ObtainWriteLock(&afs_xuser, 823);
+     for (tu = afs_users[i]; tu; tu = tu->next) {
+ 	if (tu->uid == uid) {
+ 	    tu->vid = UNDEFVID;
+ 	    tu->states &= ~UHasTokens;
+ 	    /* security is not having to say you're sorry */
+ 	    memset((char *)&tu->ct, 0, sizeof(struct ClearToken));
+ #ifdef UKERNEL
+ 	    /* set the expire times to 0, causes
+ 	     * afs_GCUserData to remove this entry
+ 	     */
+ 	    tu->ct.EndTimestamp = 0;
+ 	    tu->tokenTime = 0;
+ #endif /* UKERNEL */
+ 	}
+     }
+     ReleaseWriteLock(&afs_xuser);
+     return 0;
+ }
+ 
+ 
+ int afspag_PSetTokens(char *ain, afs_int32 ainSize, struct AFS_UCRED **acred)
+ {
+     afs_int32 i;
+     register struct unixuser *tu;
+     struct afspag_cell *tcell;
+     struct ClearToken clear;
+     char *stp;
+     int stLen;
+     afs_int32 flag, set_parent_pag = 0;
+     afs_int32 pag, uid;
+ 
+     AFS_STATCNT(PSetTokens);
+     if (!afs_resourceinit_flag) {
+ 	return EIO;
+     }
+     memcpy((char *)&i, ain, sizeof(afs_int32));
+     ain += sizeof(afs_int32);
+     stp = ain;			/* remember where the ticket is */
+     if (i < 0 || i > MAXKTCTICKETLEN)
+ 	return EINVAL;		/* malloc may fail */
+     stLen = i;
+     ain += i;			/* skip over ticket */
+     memcpy((char *)&i, ain, sizeof(afs_int32));
+     ain += sizeof(afs_int32);
+     if (i != sizeof(struct ClearToken)) {
+ 	return EINVAL;
+     }
+     memcpy((char *)&clear, ain, sizeof(struct ClearToken));
+     if (clear.AuthHandle == -1)
+ 	clear.AuthHandle = 999;	/* more rxvab compat stuff */
+     ain += sizeof(struct ClearToken);
+     if (ainSize != 2 * sizeof(afs_int32) + stLen + sizeof(struct ClearToken)) {
+ 	/* still stuff left?  we've got primary flag and cell name.  Set these */
+ 	memcpy((char *)&flag, ain, sizeof(afs_int32));	/* primary id flag */
+ 	ain += sizeof(afs_int32);	/* skip id field */
+ 	/* rest is cell name, look it up */
+ 	/* some versions of gcc appear to need != 0 in order to get this right */
+ 	if ((flag & 0x8000) != 0) {	/* XXX Use Constant XXX */
+ 	    flag &= ~0x8000;
+ 	    set_parent_pag = 1;
+ 	}
+ 	tcell = afspag_GetCell(ain);
+     } else {
+ 	/* default to primary cell, primary id */
+ 	flag = 1;		/* primary id */
+ 	tcell = afspag_GetPrimaryCell();
+     }
+     if (!tcell) return ESRCH;
+     if (set_parent_pag) {
+ #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ #if defined(AFS_DARWIN_ENV)
+ 	struct proc *p = current_proc();	/* XXX */
+ #else
+ 	struct proc *p = curproc;	/* XXX */
+ #endif
+ #ifndef AFS_DARWIN80_ENV
+ 	uprintf("Process %d (%s) tried to change pags in PSetTokens\n",
+ 		p->p_pid, p->p_comm);
+ #endif
+ 	setpag(p, acred, -1, &pag, 1);
+ #else
+ #ifdef	AFS_OSF_ENV
+ 	setpag(u.u_procp, acred, -1, &pag, 1);	/* XXX u.u_procp is a no-op XXX */
+ #else
+ 	setpag(acred, -1, &pag, 1);
+ #endif
+ #endif
+     }
+     pag = PagInCred(*acred);
+     uid = (pag == NOPAG) ? (*acred)->cr_uid : pag;
+     /* now we just set the tokens */
+     tu = afs_GetUser(uid, tcell->cellnum, WRITE_LOCK);
+     if (!tu->cellinfo)
+ 	tu->cellinfo = (void *)tcell;
+     tu->vid = clear.ViceId;
+     if (tu->stp != NULL) {
+ 	afs_osi_Free(tu->stp, tu->stLen);
+     }
+     tu->stp = (char *)afs_osi_Alloc(stLen);
+     tu->stLen = stLen;
+     memcpy(tu->stp, stp, stLen);
+     tu->ct = clear;
+ #ifndef AFS_NOSTATS
+     afs_stats_cmfullperf.authent.TicketUpdates++;
+     afs_ComputePAGStats();
+ #endif /* AFS_NOSTATS */
+     tu->states |= UHasTokens;
+     tu->states &= ~UTokensBad;
+     afs_SetPrimary(tu, flag);
+     tu->tokenTime = osi_Time();
+     afs_PutUser(tu, WRITE_LOCK);
+ 
+     return 0;
+ }
+ 
+ 
+ int
+ SPAGCB_GetCreds(struct rx_call *a_call, afs_int32 a_uid,
+                 CredInfos *a_creds)
+ {
+     struct unixuser *tu;
+     CredInfo *tci;
+     int bucket, count, i = 0, clen;
+     char *cellname;
+ 
+     RX_AFS_GLOCK();
+ 
+     memset(a_creds, 0, sizeof(struct CredInfos));
+     if ((rx_HostOf(rx_PeerOf(rx_ConnectionOf(a_call))) != afs_nfs_server_addr
+ 	||  rx_PortOf(rx_PeerOf(rx_ConnectionOf(a_call))) != htons(7001))
+ #if 0 /* for debugging ONLY! */
+ 	&&  rx_PortOf(rx_PeerOf(rx_ConnectionOf(a_call))) != htons(7901)
+ #endif
+         ) {
+ 	RX_AFS_GUNLOCK();
+ 	return UAEPERM;
+     }
+ 
+     ObtainWriteLock(&afs_xuser, 823);
+ 
+     /* count them first */
+     bucket = UHash(a_uid);
+     for (count = 0, tu = afs_users[bucket]; tu; tu = tu->next) {
+ 	if (tu->uid == a_uid) count++;
+     }
+ 
+     if (!count) {
+ 	ReleaseWriteLock(&afs_xuser);
+ 	RX_AFS_GUNLOCK();
+ 	return UAESRCH;
+     }
+ 
+     a_creds->CredInfos_val =
+ 	(CredInfo *)afs_osi_Alloc(count * sizeof(CredInfo));
+     if (!a_creds->CredInfos_val)
+ 	goto out;
+     a_creds->CredInfos_len = count;
+     memset(a_creds->CredInfos_val, 0, count * sizeof(CredInfo));
+ 
+     for (i = 0, tu = afs_users[bucket]; tu; tu = tu->next, i++) {
+ 	if (tu->uid == a_uid && tu->cellinfo &&
+ 	    (tu->states & UHasTokens) && !(tu->states & UTokensBad)) {
+ 
+ 	    tci = &a_creds->CredInfos_val[i];
+ 	    tci->vid               = tu->vid;
+ 	    tci->ct.AuthHandle     = tu->ct.AuthHandle;
+ 	    memcpy(tci->ct.HandShakeKey, tu->ct.HandShakeKey, 8);
+ 	    tci->ct.ViceId         = tu->ct.ViceId;
+ 	    tci->ct.BeginTimestamp = tu->ct.BeginTimestamp;
+ 	    tci->ct.EndTimestamp   = tu->ct.EndTimestamp;
+ 
+ 	    cellname = ((struct afspag_cell *)(tu->cellinfo))->cellname;
+ 	    clen = strlen(cellname) + 1;
+ 	    tci->cellname = afs_osi_Alloc(clen);
+ 	    if (!tci->cellname)
+ 		goto out;
+ 	    memcpy(tci->cellname, cellname, clen);
+ 
+ 	    tci->st.st_len = tu->stLen;
+ 	    tci->st.st_val = afs_osi_Alloc(tu->stLen);
+ 	    if (!tci->st.st_val) {
+ 		afs_osi_Free(tci->cellname, clen);
+ 		goto out;
+ 	    }
+ 	    memcpy(tci->st.st_val, tu->stp, tu->stLen);
+ 	    if (tu->states & UPrimary)
+ 		tci->states |= UPrimary;
+ 	}
+     }
+ 
+     ReleaseWriteLock(&afs_xuser);
+     RX_AFS_GUNLOCK();
+     return 0;
+ 
+ out:
+     if (a_creds->CredInfos_val) {
+ 	while (i-- > 0) {
+ 	    afs_osi_Free(a_creds->CredInfos_val[i].st.st_val,
+ 			 a_creds->CredInfos_val[i].st.st_len);
+ 	    afs_osi_Free(a_creds->CredInfos_val[i].cellname,
+ 			 strlen(a_creds->CredInfos_val[i].cellname) + 1);
+ 	}
+ 	afs_osi_Free(a_creds->CredInfos_val, count * sizeof(CredInfo));
+     }
+ 
+     ReleaseWriteLock(&afs_xuser);
+     RX_AFS_GUNLOCK();
+     return UAENOMEM;
+ }
+ 
+ 
+ int afspag_PSetSysName(char *ain, afs_int32 ainSize, struct AFS_UCRED **acred)
+ {
+     int setsysname, count, t;
+     char *cp, *setp;
+ 
+     setp = ain;
+     memcpy((char *)&setsysname, ain, sizeof(afs_int32));
+     ain += sizeof(afs_int32);
+     if (!setsysname)
+ 	return 0; /* nothing to do locally */
+ 
+     /* Check my args */
+     if (setsysname < 0 || setsysname > MAXNUMSYSNAMES)
+ 	return EINVAL;
+     if (!afs_osi_suser(*acred))
+ 	return EACCES;
+     for (cp = ain, count = 0; count < setsysname; count++) {
+ 	/* won't go past end of ain since maxsysname*num < ain length */
+ 	t = strlen(cp);
+ 	if (t >= MAXSYSNAME || t <= 0)
+ 	    return EINVAL;
+ 	/* check for names that can shoot us in the foot */
+ 	if (*cp == '.' && (cp[1] == 0 || (cp[1] == '.' && cp[2] == 0)))
+ 	    return EINVAL;
+ 	cp += t + 1;
+     }
+ 
+     ObtainWriteLock(&afs_xpagsys, 824);
+     for (cp = ain, count = 0; count < setsysname; count++) {
+ 	t = strlen(cp);
+ 	memcpy(afs_sysnamelist[count], cp, t + 1);
+ 	cp += t + 1;
+     }
+     afs_sysnamecount = setsysname;
+     afs_sysnamegen++;
+     ReleaseWriteLock(&afs_xpagsys);
+ 
+     /* Change the arguments so we pass the allpags flag to the server */
+     setsysname |= 0x8000;
+     memcpy(setp, (char *)&setsysname, sizeof(afs_int32));
+     return 0;
+ }
+ 
+ 
+ int
+ SPAGCB_GetSysName(struct rx_call *a_call, afs_int32 a_uid,
+ 		  SysNameList *a_sysnames)
+ {
+     int i;
+ 
+     RX_AFS_GLOCK();
+ 
+     ObtainReadLock(&afs_xpagsys);
+     memset(a_sysnames, 0, sizeof(struct SysNameList));
+ 
+     a_sysnames->SysNameList_len = afs_sysnamecount;
+     a_sysnames->SysNameList_val =
+ 	afs_osi_Alloc(afs_sysnamecount * sizeof(SysNameEnt));
+     if (!a_sysnames->SysNameList_val)
+ 	goto out;
+ 
+     for (i = 0; i < afs_sysnamecount; i++) {
+ 	a_sysnames->SysNameList_val[i].sysname =
+ 	    afs_osi_Alloc(strlen(afs_sysnamelist[i]) + 1);
+ 	if (!a_sysnames->SysNameList_val[i].sysname)
+ 	    goto out;
+ 	strcpy(a_sysnames->SysNameList_val[i].sysname, afs_sysnamelist[i]);
+     }
+ 
+     ReleaseReadLock(&afs_xpagsys);
+     RX_AFS_GUNLOCK();
+     return 0;
+ 
+ out:
+     if (a_sysnames->SysNameList_val) {
+ 	while (i-- > 0) {
+ 	    afs_osi_Free(a_sysnames->SysNameList_val[i].sysname,
+ 			 strlen(a_sysnames->SysNameList_val[i].sysname) + 1);
+ 	}
+ 	afs_osi_Free(a_sysnames->SysNameList_val,
+ 		     afs_sysnamecount * sizeof(SysNameEnt));
+     }
+ 
+     ReleaseWriteLock(&afs_xpagsys);
+     RX_AFS_GUNLOCK();
+     return UAENOMEM;
+ }
Index: openafs/src/afs/afs_pioctl.c
diff -c openafs/src/afs/afs_pioctl.c:1.110.2.1 openafs/src/afs/afs_pioctl.c:1.110.2.5
*** openafs/src/afs/afs_pioctl.c:1.110.2.1	Thu Jun 15 11:52:59 2006
--- openafs/src/afs/afs_pioctl.c	Mon Jul 31 17:33:28 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.110.2.1 2006/06/15 15:52:59 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.5 2006/07/31 21:33:28 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #ifdef AFS_OBSD_ENV
***************
*** 90,95 ****
--- 90,96 ----
  DECL_PIOCTL(PPrefetchFromTape);
  DECL_PIOCTL(PResidencyCmd);
  DECL_PIOCTL(PCallBackAddr);
+ DECL_PIOCTL(PNFSNukeCreds);
  
  /*
   * A macro that says whether we're going to need HandleClientContext().
***************
*** 194,307 ****
  	PCallBackAddr,		/* 3 -- request addr for callback rxcon */
  };
  
  #define PSetClientContext 99	/*  Special pioctl to setup caller's creds  */
  int afs_nobody = NFS_NOBODY;
  
- #if (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)) || defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64)) || defined(NEED_IOCTL32)
- static void
- afs_ioctl32_to_afs_ioctl(const struct afs_ioctl32 *src, struct afs_ioctl *dst)
- {
-     dst->in = (char *)(unsigned long)src->in;
-     dst->out = (char *)(unsigned long)src->out;
-     dst->in_size = src->in_size;
-     dst->out_size = src->out_size;
- }
- #endif
- 
- /*
-  * If you need to change copyin_afs_ioctl(), you may also need to change
-  * copyin_iparam().
-  */
- 
- static int
- copyin_afs_ioctl(caddr_t cmarg, struct afs_ioctl *dst)
- {
-     int code;
- #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
-     struct afs_ioctl32 dst32;
- 
-     if (!(IS64U)) {
- 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
- 	if (!code)
- 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
- 	return code;
-     }
- #endif /* defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) */
- 
- 
- #if defined(AFS_HPUX_64BIT_ENV)
-     struct afs_ioctl32 dst32;
- 
-     if (is_32bit(u.u_procp)) {	/* is_32bit() in proc_iface.h */
- 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
- 	if (!code)
- 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
- 	return code;
-     }
- #endif /* defined(AFS_HPUX_64BIT_ENV) */
- 
- #if defined(AFS_SUN57_64BIT_ENV)
-     struct afs_ioctl32 dst32;
- 
-     if (get_udatamodel() == DATAMODEL_ILP32) {
- 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
- 	if (!code)
- 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
- 	return code;
-     }
- #endif /* defined(AFS_SUN57_64BIT_ENV) */
- 
- #if defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64)
-     struct afs_ioctl32 dst32;
- 
-     if (!ABI_IS_64BIT(get_current_abi())) {
- 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
- 	if (!code)
- 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
- 	return code;
-     }
- #endif /* defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64) */
- 
- #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)
-     struct afs_ioctl32 dst32;
- 
- #ifdef AFS_SPARC64_LINUX26_ENV
-     if (test_thread_flag(TIF_32BIT))
- #elif AFS_SPARC64_LINUX24_ENV
-     if (current->thread.flags & SPARC_FLAG_32BIT)
- #elif defined(AFS_SPARC64_LINUX20_ENV)
-     if (current->tss.flags & SPARC_FLAG_32BIT)
- 
- #elif defined(AFS_AMD64_LINUX26_ENV)
-     if (test_thread_flag(TIF_IA32))
- #elif defined(AFS_AMD64_LINUX20_ENV)
-     if (current->thread.flags & THREAD_IA32)
- 
- #elif defined(AFS_PPC64_LINUX26_ENV)
-     if (current->thread_info->flags & _TIF_32BIT)
- #elif defined(AFS_PPC64_LINUX20_ENV)
-     if (current->thread.flags & PPC_FLAG_32BIT)
- 
- #elif defined(AFS_S390X_LINUX26_ENV)
-     if (test_thread_flag(TIF_31BIT))
- #elif defined(AFS_S390X_LINUX20_ENV)
-     if (current->thread.flags & S390_FLAG_31BIT)
- 
- #else
- #error pioctl32 not done for this linux
- #endif
-     {
- 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
- 	if (!code)
- 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
- 	return code;
-     }
- #endif /* defined(AFS_LINUX_64BIT_KERNEL) */
- 
-     AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code);
-     return code;
- }
- 
  int
  HandleIoctl(register struct vcache *avc, register afs_int32 acom,
  	    struct afs_ioctl *adata)
--- 195,208 ----
  	PCallBackAddr,		/* 3 -- request addr for callback rxcon */
  };
  
+ static int (*(OpioctlSw[])) () = {
+     PBogus,			/* 0 */
+ 	PNFSNukeCreds,		/* 1 -- nuke all creds for NFS client */
+ };
+ 
  #define PSetClientContext 99	/*  Special pioctl to setup caller's creds  */
  int afs_nobody = NFS_NOBODY;
  
  int
  HandleIoctl(register struct vcache *avc, register afs_int32 acom,
  	    struct afs_ioctl *adata)
***************
*** 857,863 ****
  {
      struct afs_ioctl data;
  #ifdef AFS_NEED_CLIENTCONTEXT
!     struct AFS_UCRED *tmpcred;
  #endif
      struct AFS_UCRED *foreigncreds = NULL;
      register afs_int32 code = 0;
--- 758,764 ----
  {
      struct afs_ioctl data;
  #ifdef AFS_NEED_CLIENTCONTEXT
!     struct AFS_UCRED *tmpcred = NULL;
  #endif
      struct AFS_UCRED *foreigncreds = NULL;
      register afs_int32 code = 0;
***************
*** 883,889 ****
      }
      if ((com & 0xff) == PSetClientContext) {
  #ifdef AFS_NEED_CLIENTCONTEXT
! #if defined(AFS_SUN5_ENV) || defined(AFS_AIX41_ENV)
  	code = HandleClientContext(&data, &com, &foreigncreds, credp);
  #else
  	code = HandleClientContext(&data, &com, &foreigncreds, osi_curcred());
--- 784,790 ----
      }
      if ((com & 0xff) == PSetClientContext) {
  #ifdef AFS_NEED_CLIENTCONTEXT
! #if defined(AFS_SUN5_ENV) || defined(AFS_AIX41_ENV) || defined(AFS_LINUX22_ENV)
  	code = HandleClientContext(&data, &com, &foreigncreds, credp);
  #else
  	code = HandleClientContext(&data, &com, &foreigncreds, osi_curcred());
***************
*** 913,919 ****
  	 * like afs_osi_suser(cred) which, I think, is better since it
  	 * generalizes and supports multi cred environments...
  	 */
! #ifdef	AFS_SUN5_ENV
  	tmpcred = credp;
  	credp = foreigncreds;
  #elif defined(AFS_AIX41_ENV)
--- 814,820 ----
  	 * like afs_osi_suser(cred) which, I think, is better since it
  	 * generalizes and supports multi cred environments...
  	 */
! #if defined(AFS_SUN5_ENV) || defined(AFS_LINUX22_ENV)
  	tmpcred = credp;
  	credp = foreigncreds;
  #elif defined(AFS_AIX41_ENV)
***************
*** 1039,1045 ****
  	set_p_cred(u.u_procp, tmpcred);	/* restore original credentials */
  #elif	defined(AFS_SGI_ENV)
  	OSI_SET_CURRENT_CRED(tmpcred);	/* restore original credentials */
! #elif	!defined(AFS_SUN5_ENV)
  	osi_curcred() = tmpcred;	/* restore original credentials */
  #endif /* AFS_HPUX101_ENV */
  	crfree(foreigncreds);
--- 940,948 ----
  	set_p_cred(u.u_procp, tmpcred);	/* restore original credentials */
  #elif	defined(AFS_SGI_ENV)
  	OSI_SET_CURRENT_CRED(tmpcred);	/* restore original credentials */
! #elif	defined(AFS_SUN5_ENV) || defined(AFS_LINUX22_ENV)
! 	credp = tmpcred;		/* restore original credentials */
! #else
  	osi_curcred() = tmpcred;	/* restore original credentials */
  #endif /* AFS_HPUX101_ENV */
  	crfree(foreigncreds);
***************
*** 1105,1110 ****
--- 1008,1017 ----
  	pioctlSw = CpioctlSw;
  	pioctlSwSize = sizeof(CpioctlSw);
  	break;
+     case 'O':			/* Coordinated/common pioctls */
+ 	pioctlSw = OpioctlSw;
+ 	pioctlSwSize = sizeof(OpioctlSw);
+ 	break;
      default:
  	afs_PutFakeStat(&fakestate);
  	return EINVAL;
***************
*** 2811,2818 ****
      register struct afs_exporter *exporter;
      register struct unixuser *au;
      register afs_int32 pag, error;
!     int t, count, num = 0;
!     char **sysnamelist[MAXNUMSYSNAMES];
  
      AFS_STATCNT(PSetSysName);
      if (!afs_globalVFS) {
--- 2718,2725 ----
      register struct afs_exporter *exporter;
      register struct unixuser *au;
      register afs_int32 pag, error;
!     int t, count, num = 0, allpags = 0;
!     char **sysnamelist;
  
      AFS_STATCNT(PSetSysName);
      if (!afs_globalVFS) {
***************
*** 2826,2831 ****
--- 2733,2742 ----
      memset(inname, 0, MAXSYSNAME);
      memcpy((char *)&setsysname, ain, sizeof(afs_int32));
      ain += sizeof(afs_int32);
+     if (setsysname & 0x8000) {
+ 	allpags = 1;
+ 	setsysname &= ~0x8000;
+     }
      if (setsysname) {
  
  	/* Check my args */
***************
*** 2850,2856 ****
  	ain += t + 1;
  	num = count;
      }
!     if ((*acred)->cr_gid == RMTUSER_REQ) {	/* Handles all exporters */
  	pag = PagInCred(*acred);
  	if (pag == NOPAG) {
  	    return EINVAL;	/* Better than panicing */
--- 2761,2771 ----
  	ain += t + 1;
  	num = count;
      }
!     if ((*acred)->cr_gid == RMTUSER_REQ ||
! 	(*acred)->cr_gid == RMTUSER_REQ_PRIV) {	/* Handles all exporters */
! 	if (allpags && (*acred)->cr_gid != RMTUSER_REQ_PRIV) {
! 	    return EPERM;
! 	}
  	pag = PagInCred(*acred);
  	if (pag == NOPAG) {
  	    return EINVAL;	/* Better than panicing */
***************
*** 2862,2869 ****
  	    afs_PutUser(au, READ_LOCK);
  	    return EINVAL;	/* Better than panicing */
  	}
! 	error = EXP_SYSNAME(exporter, (setsysname ? cp2 : NULL), sysnamelist,
! 			    &num);
  	if (error) {
  	    if (error == ENODEV)
  		foundname = 0;	/* sysname not set yet! */
--- 2777,2784 ----
  	    afs_PutUser(au, READ_LOCK);
  	    return EINVAL;	/* Better than panicing */
  	}
! 	error = EXP_SYSNAME(exporter, (setsysname ? cp2 : NULL), &sysnamelist,
! 			    &num, allpags);
  	if (error) {
  	    if (error == ENODEV)
  		foundname = 0;	/* sysname not set yet! */
***************
*** 2873,2881 ****
  	    }
  	} else {
  	    foundname = num;
! 	    strcpy(outname, (*sysnamelist)[0]);
  	}
  	afs_PutUser(au, READ_LOCK);
      } else {
  	/* Not xlating, so local case */
  	if (!afs_sysname)
--- 2788,2798 ----
  	    }
  	} else {
  	    foundname = num;
! 	    strcpy(outname, sysnamelist[0]);
  	}
  	afs_PutUser(au, READ_LOCK);
+ 	if (setsysname)
+ 	    afs_sysnamegen++;
      } else {
  	/* Not xlating, so local case */
  	if (!afs_sysname)
***************
*** 2883,2893 ****
  	if (!setsysname) {	/* user just wants the info */
  	    strcpy(outname, afs_sysname);
  	    foundname = afs_sysnamecount;
! 	    *sysnamelist = afs_sysnamelist;
  	} else {		/* Local guy; only root can change sysname */
  	    if (!afs_osi_suser(*acred))
  		return EACCES;
  
  	    /* 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, ... */
--- 2800,2814 ----
  	if (!setsysname) {	/* user just wants the info */
  	    strcpy(outname, afs_sysname);
  	    foundname = afs_sysnamecount;
! 	    sysnamelist = afs_sysnamelist;
  	} else {		/* Local guy; only root can change sysname */
  	    if (!afs_osi_suser(*acred))
  		return EACCES;
  
+ 	    /* allpags makes no sense for local use */
+ 	    if (allpags)
+ 		return EINVAL;
+ 
  	    /* 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, ... */
***************
*** 2904,2909 ****
--- 2825,2831 ----
  		}
  	    }
  	    afs_sysnamecount = setsysname;
+ 	    afs_sysnamegen++;
  	}
      }
      if (!setsysname) {
***************
*** 2914,2926 ****
  	    strcpy(cp, outname);	/* ... the entry, ... */
  	    cp += strlen(outname) + 1;
  	    for (count = 1; count < foundname; ++count) {	/* ... or list. */
! 		if (!(*sysnamelist)[count])
  		    osi_Panic
  			("PSetSysName: no afs_sysnamelist entry to read\n");
! 		t = strlen((*sysnamelist)[count]);
  		if (t >= MAXSYSNAME)
  		    osi_Panic("PSetSysName: sysname entry garbled\n");
! 		strcpy(cp, (*sysnamelist)[count]);
  		cp += t + 1;
  	    }
  	}
--- 2836,2848 ----
  	    strcpy(cp, outname);	/* ... the entry, ... */
  	    cp += strlen(outname) + 1;
  	    for (count = 1; count < foundname; ++count) {	/* ... or list. */
! 		if (!sysnamelist[count])
  		    osi_Panic
  			("PSetSysName: no afs_sysnamelist entry to read\n");
! 		t = strlen(sysnamelist[count]);
  		if (t >= MAXSYSNAME)
  		    osi_Panic("PSetSysName: sysname entry garbled\n");
! 		strcpy(cp, sysnamelist[count]);
  		cp += t + 1;
  	    }
  	}
***************
*** 3189,3194 ****
--- 3111,3117 ----
  {
      afs_int32 export, newint =
  	0, type, changestate, handleValue, convmode, pwsync, smounts;
+     afs_int32 rempags = 0, pagcb = 0;
      register struct afs_exporter *exporter;
  
      AFS_STATCNT(PExportAfs);
***************
*** 3201,3210 ****
      exporter = exporter_find(type);
      if (newint) {
  	export = handleValue & 3;
! 	changestate = handleValue & 0xff;
  	smounts = (handleValue >> 2) & 3;
  	pwsync = (handleValue >> 4) & 3;
  	convmode = (handleValue >> 6) & 3;
      } else {
  	changestate = (handleValue >> 16) & 0x1;
  	convmode = (handleValue >> 16) & 0x2;
--- 3124,3135 ----
      exporter = exporter_find(type);
      if (newint) {
  	export = handleValue & 3;
! 	changestate = handleValue & 0xfff;
  	smounts = (handleValue >> 2) & 3;
  	pwsync = (handleValue >> 4) & 3;
  	convmode = (handleValue >> 6) & 3;
+ 	rempags = (handleValue >> 8) & 3;
+ 	pagcb = (handleValue >> 10) & 3;
      } else {
  	changestate = (handleValue >> 16) & 0x1;
  	convmode = (handleValue >> 16) & 0x2;
***************
*** 3251,3256 ****
--- 3176,3193 ----
  		    exporter->exp_states &= ~EXP_SUBMOUNTS;
  		}
  	    }
+ 	    if (rempags & 2) {
+ 		if (rempags & 1)
+ 		    exporter->exp_states |= EXP_CLIPAGS;
+ 		else
+ 		    exporter->exp_states &= ~EXP_CLIPAGS;
+ 	    }
+ 	    if (pagcb & 2) {
+ 		if (pagcb & 1)
+ 		    exporter->exp_states |= EXP_CALLBACK;
+ 		else
+ 		    exporter->exp_states &= ~EXP_CALLBACK;
+ 	    }
  	    handleValue = exporter->exp_states;
  	    memcpy(aout, (char *)&handleValue, sizeof(afs_int32));
  	    *aoutSize = sizeof(afs_int32);
***************
*** 3390,3396 ****
  {
      char *ain, *inData;
      afs_uint32 hostaddr;
!     afs_int32 uid, g0, g1, i, code, pag, exporter_type;
      struct afs_exporter *exporter, *outexporter;
      struct AFS_UCRED *newcred;
      struct unixuser *au;
--- 3327,3333 ----
  {
      char *ain, *inData;
      afs_uint32 hostaddr;
!     afs_int32 uid, g0, g1, i, code, pag, exporter_type, isroot = 0;
      struct afs_exporter *exporter, *outexporter;
      struct AFS_UCRED *newcred;
      struct unixuser *au;
***************
*** 3453,3478 ****
  	 * code fails for remote client roots.
  	 */
  	uid = afs_nobody;	/* NFS_NOBODY == -2 */
      }
      newcred = crget();
- #if defined(AFS_LINUX26_ENV)
-     newcred->cr_group_info = groups_alloc(0);
- #endif
  #ifdef	AFS_AIX41_ENV
      setuerror(0);
  #endif
!     newcred->cr_gid = RMTUSER_REQ;
  #ifdef AFS_AIX51_ENV
      newcred->cr_groupset.gs_union.un_groups[0] = g0;
      newcred->cr_groupset.gs_union.un_groups[1] = g1;
  #else
      newcred->cr_groups[0] = g0;
      newcred->cr_groups[1] = g1;
  #endif
  #ifdef AFS_AIX_ENV
      newcred->cr_ngrps = 2;
! #else
! #if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV)
      newcred->cr_ngroups = 2;
  #else
      for (i = 2; i < NGROUPS; i++)
--- 3390,3417 ----
  	 * code fails for remote client roots.
  	 */
  	uid = afs_nobody;	/* NFS_NOBODY == -2 */
+ 	isroot = 1;
      }
      newcred = crget();
  #ifdef	AFS_AIX41_ENV
      setuerror(0);
  #endif
!     newcred->cr_gid = isroot ? RMTUSER_REQ_PRIV : RMTUSER_REQ;
  #ifdef AFS_AIX51_ENV
      newcred->cr_groupset.gs_union.un_groups[0] = g0;
      newcred->cr_groupset.gs_union.un_groups[1] = g1;
+ #elif defined(AFS_LINUX26_ENV)
+     newcred->cr_group_info = groups_alloc(2);
+     GROUP_AT(newcred->cr_group_info, 0) = g0;
+     GROUP_AT(newcred->cr_group_info, 1) = g1;
  #else
      newcred->cr_groups[0] = g0;
      newcred->cr_groups[1] = g1;
  #endif
  #ifdef AFS_AIX_ENV
      newcred->cr_ngrps = 2;
! #elif !defined(AFS_LINUX26_ENV)
! #if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_LINUX22_ENV)
      newcred->cr_ngroups = 2;
  #else
      for (i = 2; i < NGROUPS; i++)
***************
*** 3967,3969 ****
--- 3906,3960 ----
  #endif /* UKERNEL */
      return 0;
  }
+ 
+ DECL_PIOCTL(PNFSNukeCreds)
+ {
+     afs_uint32 addr, code;
+     register afs_int32 i;
+     register struct unixuser *tu;
+ 
+     AFS_STATCNT(PUnlog);
+     if (!afs_resourceinit_flag)	/* afs daemons haven't started yet */
+ 	return EIO;		/* Inappropriate ioctl for device */
+ 
+     if (ainSize < sizeof(afs_int32))
+ 	return EINVAL;
+     memcpy(&addr, ain, sizeof(afs_int32));
+ 
+     if ((*acred)->cr_gid == RMTUSER_REQ_PRIV && !addr) {
+ 	tu = afs_GetUser(areq->uid, -1, SHARED_LOCK);
+ 	if (!tu->exporter || !(addr = EXP_GETHOST(tu->exporter))) {
+ 	    afs_PutUser(tu, SHARED_LOCK);
+ 	    return EACCES;
+ 	}
+ 	afs_PutUser(tu, SHARED_LOCK);
+     } else if (!afs_osi_suser(acred)) {
+ 	return EACCES;
+     }
+ 
+     ObtainWriteLock(&afs_xuser, 227);
+     for (i = 0; i < NUSERS; i++) {
+ 	for (tu = afs_users[i]; tu; tu = tu->next) {
+ 	    if (tu->exporter && EXP_CHECKHOST(tu->exporter, addr)) {
+ 		tu->vid = UNDEFVID;
+ 		tu->states &= ~UHasTokens;
+ 		/* security is not having to say you're sorry */
+ 		memset((char *)&tu->ct, 0, sizeof(struct ClearToken));
+ 		tu->refCount++;
+ 		ReleaseWriteLock(&afs_xuser);
+ 		afs_ResetUserConns(tu);
+ 		tu->refCount--;
+ 		ObtainWriteLock(&afs_xuser, 228);
+ #ifdef UKERNEL
+ 		/* set the expire times to 0, causes
+ 		 * afs_GCUserData to remove this entry
+ 		 */
+ 		tu->ct.EndTimestamp = 0;
+ 		tu->tokenTime = 0;
+ #endif /* UKERNEL */
+ 	    }
+ 	}
+     }
+     ReleaseWriteLock(&afs_xuser);
+     return 0;
+ }
Index: openafs/src/afs/afs_prototypes.h
diff -c openafs/src/afs/afs_prototypes.h:1.74 openafs/src/afs/afs_prototypes.h:1.74.2.3
*** openafs/src/afs/afs_prototypes.h:1.74	Wed Apr  5 12:04:27 2006
--- openafs/src/afs/afs_prototypes.h	Mon Jul 31 17:27:38 2006
***************
*** 11,25 ****
  #define _AFS_PROTOTYPES_H_
  
  /* afs_analyze.c */
- extern void init_et_to_sys_error(void);
- extern void afs_FinalizeReq(struct vrequest *areq);
  extern int afs_Analyze(register struct conn *aconn, afs_int32 acode,
  		       struct VenusFid *afid, register struct vrequest *areq,
  		       int op, afs_int32 locktype, struct cell *cellp);
- extern int afs_CheckCode(afs_int32 acode, struct vrequest *areq, int where);
- extern void afs_CopyError(register struct vrequest *afrom,
- 			  register struct vrequest *ato);
- extern void init_sys_error_to_et(void);
  
  /* afs_axscache.c */
  extern afs_rwlock_t afs_xaxs;
--- 11,19 ----
***************
*** 45,126 ****
  extern char afs_rootVolumeName[64];
  extern void afs_shutdown(void);
  extern void afs_FlushCBs(void);
- extern struct afs_icl_set *afs_icl_allSets;
- extern int afs_icl_CreateLog(char *name, afs_int32 logSize,
- 			     struct afs_icl_log **outLogpp);
- extern int afs_icl_CreateLogWithFlags(char *name, afs_int32 logSize,
- 				      afs_uint32 flags,
- 				      struct afs_icl_log **outLogpp);
- extern int afs_icl_CopyOut(register struct afs_icl_log *logp,
- 			   afs_int32 * bufferp, afs_int32 * bufSizep,
- 			   afs_uint32 * cookiep, afs_int32 * flagsp);
- extern int afs_icl_GetLogParms(struct afs_icl_log *logp, afs_int32 * maxSizep,
- 			       afs_int32 * curSizep);
- extern int afs_icl_LogHold(register struct afs_icl_log *logp);
- extern int afs_icl_LogHoldNL(register struct afs_icl_log *logp);
- extern int afs_icl_LogUse(register struct afs_icl_log *logp);
- extern int afs_icl_LogFreeUse(register struct afs_icl_log *logp);
- extern int afs_icl_LogSetSize(register struct afs_icl_log *logp,
- 			      afs_int32 logSize);
- extern int afs_icl_ZapLog(register struct afs_icl_log *logp);
- extern int afs_icl_LogRele(register struct afs_icl_log *logp);
- extern int afs_icl_LogReleNL(register struct afs_icl_log *logp);
- extern int afs_icl_ZeroLog(register struct afs_icl_log *logp);
- extern int afs_icl_LogFree(register struct afs_icl_log *logp);
- extern struct afs_icl_log *afs_icl_FindLog(char *name);
- extern int
-   afs_icl_EnumerateLogs(int (*aproc)
- 
- 			  (char *name, char *arock, struct afs_icl_log * tp),
- 			char *arock);
- extern int afs_icl_CreateSet(char *name, struct afs_icl_log *baseLogp,
- 			     struct afs_icl_log *fatalLogp,
- 			     struct afs_icl_set **outSetpp);
- extern int afs_icl_CreateSetWithFlags(char *name,
- 				      struct afs_icl_log *baseLogp,
- 				      struct afs_icl_log *fatalLogp,
- 				      afs_uint32 flags,
- 				      struct afs_icl_set **outSetpp);
- extern int afs_icl_SetEnable(struct afs_icl_set *setp, afs_int32 eventID,
- 			     int setValue);
- extern int afs_icl_GetEnable(struct afs_icl_set *setp, afs_int32 eventID,
- 			     int *getValuep);
- extern int afs_icl_ZeroSet(struct afs_icl_set *setp);
- extern int
-   afs_icl_EnumerateSets(int (*aproc)
- 
- 			  (char *name, char *arock, struct afs_icl_log * tp),
- 			char *arock);
- extern int afs_icl_AddLogToSet(struct afs_icl_set *setp,
- 			       struct afs_icl_log *newlogp);
- extern int afs_icl_SetSetStat(struct afs_icl_set *setp, int op);
- extern int afs_icl_SetHold(register struct afs_icl_set *setp);
- extern int afs_icl_ZapSet(register struct afs_icl_set *setp);
- extern int afs_icl_SetRele(register struct afs_icl_set *setp);
- extern int afs_icl_SetFree(register struct afs_icl_set *setp);
- extern struct afs_icl_set *afs_icl_FindSet(char *name);
- 
- extern int afs_icl_Event4(register struct afs_icl_set *setp,
- 			  afs_int32 eventID, afs_int32 lAndT, long p1,
- 			  long p2, long p3, long p4);
- extern int afs_icl_Event3(register struct afs_icl_set *setp,
- 			  afs_int32 eventID, afs_int32 lAndT, long p1,
- 			  long p2, long p3);
- extern int afs_icl_Event2(register struct afs_icl_set *setp,
- 			  afs_int32 eventID, afs_int32 lAndT, long p1,
- 			  long p2);
- extern int afs_icl_Event1(register struct afs_icl_set *setp,
- 			  afs_int32 eventID, afs_int32 lAndT, long p1);
- extern int afs_icl_Event0(register struct afs_icl_set *setp,
- 			  afs_int32 eventID, afs_int32 lAndT);
- extern void afs_icl_AppendRecord(register struct afs_icl_log *logp,
- 				 afs_int32 op, afs_int32 types, long p1,
- 				 long p2, long p3, long p4);
- 
  extern int afs_CheckInit(void);
  extern void afs_shutdown(void);
  extern void shutdown_afstest(void);
  extern void afs_shutdown_BKG(void);
  
  
  /* afs_callback.c */
--- 39,50 ----
  extern char afs_rootVolumeName[64];
  extern void afs_shutdown(void);
  extern void afs_FlushCBs(void);
  extern int afs_CheckInit(void);
  extern void afs_shutdown(void);
  extern void shutdown_afstest(void);
  extern void afs_shutdown_BKG(void);
+ extern int afs_syscall_call(long parm, long parm2, long parm3,
+ 			    long parm4, long parm5, long parm6);
  
  
  /* afs_callback.c */
***************
*** 208,213 ****
--- 132,138 ----
  extern afs_int32 afs_SetPrimaryCell(char *acellName);
  extern struct cell *afs_GetCell(afs_int32 acell, afs_int32 locktype);
  extern struct cell *afs_GetCellStale(afs_int32 acell, afs_int32 locktype);
+ extern struct cell *afs_GetCellByHandle(void *handle, afs_int32 locktype);
  extern struct cell *afs_GetCellByIndex(afs_int32 cellidx, afs_int32 locktype);
  extern struct cell *afs_GetCellByName(char *acellName, afs_int32 locktype);
  extern struct cell *afs_GetPrimaryCell(afs_int32 locktype);
***************
*** 341,354 ****
--- 266,287 ----
  
  /* afs_dynroot.c */
  extern int afs_IsDynrootFid(struct VenusFid *fid);
+ extern int afs_IsDynrootMountFid(struct VenusFid *fid);
+ extern int afs_IsDynrootAnyFid(struct VenusFid *fid);
  extern void afs_GetDynrootFid(struct VenusFid *fid);
+ extern void afs_GetDynrootMountFid(struct VenusFid *fid);
  extern int afs_IsDynroot(struct vcache *avc);
+ extern int afs_IsDynrootMount(struct vcache *avc);
+ extern int afs_IsDynrootAny(struct vcache *avc);
  extern void afs_DynrootInvalidate(void);
  extern void afs_GetDynroot(char **dynrootDir, int *dynrootLen,
  			   struct AFSFetchStatus *status);
+ extern void afs_GetDynrootMount(char **dynrootDir, int *dynrootLen,
+ 			   struct AFSFetchStatus *status);
  extern void afs_PutDynroot(void);
  extern int afs_DynrootNewVnode(struct vcache *avc,
  			       struct AFSFetchStatus *status);
+ extern int afs_InitDynroot(void);
  extern int afs_SetDynrootEnable(int enable);
  extern int afs_GetDynrootEnable(void);
  extern int afs_DynrootVOPRemove(struct vcache *avc, struct AFS_UCRED *acred,
***************
*** 356,365 ****
--- 289,384 ----
  extern int afs_DynrootVOPSymlink(struct vcache *avc, struct AFS_UCRED *acred,
  				 char *aname, char *atargetName);
  
+ /* afs_error.c */
+ extern void init_et_to_sys_error(void);
+ extern afs_int32 et_to_sys_error(afs_int32 in);
+ extern void afs_FinalizeReq(struct vrequest *areq);
+ extern int afs_CheckCode(afs_int32 acode, struct vrequest *areq, int where);
+ extern void afs_CopyError(register struct vrequest *afrom,
+ 			  register struct vrequest *ato);
+ extern void init_sys_error_to_et(void);
+ 
  /* afs_exporter.c */
  extern struct afs_exporter *root_exported;
  extern struct afs_exporter *exporter_find(int type);
  
+ /* afs_icl.c */
+ extern struct afs_icl_set *afs_icl_allSets;
+ extern int afs_icl_InitLogs(void);
+ extern int afs_icl_CreateLog(char *name, afs_int32 logSize,
+ 			     struct afs_icl_log **outLogpp);
+ extern int afs_icl_CreateLogWithFlags(char *name, afs_int32 logSize,
+ 				      afs_uint32 flags,
+ 				      struct afs_icl_log **outLogpp);
+ extern int afs_icl_CopyOut(register struct afs_icl_log *logp,
+ 			   afs_int32 * bufferp, afs_int32 * bufSizep,
+ 			   afs_uint32 * cookiep, afs_int32 * flagsp);
+ extern int afs_icl_GetLogParms(struct afs_icl_log *logp, afs_int32 * maxSizep,
+ 			       afs_int32 * curSizep);
+ extern int afs_icl_LogHold(register struct afs_icl_log *logp);
+ extern int afs_icl_LogHoldNL(register struct afs_icl_log *logp);
+ extern int afs_icl_LogUse(register struct afs_icl_log *logp);
+ extern int afs_icl_LogFreeUse(register struct afs_icl_log *logp);
+ extern int afs_icl_LogSetSize(register struct afs_icl_log *logp,
+ 			      afs_int32 logSize);
+ extern int afs_icl_ZapLog(register struct afs_icl_log *logp);
+ extern int afs_icl_LogRele(register struct afs_icl_log *logp);
+ extern int afs_icl_LogReleNL(register struct afs_icl_log *logp);
+ extern int afs_icl_ZeroLog(register struct afs_icl_log *logp);
+ extern int afs_icl_LogFree(register struct afs_icl_log *logp);
+ extern struct afs_icl_log *afs_icl_FindLog(char *name);
+ extern int
+   afs_icl_EnumerateLogs(int (*aproc)
+ 
+ 			  (char *name, char *arock, struct afs_icl_log * tp),
+ 			char *arock);
+ extern int afs_icl_CreateSet(char *name, struct afs_icl_log *baseLogp,
+ 			     struct afs_icl_log *fatalLogp,
+ 			     struct afs_icl_set **outSetpp);
+ extern int afs_icl_CreateSetWithFlags(char *name,
+ 				      struct afs_icl_log *baseLogp,
+ 				      struct afs_icl_log *fatalLogp,
+ 				      afs_uint32 flags,
+ 				      struct afs_icl_set **outSetpp);
+ extern int afs_icl_SetEnable(struct afs_icl_set *setp, afs_int32 eventID,
+ 			     int setValue);
+ extern int afs_icl_GetEnable(struct afs_icl_set *setp, afs_int32 eventID,
+ 			     int *getValuep);
+ extern int afs_icl_ZeroSet(struct afs_icl_set *setp);
+ extern int
+   afs_icl_EnumerateSets(int (*aproc)
+ 
+ 			  (char *name, char *arock, struct afs_icl_log * tp),
+ 			char *arock);
+ extern int afs_icl_AddLogToSet(struct afs_icl_set *setp,
+ 			       struct afs_icl_log *newlogp);
+ extern int afs_icl_SetSetStat(struct afs_icl_set *setp, int op);
+ extern int afs_icl_SetHold(register struct afs_icl_set *setp);
+ extern int afs_icl_ZapSet(register struct afs_icl_set *setp);
+ extern int afs_icl_SetRele(register struct afs_icl_set *setp);
+ extern int afs_icl_SetFree(register struct afs_icl_set *setp);
+ extern struct afs_icl_set *afs_icl_FindSet(char *name);
+ 
+ extern int afs_icl_Event4(register struct afs_icl_set *setp,
+ 			  afs_int32 eventID, afs_int32 lAndT, long p1,
+ 			  long p2, long p3, long p4);
+ extern int afs_icl_Event3(register struct afs_icl_set *setp,
+ 			  afs_int32 eventID, afs_int32 lAndT, long p1,
+ 			  long p2, long p3);
+ extern int afs_icl_Event2(register struct afs_icl_set *setp,
+ 			  afs_int32 eventID, afs_int32 lAndT, long p1,
+ 			  long p2);
+ extern int afs_icl_Event1(register struct afs_icl_set *setp,
+ 			  afs_int32 eventID, afs_int32 lAndT, long p1);
+ extern int afs_icl_Event0(register struct afs_icl_set *setp,
+ 			  afs_int32 eventID, afs_int32 lAndT);
+ extern void afs_icl_AppendRecord(register struct afs_icl_log *logp,
+ 				 afs_int32 op, afs_int32 types, long p1,
+ 				 long p2, long p3, long p4);
+ extern int Afscall_icl(long opcode, long p1, long p2, long p3, long p4,
+ 		       long *retval);
+ 
+ 
  /* afs_init.c */
  extern struct cm_initparams cm_initParams;
  extern int afs_resourceinit_flag;
***************
*** 367,372 ****
--- 386,392 ----
  extern char *afs_sysname;
  extern char *afs_sysnamelist[MAXNUMSYSNAMES];
  extern int afs_sysnamecount;
+ extern int afs_sysnamegen;
  extern afs_int32 cacheInfoModTime;
  extern int afs_CacheInit(afs_int32 astatSize, afs_int32 afiles,
  			 afs_int32 ablocks, afs_int32 aDentries,
***************
*** 463,468 ****
--- 483,493 ----
  /* afs_nfsclnt.c */
  extern struct afs_exporter *afs_nfsexported;
  extern struct afs_exporter *afs_nfsexporter;
+ extern void afs_nfsclient_init(void);
+ extern int afs_nfsclient_reqhandler(struct afs_exporter *exporter,
+ 				    struct AFS_UCRED **cred,
+ 				    afs_int32 host, afs_int32 *pagparam,
+ 				    struct afs_exporter **outexporter);
  
  /* afs_osi.c */
  extern afs_lock_t afs_ftf;
***************
*** 471,497 ****
  extern void afs_osi_MaskSignals(void);
  extern void afs_osi_UnmaskRxkSignals(void);
  extern void afs_osi_MaskUserLoop(void);
- extern void *afs_osi_Alloc_debug(size_t x, char *func, int line);
- #ifndef afs_osi_Alloc_NoSleep
- extern void *afs_osi_Alloc_NoSleep(size_t x);
- #endif
- #ifndef afs_osi_Free
- extern void afs_osi_Free(void *x, size_t asize);
- #endif
- extern void afs_osi_FreeStr(char *x);
  extern void osi_Init(void);
- extern int osi_Active(register struct vcache *avc);
- extern void osi_FlushPages(register struct vcache *avc,
- 			   struct AFS_UCRED *credp);
- extern void osi_FlushText_really(register struct vcache *vp);
  extern void afs_osi_MaskSignals(void);
  extern void afs_osi_UnmaskRxkSignals(void);
  extern void afs_osi_RxkRegister(void);
  extern void afs_osi_Invisible(void);
- extern int osi_VMDirty_p(struct vcache *avc);
- #ifndef UKERNEL
- extern void osi_ReleaseVM(struct vcache *avc, struct AFS_UCRED *acred);
- #endif
  extern void shutdown_osi(void);
  extern int afs_osi_suser(void *credp);
  extern void afs_osi_TraverseProcTable(void);
--- 496,506 ----
***************
*** 499,504 ****
--- 508,531 ----
  extern const struct AFS_UCRED *afs_osi_proc2cred(AFS_PROC * pr);
  #endif
  
+ /* afs_osi_alloc.c */
+ #ifndef AFS_FBSD_ENV
+ extern afs_lock_t osi_fsplock;
+ extern afs_lock_t osi_flplock;
+ #endif
+ extern void *afs_osi_Alloc_debug(size_t x, char *func, int line);
+ #ifndef afs_osi_Alloc_NoSleep
+ extern void *afs_osi_Alloc_NoSleep(size_t x);
+ #endif
+ #ifndef afs_osi_Free
+ extern void afs_osi_Free(void *x, size_t asize);
+ #endif
+ extern void afs_osi_FreeStr(char *x);
+ extern void osi_FreeLargeSpace(void *adata);
+ extern void osi_FreeSmallSpace(void *adata);
+ extern void *osi_AllocLargeSpace(size_t size);
+ extern void *osi_AllocSmallSpace(size_t size);
+ 
  /* afs_osi_pag.c */
  extern int afs_setpag();
  extern afs_uint32 genpag(void);
***************
*** 513,534 ****
  extern void afs_get_groups_from_pag(afs_uint32 pag, gid_t * g0p, gid_t * g1p);
  extern afs_int32 PagInCred(const struct AFS_UCRED *cred);
  
- /* afs_osi_alloc.c */
- #ifndef AFS_FBSD_ENV
- extern afs_lock_t osi_fsplock;
- extern afs_lock_t osi_flplock;
- #endif
- extern void osi_FreeLargeSpace(void *adata);
- extern void osi_FreeSmallSpace(void *adata);
- extern void *osi_AllocLargeSpace(size_t size);
- extern void *osi_AllocSmallSpace(size_t size);
- 
  /* afs_osi_uio.c */
  extern int afsio_copy(struct uio *ainuio, struct uio *aoutuio,
  		      struct iovec *aoutvec);
  extern int afsio_trim(struct uio *auio, afs_int32 asize);
  extern int afsio_skip(struct uio *auio, afs_int32 asize);
  
  
  
  /* ARCH/osi_misc.c */
--- 540,561 ----
  extern void afs_get_groups_from_pag(afs_uint32 pag, gid_t * g0p, gid_t * g1p);
  extern afs_int32 PagInCred(const struct AFS_UCRED *cred);
  
  /* afs_osi_uio.c */
  extern int afsio_copy(struct uio *ainuio, struct uio *aoutuio,
  		      struct iovec *aoutvec);
  extern int afsio_trim(struct uio *auio, afs_int32 asize);
  extern int afsio_skip(struct uio *auio, afs_int32 asize);
  
+ /* afs_osi_vm.c */
+ extern int osi_Active(register struct vcache *avc);
+ extern void osi_FlushPages(register struct vcache *avc,
+ 			   struct AFS_UCRED *credp);
+ extern void osi_FlushText_really(register struct vcache *vp);
+ extern int osi_VMDirty_p(struct vcache *avc);
+ #ifndef UKERNEL
+ extern void osi_ReleaseVM(struct vcache *avc, struct AFS_UCRED *acred);
+ #endif
+ 
  
  
  /* ARCH/osi_misc.c */
***************
*** 656,661 ****
--- 683,703 ----
  extern void vcache2fakeinode(struct vcache *rootvp, struct vcache *mpvp);
  #endif
  
+ /* afs_pag_call.c */
+ extern afs_int32 afs_nfs_server_addr;
+ extern void afspag_Init(afs_int32 nfs_server_addr);
+ extern void afspag_Shutdown(void);
+ 
+ /* afs_pag_cred.c */
+ extern afs_rwlock_t afs_xpagcell;
+ extern afs_rwlock_t afs_xpagsys;
+ extern int afspag_PUnlog(char *ain, afs_int32 ainSize,
+ 			 struct AFS_UCRED **acred);
+ extern int afspag_PSetTokens(char *ain, afs_int32 ainSize,
+ 			     struct AFS_UCRED **acred);
+ extern int afspag_PSetSysName(char *ain, afs_int32 ainSize,
+                               struct AFS_UCRED **acred);
+ 
  /* afs_pioctl.c */
  extern struct VenusFid afs_rootFid;
  extern afs_int32 afs_waitForever;
***************
*** 738,743 ****
--- 780,788 ----
  extern void afs_AddToMean(struct afs_MeanStats *oldMean, afs_int32 newValue);
  #endif
  
+ /* afs_syscall.c */
+ extern int copyin_afs_ioctl(caddr_t cmarg, struct afs_ioctl *dst);
+ 
  
  /* UKERNEL/afs_usrops.c */
  #ifdef UKERNEL
***************
*** 1082,1087 ****
--- 1127,1133 ----
  /* MOVE THEM TO APPROPRIATE LOCATIONS */
  extern afs_int32 RXAFSCB_ExecuteRequest(struct rx_call *acall);
  extern afs_int32 RXSTATS_ExecuteRequest(struct rx_call *acall);
+ extern afs_int32 PAGCB_ExecuteRequest(struct rx_call *acall);
  
  
  
Index: openafs/src/afs/afs_syscall.c
diff -c /dev/null openafs/src/afs/afs_syscall.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/afs_syscall.c	Mon Jul 31 17:27:38 2006
***************
*** 0 ****
--- 1,723 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_syscall.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 */
+ #include "afs/afs_stats.h"
+ #include "rx/rx_globals.h"
+ #if !defined(UKERNEL) && !defined(AFS_LINUX20_ENV)
+ #include "net/if.h"
+ #ifdef AFS_SGI62_ENV
+ #include "h/hashing.h"
+ #endif
+ #if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN60_ENV)
+ #include "netinet/in_var.h"
+ #endif
+ #endif /* !defined(UKERNEL) */
+ #ifdef AFS_LINUX22_ENV
+ #include "h/smp_lock.h"
+ #endif
+ 
+ #if (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)) || defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64)) || defined(NEED_IOCTL32)
+ static void
+ afs_ioctl32_to_afs_ioctl(const struct afs_ioctl32 *src, struct afs_ioctl *dst)
+ {
+     dst->in = (char *)(unsigned long)src->in;
+     dst->out = (char *)(unsigned long)src->out;
+     dst->in_size = src->in_size;
+     dst->out_size = src->out_size;
+ }
+ #endif
+ 
+ /*
+  * If you need to change copyin_afs_ioctl(), you may also need to change
+  * copyin_iparam().
+  */
+ 
+ int
+ copyin_afs_ioctl(caddr_t cmarg, struct afs_ioctl *dst)
+ {
+     int code;
+ #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
+     struct afs_ioctl32 dst32;
+ 
+     if (!(IS64U)) {
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
+ 	return code;
+     }
+ #endif /* defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) */
+ 
+ 
+ #if defined(AFS_HPUX_64BIT_ENV)
+     struct afs_ioctl32 dst32;
+ 
+     if (is_32bit(u.u_procp)) {	/* is_32bit() in proc_iface.h */
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
+ 	return code;
+     }
+ #endif /* defined(AFS_HPUX_64BIT_ENV) */
+ 
+ #if defined(AFS_SUN57_64BIT_ENV)
+     struct afs_ioctl32 dst32;
+ 
+     if (get_udatamodel() == DATAMODEL_ILP32) {
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
+ 	return code;
+     }
+ #endif /* defined(AFS_SUN57_64BIT_ENV) */
+ 
+ #if defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64)
+     struct afs_ioctl32 dst32;
+ 
+     if (!ABI_IS_64BIT(get_current_abi())) {
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
+ 	return code;
+     }
+ #endif /* defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64) */
+ 
+ #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)
+     struct afs_ioctl32 dst32;
+ 
+ #ifdef AFS_SPARC64_LINUX26_ENV
+     if (test_thread_flag(TIF_32BIT))
+ #elif AFS_SPARC64_LINUX24_ENV
+     if (current->thread.flags & SPARC_FLAG_32BIT)
+ #elif defined(AFS_SPARC64_LINUX20_ENV)
+     if (current->tss.flags & SPARC_FLAG_32BIT)
+ 
+ #elif defined(AFS_AMD64_LINUX26_ENV)
+     if (test_thread_flag(TIF_IA32))
+ #elif defined(AFS_AMD64_LINUX20_ENV)
+     if (current->thread.flags & THREAD_IA32)
+ 
+ #elif defined(AFS_PPC64_LINUX26_ENV)
+     if (current->thread_info->flags & _TIF_32BIT)
+ #elif defined(AFS_PPC64_LINUX20_ENV)
+     if (current->thread.flags & PPC_FLAG_32BIT)
+ 
+ #elif defined(AFS_S390X_LINUX26_ENV)
+     if (test_thread_flag(TIF_31BIT))
+ #elif defined(AFS_S390X_LINUX20_ENV)
+     if (current->thread.flags & S390_FLAG_31BIT)
+ 
+ #else
+ #error pioctl32 not done for this linux
+ #endif
+     {
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    afs_ioctl32_to_afs_ioctl(&dst32, dst);
+ 	return code;
+     }
+ #endif /* defined(AFS_LINUX_64BIT_KERNEL) */
+ 
+     AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code);
+     return code;
+ }
+ 
+ 
+ #ifdef AFS_AIX32_ENV
+ 
+ #include "sys/lockl.h"
+ 
+ /*
+  * syscall -	this is the VRMIX system call entry point.
+  *
+  * NOTE:
+  *	THIS SHOULD BE CHANGED TO afs_syscall(), but requires
+  *	all the user-level calls to `syscall' to change.
+  */
+ syscall(syscall, p1, p2, p3, p4, p5, p6)
+ {
+     register rval1 = 0, code;
+     register monster;
+     int retval = 0;
+ #ifndef AFS_AIX41_ENV
+     extern lock_t kernel_lock;
+     monster = lockl(&kernel_lock, LOCK_SHORT);
+ #endif /* !AFS_AIX41_ENV */
+ 
+     AFS_STATCNT(syscall);
+     setuerror(0);
+     switch (syscall) {
+     case AFSCALL_CALL:
+ 	rval1 = afs_syscall_call(p1, p2, p3, p4, p5, p6);
+ 	break;
+ 
+     case AFSCALL_SETPAG:
+ 	AFS_GLOCK();
+ 	rval1 = afs_setpag();
+ 	AFS_GUNLOCK();
+ 	break;
+ 
+     case AFSCALL_PIOCTL:
+ 	AFS_GLOCK();
+ 	rval1 = afs_syscall_pioctl(p1, p2, p3, p4);
+ 	AFS_GUNLOCK();
+ 	break;
+ 
+     case AFSCALL_ICREATE:
+ 	rval1 = afs_syscall_icreate(p1, p2, p3, p4, p5, p6);
+ 	break;
+ 
+     case AFSCALL_IOPEN:
+ 	rval1 = afs_syscall_iopen(p1, p2, p3);
+ 	break;
+ 
+     case AFSCALL_IDEC:
+ 	rval1 = afs_syscall_iincdec(p1, p2, p3, -1);
+ 	break;
+ 
+     case AFSCALL_IINC:
+ 	rval1 = afs_syscall_iincdec(p1, p2, p3, 1);
+ 	break;
+ 
+     case AFSCALL_ICL:
+ 	AFS_GLOCK();
+ 	code = Afscall_icl(p1, p2, p3, p4, p5, &retval);
+ 	AFS_GUNLOCK();
+ 	if (!code)
+ 	    rval1 = retval;
+ 	if (!rval1)
+ 	    rval1 = code;
+ 	break;
+ 
+     default:
+ 	rval1 = EINVAL;
+ 	setuerror(EINVAL);
+ 	break;
+     }
+ 
+   out:
+ #ifndef AFS_AIX41_ENV
+     if (monster != LOCK_NEST)
+ 	unlockl(&kernel_lock);
+ #endif /* !AFS_AIX41_ENV */
+     return getuerror()? -1 : rval1;
+ }
+ 
+ /*
+  * lsetpag -	interface to afs_setpag().
+  */
+ lsetpag()
+ {
+ 
+     AFS_STATCNT(lsetpag);
+     return syscall(AFSCALL_SETPAG, 0, 0, 0, 0, 0);
+ }
+ 
+ /*
+  * lpioctl -	interface to pioctl()
+  */
+ lpioctl(path, cmd, cmarg, follow)
+      char *path, *cmarg;
+ {
+ 
+     AFS_STATCNT(lpioctl);
+     return syscall(AFSCALL_PIOCTL, path, cmd, cmarg, follow);
+ }
+ 
+ #else /* !AFS_AIX32_ENV       */
+ 
+ #if defined(AFS_SGI_ENV)
+ struct afsargs {
+     sysarg_t syscall;
+     sysarg_t parm1;
+     sysarg_t parm2;
+     sysarg_t parm3;
+     sysarg_t parm4;
+     sysarg_t parm5;
+ };
+ 
+ 
+ int
+ Afs_syscall(struct afsargs *uap, rval_t * rvp)
+ {
+     int error;
+     long retval;
+ 
+     AFS_STATCNT(afs_syscall);
+     switch (uap->syscall) {
+     case AFSCALL_ICL:
+ 	retval = 0;
+ 	AFS_GLOCK();
+ 	error =
+ 	    Afscall_icl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			uap->parm5, &retval);
+ 	AFS_GUNLOCK();
+ 	rvp->r_val1 = retval;
+ 	break;
+ #ifdef AFS_SGI_XFS_IOPS_ENV
+     case AFSCALL_IDEC64:
+ 	error =
+ 	    afs_syscall_idec64(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			       uap->parm5);
+ 	break;
+     case AFSCALL_IINC64:
+ 	error =
+ 	    afs_syscall_iinc64(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			       uap->parm5);
+ 	break;
+     case AFSCALL_ILISTINODE64:
+ 	error =
+ 	    afs_syscall_ilistinode64(uap->parm1, uap->parm2, uap->parm3,
+ 				     uap->parm4, uap->parm5);
+ 	break;
+     case AFSCALL_ICREATENAME64:
+ 	error =
+ 	    afs_syscall_icreatename64(uap->parm1, uap->parm2, uap->parm3,
+ 				      uap->parm4, uap->parm5);
+ 	break;
+ #endif
+ #ifdef AFS_SGI_VNODE_GLUE
+     case AFSCALL_INIT_KERNEL_CONFIG:
+ 	error = afs_init_kernel_config(uap->parm1);
+ 	break;
+ #endif
+     default:
+ 	error =
+ 	    afs_syscall_call(uap->syscall, uap->parm1, uap->parm2, uap->parm3,
+ 			     uap->parm4, uap->parm5);
+     }
+     return error;
+ }
+ 
+ #else /* AFS_SGI_ENV */
+ 
+ struct iparam {
+     long param1;
+     long param2;
+     long param3;
+     long param4;
+ };
+ 
+ struct iparam32 {
+     int param1;
+     int param2;
+     int param3;
+     int param4;
+ };
+ 
+ 
+ #if defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV))
+ static void
+ iparam32_to_iparam(const struct iparam32 *src, struct iparam *dst)
+ {
+     dst->param1 = src->param1;
+     dst->param2 = src->param2;
+     dst->param3 = src->param3;
+     dst->param4 = src->param4;
+ }
+ #endif
+ 
+ /*
+  * If you need to change copyin_iparam(), you may also need to change
+  * copyin_afs_ioctl().
+  */
+ 
+ static int
+ copyin_iparam(caddr_t cmarg, struct iparam *dst)
+ {
+     int code;
+ 
+ #if defined(AFS_HPUX_64BIT_ENV)
+     struct iparam32 dst32;
+ 
+     if (is_32bit(u.u_procp)) {	/* is_32bit() in proc_iface.h */
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    iparam32_to_iparam(&dst32, dst);
+ 	return code;
+     }
+ #endif /* AFS_HPUX_64BIT_ENV */
+ 
+ #if defined(AFS_SUN57_64BIT_ENV)
+     struct iparam32 dst32;
+ 
+     if (get_udatamodel() == DATAMODEL_ILP32) {
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    iparam32_to_iparam(&dst32, dst);
+ 	return code;
+     }
+ #endif /* AFS_SUN57_64BIT_ENV */
+ 
+ #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)
+     struct iparam32 dst32;
+ 
+ #ifdef AFS_SPARC64_LINUX26_ENV
+     if (test_thread_flag(TIF_32BIT))
+ #elif AFS_SPARC64_LINUX24_ENV
+     if (current->thread.flags & SPARC_FLAG_32BIT)
+ #elif defined(AFS_SPARC64_LINUX20_ENV)
+     if (current->tss.flags & SPARC_FLAG_32BIT)
+ 
+ #elif defined(AFS_AMD64_LINUX26_ENV)
+     if (test_thread_flag(TIF_IA32))
+ #elif defined(AFS_AMD64_LINUX20_ENV)
+     if (current->thread.flags & THREAD_IA32)
+ 
+ #elif defined(AFS_PPC64_LINUX26_ENV)
+     if (current->thread_info->flags & _TIF_32BIT) 
+ #elif defined(AFS_PPC64_LINUX20_ENV)
+     if (current->thread.flags & PPC_FLAG_32BIT) 
+ 
+ #elif defined(AFS_S390X_LINUX26_ENV)
+     if (test_thread_flag(TIF_31BIT))
+ #elif defined(AFS_S390X_LINUX20_ENV)
+     if (current->thread.flags & S390_FLAG_31BIT) 
+ 
+ #else
+ #error iparam32 not done for this linux platform
+ #endif
+     {
+ 	AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code);
+ 	if (!code)
+ 	    iparam32_to_iparam(&dst32, dst);
+ 	return code;
+     }
+ #endif /* AFS_LINUX_64BIT_KERNEL */
+ 
+     AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code);
+     return code;
+ }
+ 
+ /* Main entry of all afs system calls */
+ #ifdef	AFS_SUN5_ENV
+ extern int afs_sinited;
+ 
+ /** The 32 bit OS expects the members of this structure to be 32 bit
+  * quantities and the 64 bit OS expects them as 64 bit quanties. Hence
+  * to accomodate both, *long* is used instead of afs_int32
+  */
+ 
+ #ifdef AFS_SUN57_ENV
+ struct afssysa {
+     long syscall;
+     long parm1;
+     long parm2;
+     long parm3;
+     long parm4;
+     long parm5;
+     long parm6;
+ };
+ #else
+ struct afssysa {
+     afs_int32 syscall;
+     afs_int32 parm1;
+     afs_int32 parm2;
+     afs_int32 parm3;
+     afs_int32 parm4;
+     afs_int32 parm5;
+     afs_int32 parm6;
+ };
+ #endif
+ 
+ Afs_syscall(register struct afssysa *uap, rval_t * rvp)
+ {
+     int *retval = &rvp->r_val1;
+ #else /* AFS_SUN5_ENV */
+ #if	defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ int
+ afs3_syscall(p, args, retval)
+ #ifdef AFS_FBSD50_ENV
+      struct thread *p;
+ #else
+      struct proc *p;
+ #endif
+      void *args;
+      long *retval;
+ {
+     register struct a {
+ 	long syscall;
+ 	long parm1;
+ 	long parm2;
+ 	long parm3;
+ 	long parm4;
+ 	long parm5;
+ 	long parm6;
+     } *uap = (struct a *)args;
+ #else /* AFS_OSF_ENV */
+ #ifdef AFS_LINUX20_ENV
+ struct afssysargs {
+     long syscall;
+     long parm1;
+     long parm2;
+     long parm3;
+     long parm4;
+     long parm5;
+     long parm6;			/* not actually used - should be removed */
+ };
+ /* Linux system calls only set up for 5 arguments. */
+ asmlinkage long
+ afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4)
+ {
+     struct afssysargs args, *uap = &args;
+     long linux_ret = 0;
+     long *retval = &linux_ret;
+     long eparm[4];		/* matches AFSCALL_ICL in fstrace.c */
+ #ifdef AFS_SPARC64_LINUX24_ENV
+     afs_int32 eparm32[4];
+ #endif
+     /* eparm is also used by AFSCALL_CALL in afsd.c */
+ #else
+ #if defined(UKERNEL)
+ Afs_syscall()
+ {
+     register struct a {
+ 	long syscall;
+ 	long parm1;
+ 	long parm2;
+ 	long parm3;
+ 	long parm4;
+ 	long parm5;
+ 	long parm6;
+     } *uap = (struct a *)u.u_ap;
+ #else /* UKERNEL */
+ int
+ Afs_syscall()
+ {
+     register struct a {
+ 	long syscall;
+ 	long parm1;
+ 	long parm2;
+ 	long parm3;
+ 	long parm4;
+ 	long parm5;
+ 	long parm6;
+     } *uap = (struct a *)u.u_ap;
+ #endif /* UKERNEL */
+ #if defined(AFS_HPUX_ENV)
+     long *retval = &u.u_rval1;
+ #else
+     int *retval = &u.u_rval1;
+ #endif
+ #endif /* AFS_LINUX20_ENV */
+ #endif /* AFS_OSF_ENV */
+ #endif /* AFS_SUN5_ENV */
+     register int code = 0;
+ 
+     AFS_STATCNT(afs_syscall);
+ #ifdef        AFS_SUN5_ENV
+     rvp->r_vals = 0;
+     if (!afs_sinited) {
+ 	return (ENODEV);
+     }
+ #endif
+ #ifdef AFS_LINUX20_ENV
+     lock_kernel();
+     /* setup uap for use below - pull out the magic decoder ring to know
+      * which syscalls have folded argument lists.
+      */
+     uap->syscall = syscall;
+     uap->parm1 = parm1;
+     uap->parm2 = parm2;
+     uap->parm3 = parm3;
+     if (syscall == AFSCALL_ICL || syscall == AFSCALL_CALL) {
+ #ifdef AFS_SPARC64_LINUX24_ENV
+ /* from arch/sparc64/kernel/sys_sparc32.c */
+ #define AA(__x)                                \
+ ({     unsigned long __ret;            \
+        __asm__ ("srl   %0, 0, %0"      \
+                 : "=r" (__ret)         \
+                 : "0" (__x));          \
+        __ret;                          \
+ })
+ 
+ 
+ #ifdef AFS_SPARC64_LINUX26_ENV
+ 	if (test_thread_flag(TIF_32BIT))
+ #else
+ 	if (current->thread.flags & SPARC_FLAG_32BIT)
+ #endif
+ 	{
+ 	    AFS_COPYIN((char *)parm4, (char *)eparm32, sizeof(eparm32), code);
+ 	    eparm[0] = AA(eparm32[0]);
+ 	    eparm[1] = AA(eparm32[1]);
+ 	    eparm[2] = AA(eparm32[2]);
+ #undef AA
+ 	} else
+ #endif
+ 	    AFS_COPYIN((char *)parm4, (char *)eparm, sizeof(eparm), code);
+ 	uap->parm4 = eparm[0];
+ 	uap->parm5 = eparm[1];
+ 	uap->parm6 = eparm[2];
+     } else {
+ 	uap->parm4 = parm4;
+ 	uap->parm5 = 0;
+ 	uap->parm6 = 0;
+     }
+ #endif
+ #if defined(AFS_DARWIN80_ENV)
+     get_vfs_context();
+     osi_Assert(*retval == 0);
+ #endif
+ #if defined(AFS_HPUX_ENV)
+     /*
+      * There used to be code here (duplicated from osi_Init()) for
+      * initializing the semaphore used by AFS_GLOCK().  Was the
+      * duplication to handle the case of a dynamically loaded kernel
+      * module?
+      */
+     osi_InitGlock();
+ #endif
+     if (uap->syscall == AFSCALL_CALL) {
+ #ifdef	AFS_SUN5_ENV
+ 	code =
+ 	    afs_syscall_call(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			     uap->parm5, uap->parm6, rvp, CRED());
+ #else
+ 	code =
+ 	    afs_syscall_call(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			     uap->parm5, uap->parm6);
+ #endif
+     } else if (uap->syscall == AFSCALL_SETPAG) {
+ #ifdef	AFS_SUN5_ENV
+ 	register proc_t *procp;
+ 
+ 	procp = ttoproc(curthread);
+ 	AFS_GLOCK();
+ 	code = afs_setpag(&procp->p_cred);
+ 	AFS_GUNLOCK();
+ #else
+ 	AFS_GLOCK();
+ #if	defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ 	code = afs_setpag(p, args, retval);
+ #else /* AFS_OSF_ENV */
+ 	code = afs_setpag();
+ #endif
+ 	AFS_GUNLOCK();
+ #endif
+     } else if (uap->syscall == AFSCALL_PIOCTL) {
+ 	AFS_GLOCK();
+ #if defined(AFS_SUN5_ENV)
+ 	code =
+ 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			       rvp, CRED());
+ #elif defined(AFS_FBSD50_ENV)
+ 	code =
+ 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			       p->td_ucred);
+ #elif defined(AFS_DARWIN80_ENV)
+ 	code =
+ 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			       kauth_cred_get());
+ #elif defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ 	code =
+ 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			       p->p_cred->pc_ucred);
+ #else
+ 	code =
+ 	    afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3,
+ 			       uap->parm4);
+ #endif
+ 	AFS_GUNLOCK();
+     } else if (uap->syscall == AFSCALL_ICREATE) {
+ 	struct iparam iparams;
+ 
+ 	code = copyin_iparam((char *)uap->parm3, &iparams);
+ 	if (code) {
+ #if defined(KERNEL_HAVE_UERROR)
+ 	    setuerror(code);
+ #endif
+ 	} else
+ #ifdef	AFS_SUN5_ENV
+ 	    code =
+ 		afs_syscall_icreate(uap->parm1, uap->parm2, iparams.param1,
+ 				    iparams.param2, iparams.param3,
+ 				    iparams.param4, rvp, CRED());
+ #else
+ 	    code =
+ 		afs_syscall_icreate(uap->parm1, uap->parm2, iparams.param1,
+ 				    iparams.param2,
+ #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ 				    iparams.param3, iparams.param4, retval);
+ #else
+ 				    iparams.param3, iparams.param4);
+ #endif
+ #endif /* AFS_SUN5_ENV */
+     } else if (uap->syscall == AFSCALL_IOPEN) {
+ #ifdef	AFS_SUN5_ENV
+ 	code =
+ 	    afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3, rvp,
+ 			      CRED());
+ #else
+ #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ 	code = afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3, retval);
+ #else
+ 	code = afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3);
+ #endif
+ #endif /* AFS_SUN5_ENV */
+     } else if (uap->syscall == AFSCALL_IDEC) {
+ #ifdef	AFS_SUN5_ENV
+ 	code =
+ 	    afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, -1, rvp,
+ 				CRED());
+ #else
+ 	code = afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, -1);
+ #endif /* AFS_SUN5_ENV */
+     } else if (uap->syscall == AFSCALL_IINC) {
+ #ifdef	AFS_SUN5_ENV
+ 	code =
+ 	    afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, 1, rvp,
+ 				CRED());
+ #else
+ 	code = afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, 1);
+ #endif /* AFS_SUN5_ENV */
+     } else if (uap->syscall == AFSCALL_ICL) {
+ 	AFS_GLOCK();
+ 	code =
+ 	    Afscall_icl(uap->parm1, uap->parm2, uap->parm3, uap->parm4,
+ 			uap->parm5, retval);
+ 	AFS_GUNLOCK();
+ #ifdef AFS_LINUX20_ENV
+ 	if (!code) {
+ 	    /* ICL commands can return values. */
+ 	    code = -linux_ret;	/* Gets negated again at exit below */
+ 	}
+ #else
+ 	if (code) {
+ #if defined(KERNEL_HAVE_UERROR)
+ 	    setuerror(code);
+ #endif
+ 	}
+ #endif /* !AFS_LINUX20_ENV */
+     } else {
+ #if defined(KERNEL_HAVE_UERROR)
+ 	setuerror(EINVAL);
+ #else
+ 	code = EINVAL;
+ #endif
+     }
+ 
+ #if defined(AFS_DARWIN80_ENV)
+     put_vfs_context();
+ #endif
+ #ifdef AFS_LINUX20_ENV
+     code = -code;
+     unlock_kernel();
+ #endif
+     return code;
+ }
+ #endif /* AFS_SGI_ENV */
+ #endif /* !AFS_AIX32_ENV       */
Index: openafs/src/afs/afs_user.c
diff -c openafs/src/afs/afs_user.c:1.15 openafs/src/afs/afs_user.c:1.15.14.3
*** openafs/src/afs/afs_user.c:1.15	Tue Jul 15 19:14:13 2003
--- openafs/src/afs/afs_user.c	Mon Jul 31 17:27:38 2006
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_user.c,v 1.15 2003/07/15 23:14:13 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_user.c,v 1.15.14.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 51,56 ****
--- 51,57 ----
  struct unixuser *afs_users[NUSERS];
  
  
+ #ifndef AFS_PAG_MANAGER
  /* Forward declarations */
  void afs_ResetAccessCache(afs_int32 uid, int alock);
  
***************
*** 86,91 ****
--- 87,93 ----
      }				/*For each chain */
  
  }				/*RemoveUserConns */
+ #endif /* !AFS_PAG_MANAGER */
  
  
  /* Called from afs_Daemon to garbage collect unixusers no longer using system,
***************
*** 105,112 ****
--- 107,116 ----
      AFS_STATCNT(afs_GCUserData);
      /* Obtain locks in valid order */
      ObtainWriteLock(&afs_xuser, 95);
+ #ifndef AFS_PAG_MANAGER
      ObtainReadLock(&afs_xserver);
      ObtainWriteLock(&afs_xconn, 96);
+ #endif
      now = osi_Time();
      for (i = 0; i < NUSERS; i++) {
  	for (lu = &afs_users[i], tu = *lu; tu; tu = nu) {
***************
*** 128,134 ****
--- 132,140 ----
  	    nu = tu->next;
  	    if (delFlag) {
  		*lu = tu->next;
+ #ifndef AFS_PAG_MANAGER
  		RemoveUserConns(tu);
+ #endif
  		if (tu->stp)
  		    afs_osi_Free(tu->stp, tu->stLen);
  		if (tu->exporter)
***************
*** 139,151 ****
  	    }
  	}
      }
      ReleaseWriteLock(&afs_xconn);
!     ReleaseWriteLock(&afs_xuser);
      ReleaseReadLock(&afs_xserver);
  
  }				/*afs_GCUserData */
  
  
  /*
   * Check for unixusers who encountered bad tokens, and reset the access
   * cache for these guys.  Can't do this when token expiration detected,
--- 145,162 ----
  	    }
  	}
      }
+ #ifndef AFS_PAG_MANAGER
      ReleaseWriteLock(&afs_xconn);
! #endif
! #ifndef AFS_PAG_MANAGER
      ReleaseReadLock(&afs_xserver);
+ #endif
+     ReleaseWriteLock(&afs_xuser);
  
  }				/*afs_GCUserData */
  
  
+ #ifndef AFS_PAG_MANAGER
  /*
   * Check for unixusers who encountered bad tokens, and reset the access
   * cache for these guys.  Can't do this when token expiration detected,
***************
*** 253,258 ****
--- 264,270 ----
      afs_ResetAccessCache(auser->uid, 1);
      auser->states &= ~UNeedsReset;
  }				/*afs_ResetUserConns */
+ #endif /* !AFS_PAG_MANAGER */
  
  
  struct unixuser *
Index: openafs/src/afs/afs_util.c
diff -c openafs/src/afs/afs_util.c:1.28.2.2 openafs/src/afs/afs_util.c:1.28.2.3
*** openafs/src/afs/afs_util.c:1.28.2.2	Thu Jun 15 11:45:19 2006
--- openafs/src/afs/afs_util.c	Wed Aug  2 15:01:22 2006
***************
*** 16,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_util.c,v 1.28.2.2 2006/06/15 15:45:19 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.3 2006/08/02 19:01:22 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 561,567 ****
   * From `Performance analysis of MD5' by Joseph D. Touch <touch@isi.edu>
   */
  
! #if defined(AFSBIG_ENDIAN)
  static inline afs_uint32
  swap_u_int32_t (afs_uint32 t)
  {
--- 561,567 ----
   * From `Performance analysis of MD5' by Joseph D. Touch <touch@isi.edu>
   */
  
! #if defined(WORDS_BIGENDIAN)
  static inline afs_uint32
  swap_u_int32_t (afs_uint32 t)
  {
***************
*** 599,605 ****
  	p += l;
  	len -= l;
  	if(offset == 64){
! #if defined(AFSBIG_ENDIAN)
  	    int i;
  	    afs_uint32 temp[16];
  	    struct x32 *us = (struct x32*)m->save;
--- 599,605 ----
  	p += l;
  	len -= l;
  	if(offset == 64){
! #if defined(WORDS_BIGENDIAN)
  	    int i;
  	    afs_uint32 temp[16];
  	    struct x32 *us = (struct x32*)m->save;
Index: openafs/src/afs/afs_vcache.c
diff -c openafs/src/afs/afs_vcache.c:1.114 openafs/src/afs/afs_vcache.c:1.114.2.3
*** openafs/src/afs/afs_vcache.c:1.114	Fri Feb 17 23:53:34 2006
--- openafs/src/afs/afs_vcache.c	Mon Jul 31 17:27:38 2006
***************
*** 39,45 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.114 2006/02/18 04:53: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.3 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
***************
*** 1752,1758 ****
  	if (cached)
  	    *cached = 1;
  	osi_Assert((tvc->states & CVInit) == 0);
! 	if (tvc->states & CStatd) {
  	    ReleaseSharedLock(&afs_xvcache);
  	    return tvc;
  	}
--- 1752,1759 ----
  	if (cached)
  	    *cached = 1;
  	osi_Assert((tvc->states & CVInit) == 0);
! 	/* If we are in readdir, return the vnode even if not statd */
! 	if ((tvc->states & CStatd) || afs_InReadDir(tvc)) {
  	    ReleaseSharedLock(&afs_xvcache);
  	    return tvc;
  	}
***************
*** 1894,1902 ****
--- 1895,1918 ----
  	if (afs_DynrootNewVnode(tvc, &OutStatus)) {
  	    afs_ProcessFS(tvc, &OutStatus, areq);
  	    tvc->states |= CStatd | CUnique;
+ 	    tvc->parentVnode  = OutStatus.ParentVnode;
+ 	    tvc->parentUnique = OutStatus.ParentUnique;
  	    code = 0;
  	} else {
  	    code = afs_FetchStatus(tvc, afid, areq, &OutStatus);
+ 	    /* For the NFS translator's benefit, make sure
+ 	     * non-directory vnodes always have their parent FID set
+ 	     * correctly, even when created as a result of decoding an
+ 	     * NFS filehandle.  It would be nice to also do this for
+ 	     * directories, but we can't because the fileserver fills
+ 	     * in the FID of the directory itself instead of that of
+ 	     * its parent.
+ 	     */
+             if (!code && OutStatus.FileType != Directory &&
+ 		!tvc->parentVnode) {
+ 		tvc->parentVnode  = OutStatus.ParentVnode;
+ 		tvc->parentUnique = OutStatus.ParentUnique;
+             }
  	}
      }
  
Index: openafs/src/afs/afs_volume.c
diff -c openafs/src/afs/afs_volume.c:1.31 openafs/src/afs/afs_volume.c:1.31.2.3
*** openafs/src/afs/afs_volume.c:1.31	Fri Feb 17 23:08:05 2006
--- openafs/src/afs/afs_volume.c	Mon Jul 31 17:27:39 2006
***************
*** 19,25 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_volume.c,v 1.31 2006/02/18 04:08:05 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.3 2006/07/31 21:27:39 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 40,45 ****
--- 40,46 ----
  
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* afs statistics */
+ #include "afs/afs_dynroot.h"
  
  #if	defined(AFS_SUN56_ENV)
  #include <inet/led.h>
***************
*** 432,438 ****
  
      tv = afs_FindVolume(afid, locktype);
      if (!tv) {
! 	if (afs_IsDynrootFid(afid)) {
  	    tv = afs_NewDynrootVolume(afid);
  	} else {
  	    bp = afs_cv2string(&tbuf[CVBS], afid->Fid.Volume);
--- 433,439 ----
  
      tv = afs_FindVolume(afid, locktype);
      if (!tv) {
! 	if (afs_IsDynrootAnyFid(afid)) {
  	    tv = afs_NewDynrootVolume(afid);
  	} else {
  	    bp = afs_cv2string(&tbuf[CVBS], afid->Fid.Volume);
***************
*** 523,528 ****
--- 524,534 ----
  	} else {
  	    tv->vtix = -1;
  	    tv->rootVnode = tv->rootUnique = 0;
+             afs_GetDynrootMountFid(&tv->dotdot);
+             afs_GetDynrootMountFid(&tv->mtpoint);
+             tv->mtpoint.Fid.Vnode =
+               VNUM_FROM_TYPEID(VN_TYPE_MOUNT, tcell->cellIndex << 2);
+             tv->mtpoint.Fid.Unique = volid;
  	}
      }
      tv->refCount++;
Index: openafs/src/afs/exporter.h
diff -c openafs/src/afs/exporter.h:1.8 openafs/src/afs/exporter.h:1.8.14.3
*** openafs/src/afs/exporter.h:1.8	Wed Mar 17 01:43:34 2004
--- openafs/src/afs/exporter.h	Mon Jul 31 17:27:39 2006
***************
*** 17,22 ****
--- 17,23 ----
  #define NFS_NOBODY      -2	/* maps Nfs's "nobody" but since not declared by some systems (i.e. Ultrix) we use a constant  */
  #endif
  #define	RMTUSER_REQ		0xabc
+ #define	RMTUSER_REQ_PRIV	0xabe
  
  /**
    * There is a limitation on the number of bytes that can be passed into
***************
*** 51,61 ****
  
  struct exporterops {
      int (*export_reqhandler) ();
!     int (*export_hold) ();
!     int (*export_rele) ();
      int (*export_sysname) ();
!     int (*export_garbagecollect) ();
      int (*export_statistics) ();
  };
  
  struct exporterstats {
--- 52,64 ----
  
  struct exporterops {
      int (*export_reqhandler) ();
!     void (*export_hold) ();
!     void (*export_rele) ();
      int (*export_sysname) ();
!     void (*export_garbagecollect) ();
      int (*export_statistics) ();
+     int (*export_checkhost) ();
+     afs_int32 (*export_gethost) ();
  };
  
  struct exporterstats {
***************
*** 83,88 ****
--- 86,93 ----
  #define	EXP_UNIXMODE	2
  #define	EXP_PWSYNC	4
  #define	EXP_SUBMOUNTS	8
+ #define EXP_CLIPAGS    16
+ #define EXP_CALLBACK   32
  
  
  #define	AFS_NFSFULLFID	1
***************
*** 93,104 ****
          (*(EXP)->exp_op->export_hold)(EXP)
  #define	EXP_RELE(EXP)	\
          (*(EXP)->exp_op->export_rele)(EXP)
! #define	EXP_SYSNAME(EXP, INNAME, OUTNAME, NUM)   \
!         (*(EXP)->exp_op->export_sysname)(EXP, INNAME, OUTNAME, NUM)
  #define	EXP_GC(EXP, param)	\
          (*(EXP)->exp_op->export_garbagecollect)(EXP, param)
  #define	EXP_STATISTICS(EXP)	\
          (*(EXP)->exp_op->export_statistics)(EXP)
  
  struct afs3_fid {
      u_short len;
--- 98,113 ----
          (*(EXP)->exp_op->export_hold)(EXP)
  #define	EXP_RELE(EXP)	\
          (*(EXP)->exp_op->export_rele)(EXP)
! #define	EXP_SYSNAME(EXP, INNAME, OUTNAME, NUM, ALLPAGS)   \
!         (*(EXP)->exp_op->export_sysname)(EXP, INNAME, OUTNAME, NUM, ALLPAGS)
  #define	EXP_GC(EXP, param)	\
          (*(EXP)->exp_op->export_garbagecollect)(EXP, param)
  #define	EXP_STATISTICS(EXP)	\
          (*(EXP)->exp_op->export_statistics)(EXP)
+ #define	EXP_CHECKHOST(EXP, HOST)	\
+         (*(EXP)->exp_op->export_checkhost)(EXP, HOST)
+ #define	EXP_GETHOST(EXP)	\
+         (*(EXP)->exp_op->export_checkhost)(EXP)
  
  struct afs3_fid {
      u_short len;
Index: openafs/src/afs/nfsclient.h
diff -c openafs/src/afs/nfsclient.h:1.4 openafs/src/afs/nfsclient.h:1.4.14.3
*** openafs/src/afs/nfsclient.h:1.4	Wed Mar 17 01:43:34 2004
--- openafs/src/afs/nfsclient.h	Mon Jul 31 17:27:39 2006
***************
*** 28,33 ****
--- 28,34 ----
      afs_int32 uid;		/* search based on uid and ... */
      afs_int32 host;		/* ... nfs client's host ip address */
      afs_int32 pag;		/* active pag for all  (uid, host) "unpaged" conns */
+     afs_int32 client_uid;       /* actual UID on client */
      char *sysname[MAXNUMSYSNAMES];/* user's "@sys" value; also kept in unixuser */
      int sysnamecount;           /*  number of sysnames */
      afs_int32 lastcall;		/*  Used for timing out nfsclientpag structs  */
Index: openafs/src/afs/FBSD/osi_machdep.h
diff -c openafs/src/afs/FBSD/osi_machdep.h:1.13 openafs/src/afs/FBSD/osi_machdep.h:1.13.4.1
*** openafs/src/afs/FBSD/osi_machdep.h:1.13	Thu Jan 26 11:00:38 2006
--- openafs/src/afs/FBSD/osi_machdep.h	Mon Jul 31 12:16:52 2006
***************
*** 121,124 ****
--- 121,126 ----
  #define USERPRI splx(splvar)
  #endif /* KERNEL */
  
+ #define ifnet_flags(x) (x?(x)->if_flags:0)
+ 
  #endif /* _OSI_MACHDEP_H_ */
Index: openafs/src/afs/LINUX/osi_export.c
diff -c /dev/null openafs/src/afs/LINUX/osi_export.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/LINUX/osi_export.c	Mon Jul 31 17:27:39 2006
***************
*** 0 ****
--- 1,933 ----
+ /*
+  * vi:set cin noet sw=4 tw=70:
+  * Copyright 2006, 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
+  */
+ 
+ /*
+  * Filesystem export operations for Linux
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/LINUX/osi_export.c,v 1.1.2.2 2006/07/31 21:27:39 shadow Exp $");
+ 
+ #include <linux/module.h> /* early to avoid printf->printk mapping */
+ #include "afs/sysincludes.h"
+ #include "afsincludes.h"
+ #include "afs/afs_dynroot.h"
+ #include "h/smp_lock.h"
+ 
+ /* #define OSI_EXPORT_DEBUG */
+ 
+ extern struct dentry_operations afs_dentry_operations;
+ 
+ struct get_name_data {
+     char *name;
+     struct VenusFid fid;
+     int found;
+ };
+ 
+ /*
+  * Linux reserved the following filehandle types:
+  * - 0 is always the filesystem root; NFS deals with this for us
+  * - 1,2 are reserved by Linux for inode-number-based filehandles
+  * - 0xff is reserved by linux
+  *
+  * We encode filehandles for AFS files using the types defined below.
+  * Internally, our "object ID" is a VenusFid; if we get a filehandle
+  * with a more-stable cell ID, we'll turn it into a cell number in
+  * the decode_fh wrapper.
+  */
+ 
+ #define AFSFH_VENUSFID      0xa0 /* cell, volume, vnode, uniq           */
+ #define AFSFH_CELLFID       0xa1 /* cellhandle, volume, vnode, uniq     */
+ #define AFSFH_NET_VENUSFID  0xa2 /* net cell, volume, vnode, uniq       */
+ #define AFSFH_NET_CELLFID   0xa3 /* net cellhandle, volume, vnode, uniq */
+ #define AFSFH_DYN_RO_CELL   0xd0 /* cellhandle for RO root.cell mount   */
+ #define AFSFH_DYN_RW_CELL   0xd1 /* cellhandle for RW root.cell mount   */
+ #define AFSFH_DYN_RO_LINK   0xd2 /* cellhandle for RO root.cell symlink */
+ #define AFSFH_DYN_RW_LINK   0xd3 /* cellhandle for RW root.cell symlink */
+ #define AFSFH_DYN_MOUNT     0xd4 /* cellhandle, volume for mount point  */
+ #define AFSFH_DYN_SYMLINK   0xd5 /* hash of dynroot symlink target */
+ 
+ static int afs_encode_fh(struct dentry *de, __u32 *fh, int *max_len,
+ 			 int connectable)
+ {
+     struct vcache *tvc;
+     struct cell *tc;
+     int vntype;
+ 
+     if (!de->d_inode) /* encode a negative dentry?! */
+ 	return 255;
+     if (*max_len < 4)  /* not enough space */
+ 	return 255;
+ 
+     tvc = VTOAFS(de->d_inode);
+ 
+ #ifdef OSI_EXPORT_DEBUG
+     printk("afs: encode_fh(0x%08x/%d/%d.%d)\n",
+ 	   tvc->fid.Cell,      tvc->fid.Fid.Volume,
+ 	   tvc->fid.Fid.Vnode, tvc->fid.Fid.Unique);
+ #endif
+     if (afs_IsDynrootAnyFid(&tvc->fid)) {
+ 	vntype = VNUM_TO_VNTYPE(tvc->fid.Fid.Vnode);
+ 	switch (vntype) {
+ 	    case 0:
+ 		/* encode as a normal filehandle */
+ 		break;
+ 
+ 	    case VN_TYPE_MOUNT:
+ 		if (*max_len < 5) {
+ 		    return 255;
+ 		}
+ 		/* fall through */
+ 
+ 	    case VN_TYPE_CELL:
+ 	    case VN_TYPE_ALIAS:
+ 		AFS_GLOCK();
+ 		tc = afs_GetCellByIndex(VNUM_TO_CIDX(tvc->fid.Fid.Vnode),
+ 					READ_LOCK);
+ 		if (!tc) {
+ 		    AFS_GUNLOCK();
+ 		    return 255;
+ 		}
+ 		memcpy((void *)fh, tc->cellHandle, 16);
+ 		afs_PutCell(tc, READ_LOCK);
+ 		AFS_GUNLOCK();
+ 		if (vntype == VN_TYPE_MOUNT) {
+ 		    fh[4] = htonl(tvc->fid.Fid.Unique);
+ 		    *max_len = 5;
+ 		    return AFSFH_DYN_MOUNT;
+ 		}
+ 		*max_len = 4;
+ 		if (vntype == VN_TYPE_CELL) {
+ 		    return AFSFH_DYN_RO_CELL | VNUM_TO_RW(tvc->fid.Fid.Vnode);
+ 		} else {
+ 		    return AFSFH_DYN_RO_LINK | VNUM_TO_RW(tvc->fid.Fid.Vnode);
+ 		}
+ 
+ 	    case VN_TYPE_SYMLINK:
+ 		/* XXX fill in filehandle for dynroot symlink */
+ 		/* XXX return AFSFH_DYN_SYMLINK; */
+ 
+ 	    default:
+ 		return 255;
+ 	}
+     }
+ 
+     if (*max_len < 7) {
+ 	/* not big enough for a migratable filehandle */
+ 	/* always encode in network order */
+ 	fh[0] = htonl(tvc->fid.Cell);
+ 	fh[1] = htonl(tvc->fid.Fid.Volume);
+ 	fh[2] = htonl(tvc->fid.Fid.Vnode);
+ 	fh[3] = htonl(tvc->fid.Fid.Unique);
+ 	*max_len = 4;
+ 	return AFSFH_NET_VENUSFID;
+     }
+ 
+     AFS_GLOCK();
+     tc = afs_GetCell(tvc->fid.Cell, READ_LOCK);
+     if (!tc) {
+ 	AFS_GUNLOCK();
+ 	return 255;
+     }
+     memcpy((void *)fh, tc->cellHandle, 16);
+     afs_PutCell(tc, READ_LOCK);
+     AFS_GUNLOCK();
+     /* always encode in network order */
+     fh[4] = htonl(tvc->fid.Fid.Volume);
+     fh[5] = htonl(tvc->fid.Fid.Vnode);
+     fh[6] = htonl(tvc->fid.Fid.Unique);
+ 
+     *max_len = 7;
+     return AFSFH_NET_CELLFID;
+ }
+ 
+ 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)
+ {
+     struct VenusFid fid;
+     struct cell *tc;
+     struct dentry *result;
+ 
+     switch (fh_type) {
+ 	case AFSFH_VENUSFID:
+ 	    if (fh_len != 4)
+ 		return NULL;
+ 	    fid.Cell       = fh[0];
+ 	    fid.Fid.Volume = fh[1];
+ 	    fid.Fid.Vnode  = fh[2];
+ 	    fid.Fid.Unique = fh[3];
+ 	    break;
+ 
+ 	case AFSFH_CELLFID:
+ 	    if (fh_len != 7)
+ 		return NULL;
+ 	    AFS_GLOCK();
+ 	    tc = afs_GetCellByHandle((void *)fh, READ_LOCK);
+ 	    if (!tc) {
+ 		AFS_GUNLOCK();
+ 		return NULL;
+ 	    }
+ 	    fid.Cell       = tc->cellNum;
+ 	    fid.Fid.Volume = fh[4];
+ 	    fid.Fid.Vnode  = fh[5];
+ 	    fid.Fid.Unique = fh[6];
+ 	    afs_PutCell(tc, READ_LOCK);
+ 	    AFS_GUNLOCK();
+ 	    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]);
+ 	    fid.Fid.Unique = ntohl(fh[3]);
+ 	    break;
+ 
+ 	case AFSFH_NET_CELLFID:
+ 	    if (fh_len != 7)
+ 		return NULL;
+ 	    AFS_GLOCK();
+ 	    tc = afs_GetCellByHandle((void *)fh, READ_LOCK);
+ 	    if (!tc) {
+ 		AFS_GUNLOCK();
+ 		return NULL;
+ 	    }
+ 	    fid.Cell       = tc->cellNum;
+ 	    fid.Fid.Volume = ntohl(fh[4]);
+ 	    fid.Fid.Vnode  = ntohl(fh[5]);
+ 	    fid.Fid.Unique = ntohl(fh[6]);
+ 	    afs_PutCell(tc, READ_LOCK);
+ 	    AFS_GUNLOCK();
+ 	    break;
+ 
+ 	case AFSFH_DYN_RO_CELL:
+ 	case AFSFH_DYN_RW_CELL:
+ 	    if (fh_len != 4)
+ 		return NULL;
+ 	    AFS_GLOCK();
+ 	    tc = afs_GetCellByHandle((void *)fh, READ_LOCK);
+ 	    if (!tc) {
+ 		AFS_GUNLOCK();
+ 		return NULL;
+ 	    }
+ 	    afs_GetDynrootFid(&fid);
+ 	    fid.Fid.Vnode  = VNUM_FROM_CIDX_RW(tc->cellIndex, fh_type & 1);
+ 	    fid.Fid.Unique = 1;
+ 	    afs_PutCell(tc, READ_LOCK);
+ 	    AFS_GUNLOCK();
+ 	    break;
+ 
+ 	case AFSFH_DYN_RO_LINK:
+ 	case AFSFH_DYN_RW_LINK:
+ 	    if (fh_len != 4)
+ 		return NULL;
+ 	    AFS_GLOCK();
+ 	    tc = afs_GetCellByHandle((void *)fh, READ_LOCK);
+ 	    if (!tc) {
+ 		AFS_GUNLOCK();
+ 		return NULL;
+ 	    }
+ 	    afs_GetDynrootFid(&fid);
+ 	    fid.Fid.Vnode  = VNUM_FROM_CAIDX_RW(tc->cellIndex, fh_type & 1);
+ 	    fid.Fid.Unique = 1;
+ 	    afs_PutCell(tc, READ_LOCK);
+ 	    AFS_GUNLOCK();
+ 	    break;
+ 
+ 	case AFSFH_DYN_MOUNT:
+ 	    if (fh_len != 5)
+ 		return NULL;
+ 	    AFS_GLOCK();
+ 	    tc = afs_GetCellByHandle((void *)fh, READ_LOCK);
+ 	    if (!tc) {
+ 		AFS_GUNLOCK();
+ 		return NULL;
+ 	    }
+ 	    afs_GetDynrootFid(&fid);
+ 	    fid.Fid.Vnode  = VNUM_FROM_TYPEID(VN_TYPE_MOUNT,
+ 					      tc->cellIndex << 2);
+ 	    fid.Fid.Unique = ntohl(fh[4]);
+ 	    afs_PutCell(tc, READ_LOCK);
+ 	    AFS_GUNLOCK();
+ 	    break;
+ 
+ 	case AFSFH_DYN_SYMLINK:
+ 	    /* XXX parse dynroot symlink filehandle */
+ 	    /* break; */
+ 
+ 	default:
+ 	    return NULL;
+     }
+ 
+     result = sb->s_export_op->find_exported_dentry(sb, &fid, 0,
+ 						   acceptable, context);
+ #ifdef OSI_EXPORT_DEBUG
+     if (!result) {
+ 	printk("afs: decode_fh(0x%08x/%d/%d.%d): no dentry\n",
+ 	       fid.Cell,      fid.Fid.Volume,
+ 	       fid.Fid.Vnode, fid.Fid.Unique);
+     } else if (IS_ERR(result)) {
+ 	printk("afs: decode_fh(0x%08x/%d/%d.%d): error %ld\n",
+ 	       fid.Cell,      fid.Fid.Volume,
+ 	       fid.Fid.Vnode, fid.Fid.Unique, PTR_ERR(result));
+     }
+ #endif
+     return result;
+ }
+ 
+ static int update_dir_parent(struct vrequest *areq, struct vcache *adp)
+ {
+     struct VenusFid tfid;
+     struct dcache *tdc;
+     afs_size_t dirOffset, dirLen;
+     int code;
+ 
+ redo:
+     if (!(adp->states & CStatd)) {
+ 	if ((code = afs_VerifyVCache2(adp, areq))) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	    printk("afs: update_dir_parent(0x%08x/%d/%d.%d): VerifyVCache2: %d\n",
+ 		   adp->fid.Cell,      adp->fid.Fid.Volume,
+ 		   adp->fid.Fid.Vnode, adp->fid.Fid.Unique, code);
+ #endif
+ 	    return code;
+ 	}
+     }
+ 
+     tdc = afs_GetDCache(adp, (afs_size_t) 0, areq, &dirOffset, &dirLen, 1);
+     if (!tdc) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: update_dir_parent(0x%08x/%d/%d.%d): no dcache\n",
+ 	       adp->fid.Cell,      adp->fid.Fid.Volume,
+ 	       adp->fid.Fid.Vnode, adp->fid.Fid.Unique);
+ #endif
+ 	return EIO;
+     }
+ 
+     /* now we will just call dir package with appropriate inode.
+      * Dirs are always fetched in their entirety for now */
+     ObtainSharedLock(&adp->lock, 801);
+     ObtainReadLock(&tdc->lock);
+ 
+     /*
+      * Make sure that the data in the cache is current. There are two
+      * cases we need to worry about:
+      * 1. The cache data is being fetched by another process.
+      * 2. The cache data is no longer valid
+      */
+     while ((adp->states & CStatd)
+ 	   && (tdc->dflags & DFFetching)
+ 	   && hsame(adp->m.DataVersion, tdc->f.versionNo)) {
+ 	ReleaseReadLock(&tdc->lock);
+ 	ReleaseSharedLock(&adp->lock);
+ 	afs_osi_Sleep(&tdc->validPos);
+ 	ObtainSharedLock(&adp->lock, 802);
+ 	ObtainReadLock(&tdc->lock);
+     }
+     if (!(adp->states & CStatd)
+ 	|| !hsame(adp->m.DataVersion, tdc->f.versionNo)) {
+ 	ReleaseReadLock(&tdc->lock);
+ 	ReleaseSharedLock(&adp->lock);
+ 	afs_PutDCache(tdc);
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: update_dir_parent(0x%08x/%d/%d.%d): dir changed; retrying\n",
+ 	       adp->fid.Cell,      adp->fid.Fid.Volume,
+ 	       adp->fid.Fid.Vnode, adp->fid.Fid.Unique);
+ #endif
+ 	goto redo;
+     }
+ 
+     /* lookup the name in the appropriate dir, and return a cache entry
+      * on the resulting fid */
+     code = afs_dir_Lookup(tdc, "..", &tfid.Fid);
+ 
+     ReleaseReadLock(&tdc->lock);
+     afs_PutDCache(tdc);
+ 
+     if (!code) {
+ 	UpgradeSToWLock(&adp->lock, 803);
+ 	adp->parentVnode  = tfid.Fid.Vnode;
+ 	adp->parentUnique = tfid.Fid.Unique;
+     }
+ #ifdef OSI_EXPORT_DEBUG
+     if (code) {
+ 	printk("afs: update_dir_parent(0x%08x/%d/%d.%d): afs_dir_Lookup: %d\n",
+ 	       adp->fid.Cell,      adp->fid.Fid.Volume,
+ 	       adp->fid.Fid.Vnode, adp->fid.Fid.Unique, code);
+     } else {
+ 	printk("afs: update_dir_parent(0x%08x/%d/%d.%d) => %d.%d\n",
+ 	       adp->fid.Cell,      adp->fid.Fid.Volume,
+ 	       adp->fid.Fid.Vnode, adp->fid.Fid.Unique,
+ 	       adp->parentVnode,   adp->parentUnique);
+     }
+ #endif
+     ReleaseSharedLock(&adp->lock);
+     return code;
+ }
+ 
+ 
+ static int UnEvalFakeStat(struct vrequest *areq, struct vcache **vcpp)
+ {
+     struct VenusFid tfid;
+     struct volume *tvp;
+     struct vcache *tvc;
+     int code;
+ 
+     if (!afs_fakestat_enable)
+ 	return 0;
+ 
+     if (*vcpp == afs_globalVp || vType(*vcpp) != VDIR || (*vcpp)->mvstat != 2)
+ 	return 0;
+ 
+     /* Figure out what FID to look for */
+     tvp = afs_GetVolume(&(*vcpp)->fid, 0, READ_LOCK);
+     if (!tvp) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: UnEvalFakeStat(0x%08x/%d/%d.%d): no volume\n",
+ 	       (*vcpp)->fid.Cell,      (*vcpp)->fid.Fid.Volume,
+ 	       (*vcpp)->fid.Fid.Vnode, (*vcpp)->fid.Fid.Unique);
+ #endif
+ 	return ENOENT;
+     }
+     tfid = tvp->mtpoint;
+     afs_PutVolume(tvp, READ_LOCK);
+ 
+     tvc = afs_GetVCache(&tfid, areq, NULL, NULL);
+     if (!tvc) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: UnEvalFakeStat(0x%08x/%d/%d.%d): GetVCache(0x%08x/%d/%d.%d) failed\n",
+ 	       (*vcpp)->fid.Cell,      (*vcpp)->fid.Fid.Volume,
+ 	       (*vcpp)->fid.Fid.Vnode, (*vcpp)->fid.Fid.Unique,
+ 	       tfid.Cell,          tfid.Fid.Volume,
+ 	       tfid.Fid.Vnode,     tfid.Fid.Unique);
+ #endif
+ 	return ENOENT;
+     }
+ 
+     if (afs_fakestat_enable == 2) {
+ 	ObtainWriteLock(&tvc->lock, 806);
+ 	code = afs_HandleLink(tvc, areq);
+ 	if (code) {
+ 	    ReleaseWriteLock(&tvc->lock);
+ 	    afs_PutVCache(tvc);
+ 	    return code;
+ 	}
+ 	if (!strchr(tvc->linkData, ':')) {
+ 	    ReleaseWriteLock(&tvc->lock);
+ 	    afs_PutVCache(tvc);
+ 	    return 0;
+ 	}
+ 	ReleaseWriteLock(&tvc->lock);
+     }
+ 
+     afs_PutVCache(*vcpp);
+     *vcpp = tvc;
+     return 0;
+ }
+ 
+ 
+ /* 
+  * Given a FID, obtain or construct a dentry, or return an error.
+  * This should be called with the BKL and AFS_GLOCK held.
+  */
+ static struct dentry *get_dentry_from_fid(cred_t *credp, struct VenusFid *afid)
+ {
+     struct vrequest treq;
+     struct vcache *vcp;
+     struct vattr vattr;
+     struct inode *ip;
+     struct dentry *dp;
+     afs_int32 code;
+ 
+     code = afs_InitReq(&treq, credp);
+     if (code) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_dentry_from_fid(0x%08x/%d/%d.%d): afs_InitReq: %d\n",
+ 	       afid->Cell, afid->Fid.Volume, afid->Fid.Vnode, afid->Fid.Unique,
+ 	       code);
+ #endif
+ 	return ERR_PTR(-afs_CheckCode(code, &treq, 101));
+     }
+     vcp = afs_GetVCache(afid, &treq, NULL, NULL);
+     if (vcp == NULL) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_dentry_from_fid(0x%08x/%d/%d.%d): no vcache\n",
+ 	       afid->Cell, afid->Fid.Volume, afid->Fid.Vnode, afid->Fid.Unique);
+ #endif
+ 	return NULL;
+     }
+ 
+     /* 
+      * Now, it might be that we just caused a directory vnode to
+      * spring into existence, in which case its parent FID is unset.
+      * We need to do something about that, but only because we care
+      * in our own get_parent(), below -- the common code never looks
+      * at parentVnode on directories, except for VIOCGETVCXSTATUS.
+      * So, if this fails, we don't really care very much.
+      */
+     if (vType(vcp) == VDIR && vcp->mvstat != 2 && !vcp->parentVnode)
+ 	update_dir_parent(&treq, vcp);
+ 
+     /*
+      * If this is a volume root directory and fakestat is enabled,
+      * we might need to replace the directory by a mount point.
+      */
+     code = UnEvalFakeStat(&treq, &vcp);
+     if (code) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_dentry_from_fid(0x%08x/%d/%d.%d): UnEvalFakeStat: %d\n",
+ 	       afid->Cell, afid->Fid.Volume, afid->Fid.Vnode, afid->Fid.Unique,
+ 	       code);
+ #endif
+ 	afs_PutVCache(vcp);
+ 	return ERR_PTR(-afs_CheckCode(code, &treq, 101));
+     }
+ 
+     ip = AFSTOV(vcp);
+     afs_getattr(vcp, &vattr, credp);
+     afs_fill_inode(ip, &vattr);
+ 
+     /* d_alloc_anon might block, so we shouldn't hold the glock */
+     AFS_GUNLOCK();
+     dp = d_alloc_anon(ip);
+     AFS_GLOCK();
+ 
+     if (!dp) {
+ 	iput(ip);
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_dentry_from_fid(0x%08x/%d/%d.%d): out of memory\n",
+ 	       afid->Cell, afid->Fid.Volume, afid->Fid.Vnode, afid->Fid.Unique);
+ #endif
+ 	return ERR_PTR(-ENOMEM);
+     }
+ 
+     dp->d_op = &afs_dentry_operations;
+     return dp;
+ }
+ 
+ static struct dentry *afs_export_get_dentry(struct super_block *sb,
+ 					    void *inump)
+ {
+     struct dentry *dp;
+     cred_t *credp;
+ 
+     credp = crref();
+     lock_kernel();
+     AFS_GLOCK();
+ 
+     dp = get_dentry_from_fid(credp, inump);
+ 
+     AFS_GUNLOCK();
+     unlock_kernel();
+     crfree(credp);
+ 
+     return dp;
+ }
+ 
+ 
+ static int get_name_hook(void *hdata, char *name,
+ 			 afs_int32 vnode, afs_int32 unique)
+ {
+     struct get_name_data *data = (struct get_name_data *)hdata;
+     int len;
+ 
+     if (vnode == data->fid.Fid.Vnode && unique == data->fid.Fid.Unique) {
+ 	len = strlen(name);
+ 	if (len > NAME_MAX) len = NAME_MAX;
+ 	memcpy(data->name, name, len);
+ 	data->name[len] = '\0';
+ 	data->found = 1;
+     }
+     return 0;
+ }
+ 
+ static int afs_export_get_name(struct dentry *parent, char *name,
+ 			       struct dentry *child)
+ {
+     struct afs_fakestat_state fakestate;
+     struct get_name_data data;
+     struct vrequest treq;
+     struct volume *tvp;
+     struct vcache *vcp;
+     struct dcache *tdc;
+     cred_t *credp;
+     afs_size_t dirOffset, dirLen;
+     afs_int32 code = 0;
+ 
+     if (!parent->d_inode) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	/* can't lookup name in a negative dentry */
+ 	printk("afs: get_name(%s, %s): no parent inode\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       child->d_name.name  ? (char *)child->d_name.name  : "?");
+ #endif
+ 	return -EIO;
+     }
+     if (!child->d_inode) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	/* can't find the FID of negative dentry */
+ 	printk("afs: get_name(%s, %s): no child inode\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       child->d_name.name  ? (char *)child->d_name.name  : "?");
+ #endif
+ 	return -ENOENT;
+     }
+ 
+     afs_InitFakeStat(&fakestate);
+ 
+     credp = crref();
+     lock_kernel();
+     AFS_GLOCK();
+ 
+     vcp = VTOAFS(child->d_inode);
+ 
+     /* special case dynamic mount directory */
+     if (afs_IsDynrootMount(vcp)) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): this is the dynmount dir\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 	       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique);
+ #endif
+ 	data.fid = vcp->fid;
+ 	if (VTOAFS(parent->d_inode) == afs_globalVp)
+ 	    strcpy(name, AFS_DYNROOT_MOUNTNAME);
+ 	else
+ 	    code = -ENOENT;
+ 	goto done;
+     }
+ 
+     /* Figure out what FID to look for */
+     if (vcp->mvstat == 2) { /* volume root */
+ 	tvp = afs_GetVolume(&vcp->fid, 0, READ_LOCK);
+ 	if (!tvp) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	    printk("afs: get_name(%s, 0x%08x/%d/%d.%d): no volume for root\n",
+ 		   parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 		   vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 		   vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique);
+ #endif
+ 	    code = ENOENT;
+ 	    goto done;
+ 	}
+ 	data.fid = tvp->mtpoint;
+ 	afs_PutVolume(tvp, READ_LOCK);
+     } else {
+ 	data.fid = vcp->fid;
+     }
+ 
+     vcp = VTOAFS(parent->d_inode);
+ #ifdef OSI_EXPORT_DEBUG
+     printk("afs: get_name(%s, 0x%08x/%d/%d.%d): parent is 0x%08x/%d/%d.%d\n",
+ 	   parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	   data.fid.Cell,      data.fid.Fid.Volume,
+ 	   data.fid.Fid.Vnode, data.fid.Fid.Unique,
+ 	   vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 	   vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique);
+ #endif
+ 
+     code = afs_InitReq(&treq, credp);
+     if (code) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): afs_InitReq: %d\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique, code);
+ #endif
+ 	goto done;
+     }
+ 
+     /* a dynamic mount point in the dynamic mount directory */
+     if (afs_IsDynrootMount(vcp) && afs_IsDynrootAnyFid(&data.fid)
+ 	&& VNUM_TO_VNTYPE(data.fid.Fid.Vnode) == VN_TYPE_MOUNT) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): dynamic mount point\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique);
+ #endif
+ 	vcp = afs_GetVCache(&data.fid, &treq, NULL, NULL);
+ 	if (vcp) {
+ 	    ObtainReadLock(&vcp->lock);
+ 	    if (strlen(vcp->linkData + 1) <= NAME_MAX)
+ 		strcpy(name, vcp->linkData + 1);
+ 	    else
+ 		code = ENOENT;
+ 	    ReleaseReadLock(&vcp->lock);
+ 	    afs_PutVCache(vcp);
+ 	} else {
+ #ifdef OSI_EXPORT_DEBUG
+ 	    printk("afs: get_name(%s, 0x%08x/%d/%d.%d): no vcache\n",
+ 		   parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 		   data.fid.Cell,      data.fid.Fid.Volume,
+ 		   data.fid.Fid.Vnode, data.fid.Fid.Unique);
+ #endif
+ 	    code = ENOENT;
+ 	}
+ 	goto done;
+     }
+ 
+     code = afs_EvalFakeStat(&vcp, &fakestate, &treq);
+     if (code)
+ 	goto done;
+ 
+     if (vcp->fid.Cell != data.fid.Cell ||
+ 	vcp->fid.Fid.Volume != data.fid.Fid.Volume) {
+ 	/* parent is not the expected cell and volume; thus it
+ 	 * cannot possibly contain the fid we are looking for */
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): wrong parent 0x%08x/%d\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique,
+ 	       vcp->fid.Cell,      vcp->fid.Fid.Volume);
+ #endif
+ 	code = ENOENT;
+ 	goto done;
+     }
+ 
+ 
+ redo:
+     if (!(vcp->states & CStatd)) {
+ 	if ((code = afs_VerifyVCache2(vcp, &treq))) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	    printk("afs: get_name(%s, 0x%08x/%d/%d.%d): VerifyVCache2(0x%08x/%d/%d.%d): %d\n",
+ 		   parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 		   data.fid.Cell,      data.fid.Fid.Volume,
+ 		   data.fid.Fid.Vnode, data.fid.Fid.Unique,
+ 		   vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 		   vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique, code);
+ #endif
+ 	    goto done;
+ 	}
+     }
+ 
+     tdc = afs_GetDCache(vcp, (afs_size_t) 0, &treq, &dirOffset, &dirLen, 1);
+     if (!tdc) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): GetDCache(0x%08x/%d/%d.%d): %d\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique,
+ 	       vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 	       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique, code);
+ #endif
+ 	code = EIO;
+ 	goto done;
+     }
+ 
+     ObtainReadLock(&vcp->lock);
+     ObtainReadLock(&tdc->lock);
+ 
+     /*
+      * Make sure that the data in the cache is current. There are two
+      * cases we need to worry about:
+      * 1. The cache data is being fetched by another process.
+      * 2. The cache data is no longer valid
+      */
+     while ((vcp->states & CStatd)
+ 	   && (tdc->dflags & DFFetching)
+ 	   && hsame(vcp->m.DataVersion, tdc->f.versionNo)) {
+ 	ReleaseReadLock(&tdc->lock);
+ 	ReleaseReadLock(&vcp->lock);
+ 	afs_osi_Sleep(&tdc->validPos);
+ 	ObtainReadLock(&vcp->lock);
+ 	ObtainReadLock(&tdc->lock);
+     }
+     if (!(vcp->states & CStatd)
+ 	|| !hsame(vcp->m.DataVersion, tdc->f.versionNo)) {
+ 	ReleaseReadLock(&tdc->lock);
+ 	ReleaseReadLock(&vcp->lock);
+ 	afs_PutDCache(tdc);
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): dir (0x%08x/%d/%d.%d) changed; retrying\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique,
+ 	       vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 	       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique);
+ #endif
+ 	goto redo;
+     }
+ 
+     data.name  = name;
+     data.found = 0;
+     code = afs_dir_EnumerateDir(tdc, get_name_hook, &data);
+     if (!code && !data.found) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): not found\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique);
+ #endif
+ 	code = ENOENT;
+     } else if (code) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d): Enumeratedir(0x%08x/%d/%d.%d): %d\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique,
+ 	       vcp->fid.Cell,      vcp->fid.Fid.Volume,
+ 	       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique, code);
+ #endif
+     }
+ 
+     ReleaseReadLock(&tdc->lock);
+     ReleaseReadLock(&vcp->lock);
+     afs_PutDCache(tdc);
+ 
+ done:
+     if (!code) {
+ 	printk("afs: get_name(%s, 0x%08x/%d/%d.%d) => %s\n",
+ 	       parent->d_name.name ? (char *)parent->d_name.name : "?",
+ 	       data.fid.Cell,      data.fid.Fid.Volume,
+ 	       data.fid.Fid.Vnode, data.fid.Fid.Unique, name);
+     }
+     afs_PutFakeStat(&fakestate);
+     AFS_GUNLOCK();
+     unlock_kernel();
+     crfree(credp);
+     code = afs_CheckCode(code, &treq, 102);
+     return -code;
+ }
+ 
+ 
+ static struct dentry *afs_export_get_parent(struct dentry *child)
+ {
+     struct VenusFid tfid;
+     struct vrequest treq;
+     struct cell *tcell;
+     struct vcache *vcp;
+     struct dentry *dp = NULL;
+     cred_t *credp;
+     afs_uint32 cellidx;
+     int code;
+ 
+     if (!child->d_inode) {
+ 	/* can't find the parent of a negative dentry */
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_parent(%s): no inode\n",
+ 	       child->d_name.name ? (char *)child->d_name.name : "?");
+ #endif
+ 	return ERR_PTR(-EIO);
+     }
+ 
+     credp = crref();
+     lock_kernel();
+     AFS_GLOCK();
+ 
+     vcp = VTOAFS(child->d_inode);
+ 
+     if (afs_IsDynrootMount(vcp)) {
+ 	/* the dynmount directory; parent is always the AFS root */
+ 	tfid = afs_globalVp->fid;
+ 
+     } else if (afs_IsDynrootAny(vcp) &&
+ 	       VNUM_TO_VNTYPE(vcp->fid.Fid.Vnode) == VN_TYPE_MOUNT) {
+ 	/* a mount point in the dynmount directory */
+ 	afs_GetDynrootMountFid(&tfid);
+ 
+     } else if (vcp->mvstat == 2) {
+ 	/* volume root */
+ 	ObtainReadLock(&vcp->lock);
+ 	if (vcp->mvid && vcp->mvid->Fid.Volume) {
+ 	    tfid = *vcp->mvid;
+ 	    ReleaseReadLock(&vcp->lock);
+ 	} else {
+ 	    ReleaseReadLock(&vcp->lock);
+ 	    tcell = afs_GetCell(vcp->fid.Cell, READ_LOCK);
+ 	    if (!tcell) {
+ #ifdef OSI_EXPORT_DEBUG
+ 		printk("afs: get_parent(0x%08x/%d/%d.%d): no cell\n",
+ 		       vcp->fid.Cell, vcp->fid.Fid.Volume,
+ 		       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique);
+ #endif
+ 		dp = ERR_PTR(-ENOENT);
+ 		goto done;
+ 	    }
+ 
+ 	    cellidx = tcell->cellIndex;
+ 	    afs_PutCell(tcell, READ_LOCK);
+ 
+ 	    afs_GetDynrootMountFid(&tfid);
+ 	    tfid.Fid.Vnode = VNUM_FROM_TYPEID(VN_TYPE_MOUNT, cellidx << 2);
+ 	    tfid.Fid.Unique = vcp->fid.Fid.Volume;
+ 	}
+ 
+     } else {
+ 	/* any other vnode */
+ 	if (vType(vcp) == VDIR && !vcp->parentVnode && vcp->mvstat != 1) {
+ 	    code = afs_InitReq(&treq, credp);
+ 	    if (code) {
+ #ifdef OSI_EXPORT_DEBUG
+ 		printk("afs: get_parent(0x%08x/%d/%d.%d): InitReq: %d\n",
+ 		       vcp->fid.Cell, vcp->fid.Fid.Volume,
+ 		       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique, code);
+ #endif
+ 		dp = ERR_PTR(-ENOENT);
+ 		goto done;
+ 	    } else {
+ 		code = update_dir_parent(&treq, vcp);
+ 		if (code) {
+ #ifdef OSI_EXPORT_DEBUG
+ 		    printk("afs: get_parent(0x%08x/%d/%d.%d): update_dir_parent: %d\n",
+ 			   vcp->fid.Cell, vcp->fid.Fid.Volume,
+ 			   vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique, code);
+ #endif
+ 		    dp = ERR_PTR(-ENOENT);
+ 		    goto done;
+ 		}
+ 	    }
+ 	}
+ 
+ 	tfid.Cell       = vcp->fid.Cell;
+ 	tfid.Fid.Volume = vcp->fid.Fid.Volume;
+ 	tfid.Fid.Vnode  = vcp->parentVnode;
+ 	tfid.Fid.Unique = vcp->parentUnique;
+     }
+ 
+ #ifdef OSI_EXPORT_DEBUG
+     printk("afs: get_parent(0x%08x/%d/%d.%d): => 0x%08x/%d/%d.%d\n",
+ 	   vcp->fid.Cell, vcp->fid.Fid.Volume,
+ 	   vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique,
+ 	   tfid.Cell, tfid.Fid.Volume, tfid.Fid.Vnode, tfid.Fid.Unique);
+ #endif
+ 
+     dp = get_dentry_from_fid(credp, &tfid);
+     if (!dp) {
+ #ifdef OSI_EXPORT_DEBUG
+ 	printk("afs: get_parent(0x%08x/%d/%d.%d): no dentry\n",
+ 	       vcp->fid.Cell, vcp->fid.Fid.Volume,
+ 	       vcp->fid.Fid.Vnode, vcp->fid.Fid.Unique);
+ #endif
+ 	dp = ERR_PTR(-ENOENT);
+     }
+ 
+ done:
+     AFS_GUNLOCK();
+     unlock_kernel();
+     crfree(credp);
+ 
+     return dp;
+ }
+ 
+ 
+ struct export_operations afs_export_ops = {
+     .encode_fh  = afs_encode_fh,
+     .decode_fh  = afs_decode_fh,
+     .get_dentry = afs_export_get_dentry,
+     .get_name   = afs_export_get_name,
+     .get_parent = afs_export_get_parent,
+ };
Index: openafs/src/afs/LINUX/osi_file.c
diff -c openafs/src/afs/LINUX/osi_file.c:1.28 openafs/src/afs/LINUX/osi_file.c:1.28.2.3
*** openafs/src/afs/LINUX/osi_file.c:1.28	Wed Feb 15 16:01:49 2006
--- openafs/src/afs/LINUX/osi_file.c	Mon Jul 31 17:27:39 2006
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_file.c,v 1.28 2006/02/15 21:01:49 shadow Exp $");
  
  #ifdef AFS_LINUX24_ENV
  #include "h/module.h" /* early to avoid printf->printk mapping */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_file.c,v 1.28.2.3 2006/07/31 21:27:39 shadow Exp $");
  
  #ifdef AFS_LINUX24_ENV
  #include "h/module.h" /* early to avoid printf->printk mapping */
***************
*** 20,29 ****
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* afs statistics */
  #include "h/smp_lock.h"
  
  
- int afs_osicred_initialized = 0;
- struct AFS_UCRED afs_osi_cred;
  afs_lock_t afs_xosi;		/* lock is for tvattr */
  extern struct osi_dev cacheDev;
  #if defined(AFS_LINUX24_ENV)
--- 20,30 ----
  #include "afsincludes.h"	/* Afs-based standard headers */
  #include "afs/afs_stats.h"	/* afs statistics */
  #include "h/smp_lock.h"
+ #if defined(AFS_LINUX26_ENV)
+ #include "h/namei.h"
+ #endif
  
  
  afs_lock_t afs_xosi;		/* lock is for tvattr */
  extern struct osi_dev cacheDev;
  #if defined(AFS_LINUX24_ENV)
***************
*** 356,358 ****
--- 357,546 ----
  	afs_osicred_initialized = 0;
      }
  }
+ 
+ /* Intialize cache device info and fragment size for disk cache partition. */
+ int
+ osi_InitCacheInfo(char *aname)
+ {
+     int code;
+     struct dentry *dp;
+     extern ino_t cacheInode;
+     extern struct osi_dev cacheDev;
+     extern afs_int32 afs_fsfragsize;
+     extern struct super_block *afs_cacheSBp;
+     extern struct vfsmount *afs_cacheMnt;
+     code = osi_lookupname_internal(aname, 1, &afs_cacheMnt, &dp);
+     if (code)
+ 	return ENOENT;
+ 
+     cacheInode = dp->d_inode->i_ino;
+     cacheDev.dev = dp->d_inode->i_sb->s_dev;
+     afs_fsfragsize = dp->d_inode->i_sb->s_blocksize - 1;
+     afs_cacheSBp = dp->d_inode->i_sb;
+ 
+     dput(dp);
+ 
+     return 0;
+ }
+ 
+ 
+ #define FOP_READ(F, B, C) (F)->f_op->read(F, B, (size_t)(C), &(F)->f_pos)
+ #define FOP_WRITE(F, B, C) (F)->f_op->write(F, B, (size_t)(C), &(F)->f_pos)
+ 
+ /* osi_rdwr
+  * seek, then read or write to an open inode. addrp points to data in
+  * kernel space.
+  */
+ int
+ osi_rdwr(struct osi_file *osifile, uio_t * uiop, int rw)
+ {
+ #ifdef AFS_LINUX26_ENV
+     struct file *filp = osifile->filp;
+ #else
+     struct file *filp = &osifile->file;
+ #endif
+     KERNEL_SPACE_DECL;
+     int code = 0;
+     struct iovec *iov;
+     afs_size_t count;
+     unsigned long savelim;
+ 
+     savelim = current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur;
+     current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY;
+ 
+     if (uiop->uio_seg == AFS_UIOSYS)
+ 	TO_USER_SPACE();
+ 
+     /* seek to the desired position. Return -1 on error. */
+     if (filp->f_op->llseek) {
+ 	if (filp->f_op->llseek(filp, (loff_t) uiop->uio_offset, 0) != uiop->uio_offset)
+ 	    return -1;
+     } else
+ 	filp->f_pos = uiop->uio_offset;
+ 
+     while (code == 0 && uiop->uio_resid > 0 && uiop->uio_iovcnt > 0) {
+ 	iov = uiop->uio_iov;
+ 	count = iov->iov_len;
+ 	if (count == 0) {
+ 	    uiop->uio_iov++;
+ 	    uiop->uio_iovcnt--;
+ 	    continue;
+ 	}
+ 
+ 	if (rw == UIO_READ)
+ 	    code = FOP_READ(filp, iov->iov_base, count);
+ 	else
+ 	    code = FOP_WRITE(filp, iov->iov_base, count);
+ 
+ 	if (code < 0) {
+ 	    code = -code;
+ 	    break;
+ 	} else if (code == 0) {
+ 	    /*
+ 	     * This is bad -- we can't read any more data from the
+ 	     * file, but we have no good way of signaling a partial
+ 	     * read either.
+ 	     */
+ 	    code = EIO;
+ 	    break;
+ 	}
+ 
+ 	iov->iov_base += code;
+ 	iov->iov_len -= code;
+ 	uiop->uio_resid -= code;
+ 	uiop->uio_offset += code;
+ 	code = 0;
+     }
+ 
+     if (uiop->uio_seg == AFS_UIOSYS)
+ 	TO_KERNEL_SPACE();
+ 
+     current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur = savelim;
+ 
+     return code;
+ }
+ 
+ /* setup_uio 
+  * Setup a uio struct.
+  */
+ void
+ setup_uio(uio_t * uiop, struct iovec *iovecp, const char *buf, afs_offs_t pos,
+ 	  int count, uio_flag_t flag, uio_seg_t seg)
+ {
+     iovecp->iov_base = (char *)buf;
+     iovecp->iov_len = count;
+     uiop->uio_iov = iovecp;
+     uiop->uio_iovcnt = 1;
+     uiop->uio_offset = pos;
+     uiop->uio_seg = seg;
+     uiop->uio_resid = count;
+     uiop->uio_flag = flag;
+ }
+ 
+ 
+ /* uiomove
+  * UIO_READ : dp -> uio
+  * UIO_WRITE : uio -> dp
+  */
+ int
+ uiomove(char *dp, int length, uio_flag_t rw, uio_t * uiop)
+ {
+     int count;
+     struct iovec *iov;
+     int code;
+ 
+     while (length > 0 && uiop->uio_resid > 0 && uiop->uio_iovcnt > 0) {
+ 	iov = uiop->uio_iov;
+ 	count = iov->iov_len;
+ 
+ 	if (!count) {
+ 	    uiop->uio_iov++;
+ 	    uiop->uio_iovcnt--;
+ 	    continue;
+ 	}
+ 
+ 	if (count > length)
+ 	    count = length;
+ 
+ 	switch (uiop->uio_seg) {
+ 	case AFS_UIOSYS:
+ 	    switch (rw) {
+ 	    case UIO_READ:
+ 		memcpy(iov->iov_base, dp, count);
+ 		break;
+ 	    case UIO_WRITE:
+ 		memcpy(dp, iov->iov_base, count);
+ 		break;
+ 	    default:
+ 		printf("uiomove: Bad rw = %d\n", rw);
+ 		return -EINVAL;
+ 	    }
+ 	    break;
+ 	case AFS_UIOUSER:
+ 	    switch (rw) {
+ 	    case UIO_READ:
+ 		AFS_COPYOUT(dp, iov->iov_base, count, code);
+ 		break;
+ 	    case UIO_WRITE:
+ 		AFS_COPYIN(iov->iov_base, dp, count, code);
+ 		break;
+ 	    default:
+ 		printf("uiomove: Bad rw = %d\n", rw);
+ 		return -EINVAL;
+ 	    }
+ 	    break;
+ 	default:
+ 	    printf("uiomove: Bad seg = %d\n", uiop->uio_seg);
+ 	    return -EINVAL;
+ 	}
+ 
+ 	dp += count;
+ 	length -= count;
+ 	iov->iov_base += count;
+ 	iov->iov_len -= count;
+ 	uiop->uio_offset += count;
+ 	uiop->uio_resid -= count;
+     }
+     return 0;
+ }
+ 
Index: openafs/src/afs/LINUX/osi_ioctl.c
diff -c /dev/null openafs/src/afs/LINUX/osi_ioctl.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/LINUX/osi_ioctl.c	Mon Jul 31 17:27:39 2006
***************
*** 0 ****
--- 1,145 ----
+ /*
+  * 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
+  */
+ 
+ /*
+  * Linux module support routines.
+  *
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/LINUX/osi_ioctl.c,v 1.1.2.2 2006/07/31 21:27:39 shadow Exp $");
+ 
+ #include <linux/module.h> /* early to avoid printf->printk mapping */
+ #include "afs/sysincludes.h"
+ #include "afsincludes.h"
+ #include "h/unistd.h"		/* For syscall numbers. */
+ #include "h/mm.h"
+ 
+ #ifdef AFS_AMD64_LINUX20_ENV
+ #include <asm/ia32_unistd.h>
+ #endif
+ #ifdef AFS_SPARC64_LINUX20_ENV
+ #include <linux/ioctl32.h>
+ #endif
+ 
+ #include <linux/proc_fs.h>
+ #include <linux/slab.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
+ #include <linux/kernel.h>
+ 
+ extern struct proc_dir_entry *openafs_procfs;
+ #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL)
+ static int ioctl32_done;
+ #endif
+ 
+ extern asmlinkage long
+ afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4);
+ 
+ static int
+ afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
+ 	  unsigned long arg)
+ {
+ 
+     struct afsprocdata sysargs;
+ #ifdef NEED_IOCTL32
+     struct afsprocdata32 sysargs32;
+ #endif
+ 
+     if (cmd != VIOC_SYSCALL && cmd != VIOC_SYSCALL32) return -EINVAL;
+ 
+ #ifdef NEED_IOCTL32
+ #ifdef AFS_LINUX26_ENV 
+ #ifdef AFS_S390X_LINUX26_ENV
+     if (test_thread_flag(TIF_31BIT))
+ #elif AFS_AMD64_LINUX20_ENV
+     if (test_thread_flag(TIF_IA32))
+ #else
+     if (test_thread_flag(TIF_32BIT))
+ #endif /* AFS_S390X_LINUX26_ENV */
+ #else
+ #ifdef AFS_SPARC64_LINUX24_ENV
+     if (current->thread.flags & SPARC_FLAG_32BIT)
+ #elif defined(AFS_SPARC64_LINUX20_ENV)
+     if (current->tss.flags & SPARC_FLAG_32BIT)
+ #elif defined(AFS_AMD64_LINUX20_ENV)
+     if (current->thread.flags & THREAD_IA32)
+ #elif defined(AFS_PPC64_LINUX20_ENV)
+     if (current->thread.flags & PPC_FLAG_32BIT)
+ #elif defined(AFS_S390X_LINUX20_ENV)
+     if (current->thread.flags & S390_FLAG_31BIT)
+ #else
+ #error Not done for this linux type
+ #endif /* AFS_LINUX26_ENV */
+ #endif /* NEED_IOCTL32 */
+     {
+ 	if (copy_from_user(&sysargs32, (void *)arg,
+ 			   sizeof(struct afsprocdata32)))
+ 	    return -EFAULT;
+ 
+ 	return afs_syscall((unsigned long)sysargs32.syscall,
+ 			   (unsigned long)sysargs32.param1,
+ 			   (unsigned long)sysargs32.param2,
+ 			   (unsigned long)sysargs32.param3,
+ 			   (unsigned long)sysargs32.param4);
+     } else
+ #endif
+     {
+ 	if (copy_from_user(&sysargs, (void *)arg, sizeof(struct afsprocdata)))
+ 	    return -EFAULT;
+ 
+ 	return afs_syscall(sysargs.syscall, sysargs.param1,
+ 			   sysargs.param2, sysargs.param3, sysargs.param4);
+     }
+ }
+ 
+ #if defined(HAVE_UNLOCKED_IOCTL) || defined(HAVE_COMPAT_IOCTL)
+ static long afs_unlocked_ioctl(struct file *file, unsigned int cmd,
+                                unsigned long arg) {
+     return afs_ioctl(FILE_INODE(file), file, cmd, arg);
+ }
+ #endif
+ 
+ static struct file_operations afs_syscall_fops = {
+ #ifdef HAVE_UNLOCKED_IOCTL
+     .unlocked_ioctl = afs_unlocked_ioctl,
+ #else
+     .ioctl = afs_ioctl,
+ #endif
+ #ifdef HAVE_COMPAT_IOCTL
+     .compat_ioctl = afs_unlocked_ioctl,
+ #endif
+ };
+ 
+ void
+ osi_ioctl_init(void)
+ {
+     struct proc_dir_entry *entry;
+ 
+     entry = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs);
+     entry->proc_fops = &afs_syscall_fops;
+     entry->owner = THIS_MODULE;
+ 
+ #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL)
+     if (register_ioctl32_conversion(VIOC_SYSCALL32, NULL) == 0) 
+ 	ioctl32_done = 1;
+ #endif
+ }
+ 
+ void
+ osi_ioctl_clean(void)
+ {
+     remove_proc_entry(PROC_SYSCALL_NAME, openafs_procfs);
+ #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL)
+     if (ioctl32_done)
+ 	    unregister_ioctl32_conversion(VIOC_SYSCALL32);
+ #endif
+ }
Index: openafs/src/afs/LINUX/osi_misc.c
diff -c openafs/src/afs/LINUX/osi_misc.c:1.44 openafs/src/afs/LINUX/osi_misc.c:1.44.4.3
*** openafs/src/afs/LINUX/osi_misc.c:1.44	Mon Jul 11 14:45:51 2005
--- openafs/src/afs/LINUX/osi_misc.c	Mon Jul 31 17:27:39 2006
***************
*** 15,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.44 2005/07/11 18:45:51 shadow Exp $");
  
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
  #include "afs/afs_stats.h"
--- 15,23 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.44.4.3 2006/07/31 21:27:39 shadow Exp $");
  
+ #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
  #include "afs/afs_stats.h"
***************
*** 25,32 ****
--- 26,88 ----
  #endif
  #if defined(AFS_LINUX26_ENV)
  #include "h/namei.h"
+ #include "h/kthread.h"
  #endif
  
+ int afs_osicred_initialized = 0;
+ struct AFS_UCRED afs_osi_cred;
+ 
+ void
+ afs_osi_SetTime(osi_timeval_t * tvp)
+ {
+ #if defined(AFS_LINUX24_ENV)
+ 
+ #if defined(AFS_LINUX26_ENV)
+     struct timespec tv;
+     tv.tv_sec = tvp->tv_sec;
+     tv.tv_nsec = tvp->tv_usec * NSEC_PER_USEC;
+ #else
+     struct timeval tv;
+     tv.tv_sec = tvp->tv_sec;
+     tv.tv_usec = tvp->tv_usec;
+ #endif
+ 
+     AFS_STATCNT(osi_SetTime);
+ 
+     do_settimeofday(&tv);
+ #else
+     extern int (*sys_settimeofdayp) (struct timeval * tv,
+ 				     struct timezone * tz);
+ 
+     KERNEL_SPACE_DECL;
+ 
+     AFS_STATCNT(osi_SetTime);
+ 
+     TO_USER_SPACE();
+     if (sys_settimeofdayp)
+ 	(void)(*sys_settimeofdayp) (tvp, NULL);
+     TO_KERNEL_SPACE();
+ #endif
+ }
+ 
+ struct task_struct *rxk_ListenerTask;
+ 
+ void
+ osi_linux_mask(void)
+ {
+     SIG_LOCK(current);
+     sigfillset(&current->blocked);
+     RECALC_SIGPENDING(current);
+     SIG_UNLOCK(current);
+ }
+ 
+ void
+ osi_linux_rxkreg(void)
+ {
+     rxk_ListenerTask = current;
+ }
+ 
+ 
  #if defined(AFS_LINUX24_ENV)
  /* LOOKUP_POSITIVE is becoming the default */
  #ifndef LOOKUP_POSITIVE
***************
*** 105,366 ****
  }
  #endif
  
- /* Intialize cache device info and fragment size for disk cache partition. */
- int
- osi_InitCacheInfo(char *aname)
- {
-     int code;
-     struct dentry *dp;
-     extern ino_t cacheInode;
-     extern struct osi_dev cacheDev;
-     extern afs_int32 afs_fsfragsize;
-     extern struct super_block *afs_cacheSBp;
-     extern struct vfsmount *afs_cacheMnt;
-     code = osi_lookupname_internal(aname, 1, &afs_cacheMnt, &dp);
-     if (code)
- 	return ENOENT;
- 
-     cacheInode = dp->d_inode->i_ino;
-     cacheDev.dev = dp->d_inode->i_sb->s_dev;
-     afs_fsfragsize = dp->d_inode->i_sb->s_blocksize - 1;
-     afs_cacheSBp = dp->d_inode->i_sb;
- 
-     dput(dp);
- 
-     return 0;
- }
  
- 
- #define FOP_READ(F, B, C) (F)->f_op->read(F, B, (size_t)(C), &(F)->f_pos)
- #define FOP_WRITE(F, B, C) (F)->f_op->write(F, B, (size_t)(C), &(F)->f_pos)
- 
- /* osi_rdwr
-  * seek, then read or write to an open inode. addrp points to data in
-  * kernel space.
-  */
- int
- osi_rdwr(struct osi_file *osifile, uio_t * uiop, int rw)
- {
  #ifdef AFS_LINUX26_ENV
!     struct file *filp = osifile->filp;
! #else
!     struct file *filp = &osifile->file;
! #endif
!     KERNEL_SPACE_DECL;
!     int code = 0;
!     struct iovec *iov;
!     afs_size_t count;
!     unsigned long savelim;
! 
!     savelim = current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur;
!     current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY;
! 
!     if (uiop->uio_seg == AFS_UIOSYS)
! 	TO_USER_SPACE();
! 
!     /* seek to the desired position. Return -1 on error. */
!     if (filp->f_op->llseek) {
! 	if (filp->f_op->llseek(filp, (loff_t) uiop->uio_offset, 0) != uiop->uio_offset)
! 	    return -1;
!     } else
! 	filp->f_pos = uiop->uio_offset;
! 
!     while (code == 0 && uiop->uio_resid > 0 && uiop->uio_iovcnt > 0) {
! 	iov = uiop->uio_iov;
! 	count = iov->iov_len;
! 	if (count == 0) {
! 	    uiop->uio_iov++;
! 	    uiop->uio_iovcnt--;
! 	    continue;
! 	}
! 
! 	if (rw == UIO_READ)
! 	    code = FOP_READ(filp, iov->iov_base, count);
! 	else
! 	    code = FOP_WRITE(filp, iov->iov_base, count);
! 
! 	if (code < 0) {
! 	    code = -code;
! 	    break;
! 	} else if (code == 0) {
! 	    /*
! 	     * This is bad -- we can't read any more data from the
! 	     * file, but we have no good way of signaling a partial
! 	     * read either.
! 	     */
! 	    code = EIO;
! 	    break;
! 	}
! 
! 	iov->iov_base += code;
! 	iov->iov_len -= code;
! 	uiop->uio_resid -= code;
! 	uiop->uio_offset += code;
! 	code = 0;
!     }
! 
!     if (uiop->uio_seg == AFS_UIOSYS)
! 	TO_KERNEL_SPACE();
! 
!     current->TASK_STRUCT_RLIM[RLIMIT_FSIZE].rlim_cur = savelim;
! 
!     return code;
! }
! 
! /* setup_uio 
!  * Setup a uio struct.
!  */
! void
! setup_uio(uio_t * uiop, struct iovec *iovecp, const char *buf, afs_offs_t pos,
! 	  int count, uio_flag_t flag, uio_seg_t seg)
! {
!     iovecp->iov_base = (char *)buf;
!     iovecp->iov_len = count;
!     uiop->uio_iov = iovecp;
!     uiop->uio_iovcnt = 1;
!     uiop->uio_offset = pos;
!     uiop->uio_seg = seg;
!     uiop->uio_resid = count;
!     uiop->uio_flag = flag;
! }
! 
! 
! /* uiomove
!  * UIO_READ : dp -> uio
!  * UIO_WRITE : uio -> dp
   */
! int
! uiomove(char *dp, int length, uio_flag_t rw, uio_t * uiop)
  {
!     int count;
!     struct iovec *iov;
      int code;
  
!     while (length > 0 && uiop->uio_resid > 0 && uiop->uio_iovcnt > 0) {
! 	iov = uiop->uio_iov;
! 	count = iov->iov_len;
! 
! 	if (!count) {
! 	    uiop->uio_iov++;
! 	    uiop->uio_iovcnt--;
! 	    continue;
! 	}
! 
! 	if (count > length)
! 	    count = length;
  
! 	switch (uiop->uio_seg) {
! 	case AFS_UIOSYS:
! 	    switch (rw) {
! 	    case UIO_READ:
! 		memcpy(iov->iov_base, dp, count);
! 		break;
! 	    case UIO_WRITE:
! 		memcpy(dp, iov->iov_base, count);
! 		break;
! 	    default:
! 		printf("uiomove: Bad rw = %d\n", rw);
! 		return -EINVAL;
! 	    }
! 	    break;
! 	case AFS_UIOUSER:
! 	    switch (rw) {
! 	    case UIO_READ:
! 		AFS_COPYOUT(dp, iov->iov_base, count, code);
! 		break;
! 	    case UIO_WRITE:
! 		AFS_COPYIN(iov->iov_base, dp, count, code);
! 		break;
! 	    default:
! 		printf("uiomove: Bad rw = %d\n", rw);
! 		return -EINVAL;
! 	    }
! 	    break;
! 	default:
! 	    printf("uiomove: Bad seg = %d\n", uiop->uio_seg);
! 	    return -EINVAL;
  	}
  
! 	dp += count;
! 	length -= count;
! 	iov->iov_base += count;
! 	iov->iov_len -= count;
! 	uiop->uio_offset += count;
! 	uiop->uio_resid -= count;
      }
-     return 0;
- }
- 
- void
- afs_osi_SetTime(osi_timeval_t * tvp)
- {
- #if defined(AFS_LINUX24_ENV)
- 
- #if defined(AFS_LINUX26_ENV)
-     struct timespec tv;
-     tv.tv_sec = tvp->tv_sec;
-     tv.tv_nsec = tvp->tv_usec * NSEC_PER_USEC;
- #else
-     struct timeval tv;
-     tv.tv_sec = tvp->tv_sec;
-     tv.tv_usec = tvp->tv_usec;
- #endif
  
!     AFS_STATCNT(osi_SetTime);
! 
!     do_settimeofday(&tv);
! #else
!     extern int (*sys_settimeofdayp) (struct timeval * tv,
! 				     struct timezone * tz);
! 
!     KERNEL_SPACE_DECL;
! 
!     AFS_STATCNT(osi_SetTime);
! 
!     TO_USER_SPACE();
!     if (sys_settimeofdayp)
! 	(void)(*sys_settimeofdayp) (tvp, NULL);
!     TO_KERNEL_SPACE();
! #endif
! }
! 
! /* osi_linux_free_inode_pages
!  *
!  * Free all vnodes remaining in the afs hash.  Must be done before
!  * shutting down afs and freeing all memory.
!  */
! void
! osi_linux_free_inode_pages(void)
! {
!     int i;
!     struct vcache *tvc, *nvc;
!     extern struct vcache *afs_vhashT[VCSIZE];
! 
!     for (i = 0; i < VCSIZE; i++) {
! 	for (tvc = afs_vhashT[i]; tvc; ) {
! 	    int slept;
! 	
! 	    nvc = tvc->hnext;
! 	    if (afs_FlushVCache(tvc, &slept))		/* slept always 0 for linux? */
! 		printf("Failed to invalidate all pages on inode 0x%p\n", tvc);
! 	    tvc = nvc;
! 	}
!     }
  }
  
- struct task_struct *rxk_ListenerTask;
  
! void
! osi_linux_mask(void)
  {
!     SIG_LOCK(current);
!     sigfillset(&current->blocked);
!     RECALC_SIGPENDING(current);
!     SIG_UNLOCK(current);
  }
  
! void
! osi_linux_rxkreg(void)
  {
!     rxk_ListenerTask = current;
  }
--- 161,216 ----
  }
  #endif
  
  
  #ifdef AFS_LINUX26_ENV
! /* This is right even for Linux 2.4, but on that version d_path is inline
!  * and implemented in terms of __d_path, which is not exported.
   */
! int osi_abspath(char *aname, char *buf, int buflen,
! 		int followlink, char **pathp)
  {
!     struct dentry *dp = NULL;
!     struct vfsmnt *mnt = NULL;
!     char *tname, *path;
      int code;
  
!     code = ENOENT;
!     tname = getname(aname);
!     if (IS_ERR(tname)) 
! 	return -PTR_ERR(tname);
!     code = osi_lookupname_internal(tname, followlink, &mnt, &dp);   
!     if (!code) {
! 	path = d_path(dp, mnt, buf, buflen);
  
! 	if (IS_ERR(path)) {
! 	    code = -PTR_ERR(path);
! 	} else {
! 	    *pathp = path;
  	}
  
! 	dput(dp);
! 	mntput(mnt);
      }
  
!     putname(tname);
!     return code;
  }
  
  
! /* This could use some work, and support on more platforms. */
! int afs_thread_wrapper(void *rock)
  {
!     void (*proc)(void) = rock;
!     __module_get(THIS_MODULE);
!     AFS_GLOCK();
!     (*proc)();
!     AFS_GUNLOCK();
!     module_put(THIS_MODULE);
!     return 0;
  }
  
! void afs_start_thread(void (*proc)(void), char *name)
  {
!     kthread_run(afs_thread_wrapper, proc, "%s", name);
  }
+ #endif
Index: openafs/src/afs/LINUX/osi_module.c
diff -c openafs/src/afs/LINUX/osi_module.c:1.74 openafs/src/afs/LINUX/osi_module.c:1.74.2.3
*** openafs/src/afs/LINUX/osi_module.c:1.74	Thu Mar  9 01:06:34 2006
--- openafs/src/afs/LINUX/osi_module.c	Mon Jul 31 17:27:39 2006
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.74 2006/03/09 06:06:34 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_module.c,v 1.74.2.3 2006/07/31 21:27:39 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include "afs/sysincludes.h"
***************
*** 38,47 ****
  #include <linux/kernel.h>
  #endif
  
- #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
- #include <linux/seq_file.h>
- #endif
- 
  extern struct file_system_type afs_fs_type;
  
  #if !defined(AFS_LINUX24_ENV)
--- 38,43 ----
***************
*** 60,688 ****
  unsigned long afs_linux_page_offset = 0;	/* contains the PAGE_OFFSET value */
  #endif
  
- static inline int afs_ioctl(struct inode *, struct file *, unsigned int,
- 		     unsigned long);
- #if defined(HAVE_UNLOCKED_IOCTL) || defined(HAVE_COMPAT_IOCTL)
- static long afs_unlocked_ioctl(struct file *, unsigned int, unsigned long);
- #endif
- 
- static struct file_operations afs_syscall_fops = {
- #ifdef HAVE_UNLOCKED_IOCTL
-     .unlocked_ioctl = afs_unlocked_ioctl,
- #else
-     .ioctl = afs_ioctl,
- #endif
- #ifdef HAVE_COMPAT_IOCTL
-     .compat_ioctl = afs_unlocked_ioctl,
- #endif
- };
- 
- #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
- static void *c_start(struct seq_file *m, loff_t *pos)
- {
- 	struct afs_q *cq, *tq;
- 	loff_t n = 0;
- 
- 	ObtainReadLock(&afs_xcell);
- 	for (cq = CellLRU.next; cq != &CellLRU; cq = tq) {
- 		tq = QNext(cq);
- 
- 		if (n++ == *pos)
- 			break;
- 	}
- 	if (cq == &CellLRU)
- 		return NULL;
- 
- 	return cq;
- }
- 
- static void *c_next(struct seq_file *m, void *p, loff_t *pos)
- {
- 	struct afs_q *cq = p, *tq;
- 
- 	(*pos)++;
- 	tq = QNext(cq);
- 
- 	if (tq == &CellLRU)
- 		return NULL;
- 
- 	return tq;
- }
- 
- static void c_stop(struct seq_file *m, void *p)
- {
- 	ReleaseReadLock(&afs_xcell);
- }
- 
- static int c_show(struct seq_file *m, void *p)
- {
- 	struct afs_q *cq = p;
- 	struct cell *tc = QTOC(cq);
- 	int j;
- 
- 	seq_printf(m, ">%s #(%d/%d)\n", tc->cellName,
- 		   tc->cellNum, tc->cellIndex);
- 
- 	for (j = 0; j < MAXCELLHOSTS; j++) {
- 		afs_uint32 addr;
- 
- 		if (!tc->cellHosts[j]) break;
- 
- 		addr = tc->cellHosts[j]->addr->sa_ip;
- 		seq_printf(m, "%u.%u.%u.%u #%u.%u.%u.%u\n",
- 			   NIPQUAD(addr), NIPQUAD(addr));
- 	}
- 
- 	return 0;
- }
- 
- static struct seq_operations afs_csdb_op = {
- 	.start		= c_start,
- 	.next		= c_next,
- 	.stop		= c_stop,
- 	.show		= c_show,
- };
- 
- static int afs_csdb_open(struct inode *inode, struct file *file)
- {
- 	return seq_open(file, &afs_csdb_op);
- }
- 
- static struct file_operations afs_csdb_operations = {
- 	.open		= afs_csdb_open,
- 	.read		= seq_read,
- 	.llseek		= seq_lseek,
- 	.release	= seq_release,
- };
- 
- #else /* HAVE_KERNEL_LINUX_SEQ_FILE_H */
- 
- int
- csdbproc_info(char *buffer, char **start, off_t offset, int
- length)
- {
-     int len = 0;
-     off_t pos = 0;
-     int cnt;
-     struct afs_q *cq, *tq;
-     struct cell *tc;
-     char tbuffer[16];
-     /* 90 - 64 cellname, 10 for 32 bit num and index, plus
-        decor */
-     char temp[91];
-     afs_uint32 addr;
-     
-     ObtainReadLock(&afs_xcell);
- 
-     for (cq = CellLRU.next; cq != &CellLRU; cq = tq) {
-         tc = QTOC(cq); tq = QNext(cq);
- 
-         pos += 90;
- 
-         if (pos <= offset) {
-             len = 0;
-         } else {
-             sprintf(temp, ">%s #(%d/%d)\n", tc->cellName, 
-                     tc->cellNum, tc->cellIndex);
-             sprintf(buffer + len, "%-89s\n", temp);
-             len += 90;
-             if (pos >= offset+length) {
-                 ReleaseReadLock(&afs_xcell);
-                 goto done;
-             }
-         }
- 
-         for (cnt = 0; cnt < MAXCELLHOSTS; cnt++) {
-             if (!tc->cellHosts[cnt]) break;
-             pos += 90;
-             if (pos <= offset) {
-                 len = 0;
-             } else {
-                 addr = ntohl(tc->cellHosts[cnt]->addr->sa_ip);
-                 sprintf(tbuffer, "%d.%d.%d.%d", 
-                         (int)((addr>>24) & 0xff),
- (int)((addr>>16) & 0xff),
-                         (int)((addr>>8)  & 0xff), (int)( addr & 0xff));
-                 sprintf(temp, "%s #%s\n", tbuffer, tbuffer);
-                 sprintf(buffer + len, "%-89s\n", temp);
-                 len += 90;
-                 if (pos >= offset+length) {
-                     ReleaseReadLock(&afs_xcell);
-                     goto done;
-                 }
-             }
-         }
-     }
- 
-     ReleaseReadLock(&afs_xcell);
-     
- done:
-     *start = buffer + len - (pos - offset);
-     len = pos - offset;
-     if (len > length)
-         len = length;
-     return len;
- }
- 
- #endif /* HAVE_KERNEL_LINUX_SEQ_FILE_H */
- 
- int
- peerproc_read(char *buffer, char **start, off_t offset, int count,
- 	      int *eof, void *data)
- {
-     int len, i, j;
-     struct rx_peer *sep;
-     
-     len = 0;
-     for (i = 0, j = 0; i < 256; i++) {
-         for (sep = rx_peerHashTable[i]; sep; sep = sep->next, j++) {
- 	    len += sprintf(buffer + len, "%lx: next=0x%lx, host=0x%x, ", (unsigned long)sep,
- 		   (unsigned long)sep->next, sep->host);
-             len += sprintf(buffer + len, "ifMTU=%d, natMTU=%d, maxMTU=%d\n", sep->ifMTU,
-                    sep->natMTU, sep->maxMTU);
-             len += sprintf(buffer + len, "\trtt=%d:%d, timeout(%d:%d), nSent=%d, reSends=%d\n",
-                    sep->rtt, sep->rtt_dev, sep->timeout.sec,
-                    sep->timeout.usec, sep->nSent, sep->reSends);
-             len += sprintf(buffer + len, "\trefCount=%d, port=%d, idleWhen=0x%x\n",
-                    sep->refCount, sep->port, sep->idleWhen);
-             len += sprintf(buffer + len, "\tCongestionQueue (0x%lx:0x%lx), inPacketSkew=0x%x, outPacketSkew=0x%x\n",
-                  (unsigned long)sep->congestionQueue.prev, (unsigned long)sep->congestionQueue.next,
-                  sep->inPacketSkew, sep->outPacketSkew);
- #ifdef RX_ENABLE_LOCKS
-             len += sprintf(buffer + len, "\tpeer_lock=%d\n", sep->peer_lock);
- #endif /* RX_ENABLE_LOCKS */
-         }
-     }
-     
-     if (offset >= len) {
- 	*start = buffer;
- 	*eof = 1;
- 	return 0;
-     }
-     *start = buffer + offset;
-     if ((len -= offset) > count)
- 	return count;
-     *eof = 1;
-     return len;
- }
- 
- int
- rxstatsproc_read(char *buffer, char **start, off_t offset, int count,
- 	      int *eof, void *data)
- {
-     int len, i;
-     
-     len = 0;
-     len += sprintf(buffer + len, "packetRequests = %d\n", rx_stats.packetRequests);
-     len += sprintf(buffer + len, "noPackets[%d] = %d\n", RX_PACKET_CLASS_RECEIVE,
-            rx_stats.receivePktAllocFailures);
-     len += sprintf(buffer + len, "noPackets[%d] = %d\n", RX_PACKET_CLASS_SEND,
-            rx_stats.sendPktAllocFailures);
-     len += sprintf(buffer + len, "noPackets[%d] = %d\n", RX_PACKET_CLASS_SPECIAL,
-            rx_stats.specialPktAllocFailures);
-     len += sprintf(buffer + len, "noPackets[%d] = %d\n", RX_PACKET_CLASS_RECV_CBUF,
-            rx_stats.receiveCbufPktAllocFailures);
-     len += sprintf(buffer + len, "noPackets[%d] = %d\n", RX_PACKET_CLASS_SEND_CBUF,
-            rx_stats.sendCbufPktAllocFailures);
-     len += sprintf(buffer + len, "socketGreedy = %d\n", rx_stats.socketGreedy);
-     len += sprintf(buffer + len, "bogusPacketOnRead = %d\n", rx_stats.bogusPacketOnRead);
-     len += sprintf(buffer + len, "bogusHost = %d\n", rx_stats.bogusHost);
-     len += sprintf(buffer + len, "noPacketOnRead = %d\n", rx_stats.noPacketOnRead);
-     len += sprintf(buffer + len, "noPacketBuffersOnRead = %d\n",
-            rx_stats.noPacketBuffersOnRead);
-     len += sprintf(buffer + len, "selects = %d\n", rx_stats.selects);
-     len += sprintf(buffer + len, "sendSelects = %d\n", rx_stats.sendSelects);
-     for (i = 0; i < RX_N_PACKET_TYPES; i++)
-         len += sprintf(buffer + len, "packetsRead[%d] = %d\n", i, rx_stats.packetsRead[i]);
-     len += sprintf(buffer + len, "dataPacketsRead = %d\n", rx_stats.dataPacketsRead);
-     len += sprintf(buffer + len, "ackPacketsRead = %d\n", rx_stats.ackPacketsRead);
-     len += sprintf(buffer + len, "dupPacketsRead = %d\n", rx_stats.dupPacketsRead);
-     len += sprintf(buffer + len, "spuriousPacketsRead = %d\n", rx_stats.spuriousPacketsRead);
-     for (i = 0; i < RX_N_PACKET_TYPES; i++)
-         len += sprintf(buffer + len, "packetsSent[%d] = %d\n", i, rx_stats.packetsSent[i]);
-     len += sprintf(buffer + len, "ackPacketsSent = %d\n", rx_stats.ackPacketsSent);
-     len += sprintf(buffer + len, "pingPacketsSent = %d\n", rx_stats.pingPacketsSent);
-     len += sprintf(buffer + len, "abortPacketsSent = %d\n", rx_stats.abortPacketsSent);
-     len += sprintf(buffer + len, "busyPacketsSent = %d\n", rx_stats.busyPacketsSent);
-     len += sprintf(buffer + len, "dataPacketsSent = %d\n", rx_stats.dataPacketsSent);
-     len += sprintf(buffer + len, "dataPacketsReSent = %d\n", rx_stats.dataPacketsReSent);
-     len += sprintf(buffer + len, "dataPacketsPushed = %d\n", rx_stats.dataPacketsPushed);
-     len += sprintf(buffer + len, "ignoreAckedPacket = %d\n", rx_stats.ignoreAckedPacket);
-     len += sprintf(buffer + len, "totalRtt = %d sec, %d usec\n", rx_stats.totalRtt.sec,
-            rx_stats.totalRtt.usec);
-     len += sprintf(buffer + len, "minRtt = %d sec, %d usec\n", rx_stats.minRtt.sec,
-            rx_stats.minRtt.usec);
-     len += sprintf(buffer + len, "maxRtt = %d sec, %d usec\n", rx_stats.maxRtt.sec,
-            rx_stats.maxRtt.usec);
-     len += sprintf(buffer + len, "nRttSamples = %d\n", rx_stats.nRttSamples);
-     len += sprintf(buffer + len, "nServerConns = %d\n", rx_stats.nServerConns);
-     len += sprintf(buffer + len, "nClientConns = %d\n", rx_stats.nClientConns);
-     len += sprintf(buffer + len, "nPeerStructs = %d\n", rx_stats.nPeerStructs);
-     len += sprintf(buffer + len, "nCallStructs = %d\n", rx_stats.nCallStructs);
-     len += sprintf(buffer + len, "nFreeCallStructs = %d\n", rx_stats.nFreeCallStructs);
-     len += sprintf(buffer + len, "netSendFailures  = %d\n", rx_stats.netSendFailures);
-     len += sprintf(buffer + len, "fatalErrors      = %d\n", rx_stats.fatalErrors);
-     
-     if (offset >= len) {
- 	*start = buffer;
- 	*eof = 1;
- 	return 0;
-     }
-     *start = buffer + offset;
-     if ((len -= offset) > count)
- 	return count;
-     *eof = 1;
-     return len;
- }
- 
- int
- rxproc_read(char *buffer, char **start, off_t offset, int count,
- 	      int *eof, void *data)
- {
-     int len, i;
-     
-     len = 0;
-     len += sprintf(buffer + len, "rx_extraQuota = %d\n", rx_extraQuota);
-     len += sprintf(buffer + len, "rx_extraPackets = %d\n", rx_extraPackets);
-     len += sprintf(buffer + len, "rx_stackSize = %d\n", rx_stackSize);
-     len += sprintf(buffer + len, "rx_connDeadTime = %d\n", rx_connDeadTime);
-     len += sprintf(buffer + len, "rx_idleConnectionTime = %d\n", rx_idleConnectionTime);
-     len += sprintf(buffer + len, "rx_idlePeerTime = %d\n", rx_idlePeerTime);
-     len += sprintf(buffer + len, "rx_initSendWindow = %d\n", rx_initSendWindow);
-     len += sprintf(buffer + len, "rxi_nSendFrags = %d\n", rxi_nSendFrags);
-     len += sprintf(buffer + len, "rx_nPackets = %d\n", rx_nPackets);
-     len += sprintf(buffer + len, "rx_nFreePackets = %d\n", rx_nFreePackets);
-     len += sprintf(buffer + len, "rx_socket = 0x%lx\n", (unsigned long)rx_socket);
-     len += sprintf(buffer + len, "rx_Port = %d\n", rx_port);
-     for (i = 0; i < RX_N_PACKET_CLASSES; i++)
- 	len += sprintf(buffer + len, "\trx_packetQuota[%d] = %d\n", i, rx_packetQuota[i]);
- 
-     len += sprintf(buffer + len, "rx_nextCid = 0x%x\n", rx_nextCid);
-     len += sprintf(buffer + len, "rx_epoch = 0u%u\n", rx_epoch);
-     len += sprintf(buffer + len, "rx_waitingForPackets = %x\n", rx_waitingForPackets);
-     len += sprintf(buffer + len, "rxi_nCalls = %d\n", rxi_nCalls);
-     len += sprintf(buffer + len, "rxi_dataQuota = %d\n", rxi_dataQuota);
-     len += sprintf(buffer + len, "rxi_availProcs = %d\n", rxi_availProcs);
-     len += sprintf(buffer + len, "rxi_totalMin = %d\n", rxi_totalMin);
-     len += sprintf(buffer + len, "rxi_minDeficit = %d\n", rxi_minDeficit);
- 
-     len += sprintf(buffer + len, "rxevent_nFree = %d\nrxevent_nPosted = %d\n", rxevent_nFree, rxevent_nPosted);
-     
-     if (offset >= len) {
- 	*start = buffer;
- 	*eof = 1;
- 	return 0;
-     }
-     *start = buffer + offset;
-     if ((len -= offset) > count)
- 	return count;
-     *eof = 1;
-     return len;
- }
- 
- int
- connproc_read(char *buffer, char **start, off_t offset, int count,
- 	      int *eof, void *data)
- {
-     int len, i, j;
-     struct rx_connection *sep;
-     
-     len = 0;
-     for (i = 0, j = 0; i < 256; i++) {
-         for (sep = rx_connHashTable[i]; sep; sep = sep->next, j++) {
- 	    len += sprintf(buffer + len, "%lx: next=0x%lx, peer=0x%lx, epoch=0x%x, cid=0x%x, ackRate=%d\n",
- 			   (unsigned long)sep, (unsigned long)sep->next, (unsigned long)sep->peer,
- 			   sep->epoch, sep->cid, sep->ackRate);
- 	    len += sprintf(buffer + len, "\tcall[%lx=%d, %lx=%d, %lx=%d, %lx=%d]\n", 
- 			   (unsigned long)sep->call[0], sep->callNumber[0],
- 			   (unsigned long)sep->call[1], sep->callNumber[1],
- 			   (unsigned long)sep->call[2], sep->callNumber[2],
- 			   (unsigned long)sep->call[3], sep->callNumber[3]);
-             len += sprintf(buffer + len, "\ttimeout=%d, flags=0x%x, type=0x%x, serviceId=%d, service=0x%lx, refCount=%d\n",
- 			   sep->timeout, sep->flags, sep->type, 
- 			   sep->serviceId, (unsigned long)sep->service, sep->refCount);
-             len += sprintf(buffer + len, "\tserial=%d, lastSerial=%d, secsUntilDead=%d, secsUntilPing=%d, secIndex=%d\n",
- 			   sep->serial, sep->lastSerial, sep->secondsUntilDead,
- 			   sep->secondsUntilPing, sep->securityIndex);
-             len += sprintf(buffer + len, "\terror=%d, secObject=0x%lx, secData=0x%lx, secHeaderSize=%d, secmaxTrailerSize=%d\n",
- 			   sep->error, (unsigned long)sep->securityObject,
- 			   (unsigned long)sep->securityData,
- 			   sep->securityHeaderSize, sep->securityMaxTrailerSize);
-             len += sprintf(buffer + len, "\tchallEvent=0x%lx, lastSendTime=0x%x, maxSerial=%d, hardDeadTime=%d\n",
- 			   (unsigned long)sep->challengeEvent, sep->lastSendTime, 
- 			   sep->maxSerial, sep->hardDeadTime);
-             if (sep->flags & RX_CONN_MAKECALL_WAITING)
- 		len += sprintf(buffer + len, "\t***** Conn in RX_CONN_MAKECALL_WAITING state *****\n");
- #ifdef RX_ENABLE_LOCKS
-             len += sprintf(buffer + len, "\tcall_lock=%d, call_cv=%d, data_lock=%d, refCount=%d\n",
- 			   sep->conn_call_lock, sep->conn_call_cv, 
- 			   sep->conn_data_lock, sep->refCount);
- #endif /* RX_ENABLE_LOCKS */
-         }
-     }
-     
-     if (offset >= len) {
- 	*start = buffer;
- 	*eof = 1;
- 	return 0;
-     }
-     *start = buffer + offset;
-     if ((len -= offset) > count)
- 	return count;
-     *eof = 1;
-     return len;
- }
- 
- int
- servicesproc_read(char *buffer, char **start, off_t offset, int count,
- 	      int *eof, void *data)
- {
-     int len, i, j;
-     struct rx_service *sentry;
-     
-     len = 0;
-     for (i = 0, j = 0; i < RX_MAX_SERVICES; i++) {
-         if ((sentry = rx_services[i])) {
-             j++;
- 	    len += sprintf(buffer + len,
- 			   "\t%lx: serviceId=%d, port=%d, serviceName=%s, socket=0x%lx\n",
- 			   (unsigned long)sentry, sentry->serviceId, sentry->servicePort,
- 			   sentry->serviceName, (unsigned long)sentry->socket);
- 	    len += sprintf(buffer + len,
- 			   "\t\tnSecObj=%d, nReqRunning=%d, maxProcs=%d, minProcs=%d, connDeadTime=%d, idleDeadTime=%d\n",
- 			   sentry->nSecurityObjects, sentry->nRequestsRunning,
- 			   sentry->maxProcs, sentry->minProcs, 
- 			   sentry->connDeadTime, sentry->idleDeadTime);
- 	}
-     }
-     
-     if (offset >= len) {
- 	*start = buffer;
- 	*eof = 1;
- 	return 0;
-     }
-     *start = buffer + offset;
-     if ((len -= offset) > count)
- 	return count;
-     *eof = 1;
-     return len;
- }
- 
- int
- callproc_read(char *buffer, char **start, off_t offset, int count,
- 	      int *eof, void *data)
- {
-     int len, i, j, k;
-     struct rx_connection *sep;
-     
-     len = 0;
-     for (i = 0, j = 0; i < 256; i++) {
-         for (sep = rx_connHashTable[i]; sep; sep = sep->next) {
- 	    for (k = 0; k < RX_MAXCALLS; k++) {
-                 struct rx_call *call = sep->call[k];
-                 if (call) {
-                     j++;
- 		    len += sprintf(buffer + len,
- 				   "%lx: conn=0x%lx, qiheader(0x%lx:0x%lx), tq(0x%lx:0x%lx), rq(0x%lx:0x%lx)\n",
- 				   (unsigned long)call, (unsigned long)call->conn,
- 				   (unsigned long)call->queue_item_header.prev,
- 				   (unsigned long)call->queue_item_header.next,
- 				   (unsigned long)call->tq.prev, (unsigned long)call->tq.next,
- 				   (unsigned long)call->rq.prev, (unsigned long)call->rq.next);
-                     len += sprintf(buffer + len, 
- 				   "\t: curvec=%d, curpos=%lx, nLeft=%d, nFree=%d, currPacket=0x%lx, callNumber=0x%lx\n",
- 				   call->curvec, (unsigned long)call->curpos, call->nLeft,
- 				   call->nFree, (unsigned long)call->currentPacket,
- 				   (unsigned long)call->callNumber);
- 		    len += sprintf(buffer + len,
- 				   "\t: channel=%d, state=0x%x, mode=0x%x, flags=0x%x, localStatus=0x%x, remStatus=0x%x\n",
- 				   call->channel, call->state, call->mode,
- 				   call->flags, call->localStatus,
- 				   call->remoteStatus);
-                     len += sprintf(buffer + len,
- 				   "\t: error=%d, timeout=0x%x, rnext=0x%x, rprev=0x%x, rwind=0x%x, tfirst=0x%x, tnext=0x%x\n",
- 				   call->error, call->timeout, call->rnext,
- 				   call->rprev, call->rwind, call->tfirst,
- 				   call->tnext);
-                     len += sprintf(buffer + len,
- 				   "\t: twind=%d, resendEvent=0x%lx, timeoutEvent=0x%lx, keepAliveEvent=0x%lx, delayedAckEvent=0x%lx\n",
- 				   call->twind, (unsigned long)call->resendEvent,
- 				   (unsigned long)call->timeoutEvent,
- 				   (unsigned long)call->keepAliveEvent,
- 				   (unsigned long)call->delayedAckEvent);
- 		    len += sprintf(buffer + len,
- 				   "\t: lastSendTime=0x%x, lastReceiveTime=0x%x, lastAcked=0x%x, startTime=0x%x, startWait=0x%x\n",
- 				   call->lastSendTime, call->lastReceiveTime,
- 				   call->lastAcked, call->startTime.sec,
- 				   call->startWait);
-                     if (call->flags & RX_CALL_WAIT_PROC)
-                         len += sprintf(buffer + len,
- 				       "\t******** Call in RX_CALL_WAIT_PROC state **********\n");
-                     if (call->flags & RX_CALL_WAIT_WINDOW_ALLOC)
-                         len += sprintf(buffer + len,
- 				       "\t******** Call in RX_CALL_WAIT_WINDOW_ALLOC state **********\n");
-                     if (call->flags & RX_CALL_READER_WAIT)
-                         len += sprintf(buffer + len,
- 				       "\t******** Conn in RX_CALL_READER_WAIT state **********\n");
-                     if (call->flags & RX_CALL_WAIT_PACKETS)
-                         len += sprintf(buffer + len,
- 				       "\t******** Conn in RX_CALL_WAIT_PACKETS state **********\n");
- #ifdef RX_ENABLE_LOCKS
-                     len += sprintf(buffer + len,
- 				   "\t: lock=0x%x, cv_twind=0x%x, cv_rq=0x%x, refCount= %d\n",
- 				   call->lock, call->cv_twind, call->cv_rq,
- 				   call->refCount);
- #endif /* RX_ENABLE_LOCKS */
-                     len += sprintf(buffer + len, "\t: MTU=%d\n", call->MTU);
-                 }
- 	    }
-         }
-     }
-     
-     if (offset >= len) {
- 	*start = buffer;
- 	*eof = 1;
- 	return 0;
-     }
-     *start = buffer + offset;
-     if ((len -= offset) > count)
- 	return count;
-     *eof = 1;
-     return len;
- }
- 
- static struct proc_dir_entry *openafs_procfs;
- #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL)
- static int ioctl32_done;
- #endif
- 
- #ifdef AFS_LINUX24_ENV
- static int
- afsproc_init(void)
- {
-     struct proc_dir_entry *entry2;
-     struct proc_dir_entry *entry1;
-     struct proc_dir_entry *entry;
- 
-     openafs_procfs = proc_mkdir(PROC_FSDIRNAME, proc_root_fs);
-     entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs);
- 
-     entry1->proc_fops = &afs_syscall_fops;
- 
-     entry1->owner = THIS_MODULE;
- 
- #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
-     entry2 = create_proc_entry(PROC_CELLSERVDB_NAME, 0, openafs_procfs);
-     if (entry2)
- 	entry2->proc_fops = &afs_csdb_operations;
- #else
-     entry2 = create_proc_info_entry(PROC_CELLSERVDB_NAME, (S_IFREG|S_IRUGO), openafs_procfs, csdbproc_info);
- #endif
- 
-     entry = create_proc_read_entry(PROC_PEER_NAME, (S_IFREG|S_IRUGO), openafs_procfs, peerproc_read, NULL);
- 
-     entry = create_proc_read_entry(PROC_CONN_NAME, (S_IFREG|S_IRUGO), openafs_procfs, connproc_read, NULL);
- 
-     entry = create_proc_read_entry(PROC_CALL_NAME, (S_IFREG|S_IRUGO), openafs_procfs, connproc_read, NULL);
- 
-     entry = create_proc_read_entry(PROC_RX_NAME, (S_IFREG|S_IRUGO), openafs_procfs, rxproc_read, NULL);
- 
-     entry = create_proc_read_entry(PROC_SERVICES_NAME, (S_IFREG|S_IRUGO), openafs_procfs, servicesproc_read, NULL);
- 
-     entry = create_proc_read_entry(PROC_RXSTATS_NAME, (S_IFREG|S_IRUGO), openafs_procfs, rxstatsproc_read, NULL);
- #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL)
-     if (register_ioctl32_conversion(VIOC_SYSCALL32, NULL) == 0) 
- 	    ioctl32_done = 1;
- #endif
- 
-     return 0;
- }
- 
- static void
- afsproc_exit(void)
- {
-     remove_proc_entry(PROC_RXSTATS_NAME, openafs_procfs);
-     remove_proc_entry(PROC_SERVICES_NAME, openafs_procfs);
-     remove_proc_entry(PROC_RX_NAME, openafs_procfs);
-     remove_proc_entry(PROC_CALL_NAME, openafs_procfs);
-     remove_proc_entry(PROC_CONN_NAME, openafs_procfs);
-     remove_proc_entry(PROC_PEER_NAME, openafs_procfs);
-     remove_proc_entry(PROC_CELLSERVDB_NAME, openafs_procfs);
-     remove_proc_entry(PROC_SYSCALL_NAME, openafs_procfs);
-     remove_proc_entry(PROC_FSDIRNAME, proc_root_fs);
- #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL)
-     if (ioctl32_done)
- 	    unregister_ioctl32_conversion(VIOC_SYSCALL32);
- #endif
- }
- #endif
- 
- extern asmlinkage long
- afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4);
- 
- static int
- afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
- 	  unsigned long arg)
- {
- 
-     struct afsprocdata sysargs;
- #ifdef NEED_IOCTL32
-     struct afsprocdata32 sysargs32;
- #endif
- 
-     if (cmd != VIOC_SYSCALL && cmd != VIOC_SYSCALL32) return -EINVAL;
- 
- #ifdef NEED_IOCTL32
- #ifdef AFS_LINUX26_ENV 
- #ifdef AFS_S390X_LINUX26_ENV
-     if (test_thread_flag(TIF_31BIT))
- #elif AFS_AMD64_LINUX20_ENV
-     if (test_thread_flag(TIF_IA32))
- #else
-     if (test_thread_flag(TIF_32BIT))
- #endif /* AFS_S390X_LINUX26_ENV */
- #else
- #ifdef AFS_SPARC64_LINUX24_ENV
-     if (current->thread.flags & SPARC_FLAG_32BIT)
- #elif defined(AFS_SPARC64_LINUX20_ENV)
-     if (current->tss.flags & SPARC_FLAG_32BIT)
- #elif defined(AFS_AMD64_LINUX20_ENV)
-     if (current->thread.flags & THREAD_IA32)
- #elif defined(AFS_PPC64_LINUX20_ENV)
-     if (current->thread.flags & PPC_FLAG_32BIT)
- #elif defined(AFS_S390X_LINUX20_ENV)
-     if (current->thread.flags & S390_FLAG_31BIT)
- #else
- #error Not done for this linux type
- #endif /* AFS_LINUX26_ENV */
- #endif /* NEED_IOCTL32 */
-     {
- 	if (copy_from_user(&sysargs32, (void *)arg,
- 			   sizeof(struct afsprocdata32)))
- 	    return -EFAULT;
- 
- 	return afs_syscall((unsigned long)sysargs32.syscall,
- 			   (unsigned long)sysargs32.param1,
- 			   (unsigned long)sysargs32.param2,
- 			   (unsigned long)sysargs32.param3,
- 			   (unsigned long)sysargs32.param4);
-     } else
- #endif
-     {
- 	if (copy_from_user(&sysargs, (void *)arg, sizeof(struct afsprocdata)))
- 	    return -EFAULT;
- 
- 	return afs_syscall(sysargs.syscall, sysargs.param1,
- 			   sysargs.param2, sysargs.param3, sysargs.param4);
-     }
- }
- 
- #if defined(HAVE_UNLOCKED_IOCTL) || defined(HAVE_COMPAT_IOCTL)
- static long afs_unlocked_ioctl(struct file *file, unsigned int cmd,
-                                unsigned long arg) {
-     return afs_ioctl(FILE_INODE(file), file, cmd, arg);
- }
- #endif
  
  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
  int __init
--- 56,61 ----
***************
*** 709,714 ****
--- 82,90 ----
  #endif /* !defined(AFS_LINUX24_ENV) */
  
      osi_Init();
+ #ifdef AFS_LINUX26_ENV
+     osi_linux_nfssrv_init();
+ #endif
  
      err = osi_syscall_init();
      if (err)
***************
*** 719,725 ****
      register_filesystem(&afs_fs_type);
      osi_sysctl_init();
  #ifdef AFS_LINUX24_ENV
!     afsproc_init();
  #endif
  
      return 0;
--- 95,102 ----
      register_filesystem(&afs_fs_type);
      osi_sysctl_init();
  #ifdef AFS_LINUX24_ENV
!     osi_proc_init();
!     osi_ioctl_init();
  #endif
  
      return 0;
***************
*** 738,747 ****
      unregister_filesystem(&afs_fs_type);
  
      afs_destroy_inodecache();
      osi_linux_free_afs_memory();
  
  #ifdef AFS_LINUX24_ENV
!     afsproc_exit();
  #endif
      return;
  }
--- 115,128 ----
      unregister_filesystem(&afs_fs_type);
  
      afs_destroy_inodecache();
+ #ifdef AFS_LINUX26_ENV
+     osi_linux_nfssrv_shutdown();
+ #endif
      osi_linux_free_afs_memory();
  
  #ifdef AFS_LINUX24_ENV
!     osi_ioctl_clean();
!     osi_proc_clean();
  #endif
      return;
  }
Index: openafs/src/afs/LINUX/osi_nfssrv.c
diff -c /dev/null openafs/src/afs/LINUX/osi_nfssrv.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/LINUX/osi_nfssrv.c	Mon Jul 31 17:27:39 2006
***************
*** 0 ****
--- 1,251 ----
+ /*
+  * vi:set cin noet sw=4 tw=70:
+  * Copyright 2006, 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
+  */
+ 
+ /*
+  * Filesystem export operations for Linux
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/LINUX/osi_nfssrv.c,v 1.1.2.2 2006/07/31 21:27:39 shadow Exp $");
+ 
+ #include <linux/module.h> /* early to avoid printf->printk mapping */
+ #include "afs/sysincludes.h"
+ #include "afsincludes.h"
+ #include "nfsclient.h"
+ #include "h/smp_lock.h"
+ #include <linux/sunrpc/svc.h>
+ #include <linux/sunrpc/svcauth.h>
+ 
+ static unsigned long authtab_addr = 0;
+ MODULE_PARM(authtab_addr, "l");
+ MODULE_PARM_DESC(authtab_addr, "Address of the authtab array.");
+ 
+ extern struct auth_ops *authtab[] __attribute__((weak));
+ static struct auth_ops **afs_authtab;
+ static struct auth_ops *afs_new_authtab[RPC_AUTH_MAXFLAVOR];
+ static struct auth_ops *afs_orig_authtab[RPC_AUTH_MAXFLAVOR];
+ 
+ static int whine_memory = 0;
+ 
+ afs_lock_t afs_xnfssrv;
+ 
+ struct nfs_server_thread {
+     struct nfs_server_thread *next;	/* next in chain */
+     pid_t pid;				/* pid of this thread */
+     int active;				/* this thread is servicing an RPC */
+     struct sockaddr_in client_addr;	/* latest client of this thread */
+     int client_addrlen;
+     afs_int32 uid;			/* AFS UID/PAG for this thread */
+     afs_int32 code;			/* What should InitReq return? */
+     int flavor;				/* auth flavor */
+     uid_t client_uid;			/* UID claimed by client */
+     gid_t client_gid;			/* GID claimed by client */
+     gid_t client_g0, client_g1;		/* groups claimed by client */
+ };
+ 
+ static struct nfs_server_thread *nfssrv_list = 0;
+ 
+ static struct nfs_server_thread *find_nfs_thread(int create)
+ {
+     struct nfs_server_thread *this;
+ 
+     /* Check that this is an nfsd kernel thread */
+     if (current->files != init_task.files || strcmp(current->comm, "nfsd"))
+ 	return 0;
+ 
+     ObtainWriteLock(&afs_xnfssrv, 804);
+     for (this = nfssrv_list; this; this = this->next)
+ 	if (this->pid == current->pid)
+ 	    break;
+     if (!this && create) {
+ 	this = afs_osi_Alloc(sizeof(struct nfs_server_thread));
+ 	if (this) {
+ 	    this->next = nfssrv_list;
+ 	    this->pid  = current->pid;
+ 	    this->client_addrlen = 0;
+ 	    nfssrv_list = this;
+ 	    printk("afs: added nfsd task %d/%d\n",
+ 		   current->tgid, current->pid);
+ 	} else if (!whine_memory) {
+ 	    whine_memory = 1;
+ 	    printk("afs: failed to allocate memory for nfsd task %d/%d\n",
+ 		   current->tgid, current->pid);
+ 	}
+     }
+     ReleaseWriteLock(&afs_xnfssrv);
+     return this;
+ }
+ 
+ static int
+ svcauth_afs_accept(struct svc_rqst *rqstp, u32 *authp)
+ {
+     struct nfs_server_thread *ns;
+     struct afs_exporter *outexp;
+     struct AFS_UCRED *credp;
+     int code;
+ 
+     code = afs_orig_authtab[rqstp->rq_authop->flavour]->accept(rqstp, authp);
+     if (code != SVC_OK)
+ 	return code;
+ 
+     AFS_GLOCK();
+     ns = find_nfs_thread(1);
+     if (!ns) {
+ 	AFS_GUNLOCK();
+ 	/* XXX maybe we should fail this with rpc_system_err? */
+ 	return SVC_OK;
+     }
+ 
+     ns->active		= 1;
+     ns->flavor		= rqstp->rq_authop->flavour;
+     ns->code		= EACCES;
+     ns->client_addr	= rqstp->rq_addr;
+     ns->client_addrlen	= rqstp->rq_addrlen;
+     ns->client_uid	= rqstp->rq_cred.cr_uid;
+     ns->client_gid	= rqstp->rq_cred.cr_gid;
+     if (rqstp->rq_cred.cr_group_info->ngroups > 0)
+ 	ns->client_g0	= GROUP_AT(rqstp->rq_cred.cr_group_info, 0);
+     else
+ 	ns->client_g0	= -1;
+     if (rqstp->rq_cred.cr_group_info->ngroups > 1)
+ 	ns->client_g1	= GROUP_AT(rqstp->rq_cred.cr_group_info, 1);
+     else
+ 	ns->client_g1	= -1;
+ 
+     /* NB: Don't check the length; it's not always filled in! */
+     if (rqstp->rq_addr.sin_family != AF_INET) {
+ 	printk("afs: NFS request from non-IPv4 client (family %d len %d)\n",
+ 	       rqstp->rq_addr.sin_family, rqstp->rq_addrlen);
+ 	goto done;
+     }
+ 
+     credp = crget();
+     credp->cr_uid = rqstp->rq_cred.cr_uid;
+     credp->cr_gid = rqstp->rq_cred.cr_gid;
+     get_group_info(rqstp->rq_cred.cr_group_info);
+     credp->cr_group_info = rqstp->rq_cred.cr_group_info;
+ 
+     /* avoid creating wildcard entries by mapping anonymous
+      * clients to afs_nobody */
+     if (credp->cr_uid == -1)
+ 	credp->cr_uid = -2;
+     code = afs_nfsclient_reqhandler(0, &credp, rqstp->rq_addr.sin_addr.s_addr,
+ 				    &ns->uid, &outexp);
+     if (!code && outexp) EXP_RELE(outexp);
+     if (!code) ns->code = 0;
+     if (code)
+ 	printk("afs: svcauth_afs_accept: afs_nfsclient_reqhandler: %d\n", code);
+     crfree(credp);
+ 
+ done:
+     AFS_GUNLOCK();
+     return SVC_OK;
+ }
+ 
+ 
+ #if 0
+ /* This doesn't work, because they helpfully NULL out rqstp->authop
+  * before calling us, so we have no way to tell what the original
+  * auth flavor was.
+  */
+ static int
+ svcauth_afs_release(struct svc_rqst *rqstp)
+ {
+     struct nfs_server_thread *ns;
+ 
+     AFS_GLOCK();
+     ns = find_nfs_thread(0);
+     if (ns) ns->active = 0;
+     AFS_GUNLOCK();
+ 
+     return afs_orig_authtab[rqstp->rq_authop->flavour]->release(rqstp);
+ }
+ #endif
+ 
+ 
+ int osi_linux_nfs_initreq(struct vrequest *av, struct AFS_UCRED *cr, int *code)
+ {
+     struct nfs_server_thread *ns;
+ 
+     ns = find_nfs_thread(0);
+     if (!ns || !ns->active)
+ 	return 0;
+ 
+     *code = ns->code;
+     if (!ns->code) {
+ 	cr->cr_ruid = NFSXLATOR_CRED;
+ 	av->uid = ns->uid;
+     }
+     return 1;
+ }
+ 
+ void osi_linux_nfssrv_init(void)
+ {
+     int i;
+ 
+     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");
+ 	printk("NFS Translator hooks will not be installed\n");
+ 	printk("To correct, specify authtab_addr=<authtab>\n");
+ 	afs_authtab = 0;
+ 	return;
+     }
+ 
+     for (i = 0; i < RPC_AUTH_MAXFLAVOR; i++) {
+ 	afs_orig_authtab[i] = afs_authtab[i];
+ 	if (!afs_orig_authtab[i] || afs_orig_authtab[i]->flavour != i ||
+ 	    !try_module_get(afs_orig_authtab[i]->owner)) {
+ 	    afs_orig_authtab[i] = 0;
+ 	    continue;
+ 	}
+ 
+ 	afs_new_authtab[i] = afs_osi_Alloc(sizeof(struct auth_ops));
+ 	*(afs_new_authtab[i]) = *(afs_orig_authtab[i]);
+ 	afs_new_authtab[i]->owner = THIS_MODULE;
+ 	afs_new_authtab[i]->accept = svcauth_afs_accept;
+ 	/* afs_new_authtab[i]->release = svcauth_afs_release; */
+ 	svc_auth_unregister(i);
+ 	svc_auth_register(i, afs_new_authtab[i]);
+     }
+ }
+ 
+ void osi_linux_nfssrv_shutdown(void)
+ {
+     struct nfs_server_thread *next;
+     int i;
+ 
+     if (afs_authtab) {
+ 	for (i = 0; i < RPC_AUTH_MAXFLAVOR; i++) {
+ 	    if (!afs_orig_authtab[i])
+ 		continue;
+ 	    svc_auth_unregister(i);
+ 	    svc_auth_register(i, afs_orig_authtab[i]);
+ 	    module_put(afs_orig_authtab[i]->owner);
+ 	    afs_osi_Free(afs_new_authtab[i], sizeof(struct auth_ops));
+ 	}
+     }
+ 
+     AFS_GLOCK();
+     ObtainWriteLock(&afs_xnfssrv, 805);
+     while (nfssrv_list) {
+ 	next = nfssrv_list->next;
+ 	afs_osi_Free(nfssrv_list, sizeof(struct nfs_server_thread));
+ 	nfssrv_list = next;
+     }
+     ReleaseWriteLock(&afs_xnfssrv);
+     AFS_GUNLOCK();
+ }
Index: openafs/src/afs/LINUX/osi_pag_module.c
diff -c /dev/null openafs/src/afs/LINUX/osi_pag_module.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/LINUX/osi_pag_module.c	Mon Jul 31 17:27:39 2006
***************
*** 0 ****
--- 1,130 ----
+ /*
+  * 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
+  */
+ 
+ /*
+  * Linux module support routines.
+  *
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/LINUX/osi_pag_module.c,v 1.1.2.2 2006/07/31 21:27:39 shadow Exp $");
+ 
+ #include <linux/module.h> /* early to avoid printf->printk mapping */
+ #include "afs/sysincludes.h"
+ #include "afsincludes.h"
+ #include "h/unistd.h"		/* For syscall numbers. */
+ #include "h/mm.h"
+ 
+ #ifdef AFS_AMD64_LINUX20_ENV
+ #include <asm/ia32_unistd.h>
+ #endif
+ #ifdef AFS_SPARC64_LINUX20_ENV
+ #include <linux/ioctl32.h>
+ #endif
+ 
+ #include <linux/proc_fs.h>
+ #include <linux/slab.h>
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+ #include <linux/init.h>
+ #include <linux/sched.h>
+ #include <linux/kernel.h>
+ #endif
+ 
+ static unsigned long nfs_server_addr = 0;
+ MODULE_PARM(nfs_server_addr,  "l");
+ MODULE_PARM_DESC(nfs_server_addr,  "IP Address of NFS Server");
+ 
+ static char *this_cell = 0;
+ MODULE_PARM(this_cell, "s");
+ MODULE_PARM_DESC(this_cell, "Local cell name");
+ 
+ #if defined(AFS_LINUX24_ENV)
+ DECLARE_MUTEX(afs_global_lock);
+ struct proc_dir_entry *openafs_procfs;
+ #else
+ struct semaphore afs_global_lock = MUTEX;
+ #endif
+ int afs_global_owner = 0;
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+ int __init
+ afspag_init(void)
+ #else
+ int
+ init_module(void)
+ #endif
+ {
+     int err;
+ 
+     osi_Init();
+ 
+     err = osi_syscall_init();
+     if (err)
+ 	return err;
+ #ifdef AFS_LINUX24_ENV
+     openafs_procfs = proc_mkdir(PROC_FSDIRNAME, proc_root_fs);
+     osi_ioctl_init();
+ #endif
+ 
+     afspag_Init(htonl(nfs_server_addr));
+     if (this_cell)
+ 	afspag_SetPrimaryCell(this_cell);
+ 
+     return 0;
+ }
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+ void __exit
+ afspag_cleanup(void)
+ #else
+ void
+ cleanup_module(void)
+ #endif
+ {
+     osi_syscall_clean();
+ 
+     osi_linux_free_afs_memory();
+ 
+ #ifdef AFS_LINUX24_ENV
+     osi_ioctl_clean();
+     remove_proc_entry(PROC_FSDIRNAME, proc_root_fs);
+ #endif
+     return;
+ }
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+ MODULE_LICENSE("http://www.openafs.org/dl/license10.html");
+ module_init(afspag_init);
+ module_exit(afspag_cleanup);
+ #endif
+ 
+ #ifdef AFS_LINUX26_ENV
+ /* Hack alert!
+  * These will never be called in the standalone PAG manager, because
+  * they are only referenced in afs_InitReq, and nothing calls that.
+  * However, we need to define them in order to resolve the reference,
+  * unless we want to move afs_InitReq out of afs_osi_pag.c.
+  */
+ int osi_linux_nfs_initreq(struct vrequest *av, struct AFS_UCRED *cr, int *code)
+ {
+     *code = EACCES;
+     return 1;
+ }
+ 
+ int
+ afs_nfsclient_reqhandler(struct afs_exporter *exporter,
+ 			 struct AFS_UCRED **cred,
+ 			 afs_int32 host, afs_int32 *pagparam,
+ 			 struct afs_exporter **outexporter)
+ {
+     return EINVAL;
+ }
+ #endif
Index: openafs/src/afs/LINUX/osi_proc.c
diff -c /dev/null openafs/src/afs/LINUX/osi_proc.c:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:30 2006
--- openafs/src/afs/LINUX/osi_proc.c	Mon Jul 31 17:27:39 2006
***************
*** 0 ****
--- 1,343 ----
+ /*
+  * 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
+  */
+ 
+ /*
+  * Linux module support routines.
+  *
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/LINUX/osi_proc.c,v 1.1.2.2 2006/07/31 21:27:39 shadow Exp $");
+ 
+ #include <linux/module.h> /* early to avoid printf->printk mapping */
+ #include "afs/sysincludes.h"
+ #include "afsincludes.h"
+ #include "afs/nfsclient.h"
+ #include "h/unistd.h"		/* For syscall numbers. */
+ #include "h/mm.h"
+ 
+ #ifdef AFS_AMD64_LINUX20_ENV
+ #include <asm/ia32_unistd.h>
+ #endif
+ 
+ #include <linux/proc_fs.h>
+ #include <linux/slab.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
+ #include <linux/kernel.h>
+ 
+ #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
+ #include <linux/seq_file.h>
+ #endif
+ 
+ struct proc_dir_entry *openafs_procfs;
+ 
+ #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
+ static void *c_start(struct seq_file *m, loff_t *pos)
+ {
+ 	struct afs_q *cq, *tq;
+ 	loff_t n = 0;
+ 
+ 	ObtainReadLock(&afs_xcell);
+ 	for (cq = CellLRU.next; cq != &CellLRU; cq = tq) {
+ 		tq = QNext(cq);
+ 
+ 		if (n++ == *pos)
+ 			break;
+ 	}
+ 	if (cq == &CellLRU)
+ 		return NULL;
+ 
+ 	return cq;
+ }
+ 
+ static void *c_next(struct seq_file *m, void *p, loff_t *pos)
+ {
+ 	struct afs_q *cq = p, *tq;
+ 
+ 	(*pos)++;
+ 	tq = QNext(cq);
+ 
+ 	if (tq == &CellLRU)
+ 		return NULL;
+ 
+ 	return tq;
+ }
+ 
+ static void c_stop(struct seq_file *m, void *p)
+ {
+ 	ReleaseReadLock(&afs_xcell);
+ }
+ 
+ static int c_show(struct seq_file *m, void *p)
+ {
+ 	struct afs_q *cq = p;
+ 	struct cell *tc = QTOC(cq);
+ 	int j;
+ 
+ 	seq_printf(m, ">%s #(%d/%d)\n", tc->cellName,
+ 		   tc->cellNum, tc->cellIndex);
+ 
+ 	for (j = 0; j < MAXCELLHOSTS; j++) {
+ 		afs_uint32 addr;
+ 
+ 		if (!tc->cellHosts[j]) break;
+ 
+ 		addr = tc->cellHosts[j]->addr->sa_ip;
+ 		seq_printf(m, "%u.%u.%u.%u #%u.%u.%u.%u\n",
+ 			   NIPQUAD(addr), NIPQUAD(addr));
+ 	}
+ 
+ 	return 0;
+ }
+ 
+ static struct seq_operations afs_csdb_op = {
+ 	.start		= c_start,
+ 	.next		= c_next,
+ 	.stop		= c_stop,
+ 	.show		= c_show,
+ };
+ 
+ static int afs_csdb_open(struct inode *inode, struct file *file)
+ {
+ 	return seq_open(file, &afs_csdb_op);
+ }
+ 
+ static struct file_operations afs_csdb_operations = {
+ 	.open		= afs_csdb_open,
+ 	.read		= seq_read,
+ 	.llseek		= seq_lseek,
+ 	.release	= seq_release,
+ };
+ 
+ 
+ static void *uu_start(struct seq_file *m, loff_t *pos)
+ {
+     struct unixuser *tu;
+     loff_t n = 0;
+     afs_int32 i;
+ 
+     ObtainReadLock(&afs_xuser);
+     if (!*pos)
+ 	return (void *)(1);
+ 
+     for (i = 0; i < NUSERS; i++) {
+ 	for (tu = afs_users[i]; tu; tu = tu->next) {
+ 	    if (++n == *pos)
+ 		return tu;
+ 	}
+     }
+ 
+     return NULL;
+ }
+ 
+ static void *uu_next(struct seq_file *m, void *p, loff_t *pos)
+ {
+     struct unixuser *tu = p;
+     afs_int32 i = 0;
+ 
+     (*pos)++;
+     if (!p) return NULL;
+ 
+     if (p != (void *)1) {
+ 	if (tu->next) return tu->next;
+ 	i = UHash(tu->uid) + 1;
+     }
+ 
+     for (; i < NUSERS; i++)
+ 	if (afs_users[i]) return afs_users[i];
+     return NULL;
+ }
+ 
+ static void uu_stop(struct seq_file *m, void *p)
+ {
+     ReleaseReadLock(&afs_xuser);
+ }
+ 
+ static int uu_show(struct seq_file *m, void *p)
+ {
+     struct cell *tc = 0;
+     struct unixuser *tu = p;
+     char *cellname;
+ 
+     if (p == (void *)1) {
+ 	seq_printf(m, "%10s %4s %-6s  %-25s %10s",
+ 		   "UID/PAG", "Refs", "States", "Cell", "ViceID");
+ 	seq_printf(m, "  %10s %10s %10s %3s",
+ 		   "Tok Set", "Tok Begin", "Tok Expire", "vno");
+ 	seq_printf(m, "  %-15s %10s %10s %s\n",
+ 		   "NFS Client", "UID/PAG", "Client UID", "Sysname(s)");
+ 
+ 	return 0;
+     }
+ 
+     if (tu->cell == -1) {
+ 	cellname = "<default>";
+     } else {
+ 	tc = afs_GetCellStale(tu->cell, READ_LOCK);
+ 	if (tc) cellname = tc->cellName;
+ 	else cellname = "<unknown>";
+     }
+ 
+     seq_printf(m, "%10d %4d %04x    %-25s %10d",
+ 	       tu->uid, tu->refCount, tu->states, cellname, tu->vid);
+ 
+     if (tc) afs_PutCell(tc, READ_LOCK);
+ 
+     if (tu->states & UHasTokens) {
+ 	seq_printf(m, "  %10d %10d %10d %3d",
+ 		   tu->tokenTime, tu->ct.BeginTimestamp, tu->ct.EndTimestamp,
+ 		   tu->ct.AuthHandle);
+     } else {
+ 	seq_printf(m, "  %-36s", "Tokens Not Set");
+     }
+ 
+     if (tu->exporter && tu->exporter->exp_type == EXP_NFS) {
+ 	struct nfsclientpag *np = (struct nfsclientpag *)(tu->exporter);
+         char ipaddr[16];
+ 	int i;
+ 
+         sprintf(ipaddr, "%u.%u.%u.%u", NIPQUAD(np->host));
+ 	seq_printf(m, "  %-15s %10d %10d", ipaddr, np->uid, np->client_uid);
+ 	if (np->sysnamecount) {
+ 	    for (i = 0; i < np->sysnamecount; i++)
+ 		seq_printf(m, " %s", np->sysname[i]);
+ 	} else { 
+ 	    seq_printf(m, " <no sysname list>");
+ 	}
+ 
+     } else if (tu->exporter) {
+ 	seq_printf(m, "  Unknown exporter type %d", tu->exporter->exp_type);
+     }
+     seq_printf(m, "\n");
+ 
+     return 0;
+ }
+ 
+ static struct seq_operations afs_unixuser_seqop = {
+     .start		= uu_start,
+     .next		= uu_next,
+     .stop		= uu_stop,
+     .show		= uu_show,
+ };
+ 
+ static int afs_unixuser_open(struct inode *inode, struct file *file)
+ {
+     return seq_open(file, &afs_unixuser_seqop);
+ }
+ 
+ static struct file_operations afs_unixuser_fops = {
+     .open		= afs_unixuser_open,
+     .read		= seq_read,
+     .llseek		= seq_lseek,
+     .release	= seq_release,
+ };
+ 
+ 
+ #else /* HAVE_KERNEL_LINUX_SEQ_FILE_H */
+ 
+ static int
+ csdbproc_info(char *buffer, char **start, off_t offset, int
+ length)
+ {
+     int len = 0;
+     off_t pos = 0;
+     int cnt;
+     struct afs_q *cq, *tq;
+     struct cell *tc;
+     char tbuffer[16];
+     /* 90 - 64 cellname, 10 for 32 bit num and index, plus
+        decor */
+     char temp[91];
+     afs_uint32 addr;
+     
+     ObtainReadLock(&afs_xcell);
+ 
+     for (cq = CellLRU.next; cq != &CellLRU; cq = tq) {
+         tc = QTOC(cq); tq = QNext(cq);
+ 
+         pos += 90;
+ 
+         if (pos <= offset) {
+             len = 0;
+         } else {
+             sprintf(temp, ">%s #(%d/%d)\n", tc->cellName, 
+                     tc->cellNum, tc->cellIndex);
+             sprintf(buffer + len, "%-89s\n", temp);
+             len += 90;
+             if (pos >= offset+length) {
+                 ReleaseReadLock(&afs_xcell);
+                 goto done;
+             }
+         }
+ 
+         for (cnt = 0; cnt < MAXCELLHOSTS; cnt++) {
+             if (!tc->cellHosts[cnt]) break;
+             pos += 90;
+             if (pos <= offset) {
+                 len = 0;
+             } else {
+                 addr = ntohl(tc->cellHosts[cnt]->addr->sa_ip);
+                 sprintf(tbuffer, "%d.%d.%d.%d", 
+                         (int)((addr>>24) & 0xff),
+ (int)((addr>>16) & 0xff),
+                         (int)((addr>>8)  & 0xff), (int)( addr & 0xff));
+                 sprintf(temp, "%s #%s\n", tbuffer, tbuffer);
+                 sprintf(buffer + len, "%-89s\n", temp);
+                 len += 90;
+                 if (pos >= offset+length) {
+                     ReleaseReadLock(&afs_xcell);
+                     goto done;
+                 }
+             }
+         }
+     }
+ 
+     ReleaseReadLock(&afs_xcell);
+     
+ done:
+     *start = buffer + len - (pos - offset);
+     len = pos - offset;
+     if (len > length)
+         len = length;
+     return len;
+ }
+ 
+ #endif /* HAVE_KERNEL_LINUX_SEQ_FILE_H */
+ 
+ void
+ osi_proc_init(void)
+ {
+     struct proc_dir_entry *entry;
+ 
+     openafs_procfs = proc_mkdir(PROC_FSDIRNAME, proc_root_fs);
+ 
+ #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
+     entry = create_proc_entry("unixusers", 0, openafs_procfs);
+     if (entry) {
+ 	entry->proc_fops = &afs_unixuser_fops;
+ 	entry->owner = THIS_MODULE;
+     }
+     entry = create_proc_entry(PROC_CELLSERVDB_NAME, 0, openafs_procfs);
+     if (entry)
+ 	entry->proc_fops = &afs_csdb_operations;
+ #else
+     entry = create_proc_info_entry(PROC_CELLSERVDB_NAME, (S_IFREG|S_IRUGO), openafs_procfs, csdbproc_info);
+ #endif
+     entry->owner = THIS_MODULE;
+ }
+ 
+ void
+ osi_proc_clean(void)
+ {
+     remove_proc_entry(PROC_CELLSERVDB_NAME, openafs_procfs);
+     remove_proc_entry(PROC_FSDIRNAME, proc_root_fs);
+ }
Index: openafs/src/afs/LINUX/osi_prototypes.h
diff -c openafs/src/afs/LINUX/osi_prototypes.h:1.13 openafs/src/afs/LINUX/osi_prototypes.h:1.13.4.3
*** openafs/src/afs/LINUX/osi_prototypes.h:1.13	Mon Jul 11 14:45:51 2005
--- openafs/src/afs/LINUX/osi_prototypes.h	Mon Jul 31 17:27:39 2006
***************
*** 27,46 ****
  extern cred_t *crref(void);
  extern void crset(cred_t * cr);
  
  /* osi_file.c */
  extern afs_rwlock_t afs_xosi;
  
  /* osi_misc.c */
  extern int osi_lookupname(char *aname, uio_seg_t seg, int followlink,
  			  struct dentry **dpp);
! extern int osi_InitCacheInfo(char *aname);
! extern int osi_rdwr(struct osi_file *osifile, uio_t * uiop, int rw);
! extern void afs_osi_SetTime(osi_timeval_t * tvp);
! extern void osi_linux_free_inode_pages(void);
  
  /* osi_probe.c */
  extern void *osi_find_syscall_table(int which);
  
  /* osi_syscall.c */
  extern int osi_syscall_init(void);
  extern void osi_syscall_clean(void);
--- 27,65 ----
  extern cred_t *crref(void);
  extern void crset(cred_t * cr);
  
+ /* osi_nfssrv.c */
+ extern int osi_linux_nfs_initreq(struct vrequest *av, struct AFS_UCRED *cr,
+                                  int *code);
+ extern void osi_linux_nfssrv_init(void);
+ extern void osi_linux_nfssrv_shutdown(void);
+ extern afs_rwlock_t afs_xnfssrv;
+ 
  /* osi_file.c */
  extern afs_rwlock_t afs_xosi;
+ extern int osi_InitCacheInfo(char *aname);
+ extern int osi_rdwr(struct osi_file *osifile, uio_t * uiop, int rw);
+ 
+ /* osi_ioctl.c */
+ extern void osi_ioctl_init(void);
+ extern void osi_ioctl_clean(void);
  
  /* osi_misc.c */
+ extern void afs_osi_SetTime(osi_timeval_t * tvp);
+ extern int osi_lookupname_internal(char *aname, int followlink,
+ 				   struct vfsmount **mnt, struct dentry **dpp);
  extern int osi_lookupname(char *aname, uio_seg_t seg, int followlink,
  			  struct dentry **dpp);
! extern int osi_abspath(char *aname, char *buf, int buflen,
! 		       int followlink, char **pathp);
! extern void afs_start_thread(void (*proc)(void), char *name);
  
  /* osi_probe.c */
  extern void *osi_find_syscall_table(int which);
  
+ /* osi_proc.c */
+ extern void osi_proc_init(void);
+ extern void osi_proc_clean(void);
+ 
  /* osi_syscall.c */
  extern int osi_syscall_init(void);
  extern void osi_syscall_clean(void);
***************
*** 63,68 ****
--- 82,88 ----
  extern void vattr2inode(struct inode *ip, struct vattr *vp);
  extern int afs_init_inodecache(void);
  extern void afs_destroy_inodecache(void);
+ extern void osi_linux_free_inode_pages(void);
  
  /* osi_vnodeops.c */
  extern void afs_fill_inode(struct inode *ip, struct vattr *vattr);
Index: openafs/src/afs/LINUX/osi_vfsops.c
diff -c openafs/src/afs/LINUX/osi_vfsops.c:1.42.4.1 openafs/src/afs/LINUX/osi_vfsops.c:1.42.4.4
*** openafs/src/afs/LINUX/osi_vfsops.c:1.42.4.1	Thu Jun  1 11:58:06 2006
--- openafs/src/afs/LINUX/osi_vfsops.c	Mon Jul 31 17:27:39 2006
***************
*** 16,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_vfsops.c,v 1.42.4.1 2006/06/01 15:58:06 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.4 2006/07/31 21:27:39 shadow Exp $");
  
  #define __NO_VERSION__		/* don't define kernel_version in module.h */
  #include <linux/module.h> /* early to avoid printf->printk mapping */
***************
*** 39,44 ****
--- 39,47 ----
  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;
  extern struct afs_q VLRU;
  
***************
*** 131,136 ****
--- 134,142 ----
      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)
  #ifdef AFS_64BIT_CLIENT
  #if !defined(MAX_LFS_FILESIZE)
***************
*** 503,508 ****
--- 509,519 ----
  #if defined(AFS_LINUX26_ENV)
      ip->i_atime.tv_sec = vp->va_atime.tv_sec;
      ip->i_mtime.tv_sec = vp->va_mtime.tv_sec;
+     /* Set the mtime nanoseconds to the sysname generation number.
+      * This convinces NFS clients that all directories have changed
+      * any time the sysname list changes.
+      */
+     ip->i_mtime.tv_nsec = afs_sysnamegen;
      ip->i_ctime.tv_sec = vp->va_ctime.tv_sec;
  #else
      ip->i_atime = vp->va_atime.tv_sec;
***************
*** 510,512 ****
--- 521,547 ----
      ip->i_ctime = vp->va_ctime.tv_sec;
  #endif
  }
+ 
+ /* osi_linux_free_inode_pages
+  *
+  * Free all vnodes remaining in the afs hash.  Must be done before
+  * shutting down afs and freeing all memory.
+  */
+ void
+ osi_linux_free_inode_pages(void)
+ {
+     int i;
+     struct vcache *tvc, *nvc;
+     extern struct vcache *afs_vhashT[VCSIZE];
+ 
+     for (i = 0; i < VCSIZE; i++) {
+ 	for (tvc = afs_vhashT[i]; tvc; ) {
+ 	    int slept;
+ 	
+ 	    nvc = tvc->hnext;
+ 	    if (afs_FlushVCache(tvc, &slept))		/* slept always 0 for linux? */
+ 		printf("Failed to invalidate all pages on inode 0x%p\n", tvc);
+ 	    tvc = nvc;
+ 	}
+     }
+ }
Index: openafs/src/afs/LINUX/osi_vnodeops.c
diff -c openafs/src/afs/LINUX/osi_vnodeops.c:1.126 openafs/src/afs/LINUX/osi_vnodeops.c:1.126.2.3
*** openafs/src/afs/LINUX/osi_vnodeops.c:1.126	Wed Apr  5 12:04:34 2006
--- openafs/src/afs/LINUX/osi_vnodeops.c	Mon Jul 31 17:27:39 2006
***************
*** 22,28 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.126 2006/04/05 16:04:34 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.3 2006/07/31 21:27:39 shadow Exp $");
  
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
***************
*** 188,194 ****
  	code = -ENOENT;
  	goto out;
      }
!     ObtainReadLock(&avc->lock);
      ObtainReadLock(&tdc->lock);
      /*
       * Make sure that the data in the cache is current. There are two
--- 188,195 ----
  	code = -ENOENT;
  	goto out;
      }
!     ObtainSharedLock(&avc->lock, 810);
!     UpgradeSToWLock(&avc->lock, 811);
      ObtainReadLock(&tdc->lock);
      /*
       * Make sure that the data in the cache is current. There are two
***************
*** 200,218 ****
  	   && (tdc->dflags & DFFetching)
  	   && hsame(avc->m.DataVersion, tdc->f.versionNo)) {
  	ReleaseReadLock(&tdc->lock);
! 	ReleaseReadLock(&avc->lock);
  	afs_osi_Sleep(&tdc->validPos);
! 	ObtainReadLock(&avc->lock);
  	ObtainReadLock(&tdc->lock);
      }
      if (!(avc->states & CStatd)
  	|| !hsame(avc->m.DataVersion, tdc->f.versionNo)) {
  	ReleaseReadLock(&tdc->lock);
! 	ReleaseReadLock(&avc->lock);
  	afs_PutDCache(tdc);
  	goto tagain;
      }
  
      /* Fill in until we get an error or we're done. This implementation
       * takes an offset in units of blobs, rather than bytes.
       */
--- 201,227 ----
  	   && (tdc->dflags & DFFetching)
  	   && hsame(avc->m.DataVersion, tdc->f.versionNo)) {
  	ReleaseReadLock(&tdc->lock);
! 	ReleaseSharedLock(&avc->lock);
  	afs_osi_Sleep(&tdc->validPos);
! 	ObtainSharedLock(&avc->lock, 812);
  	ObtainReadLock(&tdc->lock);
      }
      if (!(avc->states & CStatd)
  	|| !hsame(avc->m.DataVersion, tdc->f.versionNo)) {
  	ReleaseReadLock(&tdc->lock);
! 	ReleaseSharedLock(&avc->lock);
  	afs_PutDCache(tdc);
  	goto tagain;
      }
  
+     /* Set the readdir-in-progress flag, and downgrade the lock
+      * to shared so others will be able to acquire a read lock.
+      */
+     avc->states |= CReadDir;
+     avc->dcreaddir = tdc;
+     avc->readdir_pid = MyPidxx;
+     ConvertWToSLock(&avc->lock);
+ 
      /* Fill in until we get an error or we're done. This implementation
       * takes an offset in units of blobs, rather than bytes.
       */
***************
*** 235,242 ****
  	    printf("afs_linux_readdir: afs_dir_GetBlob failed, null name (inode %lx, dirpos %d)\n", 
  		   (unsigned long)&tdc->f.inode, dirpos);
  	    DRelease((struct buffer *) de, 0);
  	    afs_PutDCache(tdc);
- 	    ReleaseReadLock(&avc->lock);
  	    code = -ENOENT;
  	    goto out;
  	}
--- 244,251 ----
  	    printf("afs_linux_readdir: afs_dir_GetBlob failed, null name (inode %lx, dirpos %d)\n", 
  		   (unsigned long)&tdc->f.inode, dirpos);
  	    DRelease((struct buffer *) de, 0);
+ 	    ReleaseSharedLock(&avc->lock);
  	    afs_PutDCache(tdc);
  	    code = -ENOENT;
  	    goto out;
  	}
***************
*** 273,279 ****
--- 282,295 ----
  		/* clean up from afs_FindVCache */
  		afs_PutVCache(tvc);
  	    }
+ 	    /* 
+ 	     * If this is NFS readdirplus, then the filler is going to
+ 	     * call getattr on this inode, which will deadlock if we're
+ 	     * holding the GLOCK.
+ 	     */
+ 	    AFS_GUNLOCK();
  	    code = (*filldir) (dirbuf, de->name, len, offset, ino, type);
+ 	    AFS_GLOCK();
  	}
  #else
  	code = (*filldir) (dirbuf, de->name, len, offset, ino);
***************
*** 290,296 ****
  
      ReleaseReadLock(&tdc->lock);
      afs_PutDCache(tdc);
!     ReleaseReadLock(&avc->lock);
      code = 0;
  
  out:
--- 306,316 ----
  
      ReleaseReadLock(&tdc->lock);
      afs_PutDCache(tdc);
!     UpgradeSToWLock(&avc->lock, 813);
!     avc->states &= ~CReadDir;
!     avc->dcreaddir = 0;
!     avc->readdir_pid = 0;
!     ReleaseSharedLock(&avc->lock);
      code = 0;
  
  out:
***************
*** 900,905 ****
--- 920,928 ----
      struct vcache *vcp = NULL;
      const char *comp = dp->d_name.name;
      struct inode *ip = NULL;
+ #if defined(AFS_LINUX26_ENV)
+     struct dentry *newdp = NULL;
+ #endif
      int code;
  
  #if defined(AFS_LINUX26_ENV)
***************
*** 923,930 ****
--- 946,959 ----
      if (ip && S_ISDIR(ip->i_mode)) {
  	struct dentry *alias;
  
+         /* Try to invalidate an existing alias in favor of our new one */
  	alias = d_find_alias(ip);
+ #if defined(AFS_LINUX26_ENV)
+         /* But not if it's disconnected; then we want d_splice_alias below */
+ 	if (alias && !(alias->d_flags & DCACHE_DISCONNECTED)) {
+ #else
  	if (alias) {
+ #endif
  	    if (d_invalidate(alias) == 0) {
  		dput(alias);
  	    } else {
***************
*** 937,943 ****
--- 966,976 ----
  	}
      }
  #endif
+ #if defined(AFS_LINUX26_ENV)
+     newdp = d_splice_alias(ip, dp);
+ #else
      d_add(dp, ip);
+ #endif
  
  #if defined(AFS_LINUX26_ENV)
      unlock_kernel();
***************
*** 948,955 ****
--- 981,993 ----
       * seeing that the dp->d_inode field is NULL.
       */
  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,10)
+ #if defined(AFS_LINUX26_ENV)
+     if (!code || code == ENOENT)
+ 	return newdp;
+ #else
      if (code == ENOENT)
  	return ERR_PTR(0);
+ #endif
      else
  	return ERR_PTR(-code);
  #else
Index: openafs/src/afs/UKERNEL/afs_usrops.c
diff -c openafs/src/afs/UKERNEL/afs_usrops.c:1.30 openafs/src/afs/UKERNEL/afs_usrops.c:1.30.6.3
*** openafs/src/afs/UKERNEL/afs_usrops.c:1.30	Wed Apr 13 22:25:12 2005
--- openafs/src/afs/UKERNEL/afs_usrops.c	Mon Jul 31 17:27:40 2006
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.30 2005/04/14 02:25:12 shadow Exp $");
  
  
  #ifdef	UKERNEL
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.30.6.3 2006/07/31 21:27:40 shadow Exp $");
  
  
  #ifdef	UKERNEL
***************
*** 971,980 ****
      return;
  }
  
! int
  afs_nfsclient_init(void)
  {
-     return 0;
  }
  
  void
--- 971,979 ----
      return;
  }
  
! void
  afs_nfsclient_init(void)
  {
  }
  
  void
Index: openafs/src/afs/VNOPS/afs_vnop_access.c
diff -c openafs/src/afs/VNOPS/afs_vnop_access.c:1.11 openafs/src/afs/VNOPS/afs_vnop_access.c:1.11.8.3
*** openafs/src/afs/VNOPS/afs_vnop_access.c:1.11	Wed Aug 18 22:19:18 2004
--- openafs/src/afs/VNOPS/afs_vnop_access.c	Mon Jul 31 17:27:40 2006
***************
*** 23,29 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_access.c,v 1.11 2004/08/19 02:19:18 kolya 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.3 2006/07/31 21:27:40 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 118,123 ****
--- 118,133 ----
  
      if ((vType(avc) == VDIR) || (avc->states & CForeign)) {
  	/* rights are just those from acl */
+ 	if (afs_InReadDir(avc)) {
+ 	    /* if we are already in readdir, then they may have read and
+ 	     * lookup, and nothing else, and nevermind the real ACL.
+ 	     * Otherwise we might end up with problems trying to call
+ 	     * FetchStatus on the vnode readdir is working on, and that
+ 	     * would be a real mess.
+ 	     */
+ 	    dirBits = PRSFS_LOOKUP | PRSFS_READ;
+ 	    return (arights == (dirBits & arights));
+ 	}
  	return (arights == afs_GetAccessBits(avc, arights, areq));
      } else {
  	/* some rights come from dir and some from file.  Specifically, you 
Index: openafs/src/afs/VNOPS/afs_vnop_lookup.c
diff -c openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.72 openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.72.2.3
*** openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.72	Fri Feb 17 23:08:17 2006
--- openafs/src/afs/VNOPS/afs_vnop_lookup.c	Mon Jul 31 17:27:40 2006
***************
*** 18,24 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.72 2006/02/18 04:08:17 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.3 2006/07/31 21:27:40 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 27,35 ****
--- 27,37 ----
  #include "afs/nfsclient.h"
  #include "afs/exporter.h"
  #include "afs/afs_osidnlc.h"
+ #include "afs/afs_dynroot.h"
  
  
  extern struct DirEntry *afs_dir_GetBlob();
+ extern struct vcache *afs_globalVp;
  
  
  afs_int32 afs_bkvolpref = 0;
***************
*** 52,96 ****
   *
   * NOTE: this function returns a held volume structure in *volpp if it returns 0!
   */
! int
! EvalMountPoint(register struct vcache *avc, struct vcache *advc,
! 	       struct volume **avolpp, register struct vrequest *areq)
  {
-     afs_int32 code;
      struct volume *tvp = 0;
      struct VenusFid tfid;
      struct cell *tcell;
!     char *cpos, *volnamep;
!     char type, *buf;
      afs_int32 prefetch;		/* 1=>None  2=>RO  3=>BK */
      afs_int32 mtptCell, assocCell = 0, hac = 0;
      afs_int32 samecell, roname, len;
  
!     AFS_STATCNT(EvalMountPoint);
! #ifdef notdef
!     if (avc->mvid && (avc->states & CMValid))
! 	return 0;		/* done while racing */
! #endif
!     *avolpp = NULL;
!     code = afs_HandleLink(avc, areq);
!     if (code)
! 	return code;
! 
!     /* Determine which cell and volume the mointpoint goes to */
!     type = avc->linkData[0];	/* '#'=>Regular '%'=>RW */
!     cpos = afs_strchr(&avc->linkData[1], ':');	/* if cell name present */
      if (cpos) {
  	volnamep = cpos + 1;
  	*cpos = 0;
! 	tcell = afs_GetCellByName(&avc->linkData[1], READ_LOCK);
  	*cpos = ':';
      } else {
! 	volnamep = &avc->linkData[1];
! 	tcell = afs_GetCell(avc->fid.Cell, READ_LOCK);
      }
      if (!tcell)
  	return ENODEV;
  
      mtptCell = tcell->cellNum;	/* The cell for the mountpoint */
      if (tcell->lcellp) {
  	hac = 1;		/* has associated cell */
--- 54,90 ----
   *
   * NOTE: this function returns a held volume structure in *volpp if it returns 0!
   */
! static int
! EvalMountData(char type, char *data, afs_uint32 states, afs_uint32 cellnum,
!               struct volume **avolpp, register struct vrequest *areq,
! 	      afs_uint32 *acellidxp, afs_uint32 *avolnump)
  {
      struct volume *tvp = 0;
      struct VenusFid tfid;
      struct cell *tcell;
!     char *cpos, *volnamep, *x;
!     char *buf;
      afs_int32 prefetch;		/* 1=>None  2=>RO  3=>BK */
      afs_int32 mtptCell, assocCell = 0, hac = 0;
      afs_int32 samecell, roname, len;
+     afs_uint32 volid, cellidx;
  
!     cpos = afs_strchr(data, ':');	/* if cell name present */
      if (cpos) {
  	volnamep = cpos + 1;
  	*cpos = 0;
! 	tcell = afs_GetCellByName(data, READ_LOCK);
  	*cpos = ':';
+     } else if (cellnum) {
+ 	volnamep = data;
+ 	tcell = afs_GetCell(cellnum, READ_LOCK);
      } else {
! 	return ENODEV;
      }
      if (!tcell)
  	return ENODEV;
  
+     cellidx = tcell->cellIndex;
      mtptCell = tcell->cellNum;	/* The cell for the mountpoint */
      if (tcell->lcellp) {
  	hac = 1;		/* has associated cell */
***************
*** 98,112 ****
      }
      afs_PutCell(tcell, READ_LOCK);
  
      /* Is volume name a "<n>.backup" or "<n>.readonly" name */
      len = strlen(volnamep);
      roname = ((len > 9) && (strcmp(&volnamep[len - 9], ".readonly") == 0))
  	|| ((len > 7) && (strcmp(&volnamep[len - 7], ".backup") == 0));
  
      /* When we cross mountpoint, do we stay in the same cell */
!     samecell = (avc->fid.Cell == mtptCell) || (hac
! 					       && (avc->fid.Cell ==
! 						   assocCell));
  
      /* Decide whether to prefetch the BK, or RO.  Also means we want the BK or
       * RO.
--- 92,138 ----
      }
      afs_PutCell(tcell, READ_LOCK);
  
+     /* Look for an all-numeric volume ID */
+     volid = 0;
+     for (x = volnamep; *x >= '0' && *x <= '9'; x++)
+ 	volid = (volid * 10) + (*x - '0');
+ 
+     /*
+      * If the volume ID was all-numeric, and they didn't ask for a
+      * pointer to the volume structure, then just return the number
+      * as-is.  This is currently only used for handling name lookups
+      * in the dynamic mount directory.
+      */
+     if (!*x && !avolpp) {
+ 	if (acellidxp)
+ 	    *acellidxp = cellidx;
+ 	if (avolnump)
+ 	    *avolnump = volid;
+ 	return 0;
+     }
+ 
+     /*
+      * If the volume ID was all-numeric, and the type was '%', then
+      * assume whoever made the mount point knew what they were doing,
+      * and don't second-guess them by forcing use of a RW volume when
+      * they gave the ID of something else.
+      */
+     if (!*x && type == '%') {
+ 	tfid.Fid.Volume = volid;	/* remember BK volume */
+ 	tfid.Cell = mtptCell;
+ 	tvp = afs_GetVolume(&tfid, areq, WRITE_LOCK);	/* get the new one */
+ 	if (!tvp)
+ 	    return ENODEV;	/* oops, can't do it */
+ 	goto done;
+     }
+ 
      /* Is volume name a "<n>.backup" or "<n>.readonly" name */
      len = strlen(volnamep);
      roname = ((len > 9) && (strcmp(&volnamep[len - 9], ".readonly") == 0))
  	|| ((len > 7) && (strcmp(&volnamep[len - 7], ".backup") == 0));
  
      /* When we cross mountpoint, do we stay in the same cell */
!     samecell = (cellnum == mtptCell) || (hac && (cellnum == assocCell));
  
      /* Decide whether to prefetch the BK, or RO.  Also means we want the BK or
       * RO.
***************
*** 117,125 ****
       *   want to prefetch the RO volume.
       */
      if ((type == '#') && !roname) {
! 	if (afs_bkvolpref && samecell && (avc->states & CBackup))
  	    prefetch = 3;	/* Prefetch the BK */
! 	else if (!samecell || (avc->states & CRO))
  	    prefetch = 2;	/* Prefetch the RO */
  	else
  	    prefetch = 1;	/* Do not prefetch */
--- 143,151 ----
       *   want to prefetch the RO volume.
       */
      if ((type == '#') && !roname) {
! 	if (afs_bkvolpref && samecell && (states & CBackup))
  	    prefetch = 3;	/* Prefetch the BK */
! 	else if (!samecell || (states & CRO))
  	    prefetch = 2;	/* Prefetch the RO */
  	else
  	    prefetch = 1;	/* Do not prefetch */
***************
*** 163,169 ****
  	return ENODEV;		/* Couldn't find the volume */
  
      /* Don't cross mountpoint from a BK to a BK volume */
!     if ((avc->states & CBackup) && (tvp->states & VBackup)) {
  	afs_PutVolume(tvp, WRITE_LOCK);
  	return ENODEV;
      }
--- 189,195 ----
  	return ENODEV;		/* Couldn't find the volume */
  
      /* Don't cross mountpoint from a BK to a BK volume */
!     if ((states & CBackup) && (tvp->states & VBackup)) {
  	afs_PutVolume(tvp, WRITE_LOCK);
  	return ENODEV;
      }
***************
*** 190,200 ****
  	    return ENODEV;	/* oops, can't do it */
      }
  
      if (avc->mvid == 0)
  	avc->mvid =
  	    (struct VenusFid *)osi_AllocSmallSpace(sizeof(struct VenusFid));
!     avc->mvid->Cell = tvp->cell;
!     avc->mvid->Fid.Volume = tvp->volume;
      avc->mvid->Fid.Vnode = 1;
      avc->mvid->Fid.Unique = 1;
      avc->states |= CMValid;
--- 216,259 ----
  	    return ENODEV;	/* oops, can't do it */
      }
  
+ done:
+     if (acellidxp)
+ 	*acellidxp = cellidx;
+     if (avolnump)
+ 	*avolnump = tvp->volume;
+     if (avolpp)
+ 	*avolpp = tvp;
+     else
+ 	afs_PutVolume(tvp, WRITE_LOCK);
+     return 0;
+ }
+ 
+ int
+ EvalMountPoint(register struct vcache *avc, struct vcache *advc,
+ 	       struct volume **avolpp, register struct vrequest *areq)
+ {
+     afs_int32 code;
+ 
+     AFS_STATCNT(EvalMountPoint);
+ #ifdef notdef
+     if (avc->mvid && (avc->states & CMValid))
+ 	return 0;		/* done while racing */
+ #endif
+     *avolpp = NULL;
+     code = afs_HandleLink(avc, areq);
+     if (code)
+ 	return code;
+ 
+     /* Determine which cell and volume the mointpoint goes to */
+     code = EvalMountData(avc->linkData[0], avc->linkData + 1,
+                          avc->states, avc->fid.Cell, avolpp, areq, 0, 0);
+     if (code) return code;
+ 
      if (avc->mvid == 0)
  	avc->mvid =
  	    (struct VenusFid *)osi_AllocSmallSpace(sizeof(struct VenusFid));
!     avc->mvid->Cell = (*avolpp)->cell;
!     avc->mvid->Fid.Volume = (*avolpp)->volume;
      avc->mvid->Fid.Vnode = 1;
      avc->mvid->Fid.Unique = 1;
      avc->states |= CMValid;
***************
*** 214,224 ****
       * cd'ing via a new path to a volume will reset the ".." pointer
       * to the new path.
       */
!     tvp->mtpoint = avc->fid;	/* setup back pointer to mtpoint */
      if (advc)
! 	tvp->dotdot = advc->fid;
  
-     *avolpp = tvp;
      return 0;
  }
  
--- 273,282 ----
       * cd'ing via a new path to a volume will reset the ".." pointer
       * to the new path.
       */
!     (*avolpp)->mtpoint = avc->fid;	/* setup back pointer to mtpoint */
      if (advc)
! 	(*avolpp)->dotdot = advc->fid;
  
      return 0;
  }
  
***************
*** 313,319 ****
          if (code) goto done;
          vnode_ref(AFSTOV(root_vp));
  #endif
! 	if (tvolp) {
  	    /* Is this always kosher?  Perhaps we should instead use
  	     * NBObtainWriteLock to avoid potential deadlock.
  	     */
--- 371,377 ----
          if (code) goto done;
          vnode_ref(AFSTOV(root_vp));
  #endif
! 	if (tvolp && !afs_InReadDir(root_vp)) {
  	    /* Is this always kosher?  Perhaps we should instead use
  	     * NBObtainWriteLock to avoid potential deadlock.
  	     */
***************
*** 420,426 ****
      else {
  	au = afs_GetUser(areq->uid, adp->fid.Cell, 0);
  	if (au->exporter) {
! 	    error = EXP_SYSNAME(au->exporter, (char *)0, sysnamelist, num);
  	    if (error) {
  		strcpy(bufp, "@sys");
  		afs_PutUser(au, 0);
--- 478,484 ----
      else {
  	au = afs_GetUser(areq->uid, adp->fid.Cell, 0);
  	if (au->exporter) {
! 	    error = EXP_SYSNAME(au->exporter, (char *)0, sysnamelist, num, 0);
  	    if (error) {
  		strcpy(bufp, "@sys");
  		afs_PutUser(au, 0);
***************
*** 444,450 ****
  
      if (AFS_EQ_ATSYS(aname)) {
  	state->offset = 0;
! 	state->name = (char *)osi_AllocLargeSpace(AFS_SMALLOCSIZ);
  	state->allocked = 1;
  	state->index =
  	    afs_getsysname(areq, avc, state->name, &num, sysnamelist);
--- 502,508 ----
  
      if (AFS_EQ_ATSYS(aname)) {
  	state->offset = 0;
! 	state->name = (char *)osi_AllocLargeSpace(MAXSYSNAME);
  	state->allocked = 1;
  	state->index =
  	    afs_getsysname(areq, avc, state->name, &num, sysnamelist);
***************
*** 497,504 ****
  	    au = afs_GetUser(areq->uid, avc->fid.Cell, 0);
  	    if (au->exporter) {
  		error =
! 		    EXP_SYSNAME(au->exporter, (char *)0, sysnamelist, num);
  		if (error) {
  		    return 0;
  		}
  	    }
--- 555,563 ----
  	    au = afs_GetUser(areq->uid, avc->fid.Cell, 0);
  	    if (au->exporter) {
  		error =
! 		    EXP_SYSNAME(au->exporter, (char *)0, sysnamelist, &num, 0);
  		if (error) {
+ 		    afs_PutUser(au, 0);
  		    return 0;
  		}
  	    }
***************
*** 1170,1176 ****
      *avcp = NULL;		/* Since some callers don't initialize it */
      bulkcode = 0;
  
!     if (!(adp->states & CStatd)) {
  	if ((code = afs_VerifyVCache2(adp, &treq))) {
  	    goto done;
  	}
--- 1229,1235 ----
      *avcp = NULL;		/* Since some callers don't initialize it */
      bulkcode = 0;
  
!     if (!(adp->states & CStatd) && !afs_InReadDir(adp)) {
  	if ((code = afs_VerifyVCache2(adp, &treq))) {
  	    goto done;
  	}
***************
*** 1182,1188 ****
  	/* looking up ".." in root via special hacks */
  	if (adp->mvid == (struct VenusFid *)0 || adp->mvid->Fid.Volume == 0) {
  #ifdef	AFS_OSF_ENV
- 	    extern struct vcache *afs_globalVp;
  	    if (adp == afs_globalVp) {
  		struct vnode *rvp = AFSTOV(adp);
  /*
--- 1241,1246 ----
***************
*** 1249,1254 ****
--- 1307,1369 ----
  	goto done;
      }
  
+     /*
+      * Special case lookup of ".." in the dynamic mount directory.
+      * The parent of this directory is _always_ the AFS root volume.
+      */
+     if (afs_IsDynrootMount(adp) &&
+ 	aname[0] == '.' && aname[1] == '.' && !aname[2]) {
+ 
+ 	ObtainReadLock(&afs_xvcache);
+ 	osi_vnhold(afs_globalVp, 0);
+ 	ReleaseReadLock(&afs_xvcache);
+ #ifdef AFS_DARWIN80_ENV
+         vnode_get(AFSTOV(afs_globalVp));
+ #endif
+ 	code = 0;
+ 	*avcp = tvc = afs_globalVp;
+ 	hit = 1;
+ 	goto done;
+     }
+ 
+     /*
+      * Special case lookups in the dynamic mount directory.
+      * The names here take the form cell:volume, similar to a mount point.
+      * EvalMountData parses that and returns a cell and volume ID, which
+      * we use to construct the appropriate dynroot Fid.
+      */
+     if (afs_IsDynrootMount(adp)) {
+ 	struct VenusFid tfid;
+ 	afs_uint32 cellidx, volid;
+ 
+ 	code = EvalMountData('%', aname, 0, 0, NULL, &treq, &cellidx, &volid);
+ 	if (code)
+ 	    goto done;
+ 	afs_GetDynrootMountFid(&tfid);
+ 	tfid.Fid.Vnode = VNUM_FROM_TYPEID(VN_TYPE_MOUNT, cellidx << 2);
+ 	tfid.Fid.Unique = volid;
+ 	*avcp = tvc = afs_GetVCache(&tfid, &treq, NULL, NULL);
+ 	hit = 1;
+ 	goto done;
+     }
+ 
+ #ifdef AFS_LINUX26_ENV
+     /*
+      * Special case of the dynamic mount volume in a static root.
+      * This is really unfortunate, but we need this for the translator.
+      */
+     if (adp == afs_globalVp && !afs_GetDynrootEnable() &&
+ 	!strcmp(aname, AFS_DYNROOT_MOUNTNAME)) {
+ 	struct VenusFid tfid;
+ 
+ 	afs_GetDynrootMountFid(&tfid);
+ 	*avcp = tvc = afs_GetVCache(&tfid, &treq, NULL, NULL);
+ 	code = 0;
+ 	hit = 1;
+ 	goto done;
+     }
+ #endif
+ 
      Check_AtSys(adp, aname, &sysState, &treq);
      tname = sysState.name;
  
***************
*** 1291,1298 ****
  	struct VenusFid tfid;
  
  	/* now we have to lookup the next fid */
! 	tdc =
! 	    afs_GetDCache(adp, (afs_size_t) 0, &treq, &dirOffset, &dirLen, 1);
  	if (!tdc) {
  	    *avcp = NULL;	/* redundant, but harmless */
  	    code = EIO;
--- 1406,1416 ----
  	struct VenusFid tfid;
  
  	/* now we have to lookup the next fid */
! 	if (afs_InReadDir(adp))
! 	    tdc = adp->dcreaddir;
! 	else
! 	    tdc = afs_GetDCache(adp, (afs_size_t) 0, &treq,
! 				&dirOffset, &dirLen, 1);
  	if (!tdc) {
  	    *avcp = NULL;	/* redundant, but harmless */
  	    code = EIO;
***************
*** 1309,1332 ****
  	 * cases we need to worry about:
  	 * 1. The cache data is being fetched by another process.
  	 * 2. The cache data is no longer valid
  	 */
! 	while ((adp->states & CStatd)
! 	       && (tdc->dflags & DFFetching)
! 	       && hsame(adp->m.DataVersion, tdc->f.versionNo)) {
! 	    ReleaseReadLock(&tdc->lock);
! 	    ReleaseReadLock(&adp->lock);
! 	    afs_osi_Sleep(&tdc->validPos);
! 	    ObtainReadLock(&adp->lock);
! 	    ObtainReadLock(&tdc->lock);
! 	}
! 	if (!(adp->states & CStatd)
! 	    || !hsame(adp->m.DataVersion, tdc->f.versionNo)) {
! 	    ReleaseReadLock(&tdc->lock);
! 	    ReleaseReadLock(&adp->lock);
! 	    afs_PutDCache(tdc);
! 	    if (tname && tname != aname)
! 		osi_FreeLargeSpace(tname);
! 	    goto redo;
  	}
  
  	/* Save the version number for when we call osi_dnlc_enter */
--- 1427,1456 ----
  	 * cases we need to worry about:
  	 * 1. The cache data is being fetched by another process.
  	 * 2. The cache data is no longer valid
+ 	 *
+ 	 * If a readdir is in progress _in this thread_, it has a shared
+ 	 * lock on the vcache and has obtained current data, so we just
+ 	 * use that.  This eliminates several possible deadlocks.  
  	 */
! 	if (!afs_InReadDir(adp)) {
! 	    while ((adp->states & CStatd)
! 		   && (tdc->dflags & DFFetching)
! 		   && hsame(adp->m.DataVersion, tdc->f.versionNo)) {
! 		ReleaseReadLock(&tdc->lock);
! 		ReleaseReadLock(&adp->lock);
! 		afs_osi_Sleep(&tdc->validPos);
! 		ObtainReadLock(&adp->lock);
! 		ObtainReadLock(&tdc->lock);
! 	    }
! 	    if (!(adp->states & CStatd)
! 		|| !hsame(adp->m.DataVersion, tdc->f.versionNo)) {
! 		ReleaseReadLock(&tdc->lock);
! 		ReleaseReadLock(&adp->lock);
! 		afs_PutDCache(tdc);
! 		if (tname && tname != aname)
! 		    osi_FreeLargeSpace(tname);
! 		goto redo;
! 	    }
  	}
  
  	/* Save the version number for when we call osi_dnlc_enter */
***************
*** 1357,1363 ****
  	tname = sysState.name;
  
  	ReleaseReadLock(&tdc->lock);
! 	afs_PutDCache(tdc);
  
  	if (code == ENOENT && afs_IsDynroot(adp) && dynrootRetry) {
  	    ReleaseReadLock(&adp->lock);
--- 1481,1488 ----
  	tname = sysState.name;
  
  	ReleaseReadLock(&tdc->lock);
! 	if (!afs_InReadDir(adp))
! 	    afs_PutDCache(tdc);
  
  	if (code == ENOENT && afs_IsDynroot(adp) && dynrootRetry) {
  	    ReleaseReadLock(&adp->lock);
***************
*** 1391,1397 ****
  	 * dirCookie tells us where to start prefetching from.
  	 */
  	if (AFSDOBULK && adp->opens > 0 && !(adp->states & CForeign)
! 	    && !afs_IsDynroot(adp)) {
  	    afs_int32 retry;
  	    /* if the entry is not in the cache, or is in the cache,
  	     * but hasn't been statd, then do a bulk stat operation.
--- 1516,1522 ----
  	 * dirCookie tells us where to start prefetching from.
  	 */
  	if (AFSDOBULK && adp->opens > 0 && !(adp->states & CForeign)
! 	    && !afs_IsDynroot(adp) && !afs_InReadDir(adp)) {
  	    afs_int32 retry;
  	    /* if the entry is not in the cache, or is in the cache,
  	     * but hasn't been statd, then do a bulk stat operation.
Index: openafs/src/afs/VNOPS/afs_vnop_remove.c
diff -c openafs/src/afs/VNOPS/afs_vnop_remove.c:1.52 openafs/src/afs/VNOPS/afs_vnop_remove.c:1.52.2.3
*** openafs/src/afs/VNOPS/afs_vnop_remove.c:1.52	Mon Mar 13 14:18:07 2006
--- openafs/src/afs/VNOPS/afs_vnop_remove.c	Mon Jul 31 17:27:40 2006
***************
*** 21,27 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.52 2006/03/13 19:18:07 rees 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.3 2006/07/31 21:27:40 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 263,268 ****
--- 263,271 ----
  #endif
  	return code;
      }
+     if (afs_IsDynrootMount(adp)) {
+ 	return ENOENT;
+     }
  
      if (strlen(aname) > AFSNAMEMAX) {
  	afs_PutFakeStat(&fakestate);
Index: openafs/src/afs/VNOPS/afs_vnop_symlink.c
diff -c openafs/src/afs/VNOPS/afs_vnop_symlink.c:1.24 openafs/src/afs/VNOPS/afs_vnop_symlink.c:1.24.4.3
*** openafs/src/afs/VNOPS/afs_vnop_symlink.c:1.24	Fri Oct 14 22:32:09 2005
--- openafs/src/afs/VNOPS/afs_vnop_symlink.c	Mon Jul 31 17:27:40 2006
***************
*** 22,28 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_symlink.c,v 1.24 2005/10/15 02:32:09 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.3 2006/07/31 21:27:40 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 89,94 ****
--- 89,98 ----
  	code = afs_DynrootVOPSymlink(adp, acred, aname, atargetName);
  	goto done;
      }
+     if (afs_IsDynrootMount(adp)) {
+ 	code = EROFS;
+ 	goto done;
+     }
  
      code = afs_VerifyVCache(adp, &treq);
      if (code) {
Index: openafs/src/aklog/aklog.1
diff -c openafs/src/aklog/aklog.1:1.1 openafs/src/aklog/aklog.1:removed
*** openafs/src/aklog/aklog.1:1.1	Fri Nov 19 15:01:29 2004
--- openafs/src/aklog/aklog.1	Thu Aug  3 00:43:31 2006
***************
*** 1,189 ****
- .\" 
- .\" $Id: aklog.1,v 1.1 2004/11/19 20:01:29 kenh Exp $
- .\"
- .\" Copyright 1990,1991 by the Massachusetts Institute of Technology
- .\" For distribution and copying rights, see the file "mit-copyright.h"
- .\"
- .TH AKLOG 1 "August 1, 1990"
- .UC 4
- .SH NAME
- aklog \- Obtain tokens for authentication to AFS
- 
- .SH SYNOPSIS
- .B aklog 
- [ 
- .B \-d 
- ] [ 
- .B \-hosts
- ] [ 
- .B \-zsubs 
- ] [ 
- .B \-noprdb 
- ] [ [
- .B \-cell | \-c 
- ] cell [
- .B \-k 
- kerberos-realm
- ] ] [ [ 
- .B \-path | \-p 
- ] pathname ]
- 
- .SH DESCRIPTION
- The 
- .I aklog
- program is used to authenticate to a cell or directory in 
- .I AFS,
- the Andrew Filesystem, by obtaining AFS 
- .I tokens.  
- Ordinarily, aklog is not used directly but called by
- .IR attach (1).
- 
- If 
- .I aklog
- is invoked with no command line arguments, it will obtain tokens 
- for the workstation's local cell.  It is possible to invoke
- .I aklog
- with arbitrarily many cells and pathnames
- specified on the command line.  
- .I aklog 
- knows how to expand cell name abbreviations, so short
- forms of cell names can be use used.  In addition, 
- .I aklog
- understands the following command line options:
- 
- .TP 4 
- .B  \-cell | \-c \fRcell
- This flag is not ordinarily necessary since 
- .I aklog
- can usually figure out when an argument is a cell.  It can be
- used to introduce a cell name that would ordinarily be mistaken
- for a path name if this should be required.  If this flag is
- omitted, an argument will be treated as a cell name if it
- contains no slashes (/) and is neither "." nor ".." .
- 
- .TP
- .B \-k \fRkerberos-realm
- This flag is valid only when immediately following the name of a
- cell.  It is used to tell 
- .I aklog
- what kerberos realm should be used while authenticating to the
- preceding cell.  This argument is unnecessary except when the
- workstation is not properly configured.  Ordinarily, 
- .I aklog
- can determine this information on its own.
- 
- .TP
- .B \-path | \-p \fRpathname
- Like the \-cell flag, this flag is usually unnecessary.  When it
- appears, the next command line argument is always treated as a
- path name.  Ordinarily, an argument is treated as a path name
- if it is "." or ".." or if it contains a slash (/).  
- 
- .TP
- .B \-hosts
- Prints all the server addresses which may act as a single point of
- failure in accessing the specified directory path.  Each element of the
- path is examined, and as new volumes are traversed, if they are not
- replicated, the server's IP address containing the volume will be
- displayed.
- .IR Attach (1)
- invokes 
- .I aklog
- with this option.  The output is of the form
- 
- host: 
- .I IP address
- 
- .TP
- .B \-zsubs
- Causes the printing of the zephyr subscription information that a
- person using a given path or cell would want.  
- .IR Attach (1)
- invokes 
- .I aklog
- with this option.  The output is of the form
- 
- zsub: 
- .I instance
- 
- where 
- .I instance
- is the instance of a class filsrv zephyr subscription.
- 
- .TP
- .B \-noprdb
- Ordinarily, aklog looks up the AFS ID corresponding to the name
- of the person invoking the command.  Specifying this flag turns
- off this functionality.  This may be desirable if the protection
- database is unavailable for some reason and tokens are desired
- anyway.  
- 
- .TP
- .B \-d
- Turns on printing of debugging information.  This option is not
- intended for general users.
- 
- .SH EXIT CODES
- The exit status of
- .I aklog
- will be one of the following:
- .TP 5
- 0
- Success -- No error occurred.
- .TP 5
- 1
- Usage -- Bad command syntax; accompanied by a usage message.
- .TP 5
- 2
- Something failed -- More than one cell or pathname was given on
- the command line and at least one failure occurred.
- A more specific error status is returned when only one directive
- is given.
- .TP 5
- 3
- AFS -- Unable to get AFS configuration or unable to get
- information about a specific cell.
- .TP 5
- 4
- Kerberos -- Unable to get tickets for authentication.
- .TP 5
- 5
- Token -- Unable to get tokens.
- .TP 5
- 6
- Bad pathname -- The path given was not a directory or 
- .I lstat(2)
- failed on some component of the pathname.
- .TP 5
- 7
- Miscellaneous -- An internal failure occurred.  For example, 
- .I aklog
- returns this if it runs out of memory.
- 
- .SH EXAMPLES
- .br
- To get tokens for the local cell:
- .br
- % aklog
- 
- To get tokens for the athena.mit.edu cell:
- .br
- % aklog athena.mit.edu
- .br
- or
- .br
- % aklog athena
- 
- To get tokens adequate to read /afs/athena.mit.edu/user/p/potato:
- .br
- % aklog /afs/athena.mit.edu/user/p/potato
- 
- To get tokens for a test cell that is in a test Kerberos realm:
- .br
- % aklog testcell.mit.edu -k TESTREALM.MIT.EDU
- 
- .SH SEE ALSO
- attach(1), tokens(1), unlog(1)
- 
- .SH AUTHOR
- Emanuel Jay Berkenbilt (MIT-Project Athena)
--- 0 ----
Index: openafs/src/aklog/aklog_main.c
diff -c openafs/src/aklog/aklog_main.c:1.12 openafs/src/aklog/aklog_main.c:1.12.2.1
*** openafs/src/aklog/aklog_main.c:1.12	Fri Feb 17 12:58:21 2006
--- openafs/src/aklog/aklog_main.c	Wed Aug  2 15:55:56 2006
***************
*** 1,5 ****
  /* 
!  * $Id: aklog_main.c,v 1.12 2006/02/17 17:58:21 rees Exp $
   *
   * Copyright 1990,1991 by the Massachusetts Institute of Technology
   * For distribution and copying rights, see the file "mit-copyright.h"
--- 1,5 ----
  /* 
!  * $Id: aklog_main.c,v 1.12.2.1 2006/08/02 19:55:56 shadow Exp $
   *
   * Copyright 1990,1991 by the Massachusetts Institute of Technology
   * For distribution and copying rights, see the file "mit-copyright.h"
***************
*** 7,13 ****
  
  #if !defined(lint) && !defined(SABER)
  static char *rcsid =
! 	"$Id: aklog_main.c,v 1.12 2006/02/17 17:58:21 rees Exp $";
  #endif /* lint || SABER */
  
  #include <afsconfig.h>
--- 7,13 ----
  
  #if !defined(lint) && !defined(SABER)
  static char *rcsid =
! 	"$Id: aklog_main.c,v 1.12.2.1 2006/08/02 19:55:56 shadow Exp $";
  #endif /* lint || SABER */
  
  #include <afsconfig.h>
***************
*** 60,76 ****
  /* #include <krb.h> */
  #endif /* 0 */
  
  #include <krb5.h>
  
  #ifdef WINDOWS
  
- #include <afs/stds.h>
  #include <afs/auth.h>
  #include <rx/rxkad.h>
  #include <afs/dirpath.h>
  
  #else /* !WINDOWS */
- #include <afs/stds.h>
  #ifndef HAVE_KERBEROSV_HEIM_ERR_H
  #include <afs/com_err.h>
  #endif
--- 60,75 ----
  /* #include <krb.h> */
  #endif /* 0 */
  
+ #include <afs/stds.h>
  #include <krb5.h>
  
  #ifdef WINDOWS
  
  #include <afs/auth.h>
  #include <rx/rxkad.h>
  #include <afs/dirpath.h>
  
  #else /* !WINDOWS */
  #ifndef HAVE_KERBEROSV_HEIM_ERR_H
  #include <afs/com_err.h>
  #endif
Index: openafs/src/aklog/asetkey.c
diff -c openafs/src/aklog/asetkey.c:1.4 openafs/src/aklog/asetkey.c:1.4.4.1
*** openafs/src/aklog/asetkey.c:1.4	Fri Feb 17 12:58:21 2006
--- openafs/src/aklog/asetkey.c	Wed Aug  2 15:55:56 2006
***************
*** 1,5 ****
  /*
!  * $Id: asetkey.c,v 1.4 2006/02/17 17:58:21 rees Exp $
   *
   * asetkey - Manipulates an AFS KeyFile
   *
--- 1,5 ----
  /*
!  * $Id: asetkey.c,v 1.4.4.1 2006/08/02 19:55:56 shadow Exp $
   *
   * asetkey - Manipulates an AFS KeyFile
   *
***************
*** 22,30 ****
  #endif /* HAVE_STRINGS_H */
  #endif /* HAVE_STRING_H */
  
  #include <krb5.h>
  
- #include <afs/stds.h>
  #include <afs/com_err.h>
  #include <afs/cellconfig.h>
  #include <afs/keys.h>
--- 22,30 ----
  #endif /* HAVE_STRINGS_H */
  #endif /* HAVE_STRING_H */
  
+ #include <afs/stds.h>
  #include <krb5.h>
  
  #include <afs/com_err.h>
  #include <afs/cellconfig.h>
  #include <afs/keys.h>
Index: openafs/src/audit/audit.c
diff -c openafs/src/audit/audit.c:1.20 openafs/src/audit/audit.c:1.20.2.1
*** openafs/src/audit/audit.c:1.20	Wed Feb  1 11:09:01 2006
--- openafs/src/audit/audit.c	Mon Jul 31 14:16:06 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/audit/audit.c,v 1.20 2006/02/01 16:09:01 shadow Exp $");
  
  #include <fcntl.h>
  #include <stdarg.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/audit/audit.c,v 1.20.2.1 2006/07/31 18:16:06 shadow Exp $");
  
  #include <fcntl.h>
  #include <stdarg.h>
***************
*** 37,42 ****
--- 37,52 ----
  #endif
  #include <afs/afsutil.h>
  
+ /* C99 requires va_copy.  Older versions of GCC provide __va_copy.  Per t
+    Autoconf manual, memcpy is a generally portable fallback. */          
+ #ifndef va_copy              
+ # ifdef __va_copy
+ #  define va_copy(d, s)         __va_copy((d), (s))             
+ # else
+ #  define va_copy(d, s)         memcpy(&(d), &(s), sizeof(va_list)) 
+ # endif
+ #endif      
+ 
  char *bufferPtr;
  int bufferLen;
  int osi_audit_all = (-1);	/* Not determined yet */
***************
*** 88,95 ****
  	    bufferPtr += sizeof(vaLong);
  	    break;
  	case AUD_LST:		/* Ptr to another list */
! 	    vaLst = va_arg(vaList, va_list);
  	    audmakebuf(audEvent, vaLst);
  	    break;
  	case AUD_FID:		/* AFSFid - contains 3 entries */
  	    vaFid = (struct AFSFid *)va_arg(vaList, struct AFSFid *);
--- 98,106 ----
  	    bufferPtr += sizeof(vaLong);
  	    break;
  	case AUD_LST:		/* Ptr to another list */
! 	    va_copy(vaLst, vaList);
  	    audmakebuf(audEvent, vaLst);
+ 	    va_end(vaLst);
  	    break;
  	case AUD_FID:		/* AFSFid - contains 3 entries */
  	    vaFid = (struct AFSFid *)va_arg(vaList, struct AFSFid *);
***************
*** 213,220 ****
  	    fprintf(out, "LONG %d ", vaLong);
  	    break;
  	case AUD_LST:		/* Ptr to another list */
! 	    vaLst = va_arg(vaList, va_list);
  	    printbuf(out, 1, "VALST", 0, vaLst);
  	    break;
  	case AUD_FID:		/* AFSFid - contains 3 entries */
  	    vaFid = va_arg(vaList, struct AFSFid *);
--- 224,232 ----
  	    fprintf(out, "LONG %d ", vaLong);
  	    break;
  	case AUD_LST:		/* Ptr to another list */
! 	    va_copy(vaLst, vaList);
  	    printbuf(out, 1, "VALST", 0, vaLst);
+ 	    va_end(vaLst);
  	    break;
  	case AUD_FID:		/* AFSFid - contains 3 entries */
  	    vaFid = va_arg(vaList, struct AFSFid *);
Index: openafs/src/auth/Makefile.in
diff -c openafs/src/auth/Makefile.in:1.14 openafs/src/auth/Makefile.in:1.14.2.1
*** openafs/src/auth/Makefile.in:1.14	Fri Mar 17 14:54:32 2006
--- openafs/src/auth/Makefile.in	Thu Jul 13 13:23:27 2006
***************
*** 22,30 ****
  UKSRCS=${KSRCS} cellconfig.h acfg_errors.c keys.h cellconfig.c \
         ktc.c authcon.c ktc_errors.c
  
! all: ${TOP_LIBDIR}/libauth.a ${TOP_LIBDIR}/libauth.krb.a depinstall copyauth setkey
! 
! depinstall: ${TOP_INCDIR}/afs/keys.h ${TOP_INCDIR}/afs/cellconfig.h ${TOP_INCDIR}/afs/auth.h
  
  cellconfig.o: cellconfig.c ${INCLS}
  ktc.o: ktc.c ${INCLS} ${TOP_INCDIR}/afs/vice.h
--- 22,39 ----
  UKSRCS=${KSRCS} cellconfig.h acfg_errors.c keys.h cellconfig.c \
         ktc.c authcon.c ktc_errors.c
  
! all: \
! 	${TOP_LIBDIR}/libauth.a \
! 	${TOP_LIBDIR}/libauth.krb.a \
! 	depinstall \
! 	copyauth \
! 	setkey
! 
! depinstall: \
! 	${TOP_INCDIR}/afs/keys.h \
! 	${TOP_INCDIR}/afs/cellconfig.h \
! 	${TOP_INCDIR}/afs/auth.h \
! 	${TOP_INCDIR}/afs/ktc.h
  
  cellconfig.o: cellconfig.c ${INCLS}
  ktc.o: ktc.c ${INCLS} ${TOP_INCDIR}/afs/vice.h
***************
*** 69,93 ****
  #
  # Install targets
  #
! install:   ${DESTDIR}${libdir}/afs/libauth.a ${DESTDIR}${libdir}/afs/libauth.krb.a ${DESTDIR}${includedir}/afs/keys.h ${DESTDIR}${includedir}/afs/cellconfig.h ${DESTDIR}${includedir}/afs/auth.h ${DESTDIR}${sbindir}/copyauth 
! 
! ${DEST}/lib/afs/libauth.a: libauth.a
! 	${INSTALL} $? $@
! 
! ${DEST}/lib/afs/libauth.krb.a: libauth.krb.a
! 	${INSTALL} $? $@
! 
! ${DEST}/etc/copyauth: copyauth
! 	${INSTALL} $? $@
! 
! ${DEST}/include/afs/keys.h: keys.h
! 	${INSTALL} $? $@
! 
! ${DEST}/include/afs/cellconfig.h: cellconfig.h
! 	${INSTALL} $? $@
! 
! ${DEST}/include/afs/auth.h: auth.h
! 	${INSTALL} $? $@
  
  #
  # Misc. targets
--- 78,91 ----
  #
  # Install targets
  #
! install: \
! 	${DESTDIR}${libdir}/afs/libauth.a \
! 	${DESTDIR}${libdir}/afs/libauth.krb.a \
! 	${DESTDIR}${includedir}/afs/keys.h \
! 	${DESTDIR}${includedir}/afs/cellconfig.h \
! 	${DESTDIR}${includedir}/afs/auth.h \
! 	${DESTDIR}${includedir}/afs/ktc.h \
! 	${DESTDIR}${sbindir}/copyauth 
  
  #
  # Misc. targets
***************
*** 100,137 ****
  	AFS_component_version_number.c
  
  include ../config/Makefile.version
  ${DESTDIR}${libdir}/afs/libauth.a: libauth.a
  	${INSTALL} $? $@
  
  ${TOP_LIBDIR}/libauth.a: libauth.a
  	${INSTALL} $? $@
  
  ${DESTDIR}${libdir}/afs/libauth.krb.a: libauth.krb.a
  	${INSTALL} $? $@
  
  ${TOP_LIBDIR}/libauth.krb.a: libauth.krb.a
  	${INSTALL} $? $@
  
  ${DESTDIR}${includedir}/afs/keys.h: keys.h
  	${INSTALL} $? $@
  
  ${TOP_INCDIR}/afs/keys.h: keys.h
  	${INSTALL} $? $@
  
  ${DESTDIR}${includedir}/afs/cellconfig.h: cellconfig.h
  	${INSTALL} $? $@
  
  ${TOP_INCDIR}/afs/cellconfig.h: cellconfig.h
  	${INSTALL} $? $@
  
  ${DESTDIR}${includedir}/afs/auth.h: auth.h
  	${INSTALL} $? $@
  
  ${TOP_INCDIR}/afs/auth.h: auth.h
  	${INSTALL} $? $@
  
  ${DESTDIR}${sbindir}/copyauth: copyauth
  	${INSTALL} $? $@
  
! dest:   ${DEST}/lib/afs/libauth.a ${DEST}/lib/afs/libauth.krb.a ${DEST}/include/afs/keys.h ${DEST}/include/afs/cellconfig.h ${DEST}/include/afs/auth.h ${DEST}/etc/copyauth 
  
--- 98,170 ----
  	AFS_component_version_number.c
  
  include ../config/Makefile.version
+ 
+ 
  ${DESTDIR}${libdir}/afs/libauth.a: libauth.a
  	${INSTALL} $? $@
  
  ${TOP_LIBDIR}/libauth.a: libauth.a
  	${INSTALL} $? $@
  
+ ${DEST}/lib/afs/libauth.a: libauth.a
+ 	${INSTALL} $? $@
+ 
  ${DESTDIR}${libdir}/afs/libauth.krb.a: libauth.krb.a
  	${INSTALL} $? $@
  
  ${TOP_LIBDIR}/libauth.krb.a: libauth.krb.a
  	${INSTALL} $? $@
  
+ ${DEST}/lib/afs/libauth.krb.a: libauth.krb.a
+ 	${INSTALL} $? $@
+ 
  ${DESTDIR}${includedir}/afs/keys.h: keys.h
  	${INSTALL} $? $@
  
  ${TOP_INCDIR}/afs/keys.h: keys.h
  	${INSTALL} $? $@
  
+ ${DEST}/include/afs/keys.h: keys.h
+ 	${INSTALL} $? $@
+ 
  ${DESTDIR}${includedir}/afs/cellconfig.h: cellconfig.h
  	${INSTALL} $? $@
  
  ${TOP_INCDIR}/afs/cellconfig.h: cellconfig.h
  	${INSTALL} $? $@
  
+ ${DEST}/include/afs/cellconfig.h: cellconfig.h
+ 	${INSTALL} $? $@
+ 
  ${DESTDIR}${includedir}/afs/auth.h: auth.h
  	${INSTALL} $? $@
  
  ${TOP_INCDIR}/afs/auth.h: auth.h
  	${INSTALL} $? $@
  
+ ${DEST}/include/afs/auth.h: auth.h
+ 	${INSTALL} $? $@
+ 
+ ${DESTDIR}${includedir}/afs/ktc.h: ktc.h
+ 	${INSTALL} $? $@
+ 
+ ${TOP_INCDIR}/afs/ktc.h: ktc.h
+ 	${INSTALL} $? $@
+ 
+ ${DEST}/include/afs/ktc.h: ktc.h
+ 	${INSTALL} $? $@
+ 
  ${DESTDIR}${sbindir}/copyauth: copyauth
  	${INSTALL} $? $@
  
! ${DEST}/etc/copyauth: copyauth
! 	${INSTALL} $? $@
  
+ dest: \
+ 	${DEST}/lib/afs/libauth.a \
+ 	${DEST}/lib/afs/libauth.krb.a \
+ 	${DEST}/include/afs/keys.h \
+ 	${DEST}/include/afs/cellconfig.h \
+ 	${DEST}/include/afs/auth.h \
+ 	${DEST}/include/afs/ktc.h \
+ 	${DEST}/etc/copyauth 
Index: openafs/src/auth/ktc.c
diff -c openafs/src/auth/ktc.c:1.16 openafs/src/auth/ktc.c:1.16.8.3
*** openafs/src/auth/ktc.c:1.16	Wed Aug 18 21:07:40 2004
--- openafs/src/auth/ktc.c	Wed Jul 19 17:17:17 2006
***************
*** 17,23 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/auth/ktc.c,v 1.16 2004/08/19 01:07:40 kolya Exp $");
  
  #if defined(UKERNEL)
  #include "afs/sysincludes.h"
--- 17,23 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/auth/ktc.c,v 1.16.8.3 2006/07/19 21:17:17 shadow Exp $");
  
  #if defined(UKERNEL)
  #include "afs/sysincludes.h"
***************
*** 71,77 ****
  
  /* For malloc() */
  #include <stdlib.h>
! 
  
  #ifdef	notdef
  /* AFS_KERBEROS_ENV is now conditionally defined in the Makefile */
--- 71,77 ----
  
  /* For malloc() */
  #include <stdlib.h>
! #include "ktc.h"
  
  #ifdef	notdef
  /* AFS_KERBEROS_ENV is now conditionally defined in the Makefile */
***************
*** 132,138 ****
  int afs_tf_save_cred(), afs_tf_close(), afs_tf_create();
  int afs_tf_dest_tkt();
  static void ktc_LocalCell();
- char *ktc_tkt_string();
  #endif /* AFS_KERBEROS_ENV */
  
  #ifdef AFS_DUX40_ENV
--- 132,137 ----
***************
*** 1437,1443 ****
  static char krb_ticket_string[4096] = "";
  
  char *
! ktc_tkt_string()
  {
      char *env;
  
--- 1436,1448 ----
  static char krb_ticket_string[4096] = "";
  
  char *
! ktc_tkt_string(void)
! {
!     return ktc_tkt_string_uid(getuid());
! }
! 
! char *
! ktc_tkt_string_uid(afs_uint32 uid)
  {
      char *env;
  
***************
*** 1450,1456 ****
  	} else {
  	    /* 32 bits of signed integer will always fit in 11 characters
  	     * (including the sign), so no need to worry about overflow */
! 	    (void)sprintf(krb_ticket_string, "%s%d", TKT_ROOT, getuid());
  	}
      }
      UNLOCK_GLOBAL_MUTEX;
--- 1455,1461 ----
  	} else {
  	    /* 32 bits of signed integer will always fit in 11 characters
  	     * (including the sign), so no need to worry about overflow */
! 	    (void)sprintf(krb_ticket_string, "%s%d", TKT_ROOT, uid);
  	}
      }
      UNLOCK_GLOBAL_MUTEX;
***************
*** 1469,1476 ****
   */
  
  void
! ktc_set_tkt_string(val)
!      char *val;
  {
  
      LOCK_GLOBAL_MUTEX;
--- 1474,1480 ----
   */
  
  void
! ktc_set_tkt_string(char * val)
  {
  
      LOCK_GLOBAL_MUTEX;
***************
*** 1608,1613 ****
--- 1612,1624 ----
  static afs_uint32
  curpag()
  {
+ #if defined(AFS_AIX51_ENV)
+     afs_int32 pag;
+ 
+     if (kcred_getpag(cred, PAG_AFS, &pag) < 0 || pag == 0)
+         pag = NOPAG;
+     return pag;
+ #else
      gid_t groups[NGROUPS_MAX];
      afs_uint32 g0, g1;
      afs_uint32 h, l, ret;
***************
*** 1631,1636 ****
--- 1642,1648 ----
  	    return -1;
      }
      return -1;
+ #endif
  }
  
  
Index: openafs/src/auth/ktc.h
diff -c /dev/null openafs/src/auth/ktc.h:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/auth/ktc.h	Thu Jul 13 13:41:15 2006
***************
*** 0 ****
--- 1,18 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ #ifndef _AFS_AUTH_KTC_H
+ #define _AFS_AUTH_KTC_H
+ 
+ extern char * ktc_tkt_string(void);
+ extern char * ktc_tkt_string_uid(afs_uint32);
+ extern void ktc_set_tkt_string(char *);
+ 
+ 
+ #endif /* _AFS_AUTH_KTC_H */
Index: openafs/src/bucoord/commands.c
diff -c openafs/src/bucoord/commands.c:1.18 openafs/src/bucoord/commands.c:1.18.2.1
*** openafs/src/bucoord/commands.c:1.18	Tue Apr 11 15:27:03 2006
--- openafs/src/bucoord/commands.c	Mon Jul 31 12:37:19 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/bucoord/commands.c,v 1.18 2006/04/11 19:27:03 shadow Exp $");
  
  #include <afs/stds.h>
  #if defined(AFS_LINUX24_ENV)
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/bucoord/commands.c,v 1.18.2.1 2006/07/31 16:37:19 shadow Exp $");
  
  #include <afs/stds.h>
  #if defined(AFS_LINUX24_ENV)
***************
*** 1243,1249 ****
  		       &destServ, destPartition, fromDate, newExt, oldFlag,
  		       /*parentDump */ 0, /*dumpLevel */ 0,
  		       bc_Restorer, ports, portCount,
! 		       /*dumpSched */ 0, /*append */ 0, dontExecute);
      if (code)
  	com_err(whoami, code, "; Failed to queue restore");
  
--- 1243,1249 ----
  		       &destServ, destPartition, fromDate, newExt, oldFlag,
  		       /*parentDump */ 0, /*dumpLevel */ 0,
  		       bc_Restorer, ports, portCount,
! 		       /*dumpSched */ NULL, /*append */ 0, dontExecute);
      if (code)
  	com_err(whoami, code, "; Failed to queue restore");
  
***************
*** 1406,1412 ****
  		       &destServ, destPartition, fromDate, newExt, oldFlag,
  		       /*parentDump */ 0, /*dumpLevel */ 0,
  		       bc_Restorer, ports, portCount,
! 		       /*dumpSched */ 0, /*append */ 0, dontExecute);
      if (code)
  	com_err(whoami, code, "; Failed to queue restore");
  
--- 1406,1412 ----
  		       &destServ, destPartition, fromDate, newExt, oldFlag,
  		       /*parentDump */ 0, /*dumpLevel */ 0,
  		       bc_Restorer, ports, portCount,
! 		       /*dumpSched */ NULL, /*append */ 0, dontExecute);
      if (code)
  	com_err(whoami, code, "; Failed to queue restore");
  
***************
*** 1564,1574 ****
  
      /* Perform the call to start the restore */
      code = bc_StartDmpRst(bc_globalConfig, "disk", "restore", volsToRestore,
! 			  /*destserver */ 0, /*destpartition */ 0, fromDate,
  			  newExt, oldFlag,
  			  /*parentDump */ 0, /*dumpLevel */ 0,
  			  bc_Restorer, ports, portCount,
! 			  /*dumpSched */ 0, /*append */ 0, dontExecute);
      if (code)
  	com_err(whoami, code, "; Failed to queue restore");
  
--- 1564,1574 ----
  
      /* Perform the call to start the restore */
      code = bc_StartDmpRst(bc_globalConfig, "disk", "restore", volsToRestore,
! 			  /*destserver */ NULL, /*destpartition */ 0, fromDate,
  			  newExt, oldFlag,
  			  /*parentDump */ 0, /*dumpLevel */ 0,
  			  bc_Restorer, ports, portCount,
! 			  /*dumpSched */ NULL, /*append */ 0, dontExecute);
      if (code)
  	com_err(whoami, code, "; Failed to queue restore");
  
***************
*** 1962,1968 ****
  	return (0);
  
      code = bc_StartDmpRst(bc_globalConfig, dumpPath, vsName, volsToDump,
! 			  /*destServer */ 0, /*destPartition */ 0,
  			  /*fromDate */ 0,
  			  /*newExt */ NULL, /*oldFlag */ 0,
  			  parent, level, bc_Dumper, portp, /*portCount */ 1,
--- 1962,1968 ----
  	return (0);
  
      code = bc_StartDmpRst(bc_globalConfig, dumpPath, vsName, volsToDump,
! 			  /*destServer */ NULL, /*destPartition */ 0,
  			  /*fromDate */ 0,
  			  /*newExt */ NULL, /*oldFlag */ 0,
  			  parent, level, bc_Dumper, portp, /*portCount */ 1,
Index: openafs/src/cf/bigendian.m4
diff -c openafs/src/cf/bigendian.m4:1.3 openafs/src/cf/bigendian.m4:1.3.14.1
*** openafs/src/cf/bigendian.m4:1.3	Thu Jun  3 01:13:29 2004
--- openafs/src/cf/bigendian.m4	Wed Aug  2 15:01:22 2006
***************
*** 1,5 ****
  dnl
! dnl $Id: bigendian.m4,v 1.3 2004/06/03 05:13:29 shadow Exp $
  dnl
  
  dnl check if this computer is little or big-endian
--- 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
***************
*** 45,51 ****
    fi
  ])
  if test "$openafs_cv_c_bigendian" = "yes"; then
!   AC_DEFINE(WORDS_BIGENDIAN, 1, [define if target is big endian])dnl
  fi
  if test "$openafs_cv_c_bigendian_compile" = "yes"; then
    AC_DEFINE(ENDIANESS_IN_SYS_PARAM_H, 1, [define if sys/param.h defines the endiness])dnl
--- 45,51 ----
    fi
  ])
  if test "$openafs_cv_c_bigendian" = "yes"; then
!   AC_DEFINE(AUTOCONF_FOUND_BIGENDIAN, 1, [define if target is big endian])dnl
  fi
  if test "$openafs_cv_c_bigendian_compile" = "yes"; then
    AC_DEFINE(ENDIANESS_IN_SYS_PARAM_H, 1, [define if sys/param.h defines the endiness])dnl
Index: openafs/src/config/NTMakefile.amd64_w2k
diff -c openafs/src/config/NTMakefile.amd64_w2k:1.24.2.2 openafs/src/config/NTMakefile.amd64_w2k:1.24.2.4
*** openafs/src/config/NTMakefile.amd64_w2k:1.24.2.2	Wed Jul  5 13:12:50 2006
--- openafs/src/config/NTMakefile.amd64_w2k	Mon Jul 31 11:48:43 2006
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=0003
  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=0500
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/config/NTMakefile.i386_nt40
diff -c openafs/src/config/NTMakefile.i386_nt40:1.84.2.2 openafs/src/config/NTMakefile.i386_nt40:1.84.2.4
*** openafs/src/config/NTMakefile.i386_nt40:1.84.2.2	Wed Jul  5 13:12:50 2006
--- openafs/src/config/NTMakefile.i386_nt40	Mon Jul 31 11:48:43 2006
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=0003
  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=0500
  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.2 openafs/src/config/NTMakefile.i386_w2k:1.23.2.4
*** openafs/src/config/NTMakefile.i386_w2k:1.23.2.2	Wed Jul  5 13:12:50 2006
--- openafs/src/config/NTMakefile.i386_w2k	Mon Jul 31 11:48:44 2006
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=0003
  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=0500
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/config/param.alpha_linux_26.h
diff -c openafs/src/config/param.alpha_linux_26.h:1.3.6.1 openafs/src/config/param.alpha_linux_26.h:1.3.6.4
*** openafs/src/config/param.alpha_linux_26.h:1.3.6.1	Mon Jun 12 12:25:47 2006
--- openafs/src/config/param.alpha_linux_26.h	Mon Jul 31 17:27:40 2006
***************
*** 23,29 ****
  #define AFS_ALPHA_LINUX26_ENV  1
  #define __alpha        1
  #define AFS_LINUX_64BIT_KERNEL 1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 338
--- 23,28 ----
Index: openafs/src/config/param.amd64_linux26.h
diff -c openafs/src/config/param.amd64_linux26.h:1.4.6.1 openafs/src/config/param.amd64_linux26.h:1.4.6.4
*** openafs/src/config/param.amd64_linux26.h:1.4.6.1	Mon Jun 12 12:25:47 2006
--- openafs/src/config/param.amd64_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 20,26 ****
  #define AFS_AMD64_LINUX24_ENV   1
  #define AFS_AMD64_LINUX26_ENV   1
  #define AFS_LINUX_64BIT_KERNEL 1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 183
--- 20,25 ----
Index: openafs/src/config/param.i386_linux26.h
diff -c openafs/src/config/param.i386_linux26.h:1.8.2.1 openafs/src/config/param.i386_linux26.h:1.8.2.4
*** openafs/src/config/param.i386_linux26.h:1.8.2.1	Mon Jun 12 12:25:47 2006
--- openafs/src/config/param.i386_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 19,25 ****
  #define AFS_I386_LINUX22_ENV   1
  #define AFS_I386_LINUX24_ENV   1
  #define AFS_I386_LINUX26_ENV   1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 137
--- 19,24 ----
Index: openafs/src/config/param.i386_umlinux26.h
diff -c openafs/src/config/param.i386_umlinux26.h:1.3.6.1 openafs/src/config/param.i386_umlinux26.h:1.3.6.4
*** openafs/src/config/param.i386_umlinux26.h:1.3.6.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.i386_umlinux26.h	Mon Jul 31 17:27:40 2006
***************
*** 19,25 ****
  #define AFS_I386_LINUX22_ENV   1
  #define AFS_I386_LINUX24_ENV   1
  #define AFS_I386_LINUX26_ENV   1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 137
--- 19,24 ----
Index: openafs/src/config/param.ia64_linux26.h
diff -c openafs/src/config/param.ia64_linux26.h:1.4.6.1 openafs/src/config/param.ia64_linux26.h:1.4.6.4
*** openafs/src/config/param.ia64_linux26.h:1.4.6.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.ia64_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 30,36 ****
  #define AFS_IA64_LINUX24_ENV	1
  #define AFS_IA64_LINUX26_ENV	1
  #define AFS_LINUX_64BIT_KERNEL 1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 1141
--- 30,35 ----
Index: openafs/src/config/param.ppc64_linux26.h
diff -c openafs/src/config/param.ppc64_linux26.h:1.3.6.1 openafs/src/config/param.ppc64_linux26.h:1.3.6.4
*** openafs/src/config/param.ppc64_linux26.h:1.3.6.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.ppc64_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 18,24 ****
  #define AFS_PPC64_LINUX24_ENV  1
  #define AFS_PPC64_LINUX26_ENV        1
  #define AFS_LINUX_64BIT_KERNEL 1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"    /* The name of the filesystem type. */
  #define AFS_SYSCALL 137
--- 18,23 ----
Index: openafs/src/config/param.ppc_linux26.h
diff -c openafs/src/config/param.ppc_linux26.h:1.3.6.1 openafs/src/config/param.ppc_linux26.h:1.3.6.4
*** openafs/src/config/param.ppc_linux26.h:1.3.6.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.ppc_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 19,25 ****
  #define AFS_PPC_LINUX22_ENV    1
  #define AFS_PPC_LINUX24_ENV    1
  #define AFS_PPC_LINUX26_ENV 1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 137
--- 19,24 ----
Index: openafs/src/config/param.s390_linux26.h
diff -c openafs/src/config/param.s390_linux26.h:1.1.6.1 openafs/src/config/param.s390_linux26.h:1.1.6.4
*** openafs/src/config/param.s390_linux26.h:1.1.6.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.s390_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 29,35 ****
  #define AFS_S390_LINUX22_ENV	1
  #define AFS_S390_LINUX24_ENV	1
  #define AFS_S390_LINUX26_ENV	1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 137
--- 29,34 ----
Index: openafs/src/config/param.s390x_linux26.h
diff -c openafs/src/config/param.s390x_linux26.h:1.4.4.1 openafs/src/config/param.s390x_linux26.h:1.4.4.4
*** openafs/src/config/param.s390x_linux26.h:1.4.4.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.s390x_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 32,38 ****
  #define AFS_S390X_LINUX22_ENV	1
  #define AFS_S390X_LINUX24_ENV	1
  #define AFS_S390X_LINUX26_ENV	1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 137
--- 32,37 ----
Index: openafs/src/config/param.sparc64_linux26.h
diff -c openafs/src/config/param.sparc64_linux26.h:1.2.4.1 openafs/src/config/param.sparc64_linux26.h:1.2.4.4
*** openafs/src/config/param.sparc64_linux26.h:1.2.4.1	Mon Jun 12 12:25:48 2006
--- openafs/src/config/param.sparc64_linux26.h	Mon Jul 31 17:27:40 2006
***************
*** 30,36 ****
  #define AFS_SPARC64_LINUX24_ENV	1
  #define AFS_SPARC64_LINUX26_ENV	1
  #define AFS_LINUX_64BIT_KERNEL 1
- #define AFS_NONFSTRANS 1
  
  #define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
  #define AFS_SYSCALL 227
--- 30,35 ----
Index: openafs/src/config/venus.h
diff -c openafs/src/config/venus.h:1.12 openafs/src/config/venus.h:1.12.2.3
*** openafs/src/config/venus.h:1.12	Thu Mar 30 12:13:39 2006
--- openafs/src/config/venus.h	Mon Jul 31 17:27:40 2006
***************
*** 183,186 ****
--- 183,189 ----
  #define VIOC_CBADDR		_CVICEIOCTL(3)	/* push callback addr */
  #define VIOC_DISCON		_CVICEIOCTL(5)	/* set/get discon mode */
  
+ /* OpenAFS-specific 'O' pioctl's */
+ #define VIOC_NFS_NUKE_CREDS	_OVICEIOCTL(1)	/* nuke creds for all PAG's */
+ 
  #endif /* AFS_VENUS_H */
Index: openafs/src/des/crypt.c
diff -c openafs/src/des/crypt.c:1.14 openafs/src/des/crypt.c:1.14.8.1
*** openafs/src/des/crypt.c:1.14	Wed Aug 11 11:45:41 2004
--- openafs/src/des/crypt.c	Tue Jul 25 10:47:41 2006
***************
*** 38,44 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/des/crypt.c,v 1.14 2004/08/11 15:45:41 rees Exp $");
  
  #ifdef AFS_NT40_ENV
  #include <windows.h>
--- 38,44 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/des/crypt.c,v 1.14.8.1 2006/07/25 14:47:41 shadow Exp $");
  
  #ifdef AFS_NT40_ENV
  #include <windows.h>
***************
*** 963,968 ****
--- 963,969 ----
  }
  #endif
  
+ #if 0
  /*
   * "encrypt" routine (for backwards compatibility)
   */
***************
*** 993,998 ****
--- 994,1000 ----
      }
      return (0);
  }
+ #endif
  
  #ifdef CRYPT_DEBUG
  STATIC
Index: openafs/src/fsint/.cvsignore
diff -c openafs/src/fsint/.cvsignore:1.1 openafs/src/fsint/.cvsignore:1.1.26.3
*** openafs/src/fsint/.cvsignore:1.1	Mon Sep 10 16:14:17 2001
--- openafs/src/fsint/.cvsignore	Mon Jul 31 17:27:40 2006
***************
*** 4,9 ****
--- 4,13 ----
  Kvice.cs.c
  Kvice.h
  Kvice.xdr.c
+ Kpagcb.cs.c
+ Kpagcb.ss.c
+ Kpagcb.h
+ Kpagcb.xdr.c
  Makefile
  afscbint.cs.c
  afscbint.h
***************
*** 13,15 ****
--- 17,20 ----
  afsint.h
  afsint.ss.c
  afsint.xdr.c
+ pagcb.h
Index: openafs/src/fsint/Makefile.in
diff -c openafs/src/fsint/Makefile.in:1.9 openafs/src/fsint/Makefile.in:1.9.14.3
*** openafs/src/fsint/Makefile.in:1.9	Tue Jun  1 22:40:10 2004
--- openafs/src/fsint/Makefile.in	Mon Jul 31 17:27:40 2006
***************
*** 16,22 ****
  depinstall: \
  	${TOP_INCDIR}/afs/afsint.h \
  	${TOP_INCDIR}/afs/afscbint.h \
! 	Kcallback.ss.c Kcallback.h Kvice.cs.c Kvice.h Kvice.xdr.c afscbint.h afsint.h 
  
  libafsint.a: ${OBJS} AFS_component_version_number.o
  	-$(RM) -f $@
--- 16,25 ----
  depinstall: \
  	${TOP_INCDIR}/afs/afsint.h \
  	${TOP_INCDIR}/afs/afscbint.h \
! 	${TOP_INCDIR}/afs/pagcb.h \
! 	Kcallback.ss.c Kcallback.h Kvice.cs.c Kvice.h Kvice.xdr.c \
! 	Kpagcb.ss.c Kpagcb.h Kpagcb.cs.c Kpagcb.xdr.c \
!         afscbint.h afsint.h pagcb.h
  
  libafsint.a: ${OBJS} AFS_component_version_number.o
  	-$(RM) -f $@
***************
*** 46,51 ****
--- 49,69 ----
  Kvice.h: common.xg afsint.xg
  	${RXGEN} -x -k -h -o Kvice.h ${srcdir}/afsint.xg
  
+ Kpagcb.cs.c: pagcb.xg Kpagcb.h
+ 	${RXGEN} -x -k -C -o Kpagcb.cs.c ${srcdir}/pagcb.xg
+ 
+ Kpagcb.ss.c: pagcb.xg Kpagcb.h
+ 	${RXGEN} -x -k -S -o Kpagcb.ss.c ${srcdir}/pagcb.xg
+ 
+ Kpagcb.xdr.c: pagcb.xg
+ 	${RXGEN} -x -k -c -o Kpagcb.xdr.c ${srcdir}/pagcb.xg
+ 
+ Kpagcb.h: pagcb.xg
+ 	${RXGEN} -x -k -h -o Kpagcb.h ${srcdir}/pagcb.xg
+ 
+ pagcb.h: pagcb.xg
+ 	${RXGEN} -x -h -o pagcb.h ${srcdir}/pagcb.xg
+ 
  Kcallback.h: common.xg afscbint.xg
  	${RXGEN} -x -k -h -o Kcallback.h ${srcdir}/afscbint.xg
  
***************
*** 85,90 ****
--- 103,111 ----
  ${TOP_INCDIR}/afs/afscbint.h: afscbint.h
  	${INSTALL} $? $@
  
+ ${TOP_INCDIR}/afs/pagcb.h: pagcb.h
+ 	${INSTALL} $? $@
+ 
  install: \
  	${DESTDIR}${libdir}/afs/libafsint.a \
  	${DESTDIR}${includedir}/afs/afsint.h \
***************
*** 119,126 ****
  
  clean:
  	$(RM) -f *.o *.cs.c *.ss.c *.er.c *.a *.xdr.c core \
! 		afsint.h afscbint.h AFS_component_version_number.c   \
! 	Kvice.h Kcallback.h
  
  include ../config/Makefile.version
  
--- 140,147 ----
  
  clean:
  	$(RM) -f *.o *.cs.c *.ss.c *.er.c *.a *.xdr.c core \
! 		afsint.h afscbint.h pagcb.h AFS_component_version_number.c   \
! 	Kvice.h Kcallback.h Kpagcb.h
  
  include ../config/Makefile.version
  
Index: openafs/src/fsint/common.xg
diff -c openafs/src/fsint/common.xg:1.8 openafs/src/fsint/common.xg:1.8.2.2
*** openafs/src/fsint/common.xg:1.8	Thu Mar  9 11:25:52 2006
--- openafs/src/fsint/common.xg	Wed Aug  2 14:21:15 2006
***************
*** 174,184 ****
  typedef afs_uint32 cacheConfig<>;
  
  const AFSCAPABILITIESMAX = 196;
! typedef afs_int32 Capabilities<AFSCAPABILITIESMAX>;
  
  /* Viced Capability Flags */
  const VICED_CAPABILITY_ERRORTRANS	= 0x0001;
  const VICED_CAPABILITY_64BITFILES	= 0x0002;
  
  /* Cache Manager Capability Flags */
  const CLIENT_CAPABILITY_ERRORTRANS	= 0x0001;
--- 174,186 ----
  typedef afs_uint32 cacheConfig<>;
  
  const AFSCAPABILITIESMAX = 196;
! typedef afs_uint32 Capabilities<AFSCAPABILITIESMAX>;
  
  /* Viced Capability Flags */
  const VICED_CAPABILITY_ERRORTRANS	= 0x0001;
  const VICED_CAPABILITY_64BITFILES	= 0x0002;
+ const VICED_CAPABILITY_WRITELOCKACL     = 0x0004;
+ const VICED_CAPABILITY_SANEACLS         = 0x0008;
  
  /* Cache Manager Capability Flags */
  const CLIENT_CAPABILITY_ERRORTRANS	= 0x0001;
Index: openafs/src/fsint/pagcb.xg
diff -c /dev/null openafs/src/fsint/pagcb.xg:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/fsint/pagcb.xg	Mon Jul 31 17:27:40 2006
***************
*** 0 ****
--- 1,58 ----
+ /*
+  * Copyright 2006, 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
+  */
+ 
+ /*
+  * pagcb.xg:
+  *	Definition of the PAG Manager callback RPC interface.
+  */
+ 
+ package PAGCB_
+ prefix S
+ statindex 21
+ %#define PAGCB_SERVICEID 2
+ 
+ const PAGCB_MAXREALMLEN = 256;
+ const PAGCB_MAXTICKETLEN = 12000;
+ const PAGCB_MAXCREDS = 256;
+ const PAGCB_MAXSYSNAMELEN = 128;
+ const PAGCB_MAXSYSNAMES = 16;
+ 
+ struct PAGCB_ClearToken {
+   afs_int32 AuthHandle;
+   char HandShakeKey[8];
+   afs_int32 ViceId;
+   afs_int32 BeginTimestamp;
+   afs_int32 EndTimestamp;
+ };
+ 
+ struct CredInfo {
+   string cellname<PAGCB_MAXREALMLEN>;
+   afs_int32 vid;
+   afs_int32 states;
+   PAGCB_ClearToken ct;
+   opaque st<PAGCB_MAXTICKETLEN>;
+ };
+ 
+ typedef CredInfo CredInfos<PAGCB_MAXCREDS>;
+ 
+ struct SysNameEnt {
+   string sysname<PAGCB_MAXSYSNAMELEN>;
+ };
+ 
+ typedef SysNameEnt SysNameList<PAGCB_MAXSYSNAMES>;
+ 
+ proc GetCreds(
+   IN  afs_int32 uid,
+   OUT CredInfos *creds
+ ) = 1;
+ 
+ proc GetSysName(
+   IN afs_int32 uid,
+   OUT SysNameList *sysnames
+ ) = 2;
Index: openafs/src/libafs/Makefile.common.in
diff -c openafs/src/libafs/Makefile.common.in:1.24.2.1 openafs/src/libafs/Makefile.common.in:1.24.2.4
*** openafs/src/libafs/Makefile.common.in:1.24.2.1	Tue Jun 20 17:40:07 2006
--- openafs/src/libafs/Makefile.common.in	Mon Jul 31 17:27:41 2006
***************
*** 12,17 ****
--- 12,18 ----
  
  TOP_OBJ_FSINT = ${TOP_OBJDIR}/src/fsint
  TOP_OBJ_RXSTAT = ${TOP_OBJDIR}/src/rxstat
+ TOP_OBJ_SYS = ${TOP_OBJDIR}/src/sys
  TOP_OBJ_VLSERVER = ${TOP_OBJDIR}/src/vlserver
  
  TOP_SRC_AFS = ${TOP_SRCDIR}/afs
***************
*** 85,103 ****
--- 86,110 ----
  	afs_dcache.o \
  	afs_dir.o		\
  	afs_dynroot.o		\
+ 	afs_error.o \
+ 	afs_icl.o \
  	afs_init.o \
  	afs_lock.o	\
  	afs_mariner.o \
+ 	afs_md5.o \
  	afs_memcache.o	\
  	afs_osi.o		\
  	afs_osidnlc.o	\
  	afs_osi_alloc.o	\
+ 	afs_osi_gcpags.o	\
  	afs_osi_pag.o \
  	afs_osi_uio.o \
  	afs_osi_vget.o \
+ 	afs_osi_vm.o \
  	afs_segments.o \
  	afs_server.o \
  	afs_stat.o \
+ 	afs_syscall.o \
  	afs_user.o \
  	afs_util.o \
  	afs_vcache.o \
***************
*** 161,166 ****
--- 168,175 ----
  	afs_nfsdisp.o	\
  	afs_call_nfs.o \
  	afs_pioctl_nfs.o \
+ 	Kpagcb.cs.o	\
+ 	Kpagcb.xdr.o	\
  	$(AFS_OS_NFSOBJS)
  
  AFSNONFSOBJS = \
***************
*** 168,173 ****
--- 177,229 ----
  	afs_pioctl.o \
  	$(AFS_OS_NONFSOBJS)
  
+ # init daemons call pioctl
+ AFSPAGOBJS = \
+ 	afs_atomlist.o \
+ 	afs_error.o \
+ 	afs_icl.o \
+ 	afs_lhash.o \
+ 	afs_lock.o	\
+ 	afs_osi.o		\
+ 	afs_osi_alloc.o	\
+ 	afs_osi_gcpags.o	\
+ 	afs_osi_pag.o \
+ 	afs_pag_call.o \
+ 	afs_pag_cred.o \
+ 	afs_pag_user.o \
+ 	afs_stat.o \
+ 	afs_syscall.o \
+ 	afsaux.o		\
+ 	xdr_arrayn.o	\
+ 	xdr_array.o	\
+ 	xdr_int32.o	\
+ 	xdr_int64.o	\
+ 	rx.o		\
+ 	rx_rdwr.o	\
+ 	rx_clock.o	\
+ 	rx_event.o	\
+ 	rx_globals.o	\
+ 	rx_kmutex.o	\
+ 	rx_knet.o	\
+ 	rx_kcommon.o	\
+ 	rx_misc.o	\
+ 	rx_null.o	\
+ 	rx_getaddr.o	\
+ 	rx_packet.o	\
+ 	rx_multi.o	\
+ 	xdr_rx.o	\
+ 	Kpagcb.ss.o	\
+ 	Kpagcb.xdr.o	\
+ 	Krxstat.ss.o	\
+ 	Krxstat.xdr.o	\
+ 	Krmtsys.cs.o	\
+ 	Krmtsys.xdr.o	\
+ 	rxstat.o	\
+ 	AFS_component_version_number.o\
+ 	xdr_afsuuid.o	\
+ 	xdr.o		\
+ 	afs_uuid.o $(AFS_OS_PAGOBJS)
+ 
  
  # Compilation rules
  # These files are to be optimized
***************
*** 191,212 ****
--- 247,276 ----
  	$(CRULE_OPT)
  afs_dynroot.o: 	$(TOP_SRC_AFS)/afs_dynroot.c
  	$(CRULE_OPT)
+ afs_error.o: $(TOP_SRC_AFS)/afs_error.c
+ 	$(CRULE_OPT)
  afs_init.o: $(TOP_SRC_AFS)/afs_init.c
  	$(CRULE_OPT)
  afs_mariner.o: $(TOP_SRC_AFS)/afs_mariner.c
  	$(CRULE_OPT)
+ afs_md5.o: $(TOP_SRC_AFS)/afs_md5.c
+ 	$(CRULE_OPT)
  afs_osidnlc.o: $(TOP_SRC_AFS)/afs_osidnlc.c
  	$(CRULE_OPT)
  afs_osi.o: 	$(TOP_SRC_AFS)/afs_osi.c
  	$(CRULE_OPT)
  afs_osi_alloc.o: $(TOP_SRC_AFS)/afs_osi_alloc.c
  	$(CRULE_OPT)
+ afs_osi_gcpags.o: 	$(TOP_SRC_AFS)/afs_osi_gcpags.c
+ 	$(CRULE_OPT)
  afs_osi_pag.o: $(TOP_SRC_AFS)/afs_osi_pag.c
  	$(CRULE_OPT)
  afs_osi_uio.o: $(TOP_SRC_AFS)/afs_osi_uio.c
  	$(CRULE_OPT)
  afs_osi_vget.o: $(TOP_SRC_AFS)/afs_osi_vget.c
  	$(CRULE_NOOPT)
+ afs_osi_vm.o: 	$(TOP_SRC_AFS)/afs_osi_vm.c
+ 	$(CRULE_OPT)
  afs_segments.o: $(TOP_SRC_AFS)/afs_segments.c
  	$(CRULE_OPT)
  afs_server.o: $(TOP_SRC_AFS)/afs_server.c
***************
*** 269,282 ****
--- 333,354 ----
  	$(CRULE_NOOPT)
  afs_dir.o: 	$(TOP_SRCDIR)/dir/dir.c
  	$(CRULE_NOOPT)
+ afs_icl.o: $(TOP_SRC_AFS)/afs_icl.c
+ 	$(CRULE_NOOPT)
  AFS_component_version_number.o: AFS_component_version_number.c
  	$(CRULE_NOOPT)
  afs_lock.o: $(TOP_SRC_AFS)/afs_lock.c
  	$(CRULE_NOOPT)
  afs_memcache.o: $(TOP_SRC_AFS)/afs_memcache.c
  	$(CRULE_NOOPT)
+ afs_pag_call.o: $(TOP_SRC_AFS)/afs_pag_call.c
+ 	$(CRULE_NOOPT)
+ afs_pag_cred.o: $(TOP_SRC_AFS)/afs_pag_cred.c
+ 	$(CRULE_NOOPT)
  afs_stat.o: $(TOP_SRC_AFS)/afs_stat.c
  	$(CRULE_NOOPT)
+ afs_syscall.o: $(TOP_SRC_AFS)/afs_syscall.c
+ 	$(CRULE_NOOPT)
  fcrypt.o: 	$(TOP_SRC_RXKAD)/domestic/fcrypt.c
  	$(CRULE_NOOPT)
  crypt_conn.o: $(TOP_SRC_RXKAD)/domestic/crypt_conn.c
***************
*** 315,320 ****
--- 387,398 ----
  	$(CRULE_NOOPT)
  rxstat.o: $(TOP_SRC_RXSTAT)/rxstat.c
  	$(CRULE_NOOPT)
+ Kpagcb.cs.o: $(TOP_OBJ_FSINT)/Kpagcb.cs.c
+ 	$(CRULE_NOOPT)
+ Kpagcb.ss.o: $(TOP_OBJ_FSINT)/Kpagcb.ss.c
+ 	$(CRULE_NOOPT)
+ Kpagcb.xdr.o: $(TOP_OBJ_FSINT)/Kpagcb.xdr.c
+ 	$(CRULE_NOOPT)
  Krxstat.ss.o: $(TOP_OBJ_RXSTAT)/Krxstat.ss.c
  	$(CRULE_NOOPT)
  Krxstat.xdr.o: $(TOP_OBJ_RXSTAT)/Krxstat.xdr.c
***************
*** 323,328 ****
--- 401,410 ----
  	$(CRULE_NOOPT)
  Kvice.cs.o: $(TOP_OBJ_FSINT)/Kvice.cs.c
  	$(CRULE_NOOPT)
+ Krmtsys.xdr.o: $(TOP_OBJ_SYS)/Krmtsys.xdr.c
+ 	$(CRULE_NOOPT)
+ Krmtsys.cs.o: $(TOP_OBJ_SYS)/Krmtsys.cs.c
+ 	$(CRULE_NOOPT)
  afsaux.o: $(TOP_SRC_FSINT)/afsaux.c
  	$(CRULE_NOOPT)
  xdr_arrayn.o: $(TOP_SRC_RX)/xdr_arrayn.c
***************
*** 361,366 ****
--- 443,452 ----
  afs_pioctl_nfs.o:	$(TOP_SRC_AFS)/afs_pioctl.c
  	$(CRULE_NOOPT)
  
+ # Special objects for the PAG module
+ afs_pag_user.o: $(TOP_SRC_AFS)/afs_user.c
+ 	$(CRULE_OPT) -DAFS_PAG_MANAGER
+ 
  # Files which are specific to particular architectures/targets
  # but have common build rules. Place here instead of duplicating
  # in the per-platform Makefiles.
***************
*** 386,393 ****
--- 472,485 ----
  	$(CRULE_NOOPT)
  osi_debug.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_debug.c
  	$(CRULE_OPT)
+ osi_ioctl.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_ioctl.c
+ 	$(CRULE_NOOPT)
  osi_module.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_module.c
  	$(CRULE_NOOPT)
+ osi_pag_module.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_pag_module.c
+ 	$(CRULE_NOOPT)
+ osi_proc.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_proc.c
+ 	$(CRULE_NOOPT)
  osi_probe.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_probe.c
  	$(CRULE_NOOPT)
  osi_syscall.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_syscall.c
***************
*** 396,401 ****
--- 488,497 ----
  	$(CRULE_NOOPT)
  osi_flush.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_flush.s
  	$(CRULE_OPT)
+ osi_export.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_export.c
+ 	$(CRULE_NOOPT)
+ osi_nfssrv.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_nfssrv.c
+ 	$(CRULE_NOOPT)
  osi_alloc.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_alloc.c
  	$(CRULE_NOOPT)
  osi_cred.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_cred.c
Index: openafs/src/libafs/MakefileProto.LINUX.in
diff -c openafs/src/libafs/MakefileProto.LINUX.in:1.54 openafs/src/libafs/MakefileProto.LINUX.in:1.54.4.3
*** openafs/src/libafs/MakefileProto.LINUX.in:1.54	Thu Dec  1 10:18:08 2005
--- openafs/src/libafs/MakefileProto.LINUX.in	Mon Jul 31 17:27:41 2006
***************
*** 26,34 ****
--- 26,56 ----
  	osi_vm.o \
  <ppc64_linux26>
  	osi_flush.o \
+ <linux26 linux_26>
+ 	osi_export.o \
+ 	osi_nfssrv.o \
+ <linux24 linux_24 linux26 linux_26>
+ 	osi_ioctl.o \
+ 	osi_proc.o \
  <all>
  	osi_vnodeops.o 
  
+ AFS_OS_PAGOBJS = \
+ 	osi_alloc.o \
+ 	osi_cred.o \
+ 	osi_groups.o \
+ 	osi_inode.o \
+ 	osi_misc.o \
+ 	osi_probe.o \
+ 	osi_sleep.o \
+ 	osi_syscall.o \
+ <ppc64_linux26>
+ 	osi_flush.o \
+ <linux24 linux_24 linux26 linux_26>
+ 	osi_ioctl.o \
+ <all>
+ 	osi_pag_module.o 
+ 
  AFS_OS_NFSOBJS =
  
  AFS_OS_NONFSOBJS =
***************
*** 46,51 ****
--- 68,76 ----
  CCFLAGS = -Wno-strict-prototypes
  DEFINES = $(COMMON_DEFINES)
  
+ # CFLAGS_* and AFLAGS_* will be copied into the kbuild makefile
+ CFLAGS_afs_pag_user.o = -DAFS_PAG_MANAGER
+ 
  <i386_linux22 i386_linux24>
  CCFLAGS = $(COMMON_KERN_CFLAGS) @P5PLUS_KOPTS@
  DEFINES = $(COMMON_DEFINES) -DCPU=586
***************
*** 255,262 ****
  	cp libafs.ko $@
  
  .FORCE:
! libafs.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>
--- 280,287 ----
  	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>
Index: openafs/src/libafs/afs.ppc_darwin_70.plist.in
diff -c openafs/src/libafs/afs.ppc_darwin_70.plist.in:1.2.10.2 openafs/src/libafs/afs.ppc_darwin_70.plist.in:1.2.10.3
*** openafs/src/libafs/afs.ppc_darwin_70.plist.in:1.2.10.2	Wed Jul  5 16:21:29 2006
--- openafs/src/libafs/afs.ppc_darwin_70.plist.in	Mon Jul 31 18:04:28 2006
***************
*** 15,25 ****
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.3</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.3</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kernel.bsd</key>
--- 15,25 ----
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.5</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.5</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kernel.bsd</key>
Index: openafs/src/libafs/afs.ppc_darwin_80.plist.in
diff -c openafs/src/libafs/afs.ppc_darwin_80.plist.in:1.2.4.2 openafs/src/libafs/afs.ppc_darwin_80.plist.in:1.2.4.3
*** openafs/src/libafs/afs.ppc_darwin_80.plist.in:1.2.4.2	Wed Jul  5 16:21:29 2006
--- openafs/src/libafs/afs.ppc_darwin_80.plist.in	Mon Jul 31 18:04:28 2006
***************
*** 15,25 ****
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.3</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.3</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
--- 15,25 ----
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.5</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.5</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
Index: openafs/src/libafs/afs.ppc_darwin_90.plist.in
diff -c openafs/src/libafs/afs.ppc_darwin_90.plist.in:1.1.6.2 openafs/src/libafs/afs.ppc_darwin_90.plist.in:1.1.6.3
*** openafs/src/libafs/afs.ppc_darwin_90.plist.in:1.1.6.2	Wed Jul  5 16:21:29 2006
--- openafs/src/libafs/afs.ppc_darwin_90.plist.in	Mon Jul 31 18:04:28 2006
***************
*** 15,25 ****
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.3</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.3</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
--- 15,25 ----
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.5</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.5</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
Index: openafs/src/libafs/afs.x86_darwin_80.plist.in
diff -c openafs/src/libafs/afs.x86_darwin_80.plist.in:1.1.6.2 openafs/src/libafs/afs.x86_darwin_80.plist.in:1.1.6.3
*** openafs/src/libafs/afs.x86_darwin_80.plist.in:1.1.6.2	Wed Jul  5 16:21:29 2006
--- openafs/src/libafs/afs.x86_darwin_80.plist.in	Mon Jul 31 18:04:28 2006
***************
*** 15,25 ****
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.3</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.3</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
--- 15,25 ----
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.5</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.5</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
Index: openafs/src/libafs/afs.x86_darwin_90.plist.in
diff -c openafs/src/libafs/afs.x86_darwin_90.plist.in:1.1.6.2 openafs/src/libafs/afs.x86_darwin_90.plist.in:1.1.6.3
*** openafs/src/libafs/afs.x86_darwin_90.plist.in:1.1.6.2	Wed Jul  5 16:21:29 2006
--- openafs/src/libafs/afs.x86_darwin_90.plist.in	Mon Jul 31 18:04:28 2006
***************
*** 15,25 ****
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.3</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.3</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
--- 15,25 ----
  	<key>CFBundlePackageType</key>
  	<string>KEXT</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.5</string>
  	<key>CFBundleSignature</key>
  	<string>????</string>
  	<key>CFBundleVersion</key>
! 	<string>1.5.5</string>
  	<key>OSBundleLibraries</key>
  	<dict>
  		<key>com.apple.kpi.bsd</key>
Index: openafs/src/libafs/make_kbuild_makefile.pl
diff -c openafs/src/libafs/make_kbuild_makefile.pl:1.2 openafs/src/libafs/make_kbuild_makefile.pl:1.2.6.3
*** openafs/src/libafs/make_kbuild_makefile.pl:1.2	Sun Apr  3 15:02:32 2005
--- openafs/src/libafs/make_kbuild_makefile.pl	Mon Jul 31 17:27:41 2006
***************
*** 2,26 ****
  # make_kbuild_makefile.pl
  # Generate a Makefile for use with the Linux 2.6+ kernel build system
  #
! # Usage: make_kbuild_makefile.pl ${KDIR} ${TARG} Makefiles...
  #
  # The specified makefiles will be scanned for variable values
! # The module ${TARG} will be built in ${TOP_SRCDIR}/src/libafs/${KDIR}.
! # It will include objects listed in ${AFSAOBJS} and ${AFSNONFSOBJS}
  # Appropriate source files for each object will be symlinked into ${KDIR}
  # EXTRA_CFLAGS will be set to ${CFLAGS} ${COMMON_INCLUDE}
  
  # Produces ${KDIR}/Makefile, suitable for use with kbuild
  
  use IO::File;
  
  
! if (@ARGV < 3) {
!   die "Usage: echo objects... | $0 KDIR TARG Makefiles...\n";
  }
  
! ($KDIR, $TARG, @Makefiles) = @ARGV;
! $TARG =~ s/\.k?o$//;
  
  ## Read in all of the Makefiles given on the command line
  ## Our ultimate goal is to find the correct source file for each object.
--- 2,27 ----
  # 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}
  # EXTRA_CFLAGS will be set to ${CFLAGS} ${COMMON_INCLUDE}
+ # Any CFLAGS_* and AFLAGS_* variables will be copied
  
  # Produces ${KDIR}/Makefile, suitable for use with kbuild
  
  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.
***************
*** 61,67 ****
  
  
  $KDIR = "$vars{TOP_OBJDIR}/src/libafs/$KDIR";
! @objects = (split(' ', $vars{AFSAOBJS}), split(' ', $vars{AFSNONFSOBJS}));
  
  $MV = new IO::File("$vars{TOP_OBJDIR}/src/config/Makefile.version", O_RDONLY)
          or die "$vars{TOP_OBJDIR}/src/config/Makefile.version: $!\n";
--- 62,69 ----
  
  
  $KDIR = "$vars{TOP_OBJDIR}/src/libafs/$KDIR";
! @libafs_objs = (split(' ', $vars{AFSAOBJS}), split(' ', $vars{AFSNFSOBJS}));
! @afspag_objs = (split(' ', $vars{AFSPAGOBJS}));
  
  $MV = new IO::File("$vars{TOP_OBJDIR}/src/config/Makefile.version", O_RDONLY)
          or die "$vars{TOP_OBJDIR}/src/config/Makefile.version: $!\n";
***************
*** 75,82 ****
    mkdir($KDIR, 0777) or die "$KDIR: $!\n";
  }
  
  
! foreach (@objects) {
    die "No source known for $_\n" unless exists $deps{$_};
    if($deps{$_} =~ /\.s$/) {
       ($src = $_) =~ s/\.o$/.s/;
--- 77,85 ----
    mkdir($KDIR, 0777) or die "$KDIR: $!\n";
  }
  
+ %all_objs = map(($_ => 1), @libafs_objs, @afspag_objs);
  
! foreach (keys %all_objs) {
    die "No source known for $_\n" unless exists $deps{$_};
    if($deps{$_} =~ /\.s$/) {
       ($src = $_) =~ s/\.o$/.s/;
***************
*** 103,111 ****
  $cflags =~ s/\s+/ \\\n /g;
  $F = new IO::File("$KDIR/Makefile", O_WRONLY|O_CREAT|O_TRUNC, 0666)
       or die "$KDIR/Makefile: $!\n";
  print $F "EXTRA_CFLAGS=$cflags\n";
! print $F "obj-m := $TARG.o\n";
! print $F "$TARG-objs := ", join("\\\n $_", @objects), "\n";
  print $F "\n$MakefileVersion\n";
  $F->close() or die "$KDIR/Makefile: $!\n";
  
--- 106,119 ----
  $cflags =~ s/\s+/ \\\n /g;
  $F = new IO::File("$KDIR/Makefile", O_WRONLY|O_CREAT|O_TRUNC, 0666)
       or die "$KDIR/Makefile: $!\n";
+ foreach (sort keys %vars) {
+   next unless /^[AC]FLAGS_/;
+   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";
  
Index: openafs/src/libuafs/Makefile.common.in
diff -c openafs/src/libuafs/Makefile.common.in:1.13.4.1 openafs/src/libuafs/Makefile.common.in:1.13.4.4
*** openafs/src/libuafs/Makefile.common.in:1.13.4.1	Tue Jun 20 17:40:11 2006
--- openafs/src/libuafs/Makefile.common.in	Mon Jul 31 17:27:41 2006
***************
*** 87,92 ****
--- 87,93 ----
  	$(UOBJ)/afs_atomlist.o \
  	$(UOBJ)/afs_lhash.o \
  	$(UOBJ)/afs_analyze.o \
+ 	$(UOBJ)/afs_error.o \
  	$(UOBJ)/afs_axscache.o  \
  	$(UOBJ)/afs_buffer.o	\
  	$(UOBJ)/afs_callback.o	\
***************
*** 98,112 ****
--- 99,116 ----
  	$(UOBJ)/afs_dcache.o \
  	$(UOBJ)/afs_dir.o		\
  	$(UOBJ)/afs_dynroot.o \
+ 	$(UOBJ)/afs_icl.o \
  	$(UOBJ)/afs_init.o \
  	$(UOBJ)/afs_lock.o	\
  	$(UOBJ)/afs_mariner.o \
  	$(UOBJ)/afs_memcache.o	\
+ 	$(UOBJ)/afs_md5.o	\
  	$(UOBJ)/afs_osidnlc.o	\
  	$(UOBJ)/afs_osi_pag.o \
  	$(UOBJ)/afs_segments.o \
  	$(UOBJ)/afs_server.o \
  	$(UOBJ)/afs_stat.o \
+ 	$(UOBJ)/afs_syscall.o \
  	$(UOBJ)/afs_user.o \
  	$(UOBJ)/afs_util.o \
  	$(UOBJ)/afs_vcache.o \
***************
*** 208,213 ****
--- 212,218 ----
  	$(WEBOBJ)/afs_atomlist.o \
  	$(WEBOBJ)/afs_lhash.o \
  	$(WEBOBJ)/afs_analyze.o \
+ 	$(WEBOBJ)/afs_error.o \
  	$(WEBOBJ)/afs_axscache.o \
  	$(WEBOBJ)/afs_buffer.o \
  	$(WEBOBJ)/afs_callback.o \
***************
*** 219,233 ****
--- 224,241 ----
  	$(WEBOBJ)/afs_dcache.o \
  	$(WEBOBJ)/afs_dir.o \
  	$(WEBOBJ)/afs_dynroot.o \
+ 	$(WEBOBJ)/afs_icl.o \
  	$(WEBOBJ)/afs_init.o \
  	$(WEBOBJ)/afs_lock.o \
  	$(WEBOBJ)/afs_mariner.o \
  	$(WEBOBJ)/afs_memcache.o \
+ 	$(WEBOBJ)/afs_md5.o \
  	$(WEBOBJ)/afs_osidnlc.o \
  	$(WEBOBJ)/afs_osi_pag.o \
  	$(WEBOBJ)/afs_segments.o \
  	$(WEBOBJ)/afs_server.o \
  	$(WEBOBJ)/afs_stat.o \
+ 	$(WEBOBJ)/afs_syscall.o \
  	$(WEBOBJ)/afs_user.o \
  	$(WEBOBJ)/afs_util.o \
  	$(WEBOBJ)/afs_vcache.o \
***************
*** 330,335 ****
--- 338,344 ----
  	$(WEBOBJ)/afs_atomlist.o \
  	$(WEBOBJ)/afs_lhash.o \
  	$(WEBOBJ)/afs_analyze.o \
+ 	$(WEBOBJ)/afs_error.o \
  	$(WEBOBJ)/afs_axscache.o \
  	$(WEBOBJ)/afs_buffer.o \
  	$(WEBOBJ)/afs_callback.o \
***************
*** 341,355 ****
--- 350,367 ----
  	$(WEBOBJ)/afs_dcache.o \
  	$(WEBOBJ)/afs_dir.o \
  	$(WEBOBJ)/afs_dynroot.o \
+ 	$(WEBOBJ)/afs_icl.o \
  	$(WEBOBJ)/afs_init.o \
  	$(WEBOBJ)/afs_lock.o \
  	$(WEBOBJ)/afs_mariner.o \
  	$(WEBOBJ)/afs_memcache.o \
+ 	$(WEBOBJ)/afs_md5.o \
  	$(WEBOBJ)/afs_osidnlc.o \
  	$(WEBOBJ)/afs_osi_pag.o \
  	$(WEBOBJ)/afs_segments.o \
  	$(WEBOBJ)/afs_server.o \
  	$(WEBOBJ)/afs_stat.o \
+ 	$(WEBOBJ)/afs_syscall.o \
  	$(WEBOBJ)/afs_user.o \
  	$(WEBOBJ)/afs_util.o \
  	$(WEBOBJ)/afs_vcache.o \
***************
*** 447,452 ****
--- 459,465 ----
  	$(JUAFS)/afs_atomlist.o \
  	$(JUAFS)/afs_lhash.o \
  	$(JUAFS)/afs_analyze.o \
+ 	$(JUAFS)/afs_error.o \
  	$(JUAFS)/afs_axscache.o  \
  	$(JUAFS)/afs_buffer.o	\
  	$(JUAFS)/afs_callback.o	\
***************
*** 458,472 ****
--- 471,488 ----
  	$(JUAFS)/afs_dcache.o \
  	$(JUAFS)/afs_dir.o \
  	$(JUAFS)/afs_dynroot.o \
+ 	$(JUAFS)/afs_icl.o \
  	$(JUAFS)/afs_init.o \
  	$(JUAFS)/afs_lock.o	\
  	$(JUAFS)/afs_mariner.o \
  	$(JUAFS)/afs_memcache.o	\
+ 	$(JUAFS)/afs_md5.o \
  	$(JUAFS)/afs_osidnlc.o	\
  	$(JUAFS)/afs_osi_pag.o \
  	$(JUAFS)/afs_segments.o \
  	$(JUAFS)/afs_server.o \
  	$(JUAFS)/afs_stat.o \
+ 	$(JUAFS)/afs_syscall.o \
  	$(JUAFS)/afs_user.o \
  	$(JUAFS)/afs_util.o \
  	$(JUAFS)/afs_vcache.o \
***************
*** 584,589 ****
--- 600,607 ----
  	$(CRULE1)
  $(UOBJ)/afs_dynroot.o: $(TOP_SRC_AFS)/afs_dynroot.c
  	$(CRULE1)
+ $(UOBJ)/afs_error.o: $(TOP_SRC_AFS)/afs_error.c
+ 	$(CRULE1)
  $(UOBJ)/afs_init.o: $(TOP_SRC_AFS)/afs_init.c
  	$(CRULE1)
  $(UOBJ)/afs_mariner.o: $(TOP_SRC_AFS)/afs_mariner.c
***************
*** 658,663 ****
--- 676,683 ----
  	$(CRULE1)
  $(UOBJ)/afs_memcache.o: $(TOP_SRC_AFS)/afs_memcache.c
  	$(CRULE1)
+ $(UOBJ)/afs_md5.o: $(TOP_SRC_AFS)/afs_md5.c
+ 	$(CRULE1)
  $(UOBJ)/afs_stat.o: $(TOP_SRC_AFS)/afs_stat.c
  	$(CRULE1)
  $(UOBJ)/fcrypt.o: 	$(TOP_SRC_RXKAD)/domestic/fcrypt.c
***************
*** 736,743 ****
--- 756,767 ----
  	$(CRULE1)
  $(UOBJ)/afs_call.o: $(TOP_SRC_AFS)/afs_call.c
  	$(CRULE1) -DAFS_NONFSTRANS
+ $(UOBJ)/afs_icl.o: $(TOP_SRC_AFS)/afs_icl.c
+ 	$(CRULE1) -DAFS_NONFSTRANS
  $(UOBJ)/afs_pioctl.o: $(TOP_SRC_AFS)/afs_pioctl.c
  	$(CRULE1) -DAFS_NONFSTRANS
+ $(UOBJ)/afs_syscall.o: $(TOP_SRC_AFS)/afs_syscall.c
+ 	$(CRULE1) -DAFS_NONFSTRANS
  $(UOBJ)/osi_vfsops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vfsops.c
  	$(CRULE1) -DAFS_NONFSTRANS
  $(UOBJ)/ktc.o: 	$(TOP_SRCDIR)/auth/ktc.c
***************
*** 833,838 ****
--- 857,864 ----
  	$(CRULE2)
  $(WEBOBJ)/afs_dynroot.o: $(TOP_SRC_AFS)/afs_dynroot.c
  	$(CRULE2)
+ $(WEBOBJ)/afs_error.o: $(TOP_SRC_AFS)/afs_error.c
+ 	$(CRULE2)
  $(WEBOBJ)/afs_init.o: $(TOP_SRC_AFS)/afs_init.c
  	$(CRULE2)
  $(WEBOBJ)/afs_mariner.o: $(TOP_SRC_AFS)/afs_mariner.c
***************
*** 907,912 ****
--- 933,940 ----
  	$(CRULE2)
  $(WEBOBJ)/afs_memcache.o: $(TOP_SRC_AFS)/afs_memcache.c
  	$(CRULE2)
+ $(WEBOBJ)/afs_md5.o: $(TOP_SRC_AFS)/afs_md5.c
+ 	$(CRULE2)
  $(WEBOBJ)/afs_stat.o: $(TOP_SRC_AFS)/afs_stat.c
  	$(CRULE2)
  $(WEBOBJ)/fcrypt.o: 	$(TOP_SRC_RXKAD)/domestic/fcrypt.c
***************
*** 981,988 ****
--- 1009,1020 ----
  	$(CRULE2)
  $(WEBOBJ)/afs_call.o: $(TOP_SRC_AFS)/afs_call.c
  	$(CRULE2) -DAFS_NONFSTRANS
+ $(WEBOBJ)/afs_icl.o: $(TOP_SRC_AFS)/afs_icl.c
+ 	$(CRULE2) -DAFS_NONFSTRANS
  $(WEBOBJ)/afs_pioctl.o: $(TOP_SRC_AFS)/afs_pioctl.c
  	$(CRULE2) -DAFS_NONFSTRANS
+ $(WEBOBJ)/afs_syscall.o: $(TOP_SRC_AFS)/afs_syscall.c
+ 	$(CRULE2) -DAFS_NONFSTRANS
  $(WEBOBJ)/osi_vfsops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vfsops.c
  	$(CRULE2) -DAFS_NONFSTRANS
  $(WEBOBJ)/ktc.o: 	$(TOP_SRCDIR)/auth/ktc.c
***************
*** 1086,1091 ****
--- 1118,1125 ----
  	$(CRULE1)
  $(JUAFS)/afs_dynroot.o: $(TOP_SRC_AFS)/afs_dynroot.c
  	$(CRULE1)
+ $(JUAFS)/afs_error.o: $(TOP_SRC_AFS)/afs_error.c
+ 	$(CRULE1)
  $(JUAFS)/afs_init.o: $(TOP_SRC_AFS)/afs_init.c
  	$(CRULE1)
  $(JUAFS)/afs_mariner.o: $(TOP_SRC_AFS)/afs_mariner.c
***************
*** 1160,1165 ****
--- 1194,1201 ----
  	$(CRULE1)
  $(JUAFS)/afs_memcache.o: $(TOP_SRC_AFS)/afs_memcache.c
  	$(CRULE1)
+ $(JUAFS)/afs_md5.o: $(TOP_SRC_AFS)/afs_md5.c
+ 	$(CRULE1)
  $(JUAFS)/afs_stat.o: $(TOP_SRC_AFS)/afs_stat.c
  	$(CRULE1)
  $(JUAFS)/fcrypt.o: 	$(TOP_SRC_RXKAD)/domestic/fcrypt.c
***************
*** 1234,1241 ****
--- 1270,1281 ----
  	$(CRULE1)
  $(JUAFS)/afs_call.o: $(TOP_SRC_AFS)/afs_call.c
  	$(CRULE1) -DAFS_NONFSTRANS
+ $(JUAFS)/afs_icl.o: $(TOP_SRC_AFS)/afs_icl.c
+ 	$(CRULE1) -DAFS_NONFSTRANS
  $(JUAFS)/afs_pioctl.o: $(TOP_SRC_AFS)/afs_pioctl.c
  	$(CRULE1) -DAFS_NONFSTRANS
+ $(JUAFS)/afs_syscall.o: $(TOP_SRC_AFS)/afs_syscall.c
+ 	$(CRULE1) -DAFS_NONFSTRANS
  $(JUAFS)/osi_vfsops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vfsops.c
  	$(CRULE1) -DAFS_NONFSTRANS
  $(JUAFS)/ktc.o: 	$(TOP_SRCDIR)/auth/ktc.c
Index: openafs/src/packaging/MacOS/DS_Store
Index: openafs/src/packaging/MacOS/OpenAFS.Info.plist
diff -c openafs/src/packaging/MacOS/OpenAFS.Info.plist:1.2.10.2 openafs/src/packaging/MacOS/OpenAFS.Info.plist:1.2.10.4
*** openafs/src/packaging/MacOS/OpenAFS.Info.plist:1.2.10.2	Wed Jul  5 16:21:29 2006
--- openafs/src/packaging/MacOS/OpenAFS.Info.plist	Tue Aug  1 17:59:52 2006
***************
*** 3,15 ****
  <plist version="1.0">
  <dict>
  	<key>CFBundleGetInfoString</key>
! 	<string>OpenAFS 1.5.3</string>
  	<key>CFBundleIdentifier</key>
  	<string>org.openafs.OpenAFS.pkg</string>
  	<key>CFBundleName</key>
  	<string>OpenAFS</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.3</string>
  	<key>IFMajorVersion</key>
  	<integer>1</integer>
  	<key>IFMinorVersion</key>
--- 3,15 ----
  <plist version="1.0">
  <dict>
  	<key>CFBundleGetInfoString</key>
! 	<string>OpenAFS 1.5.5</string>
  	<key>CFBundleIdentifier</key>
  	<string>org.openafs.OpenAFS.pkg</string>
  	<key>CFBundleName</key>
  	<string>OpenAFS</string>
  	<key>CFBundleShortVersionString</key>
! 	<string>1.5.5</string>
  	<key>IFMajorVersion</key>
  	<integer>1</integer>
  	<key>IFMinorVersion</key>
***************
*** 18,23 ****
--- 18,27 ----
  	<false/>
  	<key>IFPkgFlagAuthorizationAction</key>
  	<string>RootAuthorization</string>
+ 	<key>IFPkgFlagBackgroundAlignment</key>
+ 	<string>bottomright</string>
+ 	<key>IfPkgFlagBackgroundScaling</key>
+ 	<string>proportional</string>
  	<key>IFPkgFlagDefaultLocation</key>
  	<string>/</string>
  	<key>IFPkgFlagInstallFat</key>
***************
*** 27,33 ****
  	<key>IFPkgFlagRelocatable</key>
  	<false/>
  	<key>IFPkgFlagRestartAction</key>
! 	<string>RecommendedRestart</string>
  	<key>IFPkgFlagRootVolumeOnly</key>
  	<true/>
  	<key>IFPkgFlagUpdateInstalledLanguages</key>
--- 31,37 ----
  	<key>IFPkgFlagRelocatable</key>
  	<false/>
  	<key>IFPkgFlagRestartAction</key>
! 	<string>NoRestart</string>
  	<key>IFPkgFlagRootVolumeOnly</key>
  	<true/>
  	<key>IFPkgFlagUpdateInstalledLanguages</key>
Index: openafs/src/packaging/MacOS/OpenAFS.info
diff -c openafs/src/packaging/MacOS/OpenAFS.info:1.1.12.2 openafs/src/packaging/MacOS/OpenAFS.info:1.1.12.3
*** openafs/src/packaging/MacOS/OpenAFS.info:1.1.12.2	Wed Jul  5 16:21:29 2006
--- openafs/src/packaging/MacOS/OpenAFS.info	Mon Jul 31 18:04:29 2006
***************
*** 1,5 ****
  Title OpenAFS
! Version 1.5.3
  Description The OpenAFS distributed filesystem. This package installs an almost-ready-to-run client for OpenAFS. see http://www.openafs.org for more information.
  DefaultLocation /
  Diskname (null)
--- 1,5 ----
  Title OpenAFS
! Version 1.5.5
  Description The OpenAFS distributed filesystem. This package installs an almost-ready-to-run client for OpenAFS. see http://www.openafs.org for more information.
  DefaultLocation /
  Diskname (null)
Index: openafs/src/packaging/MacOS/OpenAFS.post_install
diff -c openafs/src/packaging/MacOS/OpenAFS.post_install:1.7 openafs/src/packaging/MacOS/OpenAFS.post_install:1.7.2.2
*** openafs/src/packaging/MacOS/OpenAFS.post_install:1.7	Wed Apr  5 09:45:58 2006
--- openafs/src/packaging/MacOS/OpenAFS.post_install	Tue Aug  1 23:38:44 2006
***************
*** 59,69 ****
    if cmp -s CellServDB CellServDB.master ; then
      echo CellServDB is up to date.
      cp CellServDB.master CellServDB.master.last
      done=1
    fi
  fi
  
! if [ -z "$done" -a  -f CellServDB ]; then
    # there are local changes to be merged
    if [ -f CellServDB -a -f CellServDB.master.last ]; then
      echo Merging CellServDB entries....
--- 59,72 ----
    if cmp -s CellServDB CellServDB.master ; then
      echo CellServDB is up to date.
      cp CellServDB.master CellServDB.master.last
+     if [ ! -f CellServDB ]; then
+       cp CellServDB.master CellServDB
+     fi
      done=1
    fi
  fi
  
! if [ -z "$done" ]; then
    # there are local changes to be merged
    if [ -f CellServDB -a -f CellServDB.master.last ]; then
      echo Merging CellServDB entries....
***************
*** 73,79 ****
      # this is a new install, or an upgrade from pre-1.2.7
      echo "Installing new CellServDB"
      cp CellServDB.master CellServDB.master.last
!     if [ ! -e CellServDB ]; then
  	cp CellServDB.master CellServDB
      fi
    fi
--- 76,82 ----
      # this is a new install, or an upgrade from pre-1.2.7
      echo "Installing new CellServDB"
      cp CellServDB.master CellServDB.master.last
!     if [ ! -f CellServDB ]; then
  	cp CellServDB.master CellServDB
      fi
    fi
***************
*** 89,91 ****
--- 92,97 ----
    chmod a-x config/afssettings
  fi
  
+ #here we should run tools which configure the client, and then if it's enabled:
+ /Library/StartupItems/OpenAFS/OpenAFS start
+ 
Index: openafs/src/packaging/MacOS/ReadMe.rtf
diff -c openafs/src/packaging/MacOS/ReadMe.rtf:1.4 openafs/src/packaging/MacOS/ReadMe.rtf:1.4.4.1
*** openafs/src/packaging/MacOS/ReadMe.rtf:1.4	Thu Oct 13 11:12:14 2005
--- openafs/src/packaging/MacOS/ReadMe.rtf	Tue Aug  1 17:59:52 2006
***************
*** 4,10 ****
  \margl1440\margr1440\vieww9000\viewh9000\viewkind0
  \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
  
! \f0\fs20 \cf0 This pre-release of OpenAFS is targeted at MacOS 10.4.1. It is *not* production ready. Use of this release with afs home directories or Library directories is not recommended. (keychain corruption may occur. keychain-using apps may hang). afssettings does not work either. unmount afs manually before rebooting/shutting down, or the shutdown will not complete. \
  \
  Select a client cell name by editing /var/db/openafs/etc/ThisCell\
  \
--- 4,10 ----
  \margl1440\margr1440\vieww9000\viewh9000\viewkind0
  \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
  
! \f0\fs20 \cf0 This release of OpenAFS is targeted at MacOS 10.4. 
  \
  Select a client cell name by editing /var/db/openafs/etc/ThisCell\
  \
Index: openafs/src/packaging/MacOS/Uninstall
diff -c /dev/null openafs/src/packaging/MacOS/Uninstall:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/packaging/MacOS/Uninstall	Tue Aug  1 18:14:47 2006
***************
*** 0 ****
--- 1,397 ----
+ #!/usr/bin/perl -w
+ # real Perl code begins here
+ #
+ # Adapted from Apple's uninstall-devtools.pl (Version 7 for Xcode Tools 1.2)
+ #
+ # BSD License: c.f. <http://www.opensource.org/licenses/bsd-license>
+ #
+ 
+ use strict;
+ use File::Basename;
+ 
+ use vars qw ($do_nothing $print_donothing_removals $receipts_dir $verbose $noisy_warnings);
+ use vars qw ($suppress_spin $spin_counter $spin_state $spin_slower_downer);
+ use vars qw (%exception_list $gen_dirs @gen_files @rmfiles @rmdirs @rmpkg);
+ 
+ #----------------------------------------------------------------------------------------
+ 
+ $do_nothing = 0;
+ $print_donothing_removals = 1;
+ $verbose = 1;
+ $noisy_warnings = 0;
+ 
+ # One of rm -rf in this script uses $receipts_dir -- change with care.
+ $receipts_dir = "/Library/Receipts";
+ 
+ %exception_list = (
+ #  '/usr/bin/aklog', '',
+ );
+ 
+ $gen_dirs = { };
+ #$gen_dirs->{"/"}->{"Library"}->{"OpenAFS"}->{"Tools"} = {};
+ 
+ @gen_files = (
+     "/var/db/openafs/etc/cacheinfo",
+     "/var/db/openafs/etc/ThisCell",
+     "/var/db/openafs/etc/config/afsd.options",
+     "/var/db/openafs/etc/CellServDB.save",
+     "/var/db/openafs/etc/CellServDB.master.last",
+     "/var/db/openafs/etc/CellServDB",
+     "/var/db/openafs/etc/config/settings.plist",
+ );
+ 
+ #----------------------------------------------------------------------------------------
+ 
+ $| = 1;
+ #if ($do_nothing == 0 && $< != 0)
+ #  {
+ #    die "ERROR: Must be run with root permissions--prefix command with 'sudo'.\n";
+ #  }
+ 
+ sub main
+   {
+     # commandline args: 
+     #     0: dir of packages to remove
+     #     1: flag indicating whether to keep package receipts
+     #     2: flag indicating whether to supress spin indicator
+ 
+     if (!@ARGV) {
+ 	use FindBin qw($Bin);
+ 	@ARGV = ("$Bin/..", 0, 0);
+     }
+     $suppress_spin = defined ($ARGV[2]) && $ARGV[2];
+ 
+     $spin_counter = 0;
+     $spin_state = 0;
+     spin_rate_slow ();
+ 
+     pre_print ();
+     print "Uninstalling OpenAFS package:\n\n";
+ 
+     remove_generated_files ();
+     remove_main_packages ();
+     remove_generated_directories ();
+ 
+     if ($do_nothing == 0) {
+     my @rmcmd = ('osascript', '-e', "do shell script \"/bin/rm -f @rmfiles; /bin/rmdir @rmdirs; /bin/rm -rf @rmpkg\" with administrator privileges");
+     system @rmcmd;
+     my $retcode = $? >> 8;
+     if ($retcode != 0) {
+            print_warning ("Warning:  There may have been a problem uninstalling\n");
+     }
+     }
+ 
+     pre_print ();
+     print "\nFinished uninstalling.\n";
+   }
+ 
+ sub remove_main_packages
+   {
+ #    opendir (DIR, $ARGV[0]) or die "ERROR: package directory $ARGV[0] not found\n";
+ #    my @pkglist = grep /\.pkg$/, readdir DIR;
+ #    closedir DIR;
+      my @pkglist = ("OpenAFS",
+ 		    );
+     
+     foreach (@pkglist)
+       {
+         s/\.pkg$//;
+         my $pkgname = $_;
+         my $pkgname_fullpath = "$receipts_dir/$pkgname.pkg";
+         my $pkgname_bom_fullpath = undef;
+ 
+         next if (! -d "$pkgname_fullpath" );
+         
+         print_verbose ("Removing package $pkgname.pkg\n");
+ 
+         my $f  = "$pkgname_fullpath/Contents/Resources/$pkgname.bom";
+         if (-f $f && -r $f) {
+             $pkgname_bom_fullpath = $f;
+         }
+ 
+         next if (!defined ($pkgname_bom_fullpath));
+         
+         my $bomroot = "";
+         open (INFO, "$pkgname_fullpath/Contents/Info.plist") or next;
+         while (<INFO>) {
+             m/IFPkgFlagDefaultLocation/ or next;
+             $bomroot = <INFO>;
+         }
+         close (INFO);
+ 
+         $bomroot =~ />(.*)</;
+ 	$bomroot = $1;
+         $bomroot =~ s/^\/$//;
+ 
+         spin_rate_slow ();
+ 
+         open (LSBOM, "/usr/bin/lsbom -l -f -p f '$pkgname_bom_fullpath' |") or next;
+         while (<LSBOM>)
+           {
+             chomp;
+             m#^\.(/.*)$#;
+             next if (!defined ($1) || $1 eq "");
+             my $filename = $bomroot . $1;
+ 
+             remove_a_file ($filename);
+           }
+         close (LSBOM);
+ 
+         my $rooth = { };
+ 
+         open (LSBOM, "/usr/bin/lsbom -d -p f '$pkgname_bom_fullpath' |") or next;
+         while (<LSBOM>)
+           {
+             chomp;
+             m#^\.(/.*)$#;
+             next if (!defined ($1) || $1 eq "");
+             my $directory = $bomroot . $1;
+             if (-d $directory)
+               {
+                 $rooth = add_directory_to_tree ($directory, $rooth);
+               }
+             else
+               {
+                 if ($noisy_warnings)
+                   {
+                     print_warning ("Warning: \"$directory\" listed in BOM but not present on system.\n");
+                   }
+               }
+           }
+         close (LSBOM);
+ 
+         spin_rate_fast ();
+         remove_empty_directories ($rooth, "/");
+ 
+         remove_package_receipts ("$pkgname.pkg") if (!defined ($ARGV[1]) || !$ARGV[1]) ;
+       }
+   }
+ 
+ sub remove_generated_files
+   {
+    foreach (@gen_files)
+      {
+        remove_a_file ($_);
+      }
+   }
+ 
+ sub remove_generated_directories
+   {
+     remove_empty_directories ($gen_dirs, "/");
+   }
+ 
+ sub add_directory_to_tree
+   {
+     my $dir = shift;
+     my $rooth = shift;
+     my $p = $rooth;
+ 
+     my @pathcomp = split /\//, $dir;
+ 
+     progress_point ();
+     foreach (@pathcomp)
+       {
+         my $cur_name = $_;
+         if ($cur_name eq "" || !defined ($cur_name))
+           {
+             $cur_name = "/";
+           }
+         if (!defined ($p->{"$cur_name"}))
+           {
+             $p->{$cur_name} = { };
+           }
+         $p = $p->{$cur_name};
+       }
+     return $rooth;
+   }
+ 
+ sub remove_empty_directories
+   {
+     my $rooth = shift;
+     my $path = shift;
+     my $children = (scalar (keys %{$rooth}));
+     my $dirs_remain = 0;
+ 
+     if ($children > 0)
+       {
+         foreach my $dirname (sort keys %{$rooth})
+           {
+             my $printpath;
+             $printpath = "$path/$dirname";
+             $printpath =~ s#^/*#/#;
+             remove_empty_directories ($rooth->{$dirname}, "$printpath");
+             $dirs_remain = 1 if (-d "$printpath");
+           } 
+       }
+ 
+      if ($dirs_remain == 0)
+        {
+          maybe_remove_ds_store ("$path");
+        }
+ 
+      remove_a_dir ("$path");
+   }
+ 
+ sub remove_a_file
+   {
+     my $fn = shift;
+     my $dirname = dirname ($fn);
+     my $basename = basename ($fn);
+     my $ufs_rsrc_file = "$dirname/._$basename";
+ 
+     progress_point ();
+     return if (!defined ($fn) || $fn eq "");
+ 
+     # Leave any files that are shared between packages alone.
+     if (defined($exception_list{$fn}))
+       {
+         if ($noisy_warnings)
+           {
+             print_warning ("Warning: file \"$fn\" intentionally not removed, even though it's in the BOM.\n");
+           }
+         return;
+       }
+ 
+     if (! -f $fn && ! -l $fn)
+       {
+         if ($noisy_warnings)
+           {
+             print_warning ("Warning: file \"$fn\" present in BOM but not found on disc.\n");
+           }
+         return;
+       }
+ 
+     if ($do_nothing == 1) 
+       {
+         print_donothing ("rm $fn\n");
+         print_donothing ("rm $ufs_rsrc_file\n") if ( -f $ufs_rsrc_file);
+       }
+     else
+       {
+ 	  unshift(@rmfiles, "$fn");
+ 	  unshift(@rmfiles, "$fn") if ( -f $ufs_rsrc_file);
+       }
+   }
+ 
+ sub remove_a_dir
+   {
+     my $dir = shift;
+ 
+     progress_point ();
+     return if (!defined ($dir) || $dir eq "" || $dir eq "/" || $dir eq "/usr");
+     if (! -d $dir)
+       {
+         if ($noisy_warnings)
+           {
+             print_warning ("Warning: directory \"$dir\" present in BOM but not found on disc.\n");
+           }
+         return;
+       }
+ 
+     if ($do_nothing == 1) 
+       {
+         print_donothing ("rmdir $dir\n");
+       }
+     else
+       {
+         push(@rmdirs, "$dir");
+       }
+   }
+ 
+ sub remove_package_receipts
+   {
+     my $pkgname = shift;
+     $pkgname =~ s#/##g;  # There shouldn't be any path seps in the pkg name...
+     return if (!defined ($pkgname) || $pkgname eq "" 
+                || $pkgname eq "." || $pkgname eq "..");
+ 
+     my $pkgdir = "$receipts_dir/$pkgname";
+     return if (!defined ($pkgdir) || $pkgdir eq "" || ! -d $pkgdir);
+ 
+     push(@rmpkg, "$pkgdir");
+   }
+ 
+ 
+ sub maybe_remove_ds_store
+   {
+     my $path = shift;
+     my $filecount = 0;
+     return if (!defined ($path) || $path eq "" || $path eq "/" || $path eq "/usr");
+     return if (! -f "$path/.DS_Store");
+ 
+     open (LS, "/bin/ls -a '$path' |");
+     while (<LS>)
+       {
+         chomp;
+         next if (m#^\.$# || m#^\.\.$#);
+         $filecount++;
+       }
+     close (LS);
+ 
+     if ($filecount == 1 && -f "$path/.DS_Store")
+       {
+         remove_a_file ("$path/.DS_Store");
+       }
+   }
+ 
+ sub print_donothing
+   {
+     my $msg = shift;
+     return if ($print_donothing_removals != 1);
+     pre_print ();
+     print $msg;
+   }
+ 
+ sub print_verbose
+   {
+     my $msg = shift;
+     return if ($verbose != 1);
+     pre_print ();
+     print $msg;
+   }
+ 
+ sub print_warning
+   {
+     my $msg = shift;
+     pre_print ();
+     print STDERR $msg;
+   }
+ 
+ sub print_error
+   {
+     my $msg = shift;
+     pre_print ();
+     print STDERR $msg;
+   }
+ 
+ sub pre_print 
+   {
+     print " " unless ($suppress_spin);
+   }
+ 
+ sub spin_rate_slow
+   {
+     $spin_slower_downer = 150;
+   }
+ 
+ sub spin_rate_fast
+   {
+     $spin_slower_downer = 75;
+   }
+ 
+ sub progress_point
+   {
+     return if ($suppress_spin);
+     $spin_counter++;
+     if (($spin_counter % $spin_slower_downer) == 0)
+       {
+         my $spin_chars = "|/-\\";
+         my $c = substr ($spin_chars, $spin_state % 4, 1);
+         $spin_state++;
+         print "[7m$c[m";
+       }
+   }
+ 
+ main ();
+ 
+ #----------------------------------------------------------------------------------------
Index: openafs/src/packaging/MacOS/afslogo.jpg
Index: openafs/src/packaging/MacOS/background.jpg
Index: openafs/src/packaging/MacOS/buildpkg.sh
diff -c openafs/src/packaging/MacOS/buildpkg.sh:1.13.2.1 openafs/src/packaging/MacOS/buildpkg.sh:1.13.2.4
*** openafs/src/packaging/MacOS/buildpkg.sh:1.13.2.1	Thu Jun  1 11:36:02 2006
--- openafs/src/packaging/MacOS/buildpkg.sh	Wed Aug  2 00:02:55 2006
***************
*** 53,65 ****
  
  if [ $firstpass = yes ]; then
      if [ -x /usr/bin/curl ]; then
- #    /usr/bin/curl -f -O http://www.central.org/dl/cellservdb/CellServDB
  	/usr/bin/curl -f -O http://dl.central.org/dl/cellservdb/CellServDB
      fi
  
      if [ ! -f CellServDB ]; then
         echo "A CellServDB file must be placed in the working directory"
         die=1
      fi
      FILES="ReadMe.rtf License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt"
      for f in $FILES; do
--- 53,71 ----
  
  if [ $firstpass = yes ]; then
      if [ -x /usr/bin/curl ]; then
  	/usr/bin/curl -f -O http://dl.central.org/dl/cellservdb/CellServDB
      fi
  
      if [ ! -f CellServDB ]; then
         echo "A CellServDB file must be placed in the working directory"
         die=1
+     else
+        if grep -q 'GCO Public CellServDB' CellServDB ; then
+          touch CellServDB
+        else
+           echo "A proper CellServDB file must be placed in the working directory"
+           die=1
+        fi
      fi
      FILES="ReadMe.rtf License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt"
      for f in $FILES; do
***************
*** 111,118 ****
      echo openafs.org > $PKGROOT/private/var/db/openafs/etc/ThisCell.sample
      if [ $majorvers -ge 7 ]; then
  	echo /afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
! 	(cd $CURDIR && \
! 	cp afssettings $PKGROOT/private/var/db/openafs/etc/config )
  	cp settings.plist $PKGROOT/private/var/db/openafs/etc/config/settings.plist.orig
      else
  	echo /Network/afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
--- 117,123 ----
      echo openafs.org > $PKGROOT/private/var/db/openafs/etc/ThisCell.sample
      if [ $majorvers -ge 7 ]; then
  	echo /afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
!         cp -RP $PKGROOT/Library/OpenAFS/Tools/etc/afssettings $PKGROOT/private/var/db/openafs/etc/config
  	cp settings.plist $PKGROOT/private/var/db/openafs/etc/config/settings.plist.orig
      else
  	echo /Network/afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
***************
*** 159,164 ****
--- 164,170 ----
  	cp OpenAFS.post_install $PKGRES/postinstall
  	cp OpenAFS.pre_upgrade $PKGRES/preupgrade
  	cp OpenAFS.post_install $PKGRES/postupgrade
+ 	cp background.jpg $PKGRES/background.jpg
  	if [ $majorvers -ge 8 ]; then
  	    cp InstallationCheck $PKGRES
  	    mkdir -p $PKGRES/English.lproj
***************
*** 199,205 ****
      mkdir $CURDIR/dmg
      mv $CURDIR/OpenAFS.pkg $CURDIR/dmg
      rm -rf $CURDIR/OpenAFS.dmg
!     hdiutil create -srcfolder $CURDIR/dmg -volname OpenAFS -anyowners $CURDIR/OpenAFS.dmg
      rm -rf $CURDIR/dmg
      # Unfortunately, sudo sets $USER to root, so I can't chown the 
      #.pkg dir back to myself
--- 205,218 ----
      mkdir $CURDIR/dmg
      mv $CURDIR/OpenAFS.pkg $CURDIR/dmg
      rm -rf $CURDIR/OpenAFS.dmg
!     cp Uninstall $CURDIR/dmg/Uninstall.command
!     cp DS_Store $CURDIR/dmg/.DS_Store
!     mkdir $CURDIR/dmg/.background
!     cp afslogo.jpg $CURDIR/dmg/.background
! #    hdiutil create -srcfolder $CURDIR/dmg -volname OpenAFS -anyowners $CURDIR/OpenAFS.dmg
!     hdiutil makehybrid -hfs -hfs-volume-name OpenAFS -hfs-openfolder $CURDIR/dmg $CURDIR/dmg -o $CURDIR/TMP.dmg
!     hdiutil convert -format UDZO TMP.dmg -o $CURDIR/OpenAFS.dmg
!     rm $CURDIR/TMP.dmg
      rm -rf $CURDIR/dmg
      # Unfortunately, sudo sets $USER to root, so I can't chown the 
      #.pkg dir back to myself
Index: openafs/src/pam/afs_util.c
diff -c openafs/src/pam/afs_util.c:1.12 openafs/src/pam/afs_util.c:1.12.14.1
*** openafs/src/pam/afs_util.c:1.12	Tue Jul 15 19:15:57 2003
--- openafs/src/pam/afs_util.c	Wed Jul 19 17:17:18 2006
***************
*** 27,33 ****
  #include <stdlib.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/pam/afs_util.c,v 1.12 2003/07/15 23:15:57 shadow Exp $");
  
  #include "afs_util.h"
  
--- 27,33 ----
  #include <stdlib.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/pam/afs_util.c,v 1.12.14.1 2006/07/19 21:17:18 shadow Exp $");
  
  #include "afs_util.h"
  
***************
*** 180,185 ****
--- 180,192 ----
  static afs_int32
  curpag(void)
  {
+ #if defined(AFS_AIX51_ENV)
+     afs_int32 pag;
+ 
+     if (kcred_getpag(cred, PAG_AFS, &pag) < 0 || pag == 0)
+         pag = NOPAG;
+     return pag;
+ #else
      gid_t groups[NGROUPS_MAX];
      afs_uint32 g0, g1;
      afs_uint32 h, l, ret;
***************
*** 203,208 ****
--- 210,216 ----
  	    return -1;
      }
      return -1;
+ #endif
  }
  
  /* Returns the AFS pag number, if any, otherwise return -1 */
Index: openafs/src/platform/Makefile.in
diff -c /dev/null openafs/src/platform/Makefile.in:1.2.2.3
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/Makefile.in	Tue Aug  1 17:53:29 2006
***************
*** 0 ****
--- 1,26 ----
+ # 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
+ 
+ # Common elements for Makefiles for all system types.
+ 
+ srcdir=@srcdir@
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ include ../config/Makefile.version
+ 
+ all:
+ 	cd $(MKAFS_OSTYPE) ; \
+ 	echo $(MAKE) all; \
+ 	$(MAKE) all
+ dest:
+ 	cd $(MKAFS_OSTYPE) ; \
+ 	echo $(MAKE) DEST=${DEST} dest; \
+ 	$(MAKE) DEST=${DEST} dest
+ install:
+ 	cd $(MKAFS_OSTYPE) ; \
+ 	echo $(MAKE) DESTDIR=${DESTDIR} install; \
+ 	$(MAKE) DESTDIR=${DESTDIR} install
+ 
Index: openafs/src/platform/AIX/Makefile.in
diff -c /dev/null openafs/src/platform/AIX/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/AIX/Makefile.in	Tue Aug  1 17:53:36 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/DARWIN/Makefile.in
diff -c /dev/null openafs/src/platform/DARWIN/Makefile.in:1.2.2.5
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/DARWIN/Makefile.in	Tue Aug  1 23:49:35 2006
***************
*** 0 ****
--- 1,30 ----
+ # 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
+ 
+ srcdir=@srcdir@
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ include ../../config/Makefile.version
+ 
+ all: afssettings
+ 
+ afssettings: afssettings.m 
+ 	${CC} ${CFLAGS} -o afssettings afssettings.m -framework Foundation
+ 
+ install: \
+ 	${DESTDIR}${sbindir}/afssettings
+ 
+ dest: \
+ 	${DEST}/etc/afssettings
+ 
+ ${DESTDIR}${sbindir}/afssettings: afssettings
+ 	${INSTALL} -s $? $@
+ 
+ ${DEST}/etc/afssettings: afssettings
+ 	${INSTALL} -s $? $@
+ 
+ clean:
+ 	$(RM) -f *.o core afssettings AFS_component_version_number.c 
Index: openafs/src/platform/DARWIN/afssettings.m
diff -c /dev/null openafs/src/platform/DARWIN/afssettings.m:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/DARWIN/afssettings.m	Tue Aug  1 17:38:46 2006
***************
*** 0 ****
--- 1,173 ----
+ /*
+  * Copyright (c) 2003, 2006 Apple Computer, Inc. All rights reserved.
+  *
+  * @APPLE_LICENSE_HEADER_START@
+  * 
+  * This file contains Original Code and/or Modifications of Original Code
+  * as defined in and that are subject to the Apple Public Source License
+  * Version 2.0 (the 'License'). You may not use this file except in
+  * compliance with the License. Please obtain a copy of the License at
+  * http://www.opensource.apple.com/apsl/ and read it before using this
+  * file.
+  * 
+  * The Original Code and all software distributed under the License are
+  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+  * Please see the License for the specific language governing rights and
+  * limitations under the License.
+  * 
+  * @APPLE_LICENSE_HEADER_END@
+  */
+ #import <Foundation/Foundation.h>
+ #import <stdio.h>
+ #import <err.h>
+ #import <sys/types.h>
+ #import <sys/mount.h>
+ #import <sys/sysctl.h>
+ #import <afs/sysctl.h>
+ 
+ enum Type {
+     TypeNode = 0,
+     TypeNum,
+     TypeStr
+ };
+ 
+ typedef struct _setting {
+     NSString *key;
+     int selector;
+     enum Type type;
+     struct _setting *children;
+ } Setting;
+ 
+ Setting s_darwin_all[] = {
+     {@"RealModes", AFS_SC_DARWIN_ALL_REALMODES, TypeNum, NULL},
+     {NULL, 0, 0, NULL}
+ };
+ Setting s_darwin[] = {
+     {@"All", AFS_SC_DARWIN_ALL, TypeNode, s_darwin_all},
+     {@"Darwin12", AFS_SC_DARWIN_12, TypeNode, NULL},
+     {@"Darwin13", AFS_SC_DARWIN_13, TypeNode, NULL},
+     {@"Darwin14", AFS_SC_DARWIN_14, TypeNode, NULL},
+     {@"Darwin60", AFS_SC_DARWIN_60, TypeNode, NULL},
+     {@"Darwin70", AFS_SC_DARWIN_70, TypeNode, NULL},
+     {@"Darwin80", AFS_SC_DARWIN_80, TypeNode, NULL},
+     {@"Darwin90", AFS_SC_DARWIN_90, TypeNode, NULL},
+     {NULL, 0, 0, NULL}
+ };
+ Setting s_first[] = {
+     {@"All", AFS_SC_ALL, TypeNode, NULL},
+     {@"Darwin", AFS_SC_DARWIN, TypeNode, s_darwin},
+     {NULL, 0, 0, NULL}
+ };
+ Setting s_top = {NULL, -1, TypeNode, s_first};
+ 
+ int oid[CTL_MAXNAME] = {CTL_VFS};
+ NSString *path = @"/var/db/openafs/etc/config/settings.plist";
+ 
+ char *oidString(int *oid, int len);
+ void init(void);
+ void walk(id obj, Setting *s, int level);
+ 
+ void
+ init(void)
+ {
+     int oidmax[] = {CTL_VFS, VFS_GENERIC, VFS_MAXTYPENUM};
+     int oidvfs[] = {CTL_VFS, VFS_GENERIC, VFS_CONF, 0};
+     int max;
+     struct vfsconf conf;
+     size_t len;
+     int i;
+ 
+     len = sizeof(max);
+     if(sysctl(oidmax, 3, &max, &len, NULL, 0) < 0)
+ 	err(1, "sysctl VFS_MAXTYPENUM");
+     for(i = max; --i >= 0; ) {
+ 	oidvfs[3] = i;
+ 	len = sizeof(conf);
+ 	if(sysctl(oidvfs, 4, &conf, &len, NULL, 0) < 0)
+ 	    continue;
+ 	if(strcmp("afs", conf.vfc_name) == 0) {
+ 	    s_top.selector = conf.vfc_typenum;
+ 	    break;
+ 	}
+     }
+     if(s_top.selector < 0)
+ 	errx(1, "AFS is not loaded");
+ }
+ 
+ char *
+ oidString(int *oid, int len)
+ {
+     static char buf[256];
+     char *cp = buf;
+ 
+     for(;;) {
+ 	sprintf(cp, "%d", *oid++);
+ 	if(--len <= 0)
+ 	    break;
+ 	cp += strlen(cp);
+ 	*cp++ = '.';
+     }
+     return buf;
+ }
+ 
+ void
+ walk(id obj, Setting *s, int level)
+ {
+     Setting *child;
+     id newobj;
+     int intval;
+     const char *cp;
+     int level1 = level + 1;
+ 
+     oid[level] = s->selector;
+     switch(s->type) {
+       case TypeNode:
+ 	for(child = s->children; child->key; child++) {
+ 	    if(child->type == TypeNode && !child->children)
+ 		continue;
+ 	    newobj = [obj objectForKey: child->key];
+ 	    if(newobj)
+ 		walk(newobj, child, level1);
+ 	}
+ 	break;
+       case TypeNum:
+ 	intval = [obj intValue];
+ 	if(sysctl(oid, level1, NULL, NULL, &intval, sizeof(intval)) < 0)
+ 	    err(1, "sysctl %s => %d", oidString(oid, level1), intval);
+ 	break;
+       case TypeStr:
+ 	cp = [obj UTF8String];
+ 	if(sysctl(oid, level1, NULL, NULL, (void *)cp, strlen(cp)) < 0)
+ 	    err(1, "sysctl %s => %s", oidString(oid, level1), cp);
+ 	break;
+     }
+ }
+ 
+ main()
+ {
+     NSData *plistData;
+     id plist;
+     NSString *error;
+     NSPropertyListFormat format;
+     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+ 
+     init();
+     plistData = [NSData dataWithContentsOfFile: path];
+     if(plistData) {
+ 	plist = [NSPropertyListSerialization propertyListFromData: plistData
+ 	  mutabilityOption: NSPropertyListImmutable
+ 	  format: &format
+ 	  errorDescription: &error
+ 	];
+ 	if(plist)
+ 	    walk(plist, &s_top, 1);
+ 	else
+ 	    errx(1, "%s: %s", [path UTF8String], [error UTF8String]);
+     }
+ 
+     [pool release];
+     return 0;
+ }
Index: openafs/src/platform/FBSD/Makefile.in
diff -c /dev/null openafs/src/platform/FBSD/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/FBSD/Makefile.in	Tue Aug  1 17:53:41 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/HPUX/Makefile.in
diff -c /dev/null openafs/src/platform/HPUX/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/HPUX/Makefile.in	Tue Aug  1 17:53:41 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/IRIX/Makefile.in
diff -c /dev/null openafs/src/platform/IRIX/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/IRIX/Makefile.in	Tue Aug  1 17:53:41 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/LINUX/Makefile.in
diff -c /dev/null openafs/src/platform/LINUX/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/LINUX/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/NBSD/Makefile.in
diff -c /dev/null openafs/src/platform/NBSD/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/NBSD/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/OBSD/Makefile.in
diff -c /dev/null openafs/src/platform/OBSD/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/OBSD/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/platform/SOLARIS/Makefile.in
diff -c /dev/null openafs/src/platform/SOLARIS/Makefile.in:1.1.2.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/platform/SOLARIS/Makefile.in	Tue Aug  1 17:53:42 2006
***************
*** 0 ****
--- 1,14 ----
+ # 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
+ 
+ SHELL=/bin/sh
+ 
+ # We have no platform-specific stuff for this platform (yet).
+ all:
+ install:
+ dest:
+ clean:
Index: openafs/src/rx/rx_globals.h
diff -c openafs/src/rx/rx_globals.h:1.21.2.2 openafs/src/rx/rx_globals.h:1.21.2.3
*** openafs/src/rx/rx_globals.h:1.21.2.2	Tue Jul  4 13:05:40 2006
--- openafs/src/rx/rx_globals.h	Mon Jul 31 12:19:14 2006
***************
*** 522,528 ****
--- 522,532 ----
  #define dpf(args)
  #endif
  #else
+ #ifdef DPF_FSLOG
+ #define dpf(args) FSLog args
+ #else
  #define dpf(args) if (rx_debugFile) rxi_DebugPrint args; else
+ #endif 
  #endif
  #define rx_Log_event rxevent_debugFile
  
Index: openafs/src/rx/rx_kcommon.c
diff -c openafs/src/rx/rx_kcommon.c:1.56 openafs/src/rx/rx_kcommon.c:1.56.2.1
*** openafs/src/rx/rx_kcommon.c:1.56	Wed Mar  8 00:04:36 2006
--- openafs/src/rx/rx_kcommon.c	Mon Jul 31 11:09:09 2006
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_kcommon.c,v 1.56 2006/03/08 05:04:36 jaltman Exp $");
  
  #include "rx/rx_kcommon.h"
  
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_kcommon.c,v 1.56.2.1 2006/07/31 15:09:09 shadow Exp $");
  
  #include "rx/rx_kcommon.h"
  
***************
*** 1138,1146 ****
      if (!code) {
  	p->length = nbytes - RX_HEADER_SIZE;;
  	if ((nbytes > tlen) || (p->length & 0x8000)) {	/* Bogus packet */
! 	    if (nbytes > 0)
! 		rxi_MorePackets(rx_initSendWindow);
! 	    else {
  		MUTEX_ENTER(&rx_stats_mutex);
  		rx_stats.bogusPacketOnRead++;
  		rx_stats.bogusHost = from.sin_addr.s_addr;
--- 1138,1144 ----
      if (!code) {
  	p->length = nbytes - RX_HEADER_SIZE;;
  	if ((nbytes > tlen) || (p->length & 0x8000)) {	/* Bogus packet */
! 	    if (nbytes <= 0) {
  		MUTEX_ENTER(&rx_stats_mutex);
  		rx_stats.bogusPacketOnRead++;
  		rx_stats.bogusHost = from.sin_addr.s_addr;
Index: openafs/src/rx/rx_packet.c
diff -c openafs/src/rx/rx_packet.c:1.62 openafs/src/rx/rx_packet.c:1.62.2.1
*** openafs/src/rx/rx_packet.c:1.62	Mon Apr 17 14:59:41 2006
--- openafs/src/rx/rx_packet.c	Mon Jul 31 11:09:09 2006
***************
*** 15,21 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.62 2006/04/17 18:59:41 shadow Exp $");
  
  #ifdef KERNEL
  #if defined(UKERNEL)
--- 15,21 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.62.2.1 2006/07/31 15:09:09 shadow Exp $");
  
  #ifdef KERNEL
  #if defined(UKERNEL)
***************
*** 1394,1406 ****
  
      p->length = (nbytes - RX_HEADER_SIZE);
      if ((nbytes > tlen) || (p->length & 0x8000)) {	/* Bogus packet */
! 	if (nbytes > 0)
! 	    rxi_MorePackets(rx_initSendWindow);
! 	else if (nbytes < 0 && errno == EWOULDBLOCK) {
  	    MUTEX_ENTER(&rx_stats_mutex);
  	    rx_stats.noPacketOnRead++;
  	    MUTEX_EXIT(&rx_stats_mutex);
! 	} else {
  	    MUTEX_ENTER(&rx_stats_mutex);
  	    rx_stats.bogusPacketOnRead++;
  	    rx_stats.bogusHost = from.sin_addr.s_addr;
--- 1394,1404 ----
  
      p->length = (nbytes - RX_HEADER_SIZE);
      if ((nbytes > tlen) || (p->length & 0x8000)) {	/* Bogus packet */
! 	if (nbytes < 0 && errno == EWOULDBLOCK) {
  	    MUTEX_ENTER(&rx_stats_mutex);
  	    rx_stats.noPacketOnRead++;
  	    MUTEX_EXIT(&rx_stats_mutex);
! 	} else if (nbytes <= 0) {
  	    MUTEX_ENTER(&rx_stats_mutex);
  	    rx_stats.bogusPacketOnRead++;
  	    rx_stats.bogusHost = from.sin_addr.s_addr;
Index: openafs/src/rxkad/bg-fcrypt.c
diff -c openafs/src/rxkad/bg-fcrypt.c:1.7 openafs/src/rxkad/bg-fcrypt.c:1.7.4.1
*** openafs/src/rxkad/bg-fcrypt.c:1.7	Mon May 30 00:55:31 2005
--- openafs/src/rxkad/bg-fcrypt.c	Wed Aug  2 15:01:22 2006
***************
*** 38,44 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rxkad/bg-fcrypt.c,v 1.7 2005/05/30 04:55:31 shadow Exp $");
  
  #define DEBUG 0
  #ifdef KERNEL
--- 38,44 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rxkad/bg-fcrypt.c,v 1.7.4.1 2006/08/02 19:01:22 shadow Exp $");
  
  #define DEBUG 0
  #ifdef KERNEL
***************
*** 76,86 ****
  #include "private_data.h"
  #include <des/stats.h>
  
- #undef WORDS_BIGENDIAN
- #ifdef AFSBIG_ENDIAN
- #define WORDS_BIGENDIAN 1
- #endif
- 
  /*
   * Unrolling of the inner loops helps the most on pentium chips
   * (ca 18%). On risc machines only expect a modest improvement (ca 5%).
--- 76,81 ----
Index: openafs/src/rxkad/md4.c
diff -c openafs/src/rxkad/md4.c:1.2 openafs/src/rxkad/md4.c:1.2.8.1
*** openafs/src/rxkad/md4.c:1.2	Wed Aug 18 21:07:49 2004
--- openafs/src/rxkad/md4.c	Wed Aug  2 15:01:22 2006
***************
*** 69,80 ****
  #include "rxkad.h"
  #endif /* defined(UKERNEL) */
  
! RCSID("$Id: md4.c,v 1.2 2004/08/19 01:07:49 kolya Exp $");
  
- #undef WORDS_BIGENDIAN
- #ifdef AFSBIG_ENDIAN
- #define WORDS_BIGENDIAN 1
- #endif
  
  #include "md4.h"
  #include "hash.h"
--- 69,80 ----
  #include "rxkad.h"
  #endif /* defined(UKERNEL) */
  
! RCSID("$Id: md4.c,v 1.2.8.1 2006/08/02 19:01:22 shadow Exp $");
! 
! 
! 
! 
  
  
  #include "md4.h"
  #include "hash.h"
Index: openafs/src/rxkad/md5.c
diff -c openafs/src/rxkad/md5.c:1.2 openafs/src/rxkad/md5.c:1.2.8.1
*** openafs/src/rxkad/md5.c:1.2	Wed Aug 18 21:07:49 2004
--- openafs/src/rxkad/md5.c	Wed Aug  2 15:01:22 2006
***************
*** 69,80 ****
  #include "rxkad.h"
  #endif /* defined(UKERNEL) */
  
! RCSID("$Id: md5.c,v 1.2 2004/08/19 01:07:49 kolya Exp $");
  
- #undef WORDS_BIGENDIAN
- #ifdef AFSBIG_ENDIAN
- #define WORDS_BIGENDIAN 1
- #endif
  
  #include "md5.h"
  #include "hash.h"
--- 69,80 ----
  #include "rxkad.h"
  #endif /* defined(UKERNEL) */
  
! RCSID("$Id: md5.c,v 1.2.8.1 2006/08/02 19:01:22 shadow Exp $");
! 
! 
! 
! 
  
  
  #include "md5.h"
  #include "hash.h"
Index: openafs/src/rxkad/private_data.h
diff -c openafs/src/rxkad/private_data.h:1.4.14.1 openafs/src/rxkad/private_data.h:1.4.14.2
*** openafs/src/rxkad/private_data.h:1.4.14.1	Thu Jun  1 11:38:59 2006
--- openafs/src/rxkad/private_data.h	Thu Jul 13 13:58:10 2006
***************
*** 51,61 ****
  #define PDATA_SIZE(l) (sizeof(struct rxkad_cprivate) - MAXKTCTICKETLEN + (l))
  
  /* private data in client-side security object */
  struct rxkad_cprivate {
-     afs_int32 kvno;		/* key version of ticket */
-     afs_int16 ticketLen;	/* length of ticket */
      rxkad_type type;		/* always client */
      rxkad_level level;		/* minimum security level of client */
      fc_KeySchedule keysched;	/* the session key */
      fc_InitializationVector ivec;	/* initialization vector for cbc */
      char ticket[MAXKTCTICKETLEN];	/* the ticket for the server */
--- 51,62 ----
  #define PDATA_SIZE(l) (sizeof(struct rxkad_cprivate) - MAXKTCTICKETLEN + (l))
  
  /* private data in client-side security object */
+ /* type and level offsets should match sprivate */
  struct rxkad_cprivate {
      rxkad_type type;		/* always client */
      rxkad_level level;		/* minimum security level of client */
+     afs_int32 kvno;		/* key version of ticket */
+     afs_int16 ticketLen;	/* length of ticket */
      fc_KeySchedule keysched;	/* the session key */
      fc_InitializationVector ivec;	/* initialization vector for cbc */
      char ticket[MAXKTCTICKETLEN];	/* the ticket for the server */
***************
*** 69,80 ****
  };
  
  /* private data in server-side security object */
  struct rxkad_sprivate {
      char *get_key_rock;		/* rock for get_key function */
      int (*get_key) ();		/* func. of kvno and server key ptr */
      int (*user_ok) ();		/* func called with new client name */
-     rxkad_type type;		/* always server */
-     rxkad_level level;		/* minimum security level of server */
  };
  
  /* private data in server-side connection */
--- 70,82 ----
  };
  
  /* private data in server-side security object */
+ /* type and level offsets should match cprivate */
  struct rxkad_sprivate {
+     rxkad_type type;		/* always server */
+     rxkad_level level;		/* minimum security level of server */
      char *get_key_rock;		/* rock for get_key function */
      int (*get_key) ();		/* func. of kvno and server key ptr */
      int (*user_ok) ();		/* func called with new client name */
  };
  
  /* private data in server-side connection */
Index: openafs/src/rxkad/rxkad.p.h
diff -c openafs/src/rxkad/rxkad.p.h:1.15 openafs/src/rxkad/rxkad.p.h:1.15.4.1
*** openafs/src/rxkad/rxkad.p.h:1.15	Mon May 30 00:55:31 2005
--- openafs/src/rxkad/rxkad.p.h	Wed Jul 19 00:20:35 2006
***************
*** 88,94 ****
  #define rxkad_LevelIndex(level) \
      ((((level) >= 0) && ((level) <= 2)) ? (level) : 0)
  #define rxkad_TypeIndex(type) \
!     ((((type) == 1) || ((type) == 2)) ? (type) : 0)
  
  
  extern int rxkad_EpochWasSet;	/* TRUE => we called rx_SetEpoch */
--- 88,94 ----
  #define rxkad_LevelIndex(level) \
      ((((level) >= 0) && ((level) <= 2)) ? (level) : 0)
  #define rxkad_TypeIndex(type) \
!     ((((type) == 1) || ((type) == 2)) ? ((type)-1) : 0)
  
  
  extern int rxkad_EpochWasSet;	/* TRUE => we called rx_SetEpoch */
Index: openafs/src/rxkad/domestic/fcrypt.c
diff -c openafs/src/rxkad/domestic/fcrypt.c:1.18 openafs/src/rxkad/domestic/fcrypt.c:1.18.2.1
*** openafs/src/rxkad/domestic/fcrypt.c:1.18	Mon Feb 27 19:17:55 2006
--- openafs/src/rxkad/domestic/fcrypt.c	Wed Aug  2 15:01:23 2006
***************
*** 20,26 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rxkad/domestic/fcrypt.c,v 1.18 2006/02/28 00:17:55 shadow Exp $");
  
  #define DEBUG 0
  #ifdef KERNEL
--- 20,26 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rxkad/domestic/fcrypt.c,v 1.18.2.1 2006/08/02 19:01:23 shadow Exp $");
  
  #define DEBUG 0
  #ifdef KERNEL
***************
*** 120,126 ****
      volatile unsigned char *Schar = (unsigned char *)&S;
      int i;
  
! #if defined(vax) || (defined(mips) && defined(MIPSEL)) || defined(AFSLITTLE_ENDIAN)
  #define Byte0 3
  #define Byte1 2
  #define Byte2 1
--- 120,126 ----
      volatile unsigned char *Schar = (unsigned char *)&S;
      int i;
  
! #ifndef WORDS_BIGENDIAN
  #define Byte0 3
  #define Byte1 2
  #define Byte2 1
Index: openafs/src/sys/.cvsignore
diff -c openafs/src/sys/.cvsignore:1.3 openafs/src/sys/.cvsignore:1.3.4.3
*** openafs/src/sys/.cvsignore:1.3	Sat Oct 15 11:19:38 2005
--- openafs/src/sys/.cvsignore	Mon Jul 31 17:27:41 2006
***************
*** 11,13 ****
--- 11,16 ----
  rmtsysd
  afs.exp
  afsl.exp
+ Krmtsys.cs.c
+ Krmtsys.h
+ Krmtsys.xdr.c
Index: openafs/src/sys/Makefile.in
diff -c openafs/src/sys/Makefile.in:1.36 openafs/src/sys/Makefile.in:1.36.2.3
*** openafs/src/sys/Makefile.in:1.36	Thu Mar  9 01:34:57 2006
--- openafs/src/sys/Makefile.in	Mon Jul 31 17:27:41 2006
***************
*** 139,144 ****
--- 139,153 ----
  rmtsys.h: rmtsys.xg
  	${RXGEN} -h -o $@ ${srcdir}/rmtsys.xg
  
+ Krmtsys.cs.c: rmtsys.xg Krmtsys.h
+ 	${RXGEN} -k -C -o Krmtsys.cs.c ${srcdir}/rmtsys.xg
+ 
+ Krmtsys.xdr.c: rmtsys.xg
+ 	${RXGEN} -k -c -o Krmtsys.xdr.c ${srcdir}/rmtsys.xg
+ 
+ Krmtsys.h: rmtsys.xg
+ 	${RXGEN} -k -h -o Krmtsys.h ${srcdir}/rmtsys.xg
+ 
  rmtsysd: rmtsysd.o libsys.a
  	${CC} ${CFLAGS} -o rmtsysd rmtsysd.o ${LIBS}
  
***************
*** 223,228 ****
--- 232,240 ----
  ${TOP_INCDIR}/afs/afssyscalls.h: afssyscalls.h
  	${INSTALL} $? $@
  
+ ${TOP_INCDIR}/afs/rmtsys.h: rmtsys.h
+ 	${INSTALL} $? $@
+ 
  ${TOP_INCDIR}/afs/afs.exp: afs.exp
  	@set -x; case ${SYS_NAME} in \
  		rs_aix* ) \
***************
*** 258,267 ****
  
  depinstall: \
  	${TOP_INCDIR}/afs/afssyscalls.h \
  	${TOP_INCDIR}/afs/afs.exp \
  	${TOP_INCDIR}/afs/xfsattrs.h \
  	${KERNELDIR}/afs/xfsattrs.h \
! 	${UKERNELDIR}/afs/afsl.exp
  
  install: \
      ${DESTDIR}${libdir}/afs/libsys.a \
--- 270,281 ----
  
  depinstall: \
  	${TOP_INCDIR}/afs/afssyscalls.h \
+ 	${TOP_INCDIR}/afs/rmtsys.h \
  	${TOP_INCDIR}/afs/afs.exp \
  	${TOP_INCDIR}/afs/xfsattrs.h \
  	${KERNELDIR}/afs/xfsattrs.h \
! 	${UKERNELDIR}/afs/afsl.exp \
! 	Krmtsys.cs.c Krmtsys.h Krmtsys.xdr.c rmtsys.h 
  
  install: \
      ${DESTDIR}${libdir}/afs/libsys.a \
***************
*** 364,368 ****
  	$(RM) -f *.o libsys.a xfsinode iinc idec icreate iopen istat core \
  	rmtsysc rmtsyss *.o rmtsys.ss.c rmtsys.cs.c rmtsys.xdr.c rmtsys.h \
  	rmtsysd AFS_component_version_number.c pagsh pagsh.krb \
! 	afs.exp afsl.exp libafssetpag.*
  	$(RM) -rf picobj
--- 378,382 ----
  	$(RM) -f *.o libsys.a xfsinode iinc idec icreate iopen istat core \
  	rmtsysc rmtsyss *.o rmtsys.ss.c rmtsys.cs.c rmtsys.xdr.c rmtsys.h \
  	rmtsysd AFS_component_version_number.c pagsh pagsh.krb \
! 	afs.exp afsl.exp libafssetpag.* Krmtsys.cs.c Krmtsys.h Krmtsys.xdr.c
  	$(RM) -rf picobj
Index: openafs/src/sys/pagsh.c
diff -c openafs/src/sys/pagsh.c:1.9 openafs/src/sys/pagsh.c:1.9.14.1
*** openafs/src/sys/pagsh.c:1.9	Tue Jul 15 19:16:54 2003
--- openafs/src/sys/pagsh.c	Wed Jul 19 17:17:18 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/pagsh.c,v 1.9 2003/07/15 23:16:54 shadow Exp $");
  
  #ifdef	AFS_AIX32_ENV
  #include <signal.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/pagsh.c,v 1.9.14.1 2006/07/19 21:17:18 shadow Exp $");
  
  #ifdef	AFS_AIX32_ENV
  #include <signal.h>
***************
*** 86,91 ****
--- 86,98 ----
  static afs_uint32
  curpag(void)
  {
+ #if defined(AFS_AIX51_ENV)
+     afs_int32 pag;
+ 
+     if (kcred_getpag(cred, PAG_AFS, &pag) < 0 || pag == 0)
+         pag = NOPAG;
+     return pag;
+ #else
      afs_uint32 groups[NGROUPS_MAX];
      afs_uint32 g0, g1;
      afs_uint32 h, l, ret;
***************
*** 109,114 ****
--- 116,122 ----
  	    return -1;
      }
      return -1;
+ #endif
  }
  
  int
Index: openafs/src/sys/pioctl_nt.c
diff -c openafs/src/sys/pioctl_nt.c:1.34 openafs/src/sys/pioctl_nt.c:1.34.4.2
*** openafs/src/sys/pioctl_nt.c:1.34	Sat Nov  5 01:48:24 2005
--- openafs/src/sys/pioctl_nt.c	Thu Jul 20 17:46:21 2006
***************
*** 35,41 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.34 2005/11/05 06:48:24 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <windows.h>
--- 35,41 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.34.4.2 2006/07/20 21:46:21 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <windows.h>
***************
*** 256,263 ****
      if (error) return 0;
      return 1;
  }
! 
  #define KERB5DLL "krb5_32.dll"
  static BOOL
  IsKrb5Available()
  {
--- 256,266 ----
      if (error) return 0;
      return 1;
  }
! #if defined(_IA64_) || defined(_AMD64_)
! #define KERB5DLL "krb5_64.dll"
! #else
  #define KERB5DLL "krb5_32.dll"
+ #endif
  static BOOL
  IsKrb5Available()
  {
***************
*** 329,336 ****
--- 332,341 ----
  static long
  GetIoctlHandle(char *fileNamep, HANDLE * handlep)
  {
+ #ifndef AFSIFS
      char *drivep;
      char netbiosName[MAX_NB_NAME_LENGTH];
+ #endif
      char tbuffer[256]="";
      HANDLE fh;
      HKEY hk;
***************
*** 416,422 ****
      }
  #endif
  	
! 	if (fh == INVALID_HANDLE_VALUE) {
          int  gonext = 0;
  
          gle = GetLastError();
--- 421,427 ----
      }
  #endif
  	
!     if (fh == INVALID_HANDLE_VALUE) {
          int  gonext = 0;
  
          gle = GetLastError();
***************
*** 637,642 ****
--- 642,650 ----
      long rcount;
      long ioCount;
      DWORD gle;
+ #ifdef AFSIFS
+     char *data;
+ #endif
  
      rcount = (long)(reqp->mp - reqp->data);
      if (rcount <= 0) {
***************
*** 758,769 ****
      if (!pathp)
          return CM_ERROR_NOSUCHPATH;
  
-     //sprintf(tpath, "%c:\\", pathp[0]);
      rootDir = CreateFile(pathp, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
      if (rootDir == INVALID_HANDLE_VALUE)
          return CM_ERROR_NOSUCHPATH;
  
!     wpath = tpath;
      length = 0;
      if (!DeviceIoControl(rootDir, IOCTL_AFSRDR_GET_PATH, NULL, 0, wpath, 1000, &length, NULL))
      {
--- 766,776 ----
      if (!pathp)
          return CM_ERROR_NOSUCHPATH;
  
      rootDir = CreateFile(pathp, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
      if (rootDir == INVALID_HANDLE_VALUE)
          return CM_ERROR_NOSUCHPATH;
  
!     wpath = (wchar_t *)tpath;
      length = 0;
      if (!DeviceIoControl(rootDir, IOCTL_AFSRDR_GET_PATH, NULL, 0, wpath, 1000, &length, NULL))
      {
***************
*** 774,783 ****
  
      code = WideCharToMultiByte(CP_UTF8, 0/*WC_NO_BEST_FIT_CHARS*/, wpath, length/sizeof(wchar_t), outPathp, outSize/sizeof(wchar_t), NULL, NULL);
  
- //    strcpy(outPathp, tpath);
      return 0;
! #endif
! 
      if (pathp[0] != 0 && pathp[1] == ':') {
  	/* there's a drive letter there */
  	firstp = pathp + 2;
--- 781,788 ----
  
      code = WideCharToMultiByte(CP_UTF8, 0/*WC_NO_BEST_FIT_CHARS*/, wpath, length/sizeof(wchar_t), outPathp, outSize/sizeof(wchar_t), NULL, NULL);
  
      return 0;
! #else
      if (pathp[0] != 0 && pathp[1] == ':') {
  	/* there's a drive letter there */
  	firstp = pathp + 2;
***************
*** 879,884 ****
--- 884,890 ----
  	    *p = '\\';
      }
      return 0;
+ #endif
  }
  
  long
Index: openafs/src/sys/rmtsys.xg
diff -c openafs/src/sys/rmtsys.xg:1.3 openafs/src/sys/rmtsys.xg:1.3.2.3
*** openafs/src/sys/rmtsys.xg:1.3	Sat Feb 25 01:44:18 2006
--- openafs/src/sys/rmtsys.xg	Mon Jul 31 17:27:41 2006
***************
*** 10,15 ****
--- 10,16 ----
  package RMTSYS_
  statindex 10
  prefix	S
+ const RMTSYS_MAXPATHLEN = 4096;
  #define MAXPATHLEN 4096
  
  %#include <rx/rx.h>
Index: openafs/src/sys/rmtsysc.c
diff -c openafs/src/sys/rmtsysc.c:1.11 openafs/src/sys/rmtsysc.c:1.11.14.1
*** openafs/src/sys/rmtsysc.c:1.11	Tue Jul 15 19:16:54 2003
--- openafs/src/sys/rmtsysc.c	Mon Jul 31 11:34:27 2006
***************
*** 16,22 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/rmtsysc.c,v 1.11 2003/07/15 23:16:54 shadow Exp $");
  
  #include <errno.h>
  #include <limits.h>
--- 16,22 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/rmtsysc.c,v 1.11.14.1 2006/07/31 15:34:27 shadow Exp $");
  
  #include <errno.h>
  #include <limits.h>
***************
*** 45,51 ****
  static afs_int32 hostAddr = 0;
  static int hostAddrLookup = 0;
  char *afs_server = 0, server_name[128];
- afs_int32 host;
  static afs_int32 SetClientCreds();
  
  /* Picks up the name of the remote afs client host where the rmtsys 
--- 45,50 ----
***************
*** 122,127 ****
--- 121,127 ----
  {
      struct rx_connection *conn;
      struct rx_securityClass *null_securityObject;
+     afs_int32 host;
  
      if (!(host = GetAfsServerAddr(syscall))) {
  	*errorcode = -1;
Index: openafs/src/tsm41/Makefile.in
diff -c openafs/src/tsm41/Makefile.in:1.8 openafs/src/tsm41/Makefile.in:1.8.2.1
*** openafs/src/tsm41/Makefile.in:1.8	Thu Mar  9 01:34:59 2006
--- openafs/src/tsm41/Makefile.in	Thu Jul 13 13:23:29 2006
***************
*** 10,56 ****
  
  
  CFLAGS=${OPTIMIZE} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS} ${ARCHFLAGS}
! AFSLIBS =  ${TOP_LIBDIR}/libkauth.a ${TOP_LIBDIR}/libprot.a \
! 	   ${TOP_LIBDIR}/libubik.a ${TOP_LIBDIR}/libauth.a \
! 	   ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/libsys.a \
! 	   ${TOP_LIBDIR}/libdes.a ${TOP_LIBDIR}/librx.a \
! 	   ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/libcmd.a \
! 	   ${TOP_LIBDIR}/libcom_err.a ${TOP_LIBDIR}/util.a \
! 	   ${TOP_LIBDIR}/libaudit.a
! KAFSLIBS = ${TOP_LIBDIR}/libkauth.krb.a ${TOP_LIBDIR}/libprot.a \
! 	   ${TOP_LIBDIR}/libubik.a ${TOP_LIBDIR}/libauth.krb.a \
! 	   ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/libsys.a \
! 	   ${TOP_LIBDIR}/libdes.a ${TOP_LIBDIR}/librx.a \
! 	   ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/libcmd.a \
! 	   ${TOP_LIBDIR}/libcom_err.a ${TOP_LIBDIR}/util.a \
! 	   ${TOP_LIBDIR}/libaudit.a
! AUTHLIBS=afs_dynamic_auth afs_dynamic_kerbauth
  IMPORTS = -bI:/lib/aio.exp -bI:/lib/netinet.exp -bI:/lib/sockets.exp -bI:/lib/statcmd.exp 
  LDFLAGS = -eafs_initialize ${IMPORTS} -lsys -lcsys -lc
  
  all: $(AUTHLIBS)
  
! install install.noversion:   
  
  clean:
  	$(RM) -f $(AUTHLIBS) $(AUTHFILES) so_locations
  
! afs_dynamic_auth: aix41_auth.o ${AFSLIBS} ${AUTHFILES} 
! 	$(LD) -o afs_dynamic_auth aix41_auth.o $(AFSLIBS) ${AUTHFILES} ${XLIBS} ${LDFLAGS}
  
! afs_dynamic_kerbauth: aix41_auth_krb.o ${KAFSLIBS} ${AUTHFILES}
! 	$(LD) -o afs_dynamic_kerbauth aix41_auth_krb.o $(KAFSLIBS) ${AUTHFILES} ${XLIBS} ${LDFLAGS}
  
! aix41_auth.o: ${srcdir}/aix41_auth.c
! 	${CC} ${CFLAGS} -c ${srcdir}/aix41_auth.c
  
- aix41_auth_krb.o: ${srcdir}/aix41_auth.c
- 	${CC} ${CFLAGS} -DAFS_KERBEROS_ENV -c ${srcdir}/aix41_auth.c -o aix41_auth_krb.o
  ${DEST}/root.client/usr/vice/etc/afs_dynamic_auth: afs_dynamic_auth
  	${INSTALL} $? $@
  
  ${DEST}/root.client/usr/vice/etc/afs_dynamic_kerbauth: afs_dynamic_kerbauth
  	${INSTALL} $? $@
  
! dest:  ${DEST}/root.client/usr/vice/etc/afs_dynamic_auth ${DEST}/root.client/usr/vice/etc/afs_dynamic_kerbauth
  
--- 10,109 ----
  
  
  CFLAGS=${OPTIMIZE} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS} ${ARCHFLAGS}
! CCRULE=${CC} ${CFLAGS} -c $? -o $@
! 
! AFSLIBS = \
! 		${TOP_LIBDIR}/libkauth.a \
! 		${TOP_LIBDIR}/libprot.a \
! 		${TOP_LIBDIR}/libubik.a \
! 		${TOP_LIBDIR}/libauth.a \
! 		${TOP_LIBDIR}/librxkad.a \
! 		${TOP_LIBDIR}/libsys.a \
! 		${TOP_LIBDIR}/libdes.a \
! 		${TOP_LIBDIR}/librx.a \
! 		${TOP_LIBDIR}/liblwp.a \
! 		${TOP_LIBDIR}/libcmd.a \
! 		${TOP_LIBDIR}/libcom_err.a \
! 		${TOP_LIBDIR}/util.a \
! 		${TOP_LIBDIR}/libaudit.a
! 
! KAFSLIBS = \
! 		${TOP_LIBDIR}/libkauth.krb.a \
! 		${TOP_LIBDIR}/libprot.a \
! 		${TOP_LIBDIR}/libubik.a \
! 		${TOP_LIBDIR}/libauth.krb.a \
! 		${TOP_LIBDIR}/librxkad.a \
! 		${TOP_LIBDIR}/libsys.a \
! 		${TOP_LIBDIR}/libdes.a \
! 		${TOP_LIBDIR}/librx.a \
! 		${TOP_LIBDIR}/liblwp.a \
! 		${TOP_LIBDIR}/libcmd.a \
! 		${TOP_LIBDIR}/libcom_err.a \
! 		${TOP_LIBDIR}/util.a \
! 		${TOP_LIBDIR}/libaudit.a
! 
! AUTH_OBJS = \
! 		aix_auth.o \
! 		aix_ident.o \
! 		aix_auth_common.o \
! 		aix_ktc_null.o
! 
! AUTH_KRB_OBJS = \
! 		aix_auth.o \
! 		aix_ident.o \
! 		aix_auth_common.o \
! 		aix_ktc_krb.o \
! 
! AUTHLIBS= \
! 		afs_dynamic_auth \
! 		afs_dynamic_kerbauth
! 
  IMPORTS = -bI:/lib/aio.exp -bI:/lib/netinet.exp -bI:/lib/sockets.exp -bI:/lib/statcmd.exp 
  LDFLAGS = -eafs_initialize ${IMPORTS} -lsys -lcsys -lc
  
  all: $(AUTHLIBS)
  
! install install.noversion:
  
  clean:
  	$(RM) -f $(AUTHLIBS) $(AUTHFILES) so_locations
  
! afs_dynamic_auth: ${AUTH_OBJS} ${AFSLIBS} ${AUTHFILES}
! 	$(LD) -o $@ ${AUTH_OBJS} $(AFSLIBS) ${AUTHFILES} ${XLIBS} ${LDFLAGS}
! 
! afs_dynamic_kerbauth: ${AUTH_KRB_OBJS} ${KAFSLIBS} ${AUTHFILES}
! 	$(LD) -o $@ ${AUTH_KRB_OBJS} $(KAFSLIBS) ${AUTHFILES} ${XLIBS} ${LDFLAGS}
  
! aix_auth_common.o: ${srcdir}/aix_auth_common.c
! 	${CCRULE}
  
! aix_ktc_krb.o: ${srcdir}/aix_ktc.c
! 	${CCRULE} -DAFS_KERBEROS_ENV
! 
! aix_ktc_null.o: ${srcdir}/aix_ktc.c
! 	${CCRULE}
! 
! aix_auth.o:
! 	case ${SYS_NAME} in \
! 	rs_aix4*) \
! 		${CC} ${CFLAGS} -c ${srcdir}/aix41_auth.c -o $@ ;; \
! 	rs_aix5*) \
! 		${CC} ${CFLAGS} -c ${srcdir}/aix5_auth.c -o $@ ;; \
! 	*) \
! 		echo "not building aix lam binary for ${SYS_NAME}" ;; \
! 	esac
! 
! # aix41_ident.c is a null source file for rs_aix5*
! aix_ident.o: ${srcdir}/aix41_ident.c
! 	${CCRULE}
  
  ${DEST}/root.client/usr/vice/etc/afs_dynamic_auth: afs_dynamic_auth
  	${INSTALL} $? $@
  
  ${DEST}/root.client/usr/vice/etc/afs_dynamic_kerbauth: afs_dynamic_kerbauth
  	${INSTALL} $? $@
  
! dest: \
! 	${DEST}/root.client/usr/vice/etc/afs_dynamic_auth \
! 	${DEST}/root.client/usr/vice/etc/afs_dynamic_kerbauth
  
Index: openafs/src/tsm41/aix41_auth.c
diff -c openafs/src/tsm41/aix41_auth.c:1.11 openafs/src/tsm41/aix41_auth.c:1.11.6.1
*** openafs/src/tsm41/aix41_auth.c:1.11	Sun May  8 01:50:23 2005
--- openafs/src/tsm41/aix41_auth.c	Thu Jul 13 13:23:29 2006
***************
*** 11,19 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/tsm41/aix41_auth.c,v 1.11 2005/05/08 05:50:23 shadow Exp $");
  
! #if defined(AFS_AIX41_ENV)
  #include <sys/types.h>
  #include <sys/param.h>
  #include <stdio.h>
--- 11,19 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/tsm41/aix41_auth.c,v 1.11.6.1 2006/07/13 17:23:29 shadow Exp $");
  
! #if defined(AFS_AIX41_ENV) && !defined(AFS_AIX51_ENV)
  #include <sys/types.h>
  #include <sys/param.h>
  #include <stdio.h>
***************
*** 29,203 ****
  #include <afs/kauth.h>
  #include <afs/kautils.h>
  
! struct passwd *afs_getpwnam_int(char *, int);
! 
! int
! afs_authenticate(char *userName, char *response, int *reenter, char **message)
! {
!     char *reason, *pword, prompt[256];
!     struct passwd *pwd;
!     int code, unixauthneeded, password_expires = -1;
! 
!     *reenter = 0;
!     *message = (char *)0;
!     if (response) {
! 	pword = response;
!     } else {
! 	sprintf(prompt, "Enter AFS password for %s: ", userName);
! 	pword = getpass(prompt);
! 	if (strlen(pword) == 0) {
! 	    printf
! 		("Unable to read password because zero length passord is illegal\n");
! 	    *message = (char *)malloc(256);
! 	    sprintf(*message,
! 		    "Unable to read password because zero length passord is illegal\n");
! 	    return AUTH_FAILURE;
! 	}
!     }
! #ifdef AFS_AIX51_ENV
!     if ((pwd = afs_getpwnam_int(userName, 1)) == NULL) 
! #else
!     if ((pwd = getpwnam(userName)) == NULL) 
! #endif
!       {
! 	*message = (char *)malloc(256);
! 	sprintf(*message, "getpwnam for user failed\n");
! 	return AUTH_FAILURE;
!     }
!     if (code =
! 	ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION + KA_USERAUTH_DOSETPAG,
! 				   userName, (char *)0, (char *)0, pword, 0,
! 				   &password_expires, 0, &reason)) {
! 	if (code == KANOENT)
! 	    return AUTH_NOTFOUND;
! 	*message = (char *)malloc(1024);
! 	sprintf(*message, "Unable to authenticate to AFS because %s.\n",
! 		reason);
! 	return AUTH_FAILURE;
!     }
! #if defined(AFS_KERBEROS_ENV)
!     setup_ticket_file(userName);
! #endif
!     return AUTH_SUCCESS;
! }
! 
! int
! afs_chpass(char *userName, char *oldPasswd, char *newPasswd, char **message)
! {
!     return AUTH_SUCCESS;
! }
! 
! int
! afs_passwdexpired(char *userName, char **message)
! {
!     return AUTH_SUCCESS;
! }
! 
! int
! afs_passwdrestrictions(char *userName, char *newPasswd, char *oldPasswd,
! 		       char **message)
! {
!     return AUTH_SUCCESS;
! }
! 
! int
! afs_getgrset(char *userName)
! {
!     return NULL;
! }
! 
! struct group *
! afs_getgrgid(int id)
! {
! #ifdef AFS_AIX51_ENV
!     static char name[64];
!     static char passwd[64];
!     static struct group grp;
!     struct group *g;
!     char *mem = NULL;
! 
!     while ((g = getgrent()) != NULL) {
! 	if (g->gr_gid == id) {
! 	    strncpy(&name, g->gr_name, sizeof(name));
! 	    strncpy(&passwd, g->gr_passwd, sizeof(passwd));
! 	    grp.gr_name = &name;
! 	    grp.gr_passwd = &passwd;
! 	    grp.gr_gid = g->gr_gid;
! 	    grp.gr_mem = &mem;
! 	    break;
! 	}
!     }
!     endgrent();
!     if (g)
! 	return &grp;
! #endif
!     return NULL;
! }
! 
! struct group *
! afs_getgrnam(char *name)
! {
!     return NULL;
! }
! 
! #ifdef AFS_AIX51_ENV
! struct passwd *
! afs_getpwnam(char *user)
! {
!   return (NULL);
! }
! 
! struct passwd *
! afs_getpwnam_int(char *user, int ignore)
! {
!     static char name[64];
!     static char passwd[64];
!     static char gecos[256];
!     static char dir[256];
!     static char shell[256];
!     static struct passwd pwd;
!     struct passwd *p;
! 
!     pwd.pw_uid = 4294967294;
!     pwd.pw_gid = 4294967294;
!     strcpy((char *)&shell, "/bin/false");
!     if (!user)
!        return &pwd;
! 
!     p = getpwnam (user);
!     
!     if (p) {
!       strncpy(&name, p->pw_name, sizeof(name));
!       strncpy(&passwd, p->pw_passwd, sizeof(passwd));
!       strncpy(&gecos, p->pw_gecos, sizeof(gecos));
!       strncpy(&dir, p->pw_dir, sizeof(dir));
!       strncpy(&shell, p->pw_shell, sizeof(shell));
!     }
!     pwd.pw_name = &name;
!     pwd.pw_passwd = &passwd;
!     pwd.pw_uid = p->pw_uid;
!     pwd.pw_gid = p->pw_gid;
!     pwd.pw_gecos = &gecos;
!     pwd.pw_dir = &dir;
!     pwd.pw_shell = &shell;
! 
!     if (ignore && (p == NULL))
!        return NULL;
!     return &pwd;
! }
! #else
! int
! afs_getpwnam(int id)
! {
!     return NULL;
! }
! #endif
! 
! int
! afs_getpwuid(char *name)
! {
!     return NULL;
! }
  
  int
  afs_initialize(struct secmethod_table *meths)
--- 29,35 ----
  #include <afs/kauth.h>
  #include <afs/kautils.h>
  
! #include "aix_auth_prototypes.h"
  
  int
  afs_initialize(struct secmethod_table *meths)
***************
*** 216,221 ****
--- 48,54 ----
      meths->method_authenticate = afs_authenticate;
      meths->method_passwdexpired = afs_passwdexpired;
      meths->method_passwdrestrictions = afs_passwdrestrictions;
+ 
      /*
       * These we need to bring in because, for afs users, /etc/security/user's
       * "registry" must non-local (i.e. DCE) since otherwise it assumes it's a
***************
*** 231,253 ****
      return (0);
  }
  
! #if defined(AFS_KERBEROS_ENV)
! 
! setup_ticket_file(userName)
!      char *userName;
! {
!     extern char *ktc_tkt_string();
!     struct passwd *pwd;
! 
!     setpwent();			/* open the pwd database */
!     pwd = getpwnam(userName);
!     if (pwd) {
! 	if (chown(ktc_tkt_string(), pwd->pw_uid, pwd->pw_gid) < 0)
! 	    perror("chown: ");
!     } else
! 	perror("getpwnam : ");
!     endpwent();			/* close the pwd database */
! }
! #endif /* AFS_KERBEROS_ENV */
! 
! #endif
--- 64,67 ----
      return (0);
  }
  
! #endif /* AFS_AIX41_ENV && !AFS_AIX51_ENV */
Index: openafs/src/tsm41/aix41_ident.c
diff -c /dev/null openafs/src/tsm41/aix41_ident.c:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/tsm41/aix41_ident.c	Thu Jul 13 13:23:29 2006
***************
*** 0 ****
--- 1,64 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include <afs/param.h>
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/tsm41/aix41_ident.c,v 1.1.4.2 2006/07/13 17:23:29 shadow Exp $");
+ 
+ #if defined(AFS_AIX41_ENV) && !defined(AFS_AIX51_ENV)
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
+ #include <locale.h>
+ #include <nl_types.h>
+ #include <pwd.h>
+ #include <netdb.h>
+ #include <sys/socket.h>
+ #include <sys/file.h>
+ #include <errno.h>
+ #include <usersec.h>
+ 
+ #include <afs/kauth.h>
+ #include <afs/kautils.h>
+ 
+ #include "aix_ident_prototypes.h"
+ 
+ int
+ afs_getgrset(char *userName)
+ {
+     return NULL;
+ }
+ 
+ struct group *
+ afs_getgrgid(int id)
+ {
+     return NULL;
+ }
+ 
+ struct group *
+ afs_getgrnam(char *name)
+ {
+     return NULL;
+ }
+ 
+ int
+ afs_getpwnam(int id)
+ {
+     return NULL;
+ }
+ 
+ int
+ afs_getpwuid(char *name)
+ {
+     return NULL;
+ }
+ 
+ #endif /* AFS_AIX41_ENV && !AFS_AIX51_ENV */
Index: openafs/src/tsm41/aix5_auth.c
diff -c /dev/null openafs/src/tsm41/aix5_auth.c:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/tsm41/aix5_auth.c	Thu Jul 13 13:23:29 2006
***************
*** 0 ****
--- 1,57 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include <afs/param.h>
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/tsm41/aix5_auth.c,v 1.1.4.2 2006/07/13 17:23:29 shadow Exp $");
+ 
+ #if defined(AFS_AIX51_ENV)
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
+ #include <locale.h>
+ #include <nl_types.h>
+ #include <pwd.h>
+ #include <netdb.h>
+ #include <sys/socket.h>
+ #include <sys/file.h>
+ #include <errno.h>
+ #include <usersec.h>
+ 
+ #include <afs/kauth.h>
+ #include <afs/kautils.h>
+ 
+ #include "aix_auth_prototypes.h"
+ 
+ int
+ afs_initialize(struct secmethod_table *meths)
+ {
+     /*
+      * Initialize kauth package here so we don't have to call it
+      * each time we call the authenticate routine.      
+      */
+     ka_Init(0);
+     memset(meths, 0, sizeof(struct secmethod_table));
+ 
+     /*
+      * Initialize the exported interface routines.
+      * Aside from method_authenticate, these are just no-ops.
+      */
+     meths->method_chpass = afs_chpass;
+     meths->method_authenticate = afs_authenticate;
+     meths->method_passwdexpired = afs_passwdexpired;
+     meths->method_passwdrestrictions = afs_passwdrestrictions;
+     meths->method_getpasswd = afs_getpasswd;
+ 
+     return (0);
+ }
+ 
+ #endif /* AFS_AIX51_ENV */
Index: openafs/src/tsm41/aix_auth_common.c
diff -c /dev/null openafs/src/tsm41/aix_auth_common.c:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/tsm41/aix_auth_common.c	Thu Jul 13 13:23:29 2006
***************
*** 0 ****
--- 1,105 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include <afs/param.h>
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/tsm41/aix_auth_common.c,v 1.1.4.2 2006/07/13 17:23:29 shadow Exp $");
+ 
+ #if defined(AFS_AIX41_ENV)
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
+ #include <locale.h>
+ #include <nl_types.h>
+ #include <pwd.h>
+ #include <netdb.h>
+ #include <sys/socket.h>
+ #include <sys/file.h>
+ #include <errno.h>
+ #include <usersec.h>
+ 
+ #include <afs/kauth.h>
+ #include <afs/kautils.h>
+ 
+ #include "aix_auth_prototypes.h"
+ 
+ int
+ afs_authenticate(char *userName, char *response, int *reenter, char **message)
+ {
+     char *reason, *pword, prompt[256];
+     struct passwd *pwd;
+     int code, unixauthneeded, password_expires = -1;
+ 
+     *reenter = 0;
+     *message = (char *)0;
+     if (response) {
+ 	pword = response;
+     } else {
+ 	sprintf(prompt, "Enter AFS password for %s: ", userName);
+ 	pword = getpass(prompt);
+ 	if (strlen(pword) == 0) {
+ 	    printf
+ 		("Unable to read password because zero length passord is illegal\n");
+ 	    *message = (char *)malloc(256);
+ 	    sprintf(*message,
+ 		    "Unable to read password because zero length passord is illegal\n");
+ 	    return AUTH_FAILURE;
+ 	}
+     }
+ 
+     if ((pwd = getpwnam(userName)) == NULL) {
+ 	*message = (char *)malloc(256);
+ 	sprintf(*message, "getpwnam for user failed\n");
+ 	return AUTH_FAILURE;
+     }
+ 
+     if (code =
+ 	ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION + KA_USERAUTH_DOSETPAG,
+ 				   userName, (char *)0, (char *)0, pword, 0,
+ 				   &password_expires, 0, &reason)) {
+ 	if (code == KANOENT)
+ 	    return AUTH_NOTFOUND;
+ 	*message = (char *)malloc(1024);
+ 	sprintf(*message, "Unable to authenticate to AFS because %s.\n",
+ 		reason);
+ 	return AUTH_FAILURE;
+     }
+     aix_ktc_setup_ticket_file(userName);
+     return AUTH_SUCCESS;
+ }
+ 
+ int
+ afs_chpass(char *userName, char *oldPasswd, char *newPasswd, char **message)
+ {
+     return AUTH_SUCCESS;
+ }
+ 
+ int
+ afs_passwdexpired(char *userName, char **message)
+ {
+     return AUTH_SUCCESS;
+ }
+ 
+ int
+ afs_passwdrestrictions(char *userName, char *newPasswd, char *oldPasswd,
+ 		       char **message)
+ {
+     return AUTH_SUCCESS;
+ }
+ 
+ char *
+ afs_getpasswd(char * userName)
+ {
+     errno = ENOSYS;
+     return NULL;
+ }
+ 
+ #endif /* AFS_AIX41_ENV */
Index: openafs/src/tsm41/aix_auth_prototypes.h
diff -c /dev/null openafs/src/tsm41/aix_auth_prototypes.h:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/tsm41/aix_auth_prototypes.h	Thu Jul 13 13:23:29 2006
***************
*** 0 ****
--- 1,25 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ #ifndef _AFS_TSM41_AIX_AUTH_PROTOTYPES_H
+ #define _AFS_TSM41_AIX_AUTH_PROTOTYPES_H
+ 
+ extern int afs_authenticate(char *userName, 
+ 			    char *response, 
+ 			    int *reenter, 
+ 			    char **message);
+ extern int afs_chpass(char *userName, char *oldPasswd, 
+ 		      char *newPasswd, char **message);
+ extern int afs_passwdexpired(char *userName, char **message);
+ extern int afs_passwdrestrictions(char *userName, char *newPasswd, 
+ 				  char *oldPasswd, char ** message);
+ extern char * afs_getpasswd(char * userName);
+ extern void aix_ktc_setup_ticket_file(char * userName);
+ 
+ #endif /* _AFS_TSM41_AIX_AUTH_PROTOTYPES_H */
Index: openafs/src/tsm41/aix_ident_prototypes.h
diff -c /dev/null openafs/src/tsm41/aix_ident_prototypes.h:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/tsm41/aix_ident_prototypes.h	Thu Jul 13 13:23:29 2006
***************
*** 0 ****
--- 1,20 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ #ifndef _AFS_TSM41_AIX_IDENT_PROTOTYPES_H
+ #define _AFS_TSM41_AIX_IDENT_PROTOTYPES_H
+ 
+ extern int afs_getgrset(char *userName);
+ extern struct group * afs_getgrgid(int id);
+ extern struct group * afs_getgrnam(char *name);
+ extern struct passwd * afs_getpwnam(char *user);
+ extern int afs_getpwnam(int id);
+ extern int afs_getpwuid(char *name);
+ 
+ #endif /* _AFS_TSM41_AIX_IDENT_PROTOTYPES_H */
Index: openafs/src/tsm41/aix_ktc.c
diff -c /dev/null openafs/src/tsm41/aix_ktc.c:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:31 2006
--- openafs/src/tsm41/aix_ktc.c	Thu Jul 13 13:23:29 2006
***************
*** 0 ****
--- 1,56 ----
+ /*
+  * 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
+  */
+ 
+ #include <afsconfig.h>
+ #include <afs/param.h>
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/tsm41/aix_ktc.c,v 1.1.4.2 2006/07/13 17:23:29 shadow Exp $");
+ 
+ #if defined(AFS_AIX41_ENV)
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <stdio.h>
+ #include <locale.h>
+ #include <nl_types.h>
+ #include <pwd.h>
+ #include <netdb.h>
+ #include <sys/socket.h>
+ #include <sys/file.h>
+ #include <errno.h>
+ #include <usersec.h>
+ 
+ #include <afs/kauth.h>
+ #include <afs/kautils.h>
+ 
+ #include "aix_auth_prototypes.h"
+ 
+ #include <afs/ktc.h>
+ 
+ void
+ aix_ktc_setup_ticket_file(char * userName)
+ {
+ #if defined(AFS_KERBEROS_ENV)
+     struct passwd *pwd;
+ 
+     setpwent();			/* open the pwd database */
+     pwd = getpwnam(userName);
+     if (pwd) {
+ 	if (chown(ktc_tkt_string_uid(pwd->pw_uid), 
+ 		  pwd->pw_uid, pwd->pw_gid) < 0) {
+ 	    perror("chown: ");
+ 	}
+     } else {
+ 	perror("getpwnam : ");
+     }
+     endpwent();			/* close the pwd database */
+ #endif /* AFS_KERBEROS_ENV */
+ }
+ 
+ #endif /* AFS_AIX41_ENV */
Index: openafs/src/tviced/Makefile.in
diff -c openafs/src/tviced/Makefile.in:1.13 openafs/src/tviced/Makefile.in:1.13.2.2
*** openafs/src/tviced/Makefile.in:1.13	Fri Mar 17 14:54:42 2006
--- openafs/src/tviced/Makefile.in	Mon Jul 31 15:01:45 2006
***************
*** 15,20 ****
--- 15,21 ----
  
  CCRULE=${CC} ${CFLAGS} -c $?
  
+ RX=../rx
  VICED=../viced
  VLSERVER=../vlserver
  LWP=../lwp
***************
*** 42,49 ****
  
  FSINTOBJS= afsaux.o afscbint.cs.o afsint.ss.o afsint.xdr.o
  
  objects= ${VICEDOBJS} ${VLSERVEROBJS} ${LWPOBJS} ${LIBACLOBJS} \
! 	 ${UTILOBJS} ${DIROBJS} ${VOLOBJS} ${FSINTOBJS}
  
  SDBGOBJS = state_analyzer.o uuid.o dirpath.o fileutil.o ${TOP_LIBDIR}/util.a
  
--- 43,52 ----
  
  FSINTOBJS= afsaux.o afscbint.cs.o afsint.ss.o afsint.xdr.o
  
+ RXOBJS = rx_pthread.o 
+ 
  objects= ${VICEDOBJS} ${VLSERVEROBJS} ${LWPOBJS} ${LIBACLOBJS} \
! 	 ${UTILOBJS} ${DIROBJS} ${VOLOBJS} ${FSINTOBJS} ${RXOBJS}
  
  SDBGOBJS = state_analyzer.o uuid.o dirpath.o fileutil.o ${TOP_LIBDIR}/util.a
  
***************
*** 51,56 ****
--- 54,62 ----
  
  all: fileserver state_analyzer
  
+ rx_pthread.o: ${RX}/rx_pthread.c
+ 	${CCRULE} -DDPF_FSLOG
+ 
  viced.o: ${VICED}/viced.c
  	${CCRULE}
  
Index: openafs/src/tviced/serialize_state.c
diff -c openafs/src/tviced/serialize_state.c:1.1 openafs/src/tviced/serialize_state.c:1.1.4.1
*** openafs/src/tviced/serialize_state.c:1.1	Fri Mar 17 23:20:14 2006
--- openafs/src/tviced/serialize_state.c	Wed Aug  2 15:01:23 2006
***************
*** 16,22 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/tviced/serialize_state.c,v 1.1 2006/03/18 04:20:14 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>		/* for malloc() */
--- 16,22 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/tviced/serialize_state.c,v 1.1.4.1 2006/08/02 19:01:23 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>		/* for malloc() */
***************
*** 990,996 ****
      hdr->timestamp = FT_ApproxTime();
      hdr->server_uuid = FS_HostUUID;
      hdr->valid = 1;
! #ifdef AFSBIG_ENDIAN
      hdr->endianness = 1;
  #else
      hdr->endianness = 0;
--- 990,996 ----
      hdr->timestamp = FT_ApproxTime();
      hdr->server_uuid = FS_HostUUID;
      hdr->valid = 1;
! #ifdef WORDS_BIGENDIAN
      hdr->endianness = 1;
  #else
      hdr->endianness = 0;
***************
*** 1016,1022 ****
  	ViceLog(0, ("fs_stateCheckHeader: dump was previously flagged invalid\n"));
  	ret = 1;
      }
! #ifdef AFSBIG_ENDIAN
      else if (!hdr->endianness) {
  	ViceLog(0, ("fs_stateCheckHeader: wrong endianness\n"));
  	ret = 1;
--- 1016,1022 ----
  	ViceLog(0, ("fs_stateCheckHeader: dump was previously flagged invalid\n"));
  	ret = 1;
      }
! #ifdef WORDS_BIGENDIAN
      else if (!hdr->endianness) {
  	ViceLog(0, ("fs_stateCheckHeader: wrong endianness\n"));
  	ret = 1;
Index: openafs/src/tvolser/Makefile.in
diff -c openafs/src/tvolser/Makefile.in:1.4 openafs/src/tvolser/Makefile.in:1.4.2.1
*** openafs/src/tvolser/Makefile.in:1.4	Fri Mar 17 14:54:44 2006
--- openafs/src/tvolser/Makefile.in	Mon Jul 31 12:19:15 2006
***************
*** 23,28 ****
--- 23,29 ----
  VOL=../vol
  FSINT=../fsint
  VOLSER=../volser
+ RX=../rx
  
  VOLSEROBJS=volmain.o volprocs.o physio.o voltrans.o volerr.o volint.cs.o dumpstuff.o  volint.ss.o volint.xdr.o vscommon.o
  
***************
*** 42,49 ****
  
  FSINTOBJS=# afsaux.o afscbint.cs.o afsint.ss.o afsint.xdr.o
  
  objects= ${VOLSEROBJS} ${VLSERVEROBJS} ${LWPOBJS} ${LIBACLOBJS} \
! 	 ${UTILOBJS} ${DIROBJS} ${VOLOBJS} ${FSINTOBJS}
  
  LIBS=${TOP_LIBDIR}/libafsauthent.a ${TOP_LIBDIR}/libafsrpc.a ${TOP_LIBDIR}/util.a
  
--- 43,52 ----
  
  FSINTOBJS=# afsaux.o afscbint.cs.o afsint.ss.o afsint.xdr.o
  
+ RXOBJS=rx_pthread.o
+ 
  objects= ${VOLSEROBJS} ${VLSERVEROBJS} ${LWPOBJS} ${LIBACLOBJS} \
! 	 ${UTILOBJS} ${DIROBJS} ${VOLOBJS} ${FSINTOBJS} ${RXOBJS}
  
  LIBS=${TOP_LIBDIR}/libafsauthent.a ${TOP_LIBDIR}/libafsrpc.a ${TOP_LIBDIR}/util.a
  
***************
*** 51,56 ****
--- 54,61 ----
  
  COMPILE=${CC} ${CFLAGS} -c $?
  
+ rx_pthread.o: ${RX}/rx_pthread.c
+ 	${COMPILE} -DDPF_FSLOG
  volmain.o: ${VOLSER}/volmain.c
  	${COMPILE}
  volprocs.o: ${VOLSER}/volprocs.c
Index: openafs/src/util/kreltime.c
diff -c openafs/src/util/kreltime.c:1.9 openafs/src/util/kreltime.c:1.9.2.4
*** openafs/src/util/kreltime.c:1.9	Mon Mar 20 08:25:50 2006
--- openafs/src/util/kreltime.c	Wed Aug  2 14:50:01 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/util/kreltime.c,v 1.9 2006/03/20 13:25:50 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/util/kreltime.c,v 1.9.2.4 2006/08/02 18:50:01 shadow Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
***************
*** 114,123 ****
  int
  ktimeDate_FromInt32(afs_int32 timeSecs, struct ktime_date *ktimePtr)
  {
-     struct tm *timePtr;
      time_t     tt = timeSecs;
  
      timePtr = localtime(&tt);
  
      /* copy the relevant fields */
      ktimePtr->sec = timePtr->tm_sec;
--- 114,131 ----
  int
  ktimeDate_FromInt32(afs_int32 timeSecs, struct ktime_date *ktimePtr)
  {
      time_t     tt = timeSecs;
+     struct tm *timePtr;
+ #ifndef AFS_NT40_ENV
+     struct tm timeP;
+ 
+     timePtr = &timeP;
  
+     memset(&timePtr, 0, sizeof(timePtr));
+     localtime_r(&tt, &timePtr);
+ #else
      timePtr = localtime(&tt);
+ #endif
  
      /* copy the relevant fields */
      ktimePtr->sec = timePtr->tm_sec;
Index: openafs/src/venus/fs.c
diff -c openafs/src/venus/fs.c:1.30.2.2 openafs/src/venus/fs.c:1.30.2.5
*** openafs/src/venus/fs.c:1.30.2.2	Mon Jul  3 15:07:16 2006
--- openafs/src/venus/fs.c	Mon Jul 31 17:27:41 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/venus/fs.c,v 1.30.2.2 2006/07/03 19:07:16 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.5 2006/07/31 21:27:41 shadow Exp $");
  
  #include <afs/afs_args.h>
  #include <rx/xdr.h>
***************
*** 2198,2203 ****
--- 2198,2234 ----
  }
  
  static int
+ NukeNFSCredsCmd(struct cmd_syndesc *as, char *arock)
+ {
+     afs_int32 code;
+     struct ViceIoctl blob;
+     struct cmd_item *ti;
+     afs_int32 hostAddr;
+     struct hostent *thp;
+     
+     ti = as->parms[0].items;
+     thp = hostutil_GetHostByName(ti->data);
+     if (!thp) {
+ 	fprintf(stderr, "host %s not found in host table.\n", ti->data);
+ 	return 1;
+     }
+     else memcpy(&hostAddr, thp->h_addr, sizeof(afs_int32));
+     
+     /* now do operation */
+     blob.in_size = sizeof(afs_int32);
+     blob.out_size = sizeof(afs_int32);
+     blob.in = (char *) &hostAddr;
+     blob.out = (char *) &hostAddr;
+     
+     code = pioctl(0, VIOC_NFS_NUKE_CREDS, &blob, 1);
+     if (code < 0) {
+ 	Die(errno, 0);
+ 	return 1;
+     }
+     return 0;
+ }
+ 
+ static int
  NewCellCmd(struct cmd_syndesc *as, char *arock)
  {
      afs_int32 code, linkedstate = 0, size = 0, *lp;
***************
*** 2521,2527 ****
      struct ViceIoctl blob;
      struct cmd_item *ti;
      int export = 0, type = 0, mode = 0, exp = 0, exportcall, pwsync =
! 	0, smounts = 0;
  
      ti = as->parms[0].items;
      if (strcmp(ti->data, "nfs") == 0)
--- 2552,2558 ----
      struct ViceIoctl blob;
      struct cmd_item *ti;
      int export = 0, type = 0, mode = 0, exp = 0, exportcall, pwsync =
! 	0, smounts = 0, clipags = 0, pagcb = 0;
  
      ti = as->parms[0].items;
      if (strcmp(ti->data, "nfs") == 0)
***************
*** 2574,2581 ****
  	    return 1;
  	}
      }
      exportcall =
! 	(type << 24) | (mode << 6) | (pwsync << 4) | (smounts << 2) | export;
      type &= ~0x70;
      /* make the call */
      blob.in = (char *)&exportcall;
--- 2605,2633 ----
  	    return 1;
  	}
      }
+     if (ti = as->parms[5].items) {	/* -clipags */
+ 	if (strcmp(ti->data, "on") == 0)
+ 	    clipags = 3;
+ 	else if (strcmp(ti->data, "off") == 0)
+ 	    clipags = 2;
+ 	else {
+ 	    fprintf(stderr, "Illegal argument %s\n", ti->data);
+ 	    return 1;
+ 	}
+     }
+     if (ti = as->parms[6].items) {	/* -pagcb */
+ 	if (strcmp(ti->data, "on") == 0)
+ 	    pagcb = 3;
+ 	else if (strcmp(ti->data, "off") == 0)
+ 	    pagcb = 2;
+ 	else {
+ 	    fprintf(stderr, "Illegal argument %s\n", ti->data);
+ 	    return 1;
+ 	}
+     }
      exportcall =
! 	(type << 24) | (pagcb << 10) | (clipags << 8) |
! 	(mode << 6) | (pwsync << 4) | (smounts << 2) | export;
      type &= ~0x70;
      /* make the call */
      blob.in = (char *)&exportcall;
***************
*** 2606,2611 ****
--- 2658,2670 ----
  	printf("\t%s\n",
  	       (exportcall & 8 ? "Allow mounts of /afs/.. subdirs" :
  		"Only mounts to /afs allowed"));
+ 	printf("\t%s\n",
+ 	       (exportcall & 16 ? "Client-assigned PAG's are used" :
+ 		"Client-assigned PAG's are not used"));
+ 	printf("\t%s\n",
+ 	       (exportcall & 32 ?
+ 		"Callbacks are made to get creds from new clients" :
+ 		"Callbacks are not made to get creds from new clients"));
      } else {
  	printf("'%s' translator is disabled\n", exported_types[type]);
      }
***************
*** 3509,3514 ****
--- 3568,3577 ----
  		"run on strict 'uid check' mode (on | off)");
      cmd_AddParm(ts, "-submounts", CMD_SINGLE, CMD_OPTIONAL,
  		"allow nfs mounts to subdirs of /afs/.. (on  | off)");
+     cmd_AddParm(ts, "-clipags", CMD_SINGLE, CMD_OPTIONAL,
+ 		"enable use of client-assigned PAG's (on  | off)");
+     cmd_AddParm(ts, "-pagcb", CMD_SINGLE, CMD_OPTIONAL,
+ 		"enable callbacks to get creds from new clients (on  | off)");
  
  
      ts = cmd_CreateSyntax("storebehind", StoreBehindCmd, 0,
***************
*** 3554,3559 ****
--- 3617,3625 ----
      cmd_AddParm(ts, "-mode", CMD_SINGLE, CMD_OPTIONAL, "nat | full");
  #endif
  
+     ts = cmd_CreateSyntax("nukenfscreds", NukeNFSCredsCmd, 0, "nuke credentials for NFS client");
+     cmd_AddParm(ts, "-addr", CMD_SINGLE, 0, "host name or address");
+ 
      code = cmd_Dispatch(argc, argv);
      if (rxInitDone)
  	rx_Finalize();
Index: openafs/src/venus/kdump.c
diff -c openafs/src/venus/kdump.c:1.38 openafs/src/venus/kdump.c:1.38.4.1
*** openafs/src/venus/kdump.c:1.38	Mon Jul 11 14:45:53 2005
--- openafs/src/venus/kdump.c	Wed Aug  2 15:01:23 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/venus/kdump.c,v 1.38 2005/07/11 18:45:53 shadow Exp $");
  
  #include <stdio.h>
  #include <errno.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/venus/kdump.c,v 1.38.4.1 2006/08/02 19:01:23 shadow Exp $");
  
  #include <stdio.h>
  #include <errno.h>
***************
*** 288,294 ****
      int tv_usec;
  } timeval_t;			/* Needed here since KERNEL defined. */
  #endif /*AFS_ALPHA_LINUX20_ENV */
! #if defined(AFSBIG_ENDIAN)
  #define _LINUX_BYTEORDER_BIG_ENDIAN_H
  #else
  #define _LINUX_BYTEORDER_LITTLE_ENDIAN_H
--- 288,294 ----
      int tv_usec;
  } timeval_t;			/* Needed here since KERNEL defined. */
  #endif /*AFS_ALPHA_LINUX20_ENV */
! #if defined(WORDS_BIGENDIAN)
  #define _LINUX_BYTEORDER_BIG_ENDIAN_H
  #else
  #define _LINUX_BYTEORDER_LITTLE_ENDIAN_H
Index: openafs/src/viced/afsfileprocs.c
diff -c openafs/src/viced/afsfileprocs.c:1.113.2.4 openafs/src/viced/afsfileprocs.c:1.113.2.7
*** openafs/src/viced/afsfileprocs.c:1.113.2.4	Tue Jul  4 02:18:30 2006
--- openafs/src/viced/afsfileprocs.c	Wed Aug  2 14:21:16 2006
***************
*** 29,35 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.113.2.4 2006/07/04 06:18:30 jaltman 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.7 2006/08/02 18:21:16 jaltman Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 675,681 ****
  
      if (!client->host->hcps.prlist_len || !client->host->hcps.prlist_val) {
  	char hoststr[16];
! 	ViceLog(0,
  		("CheckRights: len=%u, for host=%s:%d\n",
  		 client->host->hcps.prlist_len, 
  		 afs_inet_ntoa_r(client->host->host, hoststr),
--- 675,681 ----
  
      if (!client->host->hcps.prlist_len || !client->host->hcps.prlist_val) {
  	char hoststr[16];
! 	ViceLog(5,
  		("CheckRights: len=%u, for host=%s:%d\n",
  		 client->host->hcps.prlist_len, 
  		 afs_inet_ntoa_r(client->host->host, hoststr),
***************
*** 6061,6070 ****
  
      dataBytes = 1 * sizeof(afs_int32);
      dataBuffP = (afs_int32 *) malloc(dataBytes);
!     dataBuffP[0] = VICED_CAPABILITY_ERRORTRANS;
  #if defined(AFS_64BIT_ENV) && defined(AFS_LARGEFILE_ENV)
      dataBuffP[0] |= VICED_CAPABILITY_64BITFILES;
  #endif
  
      capabilities->Capabilities_len = dataBytes / sizeof(afs_int32);
      capabilities->Capabilities_val = dataBuffP;
--- 6061,6072 ----
  
      dataBytes = 1 * sizeof(afs_int32);
      dataBuffP = (afs_int32 *) malloc(dataBytes);
!     dataBuffP[0] = VICED_CAPABILITY_ERRORTRANS | VICED_CAPABILITY_WRITELOCKACL;
  #if defined(AFS_64BIT_ENV) && defined(AFS_LARGEFILE_ENV)
      dataBuffP[0] |= VICED_CAPABILITY_64BITFILES;
  #endif
+     if (saneacls)
+ 	dataBuffP[0] |= VICED_CAPABILITY_SANEACLS;
  
      capabilities->Capabilities_len = dataBytes / sizeof(afs_int32);
      capabilities->Capabilities_val = dataBuffP;
Index: openafs/src/viced/viced.c
diff -c openafs/src/viced/viced.c:1.75.2.4 openafs/src/viced/viced.c:1.75.2.5
*** openafs/src/viced/viced.c:1.75.2.4	Mon Jul  3 15:07:16 2006
--- openafs/src/viced/viced.c	Wed Aug  2 14:21:16 2006
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/viced.c,v 1.75.2.4 2006/07/03 19:07:16 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.5 2006/08/02 18:21:16 jaltman Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 200,205 ****
--- 200,206 ----
  int abort_threshold = 10;
  int udpBufSize = 0;		/* UDP buffer size for receive */
  int sendBufSize = 16384;	/* send buffer size */
+ int saneacls = 0;		/* Sane ACLs Flag */
  
  struct timeval tp;
  
***************
*** 1389,1394 ****
--- 1390,1398 ----
  	    /* set syslog logging flag */
  	    mrafsStyleLogs = 1;
  	} 
+ 	else if (strcmp(argv[i], "-saneacls") == 0) {
+ 	    saneacls = 1;
+ 	}
  	else {
  	    return (-1);
  	}
Index: openafs/src/viced/viced.h
diff -c openafs/src/viced/viced.h:1.8 openafs/src/viced/viced.h:1.8.2.1
*** openafs/src/viced/viced.h:1.8	Fri Mar 17 14:54:50 2006
--- openafs/src/viced/viced.h	Wed Aug  2 14:21:16 2006
***************
*** 181,186 ****
--- 181,187 ----
  };
  
  extern int busyonrst;
+ extern int saneacls;
  
  #define RESTART_ORDINARY 1
  #define RESTART_FAST 2
Index: openafs/src/vol/Makefile.in
diff -c openafs/src/vol/Makefile.in:1.22 openafs/src/vol/Makefile.in:1.22.2.1
*** openafs/src/vol/Makefile.in:1.22	Fri Mar 17 14:54:51 2006
--- openafs/src/vol/Makefile.in	Mon Jul 31 12:51:33 2006
***************
*** 182,187 ****
--- 182,190 ----
  			${CC} ${LDFLAGS} -o gi gi.o ${TOP_LIBDIR}/libsys.a;; \
          esac
  
+ namei_map: ${TOP_LIBDIR}/libsys.a namei_map.o
+ 	${CC} ${CFLAGS} -o namei_map namei_map.o ${TOP_LIBDIR}/libafsutil.a ${LIBS} ${XLIBS}
+ 
  volinfo: vol-info.o physio.o ihandle.o ${LIBS}
  	${CC} ${CFLAGS} -o volinfo vol-info.o physio.o \
  		ihandle.o ${LIBS} ${XLIBS}
Index: openafs/src/vol/namei_map.c
diff -c /dev/null openafs/src/vol/namei_map.c:1.1.4.2
*** /dev/null	Thu Aug  3 00:43:32 2006
--- openafs/src/vol/namei_map.c	Mon Jul 31 12:51:33 2006
***************
*** 0 ****
--- 1,20 ----
+ #include <sys/types.h>
+ #include <inttypes.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <afs/param.h>
+ #include <afs/afsutil.h>
+ 
+ int main(int argc, char **argv) {
+   lb64_string_t tmp;
+ 
+   unsigned long vol;
+   if (argc < 2) { fprintf(stderr, "Usage: nametodir vol\n"); exit(1); }
+   vol=strtoul(argv[1], NULL, 0);
+   (void)int32_to_flipbase64(tmp, (int64_t) (vol & 0xff));
+   printf("Component is %s\n", tmp);
+   (void)int32_to_flipbase64(tmp, (int64_t) vol);
+   printf("Component is %s\n", tmp);
+ 
+   exit(0);
+ }
Index: openafs/src/vol/namei_ops.c
diff -c openafs/src/vol/namei_ops.c:1.28.2.1 openafs/src/vol/namei_ops.c:1.28.2.2
*** openafs/src/vol/namei_ops.c:1.28.2.1	Mon Jun 12 20:01:51 2006
--- openafs/src/vol/namei_ops.c	Mon Jul 31 11:19:36 2006
***************
*** 13,19 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/namei_ops.c,v 1.28.2.1 2006/06/13 00:01:51 shadow Exp $");
  
  #ifdef AFS_NAMEI_ENV
  #include <stdio.h>
--- 13,19 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/namei_ops.c,v 1.28.2.2 2006/07/31 15:19:36 shadow Exp $");
  
  #ifdef AFS_NAMEI_ENV
  #include <stdio.h>
***************
*** 1470,1476 ****
  				 * the old RW volume around */
      p = strrchr(vd.name, '.');
      if (p && !strcmp(p, ".readonly")) {
! 	bzero(p, 8);
      }
      if (write(fdw, &vd, sizeof(struct VolumeDiskData)) !=
  	sizeof(struct VolumeDiskData)) {
--- 1470,1476 ----
  				 * the old RW volume around */
      p = strrchr(vd.name, '.');
      if (p && !strcmp(p, ".readonly")) {
! 	memset(p, 0, 9);
      }
      if (write(fdw, &vd, sizeof(struct VolumeDiskData)) !=
  	sizeof(struct VolumeDiskData)) {
***************
*** 1584,1590 ****
       * proceed.
       */
  
!     bzero(&t_ih, sizeof(t_ih));
      t_ih.ih_dev = h->ih_dev;
      t_ih.ih_vid = h->ih_vid;
  
--- 1584,1590 ----
       * proceed.
       */
  
!     memset(&t_ih, 0, sizeof(t_ih));
      t_ih.ih_dev = h->ih_dev;
      t_ih.ih_vid = h->ih_vid;
  
Index: openafs/src/vol/purge.c
diff -c openafs/src/vol/purge.c:1.12 openafs/src/vol/purge.c:1.12.2.1
*** openafs/src/vol/purge.c:1.12	Wed Apr 26 11:43:17 2006
--- openafs/src/vol/purge.c	Thu Jul 13 14:18:15 2006
***************
*** 17,23 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/purge.c,v 1.12 2006/04/26 15:43:17 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.1 2006/07/13 18:18:15 shadow Exp $");
  
  #include <stdio.h>
  #ifdef AFS_NT40_ENV
***************
*** 63,70 ****
  static void PurgeHeader_r(Volume * vp);
  static void PurgeHeader(Volume * vp);
  
  void
! VPurgeVolume_r(Error * ec, Volume * vp)
  {
      struct DiskPartition *tpartp = vp->partition;
      char purgePath[MAXPATHLEN];
--- 63,73 ----
  static void PurgeHeader_r(Volume * vp);
  static void PurgeHeader(Volume * vp);
  
+ /* No lock needed. Only the volserver will call this, and only one transaction
+  * can have a given volume (volid/partition pair) in use at a time 
+  */
  void
! VPurgeVolume(Error * ec, Volume * vp)
  {
      struct DiskPartition *tpartp = vp->partition;
      char purgePath[MAXPATHLEN];
***************
*** 86,99 ****
      FSYNC_VolOp(V_id(vp), tpartp->name, FSYNC_VOL_BREAKCBKS, 0, NULL);
  }
  
- void
- VPurgeVolume(Error * ec, Volume * vp)
- {
-     VOL_LOCK;
-     VPurgeVolume_r(ec, vp);
-     VOL_UNLOCK;
- }
- 
  #define MAXOBLITATONCE	1000
  /* delete a portion of an index, adjusting offset appropriately.  Returns 0 if
     things work and we should be called again, 1 if success full and done, and -1
--- 89,94 ----
Index: openafs/src/volser/dumpstuff.c
diff -c openafs/src/volser/dumpstuff.c:1.29.2.1 openafs/src/volser/dumpstuff.c:1.29.2.2
*** openafs/src/volser/dumpstuff.c:1.29.2.1	Tue Jun 20 17:40:12 2006
--- openafs/src/volser/dumpstuff.c	Fri Jul 14 15:35:20 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/dumpstuff.c,v 1.29.2.1 2006/06/20 21:40:12 shadow Exp $");
  
  #include <sys/types.h>
  #include <ctype.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/dumpstuff.c,v 1.29.2.2 2006/07/14 19:35:20 shadow Exp $");
  
  #include <sys/types.h>
  #include <ctype.h>
***************
*** 1322,1327 ****
--- 1322,1328 ----
  		 Error * status)
  {
      afs_int32 code;
+     afs_sfsize_t lcode;
      afs_fsize_t filesize;
      afs_fsize_t written = 0;
      register afs_uint32 size = 8192;
***************
*** 1367,1377 ****
  	    *status = 3;
  	    break;
  	}
! 	code = FDH_WRITE(handleP, p, size);
! 	if (code > 0)
! 	    written += code;
! 	if (code != size) {
! 	    Log("1 Volser: WriteFile: Error creating file in volume; restore aborted\n");
  	    *status = 4;
  	    break;
  	}
--- 1368,1378 ----
  	    *status = 3;
  	    break;
  	}
! 	lcode = FDH_WRITE(handleP, p, size);
! 	if (lcode > 0)
! 	    written += lcode;
! 	if (lcode != size) {
! 	    Log("1 Volser: WriteFile: Error writing (%d,%u) bytes to vnode %d; restore aborted\n", (int)(lcode>>32), (int)(lcode & 0xffffffff), vn);
  	    *status = 4;
  	    break;
  	}
Index: openafs/src/volser/vos.c
diff -c openafs/src/volser/vos.c:1.55 openafs/src/volser/vos.c:1.55.2.1
*** openafs/src/volser/vos.c:1.55	Mon Apr 17 10:59:04 2006
--- openafs/src/volser/vos.c	Mon Jul 31 11:24:45 2006
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/vos.c,v 1.55 2006/04/17 14:59:04 jaltman Exp $");
  
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/vos.c,v 1.55.2.1 2006/07/31 15:24:45 shadow Exp $");
  
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
***************
*** 2178,2184 ****
      if (code) {
  	fprintf(STDERR, "vos:cannot access volume %lu\n",
  		(unsigned long)volid);
- 	free(p);
  	exit(1);
      }
      if (TESTM)
--- 2178,2183 ----
***************
*** 2331,2337 ****
      if (code) {
  	fprintf(STDERR, "vos:cannot access volume %lu\n",
  		(unsigned long)volid);
- 	free(p);
  	exit(1);
      }
  
--- 2330,2335 ----
