Index: openafs/src/WINNT/afsapplib/NTMakefile
diff -c openafs/src/WINNT/afsapplib/NTMakefile:1.2 openafs/src/WINNT/afsapplib/NTMakefile:1.2.8.1
*** openafs/src/WINNT/afsapplib/NTMakefile:1.2	Sat Nov  4 05:01:17 2000
--- openafs/src/WINNT/afsapplib/NTMakefile	Wed Dec  4 09:20:44 2002
***************
*** 5,14 ****
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
- # make compiler warnings fatal
- 
- AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -WX
- 
  # indicate that the functions in this library should be exported
  
  AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -DEXPORT_AFSAPPLIB -DEXPORTED=_declspec(dllexport)
--- 5,10 ----
Index: openafs/src/WINNT/afsd/cm_config.c
diff -c openafs/src/WINNT/afsd/cm_config.c:1.3.4.3 openafs/src/WINNT/afsd/cm_config.c:1.3.4.4
*** openafs/src/WINNT/afsd/cm_config.c:1.3.4.3	Wed Nov 14 22:38:47 2001
--- openafs/src/WINNT/afsd/cm_config.c	Wed Dec  4 09:20:47 2002
***************
*** 241,248 ****
  				return -4;
  			}
                          valuep++;	/* skip the "#" */
  
!                         valuep += strspn(valuep, " 	"); /* skip SP & TAB */
  #endif /* !DJGPP */
  			if (inRightCell) {
  #if !defined(DJGPP) && !defined(AFS_WIN95_ENV)
--- 241,254 ----
  				return -4;
  			}
                          valuep++;	/* skip the "#" */
+                         valuep += strspn(valuep, " \t"); /* skip SP & TAB */
+                         /* strip spaces and tabs in the end. They should not be there according to CellServDB format
+                         so do this just in case                        */
+                         while (valuep[strlen(valuep) - 1] == ' ' || valuep[strlen(valuep) - 1] == '\t') valuep[strlen(valuep) - 1] = '\0';
  
!                         /* strip spaces and tabs in the end. They should not be there according to CellServDB format
!                         so do this just in case                        */
!                         while (valuep[strlen(valuep) - 1] == ' ' || valuep[strlen(valuep) - 1] == '\t') valuep[strlen(valuep) - 1] = '\0';
  #endif /* !DJGPP */
  			if (inRightCell) {
  #if !defined(DJGPP) && !defined(AFS_WIN95_ENV)
Index: openafs/src/WINNT/afsd/cm_conn.c
diff -c openafs/src/WINNT/afsd/cm_conn.c:1.4 openafs/src/WINNT/afsd/cm_conn.c:1.4.4.1
*** openafs/src/WINNT/afsd/cm_conn.c:1.4	Mon Apr 30 02:48:03 2001
--- openafs/src/WINNT/afsd/cm_conn.c	Wed Dec  4 09:20:47 2002
***************
*** 63,71 ****
  	struct cm_req *reqp, cm_serverRef_t **serverspp)
  {
  	long code;
!         cm_volume_t *volp;
!         cm_serverRef_t *serversp;
!         cm_cell_t *cellp;
  
          if (!fidp) {
  		*serverspp = NULL;
--- 63,71 ----
  	struct cm_req *reqp, cm_serverRef_t **serverspp)
  {
  	long code;
!         cm_volume_t *volp = NULL;
!         cm_serverRef_t *serversp = NULL;
!         cm_cell_t *cellp = NULL;
  
          if (!fidp) {
  		*serverspp = NULL;
Index: openafs/src/WINNT/afsd/smb.c
diff -c openafs/src/WINNT/afsd/smb.c:1.4.4.2 openafs/src/WINNT/afsd/smb.c:1.4.4.5
*** openafs/src/WINNT/afsd/smb.c:1.4.4.2	Fri Jul 26 01:14:25 2002
--- openafs/src/WINNT/afsd/smb.c	Tue Dec 10 11:41:24 2002
***************
*** 3831,3836 ****
--- 3831,3837 ----
          smb_renameRock_t rock;
          cm_scache_t *oldDscp;
          cm_scache_t *newDscp;
+ 	cm_scache_t *tmpscp;
          char *oldLastNamep;
          char *newLastNamep;
          osi_hyper_t thyper;
***************
*** 3914,3919 ****
--- 3915,3928 ----
           */
  	thyper.LowPart = 0;		/* search dir from here */
          thyper.HighPart = 0;
+ 	/* search for file to already exhist, if so return error*/
+ 
+ 	code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp);
+ 	if((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) {
+ 	    cm_ReleaseSCache(tmpscp);
+ 	    return CM_ERROR_EXISTS; /* file exist, do not rename, also 
+ 				       fixes move*/
+ 	}
          code = cm_ApplyDir(oldDscp, smb_RenameProc, &rock, &thyper, userp, &req, NULL);
  
          if (code == CM_ERROR_STOPNOW)
***************
*** 6050,6055 ****
--- 6059,6080 ----
      int len;
      int lana_found = 0;
  
+     /*******************************************************************/
+     /*      ms loopback adapter scan                                   */
+     /*******************************************************************/
+     struct
+     {
+ 	ADAPTER_STATUS status;
+ 	NAME_BUFFER    NameBuff [30];
+     }       Adapter;
+     
+     int j;
+     BOOL wla_found;
+ 
+     /*      AFAIK, this is the default for the ms loopback adapter.*/
+     unsigned char kWLA_MAC[6] = { 0x02, 0x00, 0x4c, 0x4f, 0x4f, 0x50 };
+     /*******************************************************************/
+ 
      /* setup the NCB system */
      ncbp = GetNCB();
  #ifdef DJGPP
***************
*** 6087,6097 ****
  	    sprintf(s, "Netbios NCBRESET lana %d error code %d", lana_list.lana[i], code);
  	    afsi_log(s);
  	    lana_list.lana[i] = 255;  /* invalid lana */
!         }
!         else {
              sprintf(s, "Netbios NCBRESET lana %d succeeded", lana_list.lana[i]);
              afsi_log(s);
!         }
      }
  #else
      /* for DJGPP, there is no NCBENUM and NCBRESET is a real reset.  so
--- 6112,6145 ----
  	    sprintf(s, "Netbios NCBRESET lana %d error code %d", lana_list.lana[i], code);
  	    afsi_log(s);
  	    lana_list.lana[i] = 255;  /* invalid lana */
!         } else {
              sprintf(s, "Netbios NCBRESET lana %d succeeded", lana_list.lana[i]);
              afsi_log(s);
! 	    /* check to see if this is the "Microsoft Loopback Adapter"        */
! 	    memset( ncbp, 0, sizeof (*ncbp) );
! 	    ncbp->ncb_command = NCBASTAT;
! 	    ncbp->ncb_lana_num = lana_list.lana[i];
! 	    strcpy( ncbp->ncb_callname,  "*               " );
! 	    ncbp->ncb_buffer = (char *) &Adapter;
! 	    ncbp->ncb_length = sizeof(Adapter);
! 	    code = Netbios( ncbp );
! 	    
! 	    if ( code == 0 ) {
! 		wla_found = TRUE;
! 		for (j=0; wla_found && (j<6); j++)
! 		    wla_found = ( Adapter.status.adapter_address[j] == kWLA_MAC[j] );
! 		
! 		if ( wla_found ) {
! 		    sprintf(s, "Windows Loopback Adapter detected lana %d", lana_list.lana[i]);
! 		    afsi_log(s);
! 		    
! 		    /* select this lana; no need to continue */
! 		    lana_list.length = 1;
! 		    lana_list.lana[0] = lana_list.lana[i];
! 		    break;
! 		}
! 	    }
! 	}
      }
  #else
      /* for DJGPP, there is no NCBENUM and NCBRESET is a real reset.  so
Index: openafs/src/WINNT/afsd/smb3.c
diff -c openafs/src/WINNT/afsd/smb3.c:1.5.4.2 openafs/src/WINNT/afsd/smb3.c:1.5.4.3
*** openafs/src/WINNT/afsd/smb3.c:1.5.4.2	Fri Jul 26 01:14:25 2002
--- openafs/src/WINNT/afsd/smb3.c	Wed Dec  4 09:20:47 2002
***************
*** 1448,1454 ****
  		/* prepare for setattr call */
  		attr.mask = 0;
  		lastMod = *((FILETIME *)(p->datap + 16));
! 		if (LargeIntegerNotEqualToZero(*((LARGE_INTEGER *)&lastMod))) {
  			attr.mask |= CM_ATTRMASK_CLIENTMODTIME;
  			smb_UnixTimeFromLargeSearchTime(&attr.clientModTime,
  							&lastMod);
--- 1448,1457 ----
  		/* 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)
! 		 */
! 		if (LargeIntegerNotEqualToZero(*((LARGE_INTEGER *)&lastMod)) && lastMod.dwLowDateTime != -1 && lastMod.dwHighDateTime != -1) {
  			attr.mask |= CM_ATTRMASK_CLIENTMODTIME;
  			smb_UnixTimeFromLargeSearchTime(&attr.clientModTime,
  							&lastMod);
***************
*** 4064,4070 ****
                          
                          osi_Log3(afsd_logp, "Cancelling change notification for fid %d wtree %d file %s", 
                                  fid, watchtree,
!                                 osi_LogSaveString(afsd_logp, fidp->NTopen_wholepathp));
  
  			scp = fidp->scp;
  			lock_ObtainMutex(&scp->mx);
--- 4067,4073 ----
                          
                          osi_Log3(afsd_logp, "Cancelling change notification for fid %d wtree %d file %s", 
                                  fid, watchtree,
! 								osi_LogSaveString(afsd_logp, (fidp)?fidp->NTopen_wholepathp:""));
  
  			scp = fidp->scp;
  			lock_ObtainMutex(&scp->mx);
Index: openafs/src/WINNT/client_config/NTMakefile
diff -c openafs/src/WINNT/client_config/NTMakefile:1.3 openafs/src/WINNT/client_config/NTMakefile:1.3.4.1
*** openafs/src/WINNT/client_config/NTMakefile:1.3	Mon Apr 30 02:48:36 2001
--- openafs/src/WINNT/client_config/NTMakefile	Wed Dec  4 09:20:47 2002
***************
*** 5,14 ****
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
- # make compiler warnings fatal
- 
- AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -WX
- 
  # include the AFSD source tree on our inclusion path
  
  AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -I ..\afsd
--- 5,10 ----
Index: openafs/src/WINNT/client_creds/NTMakefile
diff -c openafs/src/WINNT/client_creds/NTMakefile:1.2.8.1 openafs/src/WINNT/client_creds/NTMakefile:1.2.8.3
*** openafs/src/WINNT/client_creds/NTMakefile:1.2.8.1	Sun Jan 20 04:09:13 2002
--- openafs/src/WINNT/client_creds/NTMakefile	Thu Dec  5 00:59:52 2002
***************
*** 5,16 ****
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
- # make compiler warnings fatal
- 
- AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -WX
- 
- # include the AFSD source tree on our inclusion path
- 
  AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -I ..\afsd
  
  # include the primary makefile
--- 5,10 ----
***************
*** 100,106 ****
  ############################################################################
  
  $(EXEFILE) : $(EXEOBJS) $(EXELIBS)
! 	$(EXEGUILINK) $(VCLIBS)
  	$(EXEPREP) 
  
  install : $(COPYSOURCES) $(COPYHEADERS) $(EXEFILE) lang
--- 94,100 ----
  ############################################################################
  
  $(EXEFILE) : $(EXEOBJS) $(EXELIBS)
! 	$(EXEMFCLINK) $(VCLIBS)
  	$(EXEPREP) 
  
  install : $(COPYSOURCES) $(COPYHEADERS) $(EXEFILE) lang
Index: openafs/src/WINNT/client_creds/shortcut.cpp
diff -c openafs/src/WINNT/client_creds/shortcut.cpp:1.2 openafs/src/WINNT/client_creds/shortcut.cpp:1.2.8.1
*** openafs/src/WINNT/client_creds/shortcut.cpp:1.2	Sat Nov  4 05:02:48 2000
--- openafs/src/WINNT/client_creds/shortcut.cpp	Wed Dec  4 09:20:48 2002
***************
*** 16,21 ****
--- 16,22 ----
  #include <initguid.h>
  #include <windows.h>
  #include <windowsx.h>
+ #undef INITGUID
  #include <shlobj.h>
  #include <shellapi.h>
  #include "shortcut.h"
Index: openafs/src/WINNT/client_exp/afs_shl_ext.cpp
diff -c openafs/src/WINNT/client_exp/afs_shl_ext.cpp:1.2 openafs/src/WINNT/client_exp/afs_shl_ext.cpp:1.2.8.1
*** openafs/src/WINNT/client_exp/afs_shl_ext.cpp:1.2	Sat Nov  4 05:02:51 2000
--- openafs/src/WINNT/client_exp/afs_shl_ext.cpp	Wed Dec  4 09:25:53 2002
***************
*** 80,86 ****
  {
  	AFX_MANAGE_STATE(AfxGetStaticModuleState());
  
! 	if (!nCMRefCount && !nSERefCount)
  		return S_OK;
  
  	return S_FALSE;
--- 80,86 ----
  {
  	AFX_MANAGE_STATE(AfxGetStaticModuleState());
  
! 	if (!nCMRefCount && !nSERefCount && !nICRefCount && !nTPRefCount && !nXPRefCount)
  		return S_OK;
  
  	return S_FALSE;
***************
*** 89,95 ****
--- 89,164 ----
  // by exporting DllRegisterServer, you can use regsvr.exe
  STDAPI DllRegisterServer(void)
  {
+ 	int      i;
+ 	HKEY     hKey;
+ 	LRESULT  lResult;
+ 	DWORD    dwDisp;
+ 	TCHAR    szSubKey[MAX_PATH];
+ 	TCHAR    szCLSID[MAX_PATH];
+ 	TCHAR    szModule[MAX_PATH];
+ 	LPWSTR   pwsz;
  	AFX_MANAGE_STATE(AfxGetStaticModuleState());
  	COleObjectFactory::UpdateRegistryAll();
+ 	wsprintf(szSubKey, TEXT("%s\\%s"), STR_REG_PATH, STR_EXT_TITLE);
+ 	lResult = RegCreateKeyEx(  HKEY_LOCAL_MACHINE,
+ 							szSubKey,
+ 							0,
+ 							NULL,
+ 							REG_OPTION_NON_VOLATILE,
+ 							KEY_WRITE,
+ 							NULL,
+ 							&hKey,
+ 							&dwDisp);
+ 
+ 	if(NOERROR == lResult)
+ 	{
+ 	//Create the value string.
+ 		lResult = RegSetValueEx(   hKey,
+ 								NULL,
+ 								0,
+ 								REG_SZ,
+ 								(LPBYTE)szCLSID,
+ 								(lstrlen(szCLSID) + 1) * sizeof(TCHAR));
+ 		RegCloseKey(hKey);
+ 	}
+ 	else
+ 		return SELFREG_E_CLASS;
+ 
+ 	//If running on NT, register the extension as approved.
+ 	OSVERSIONINFO  osvi;
+ 	osvi.dwOSVersionInfoSize = sizeof(osvi);
+ 	GetVersionEx(&osvi);
+ 	if(VER_PLATFORM_WIN32_NT == osvi.dwPlatformId)
+ 	{
+ 		lstrcpy( szSubKey, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"));
+ 
+ 		lResult = RegCreateKeyEx(  HKEY_LOCAL_MACHINE,
+ 								szSubKey,
+ 								0,
+ 								NULL,
+ 								REG_OPTION_NON_VOLATILE,
+ 								KEY_WRITE,
+ 								NULL,
+ 								&hKey,
+ 								&dwDisp);
+ 
+ 		if(NOERROR == lResult)
+ 		{
+ 			TCHAR szData[MAX_PATH];
+ 
+ 		//Create the value string.
+ 			lstrcpy(szData, STR_EXT_TITLE);
+ 
+ 			lResult = RegSetValueEx(   hKey,
+ 									szCLSID,
+ 									0,
+ 									REG_SZ,
+ 									(LPBYTE)szData,
+ 									(lstrlen(szData) + 1) * sizeof(TCHAR));
+ 	      
+ 			RegCloseKey(hKey);
+ 		} else
+ 			return SELFREG_E_CLASS;
+ 	}
  	return S_OK;
  }
Index: openafs/src/WINNT/client_exp/gui2fs.cpp
diff -c openafs/src/WINNT/client_exp/gui2fs.cpp:1.2 openafs/src/WINNT/client_exp/gui2fs.cpp:1.2.8.1
*** openafs/src/WINNT/client_exp/gui2fs.cpp:1.2	Sat Nov  4 05:02:52 2000
--- openafs/src/WINNT/client_exp/gui2fs.cpp	Wed Dec  4 09:25:53 2002
***************
*** 1116,1121 ****
--- 1116,1230 ----
  }
  
  /*
+ */
+ long fs_ExtractDriveLetter(const char *inPathp, char *outPathp)
+ {
+ 	if (inPathp[0] != 0 && inPathp[1] == ':') {
+ 		/* there is a drive letter */
+                 *outPathp++ = *inPathp++;
+                 *outPathp++ = *inPathp++;
+                 *outPathp++ = 0;
+         }
+ 	else *outPathp = 0;
+ 
+         return 0;
+ }
+ 
+ /* strip the drive letter from a component */
+ long fs_StripDriveLetter(const char *inPathp, char *outPathp, long outSize)
+ {
+ 	char tempBuffer[1000];
+         strcpy(tempBuffer, inPathp);
+         if (tempBuffer[0] != 0 && tempBuffer[1] == ':') {
+ 		/* drive letter present */
+                 strcpy(outPathp, tempBuffer+2);
+         }
+         else {
+         	/* no drive letter present */
+         	strcpy(outPathp, tempBuffer);
+ 	}
+         return 0;
+ }
+ 
+ 
+ BOOL RemoveSymlink(const char * linkName)
+ {
+ 	BOOL error = FALSE;
+     INT code=0;
+     struct ViceIoctl blob;
+     char tbuffer[1024];
+     char lsbuffer[1024];
+ 	char tpbuffer[1024];
+     char *tp;
+     
+ 	tp = (char *) strrchr(linkName, '\\');
+ 	if (!tp)
+ 	    tp = (char *) strrchr(linkName, '/');
+ 	if (tp) {
+ 	    strncpy(tbuffer, linkName, code=tp-linkName+1);  /* the dir name */
+             tbuffer[code] = 0;
+ 	    tp++;   /* skip the slash */
+ 	}
+ 	else {
+ 	    fs_ExtractDriveLetter(linkName, tbuffer);
+ 	    strcat(tbuffer, ".");
+          fs_StripDriveLetter(tp, tpbuffer, 0);
+ 		 tp=tpbuffer;
+ 	}
+ 	blob.in = tp;
+ 	blob.in_size = strlen(tp)+1;
+ 	blob.out = lsbuffer;
+ 	blob.out_size = sizeof(lsbuffer);
+ 	code = pioctl(tbuffer, VIOC_LISTSYMLINK, &blob, 0);
+ 	if (code)
+ 		return FALSE;
+ 	blob.out_size = 0;
+ 	blob.in = tp;
+ 	blob.in_size = strlen(tp)+1;
+ 	return (pioctl(tbuffer, VIOC_DELSYMLINK, &blob, 0)==0);
+ }
+ 
+ BOOL IsSymlink(const char * true_name)
+ {
+     char parent_dir[MAXSIZE];		/*Parent directory of true name*/
+ 	char strip_name[MAXSIZE];
+     struct ViceIoctl blob;
+ 	char *last_component;
+     int code;
+ 	last_component = (char *) strrchr(true_name, '\\');
+ 	if (!last_component)
+ 	    last_component = (char *) strrchr(true_name, '/');
+ 	if (last_component) {
+ 	    /*
+ 	     * Found it.  Designate everything before it as the parent directory,
+ 	     * everything after it as the final component.
+ 	     */
+ 	    strncpy(parent_dir, true_name, last_component - true_name + 1);
+ 	    parent_dir[last_component - true_name + 1] = 0;
+ 	    last_component++;   /*Skip the slash*/
+ 	}
+ 	else {
+ 	    /*
+ 	     * No slash appears in the given file name.  Set parent_dir to the current
+ 	     * directory, and the last component as the given name.
+ 	     */
+ 	    fs_ExtractDriveLetter(true_name, parent_dir);
+ 	    strcat(parent_dir, ".");
+ 	    last_component = strip_name;
+         fs_StripDriveLetter(true_name, strip_name, sizeof(strip_name));
+ 	}
+ 
+ 	blob.in = last_component;
+ 	blob.in_size = strlen(last_component)+1;
+ 	blob.out_size = MAXSIZE;
+ 	blob.out = space;
+ 	memset(space, 0, MAXSIZE);
+ 	code = pioctl(parent_dir, VIOC_LISTSYMLINK, &blob, 1);
+ 	return (code==0);
+ }
+ 
+ 
+ /*
   * Delete AFS mount points.  Variables are used as follows:
   *       tbuffer: Set to point to the null-terminated directory name of the mount point
   *	    (or ``.'' if none is provided)
***************
*** 1461,1467 ****
  	return TRUE;
  }
  
! BOOL IsPathInAfs(const CString& strPath)
  {
      struct ViceIoctl blob;
      int code;
--- 1570,1576 ----
  	return TRUE;
  }
  
! BOOL IsPathInAfs(const CHAR *strPath)
  {
      struct ViceIoctl blob;
      int code;
Index: openafs/src/WINNT/client_exp/gui2fs.h
diff -c openafs/src/WINNT/client_exp/gui2fs.h:1.2 openafs/src/WINNT/client_exp/gui2fs.h:1.2.8.1
*** openafs/src/WINNT/client_exp/gui2fs.h:1.2	Sat Nov  4 05:02:52 2000
--- openafs/src/WINNT/client_exp/gui2fs.h	Wed Dec  4 09:25:53 2002
***************
*** 28,39 ****
  BOOL ListMount(CStringArray& files);
  BOOL MakeMount(const CString& strDir, const CString& strVolName, const CString& strCellName, BOOL bRW);
  BOOL RemoveMount(CStringArray& files);
  BOOL GetVolumeInfo(CString strFile, CVolInfo& volInfo);
  BOOL SetVolInfo(CVolInfo& volInfo);
  enum WHICH_CELLS { LOCAL_CELL = 0, SPECIFIC_CELL = 1, ALL_CELLS = 2 };
  BOOL CheckServers(const CString& strCellName, WHICH_CELLS nCellsToCheck, BOOL bFast);
  BOOL GetTokenInfo(CStringArray& tokenInfo);
! BOOL IsPathInAfs(const CString& strPath);
  int GetCellName(char *baseNamep, struct afsconf_cell *infop);
  
  #endif //__GUI2FS_H__
--- 28,43 ----
  BOOL ListMount(CStringArray& files);
  BOOL MakeMount(const CString& strDir, const CString& strVolName, const CString& strCellName, BOOL bRW);
  BOOL RemoveMount(CStringArray& files);
+ BOOL RemoveSymlink(const char *);
  BOOL GetVolumeInfo(CString strFile, CVolInfo& volInfo);
  BOOL SetVolInfo(CVolInfo& volInfo);
  enum WHICH_CELLS { LOCAL_CELL = 0, SPECIFIC_CELL = 1, ALL_CELLS = 2 };
  BOOL CheckServers(const CString& strCellName, WHICH_CELLS nCellsToCheck, BOOL bFast);
  BOOL GetTokenInfo(CStringArray& tokenInfo);
! BOOL IsPathInAfs(const CHAR *strPath);
  int GetCellName(char *baseNamep, struct afsconf_cell *infop);
+ long fs_StripDriveLetter(const char *inPathp, char *outPathp, long outSize);
+ long fs_ExtractDriveLetter(const char *inPathp, char *outPathp);
+ BOOL IsSymlink(const char * true_name);
  
  #endif //__GUI2FS_H__
Index: openafs/src/WINNT/client_exp/resource.h
diff -c openafs/src/WINNT/client_exp/resource.h:1.2 openafs/src/WINNT/client_exp/resource.h:1.2.8.1
*** openafs/src/WINNT/client_exp/resource.h:1.2	Sat Nov  4 05:02:53 2000
--- openafs/src/WINNT/client_exp/resource.h	Wed Dec  4 09:25:53 2002
***************
*** 1,12 ****
! /*
!  * 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
!  */
! 
  #define IDM_AUTHENTICATION              1
  #define IDM_ACL_SET                     2
  #define IDM_VOLUME_PROPERTIES           3
--- 1,14 ----
! //{{NO_DEPENDENCIES}}
! //
! // 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
! //
! // Used by afs_shl_ext.rc
! //
  #define IDM_AUTHENTICATION              1
  #define IDM_ACL_SET                     2
  #define IDM_VOLUME_PROPERTIES           3
***************
*** 19,30 ****
  #define IDM_SHOW_SERVER                 10
  #define IDM_SHOWCELL                    11
  #define IDM_SERVER_STATUS               12
! #define IDM_SUBMOUNTS_CREATE            13
  #define IDM_SUBMOUNTS_EDIT              14
  #define IDM_SUBMOUNTS                   15
  #define IDM_ACL_CLEAN                   16
  #define ID_GET_TOKENS                   17
  #define ID_DISCARD_TOKENS               18
  #define IDD_KLOG_DIALOG                 102
  #define IDR_MENU_FILE                   129
  #define IDD_VOLUME_INFO                 130
--- 21,33 ----
  #define IDM_SHOW_SERVER                 10
  #define IDM_SHOWCELL                    11
  #define IDM_SERVER_STATUS               12
! #define IDM_REMOVE_SYMLINK              13
  #define IDM_SUBMOUNTS_EDIT              14
  #define IDM_SUBMOUNTS                   15
  #define IDM_ACL_CLEAN                   16
  #define ID_GET_TOKENS                   17
  #define ID_DISCARD_TOKENS               18
+ #define IDM_SUBMOUNTS_CREATE            19
  #define IDD_KLOG_DIALOG                 102
  #define IDR_MENU_FILE                   129
  #define IDD_VOLUME_INFO                 130
***************
*** 190,195 ****
--- 193,199 ----
  #define IDS_SET_QUOTA_ERROR             32825
  #define ID_SUBMOUNTS_CREATE             32826
  #define ID_SUBMOUNTS_EDIT               32827
+ #define ID_REMOVE_SYMLINK               32828
  #define IDS_CHECK_SERVERS_ERROR         59146
  #define IDS_ALL_SERVERS_RUNNING         59147
  #define IDS_CHECK_VOLUMES_OK            59150
***************
*** 231,243 ****
  #define IDS_SHOW_FS_COLUMN              59186
  #define IDS_REMOVE_MP                   59187
  #define IDS_REMOVE_MP_COLUMN            59188
  
  // Next default values for new objects
  // 
  #ifdef APSTUDIO_INVOKED
  #ifndef APSTUDIO_READONLY_SYMBOLS
  #define _APS_NEXT_RESOURCE_VALUE        155
! #define _APS_NEXT_COMMAND_VALUE         32826
  #define _APS_NEXT_CONTROL_VALUE         1087
  #define _APS_NEXT_SYMED_VALUE           101
  #endif
--- 235,249 ----
  #define IDS_SHOW_FS_COLUMN              59186
  #define IDS_REMOVE_MP                   59187
  #define IDS_REMOVE_MP_COLUMN            59188
+ #define IDS_REMOVE_SYMLINK_ITEM         59189
+ #define IDS_REALLY_REMOVE_SYMLINK       59190
  
  // Next default values for new objects
  // 
  #ifdef APSTUDIO_INVOKED
  #ifndef APSTUDIO_READONLY_SYMBOLS
  #define _APS_NEXT_RESOURCE_VALUE        155
! #define _APS_NEXT_COMMAND_VALUE         32829
  #define _APS_NEXT_CONTROL_VALUE         1087
  #define _APS_NEXT_SYMED_VALUE           101
  #endif
Index: openafs/src/WINNT/client_exp/shell_ext.cpp
diff -c openafs/src/WINNT/client_exp/shell_ext.cpp:1.2 openafs/src/WINNT/client_exp/shell_ext.cpp:1.2.8.2
*** openafs/src/WINNT/client_exp/shell_ext.cpp:1.2	Sat Nov  4 05:02:54 2000
--- openafs/src/WINNT/client_exp/shell_ext.cpp	Tue Dec 10 17:55:57 2002
***************
*** 12,17 ****
--- 12,18 ----
  #include <afs/stds.h>
  }
  
+ #include <afxpriv.h>
  #include "stdafx.h"
  #include <sys/types.h>
  #include <sys/stat.h>
***************
*** 25,31 ****
  #include "server_status_dlg.h"
  #include "auth_dlg.h"
  #include "submounts_dlg.h"
! 
  
  #ifdef _DEBUG
  #define new DEBUG_NEW
--- 26,32 ----
  #include "server_status_dlg.h"
  #include "auth_dlg.h"
  #include "submounts_dlg.h"
! #include "gui2fs.h"
  
  #ifdef _DEBUG
  #define new DEBUG_NEW
***************
*** 36,42 ****
  
  ULONG nCMRefCount = 0;	// IContextMenu ref count
  ULONG nSERefCount = 0;	// IShellExtInit ref count
! 
  
  static BOOL IsADir(const CString& strName)
  {
--- 37,49 ----
  
  ULONG nCMRefCount = 0;	// IContextMenu ref count
  ULONG nSERefCount = 0;	// IShellExtInit ref count
! ULONG nICRefCount=0;
! ULONG nTPRefCount=0;
! ULONG nXPRefCount=0;
! 
! #define MAXSIZE 2048 /* most I'll get back from PIOCTL */
! #define PCCHAR(str)	((char *)(const char *)str)
! static char space[MAXSIZE];
  
  static BOOL IsADir(const CString& strName)
  {
***************
*** 57,66 ****
--- 64,78 ----
  {
  	EnableAutomation();
  	nCMRefCount++;
+ 	HRESULT hr;
+ 	hr = SHGetMalloc(&m_pAlloc);
+ 	if (FAILED(hr))
+ 		m_pAlloc = NULL;
  }
  
  CShellExt::~CShellExt()
  {
+ 	if(m_pAlloc) m_pAlloc->Release();
  	nCMRefCount--;
  }
  
***************
*** 100,108 ****
  	INTERFACE_PART(CShellExt, IID_IShellExt, Dispatch)
      INTERFACE_PART(CShellExt, IID_IContextMenu, MenuExt)
      INTERFACE_PART(CShellExt, IID_IShellExtInit, ShellInit)
  END_INTERFACE_MAP()
  
! IMPLEMENT_OLECREATE(CShellExt, "AfsClientContextMenu", 0xdc515c27, 0x6cac, 0x11d1, 0xba, 0xe7, 0x0, 0xc0, 0x4f, 0xd1, 0x40, 0xd2)
  
  
  /////////////////////////////////////////////////////////////////////////////
--- 112,123 ----
  	INTERFACE_PART(CShellExt, IID_IShellExt, Dispatch)
      INTERFACE_PART(CShellExt, IID_IContextMenu, MenuExt)
      INTERFACE_PART(CShellExt, IID_IShellExtInit, ShellInit)
+ 	INTERFACE_PART(CShellExt, IID_IShellIconOverlayIdentifier, IconExt)
+ 	INTERFACE_PART(CShellExt, IID_IQueryInfo , ToolTipExt)
+ 	INTERFACE_PART(CShellExt, IID_IPersistFile , PersistFileExt)
  END_INTERFACE_MAP()
  
! IMPLEMENT_OLECREATE(CShellExt, STR_EXT_TITLE, 0xdc515c27, 0x6cac, 0x11d1, 0xba, 0xe7, 0x0, 0xc0, 0x4f, 0xd1, 0x40, 0xd2)
  
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 154,164 ****
  		if (!GetMenuString (hMenu, iItem, szItemText, 256, MF_BYPOSITION))
  			continue;
  		if (!lstrcmp (szItemText, pszAfsItemText)) {
  			DeleteMenu (hMenu, iItem, MF_BYPOSITION);
! 			break;
  		}
  	}
- 
  	int indexShellMenu = 0;
  
  	// Create the AFS submenu using the allowed ID's.
--- 169,186 ----
  		if (!GetMenuString (hMenu, iItem, szItemText, 256, MF_BYPOSITION))
  			continue;
  		if (!lstrcmp (szItemText, pszAfsItemText)) {
+ 			DeleteMenu (hMenu, iItem, MF_BYPOSITION);
+ 			continue;
+ 		}
+ 		if ((!lstrcmp(szItemText,"&Delete"))&&(pThis->m_bIsSymlink)) {	/*this is a symlink - don't present a delete menu!*/
  			DeleteMenu (hMenu, iItem, MF_BYPOSITION);
! 			continue;
! 		}
! 		if ((!lstrcmp(szItemText,"Cu&t"))&&(pThis->m_bIsSymlink)) {		/*same for cut*/
! 			DeleteMenu (hMenu, iItem, MF_BYPOSITION);
! 			continue;
  		}
  	}
  	int indexShellMenu = 0;
  
  	// Create the AFS submenu using the allowed ID's.
***************
*** 196,201 ****
--- 218,225 ----
  	::InsertMenu(hAfsMenu, indexAfsMenu++, MF_STRING | MF_BYPOSITION, idCmdFirst + IDM_SHOW_SERVER, GetMessageString(IDS_SHOW_FILE_SERVERS_ITEM));
  	::InsertMenu(hAfsMenu, indexAfsMenu++, MF_STRING | MF_BYPOSITION, idCmdFirst + IDM_SHOWCELL, GetMessageString(IDS_SHOW_CELL_ITEM));
  	::InsertMenu(hAfsMenu, indexAfsMenu++, MF_STRING | MF_BYPOSITION, idCmdFirst + IDM_SERVER_STATUS, GetMessageString(IDS_SHOW_SERVER_STATUS_ITEM));
+ 	if (pThis->m_bIsSymlink)
+ 		::InsertMenu(hAfsMenu, indexAfsMenu++, MF_STRING | MF_BYPOSITION, idCmdFirst + IDM_REMOVE_SYMLINK, GetMessageString(IDS_REMOVE_SYMLINK_ITEM));
  	
  	// The Submounts menu has been removed because the AFS tray icon
  	// and control panel now support mapping drives directly to an AFS
***************
*** 307,313 ****
  										dlg.DoModal();
  									}
  									break;
! 
  		default:
  			ASSERT(FALSE);
  			Release();
--- 331,344 ----
  										dlg.DoModal();
  									}
  									break;
! 		case IDM_REMOVE_SYMLINK:	{
! 										if (files.GetSize()>1)
! 											break;
! 										int nChoice = ShowMessageBox(IDS_REALLY_REMOVE_SYMLINK, MB_ICONQUESTION | MB_YESNO, IDS_REALLY_REMOVE_SYMLINK);
! 										if (nChoice == IDYES)
! 											RemoveSymlink(files.GetAt(0));
! 									}
! 									break;
  		default:
  			ASSERT(FALSE);
  			Release();
***************
*** 372,377 ****
--- 403,411 ----
  		
  		case IDM_SUBMOUNTS_EDIT:	nCmdStrID = ID_SUBMOUNTS_EDIT;
  									break;
+ 
+ 		case IDM_REMOVE_SYMLINK:	nCmdStrID= ID_REMOVE_SYMLINK;
+ 									break;
  		
  		default:
  			ASSERT(FALSE);
***************
*** 454,459 ****
--- 488,495 ----
  			if (!IsPathInAfs(strFileName)) {
  				pThis->m_astrFileNames.RemoveAll();
  				break;
+ 			} else {
+ 				pThis->m_bIsSymlink=IsSymlink(strFileName);
  			}
  
  			if (IsADir(strFileName))
***************
*** 474,476 ****
--- 510,669 ----
      return hres;
  }
  
+ STDMETHODIMP CShellExt::XIconExt::QueryInterface(REFIID riid, void** ppv)
+ {
+     METHOD_PROLOGUE(CShellExt, IconExt);
+     return pThis->ExternalQueryInterface(&riid, ppv);
+ }
+ 
+ STDMETHODIMP_(ULONG) CShellExt::XIconExt::AddRef(void)
+ {
+ 	return ++nICRefCount;
+ }
+ 
+ STDMETHODIMP_(ULONG) CShellExt::XIconExt::Release(void)
+ {
+ 	if (nICRefCount > 0)
+ 		nICRefCount--;
+ 
+ 	return nICRefCount;
+ }
+ 
+ 
+ /////////////////////////////////////////////////////////////////////////////
+ // IIconHandler Functions
+ /////////////////////////////////////////////////////////////////////////////
+ 
+ STDMETHODIMP CShellExt::XIconExt::GetOverlayInfo(LPWSTR pwszIconFile
+ 	,int cchMax,int* pIndex,DWORD* pdwFlags)
+ {
+ 	if(IsBadWritePtr(pIndex, sizeof(int)))
+ 		return E_INVALIDARG;
+ 	if(IsBadWritePtr(pdwFlags, sizeof(DWORD)))
+ 		return E_INVALIDARG;
+ 
+ 	HMODULE hModule=GetModuleHandle("shell32.dll");
+ 	TCHAR szModule[MAX_PATH];
+ 	DWORD z=GetModuleFileName(hModule,szModule,sizeof(szModule));
+ 	MultiByteToWideChar( CP_ACP,0,szModule,-1,pwszIconFile,cchMax); 
+ 	*pIndex = 30;
+ 	*pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
+ 	return S_OK;
+ }
+ 
+ STDMETHODIMP CShellExt::XIconExt::GetPriority(int* pPriority)
+ {
+ 	if(IsBadWritePtr(pPriority, sizeof(int)))
+ 	   return E_INVALIDARG;
+ 	*pPriority = 0;
+ 	return S_OK;
+ }
+ 
+ STDMETHODIMP CShellExt::XIconExt::IsMemberOf(LPCWSTR pwszPath,DWORD dwAttrib)
+ {
+ 	TCHAR szPath[MAX_PATH];
+ 	WideCharToMultiByte( CP_ACP,0,pwszPath,-1,szPath,MAX_PATH,NULL,NULL);
+ 	if (IsSymlink(szPath))
+ 		return S_OK;
+ 	return S_FALSE;
+ }
+ 
+ /*          TOOL TIP INFO IMPLIMENTION   */
+ 
+ STDMETHODIMP CShellExt::XToolTipExt::QueryInterface(REFIID riid, void** ppv)
+ {
+     METHOD_PROLOGUE(CShellExt, ToolTipExt);
+     return pThis->ExternalQueryInterface(&riid, ppv);
+ }
+ 
+ STDMETHODIMP_(ULONG) CShellExt::XToolTipExt::AddRef(void)
+ {
+ 	return ++nTPRefCount;
+ }
+ 
+ STDMETHODIMP_(ULONG) CShellExt::XToolTipExt::Release(void)
+ {
+ 	if (nTPRefCount> 0)
+ 		nTPRefCount--;
+ 
+ 	return nTPRefCount;
+ }
+ 
+ STDMETHODIMP CShellExt::XToolTipExt::GetInfoTip(DWORD dwFlags, LPWSTR *ppwszTip)
+ {
+     METHOD_PROLOGUE(CShellExt, ToolTipExt);
+ 
+ 	if (!IsSymlink(pThis->m_szFile))
+ 	{
+ 		ppwszTip=NULL;
+ 		return S_OK;
+ 	}
+ 	USES_CONVERSION;
+ 	// dwFlags is currently unused.
+ 	*ppwszTip = (WCHAR*) (pThis->m_pAlloc)->Alloc((1+lstrlen(pThis->m_szFile))*sizeof(WCHAR));
+ 	if (*ppwszTip)
+ 	{
+ 		wcscpy(*ppwszTip, (WCHAR*)T2OLE(pThis->m_szFile));
+ 	}
+ 
+ 	return S_OK;
+ }
+ STDMETHODIMP CShellExt::XToolTipExt::GetInfoFlags(LPDWORD pdwFlags)
+ {
+ 	return S_OK;
+ }
+ 
+ //////////                          IPersistFile
+ ///////                            PersistFileExt
+ 
+ STDMETHODIMP CShellExt::XPersistFileExt::QueryInterface(REFIID riid, void** ppv)
+ {
+     METHOD_PROLOGUE(CShellExt, PersistFileExt);
+     return pThis->ExternalQueryInterface(&riid, ppv);
+ }
+ 
+ STDMETHODIMP_(ULONG) CShellExt::XPersistFileExt::AddRef(void)
+ {
+ 	return ++nXPRefCount;
+ }
+ 
+ STDMETHODIMP_(ULONG) CShellExt::XPersistFileExt::Release(void)
+ {
+ 	if (nXPRefCount> 0)
+ 		nXPRefCount--;
+ 
+ 	return nXPRefCount;
+ }
+ 
+ STDMETHODIMP	CShellExt::XPersistFileExt::Load(LPCOLESTR wszFile, DWORD dwMode)
+ {
+     METHOD_PROLOGUE(CShellExt, PersistFileExt);
+ 	USES_CONVERSION;
+ 	_tcscpy(pThis->m_szFile, OLE2T((WCHAR*)wszFile)); 
+ 	return S_OK;	
+ }
+ 
+ STDMETHODIMP CShellExt::XPersistFileExt::GetClassID(LPCLSID)
+ { 
+ 	return E_NOTIMPL;	
+ }
+ 
+ STDMETHODIMP CShellExt::XPersistFileExt::IsDirty(VOID)
+ { 
+ 	return E_NOTIMPL; 
+ }
+ 
+ STDMETHODIMP CShellExt::XPersistFileExt::Save(LPCOLESTR, BOOL)
+ { 
+ 	return E_NOTIMPL; 
+ }
+ 
+ STDMETHODIMP CShellExt::XPersistFileExt::SaveCompleted(LPCOLESTR)
+ { 
+ 	return E_NOTIMPL; 
+ }
+ 
+ STDMETHODIMP CShellExt::XPersistFileExt::GetCurFile(LPOLESTR FAR*)
+ { 
+ 	return E_NOTIMPL; 
+ }
Index: openafs/src/WINNT/client_exp/shell_ext.h
diff -c openafs/src/WINNT/client_exp/shell_ext.h:1.2 openafs/src/WINNT/client_exp/shell_ext.h:1.2.8.1
*** openafs/src/WINNT/client_exp/shell_ext.h:1.2	Sat Nov  4 05:02:54 2000
--- openafs/src/WINNT/client_exp/shell_ext.h	Wed Dec  4 09:25:53 2002
***************
*** 18,27 ****
  
  #include <shlobj.h>
  
- 
  extern ULONG nCMRefCount;	// IContextMenu ref count
  extern ULONG nSERefCount;	// IShellExtInit ref count
  
  
  /////////////////////////////////////////////////////////////////////////////
  // CShellExt command target
--- 18,31 ----
  
  #include <shlobj.h>
  
  extern ULONG nCMRefCount;	// IContextMenu ref count
  extern ULONG nSERefCount;	// IShellExtInit ref count
+ extern ULONG nICRefCount;	// IContextMenu ref count
+ extern ULONG nTPRefCount;	// IQueryInfo ref count
+ extern ULONG nXPRefCount;	// IPersistFile ref count
  
+ #define STR_EXT_TITLE   TEXT("AfsClientContextMenu")
+ #define STR_REG_PATH    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers")
  
  /////////////////////////////////////////////////////////////////////////////
  // CShellExt command target
***************
*** 31,40 ****
--- 35,47 ----
  	DECLARE_DYNCREATE(CShellExt)
  
  	BOOL m_bDirSelected;
+ 	BOOL m_bIsSymlink;	// is symbolic link!
+ 	TCHAR m_szFile[MAX_PATH];
  
      CStringArray m_astrFileNames;
  
  	CShellExt();           // protected constructor used by dynamic creation
+ 	LPMALLOC m_pAlloc;
  
  // Attributes
  public:
***************
*** 80,85 ****
--- 87,112 ----
      BEGIN_INTERFACE_PART(ShellInit, IShellExtInit)
          STDMETHOD(Initialize)(LPCITEMIDLIST pidlFolder,LPDATAOBJECT lpdobj, HKEY hkeyProgID);
      END_INTERFACE_PART(ShellInit)
+ 
+     BEGIN_INTERFACE_PART(IconExt, IShellIconOverlayIdentifier)
+         STDMETHOD(GetOverlayInfo)(LPWSTR pwszIconFile,int cchMax,int* pIndex,DWORD* pdwFlags);
+         STDMETHOD(GetPriority)(int* pPriority);
+         STDMETHOD(IsMemberOf)(LPCWSTR pwszPath,DWORD dwAttrib);
+     END_INTERFACE_PART(IconExt)
+ 
+ 	BEGIN_INTERFACE_PART(ToolTipExt, IQueryInfo)
+ 		STDMETHOD(GetInfoTip)(DWORD dwFlags, LPWSTR *ppwszTip);
+ 		STDMETHOD(GetInfoFlags)(LPDWORD pdwFlags);
+     END_INTERFACE_PART(ToolTipExt)
+ 
+ 	BEGIN_INTERFACE_PART(PersistFileExt, IPersistFile)
+ 		STDMETHOD(Load)(LPCOLESTR wszFile, DWORD dwMode);
+ 		STDMETHOD(GetClassID)(LPCLSID);
+ 		STDMETHOD(IsDirty)(VOID);
+ 		STDMETHOD(Save)(LPCOLESTR, BOOL);
+ 		STDMETHOD(SaveCompleted)(LPCOLESTR);
+ 		STDMETHOD(GetCurFile)(LPOLESTR FAR*);
+     END_INTERFACE_PART(PersistFileExt)
  
  	DECLARE_INTERFACE_MAP()
  };
Index: openafs/src/WINNT/client_exp/lang/en_US/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/en_US/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/en_US/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/en_US/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:57 2000
--- openafs/src/WINNT/client_exp/lang/en_US/afs_shl_ext.rc	Wed Dec  4 09:25:56 2002
***************
*** 105,110 ****
--- 105,111 ----
      MENUITEM "Show &File Servers...",       IDM_SHOW_SERVER
      MENUITEM "Show &Cell...",               IDM_SHOWCELL
      MENUITEM "Show Server Status...",       IDM_SERVER_STATUS
+     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
  END
  
  
***************
*** 629,634 ****
--- 630,637 ----
      IDS_SHOW_FS_COLUMN      "File Server(s)"
      IDS_REMOVE_MP           "Remove Mount Points"
      IDS_REMOVE_MP_COLUMN    "Result"
+     IDS_REMOVE_SYMLINK_ITEM "&Remove Symbolic Link"
+     IDS_REALLY_REMOVE_SYMLINK "Are you sure you want to remove the selected Symbolic Link?"
  END
  
  #endif    // English (U.S.) resources
Index: openafs/src/WINNT/client_exp/lang/es_ES/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/es_ES/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/es_ES/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/es_ES/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:58 2000
--- openafs/src/WINNT/client_exp/lang/es_ES/afs_shl_ext.rc	Wed Dec  4 09:25:58 2002
***************
*** 7,660 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // English (U.S.) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 9, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "Autentificación...",          IDM_AUTHENTICATION
!     MENUITEM "Listas de control de acceso...", IDM_ACL_SET
!     POPUP "Vo&lumen/Partición"
!     BEGIN
!         MENUITEM "&Propiedades...",             IDM_VOLUME_PROPERTIES
!         MENUITEM "&Actualizar nombre/mapa de ID", 
!                                                 IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "Punto de monta&je"
!     BEGIN
!         MENUITEM "&Mostrar...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "&Eliminar...",                IDM_MOUNTPOINT_REMOVE
!         MENUITEM "&Crear...",                   IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "&Descargar archivo/dir",      IDM_FLUSH
!     MENUITEM "Descargar vol&umen",          IDM_FLUSH_VOLUME
!     MENUITEM "Mostrar ser&vidores de archivo...", IDM_SHOW_SERVER
!     MENUITEM "Mostrar &célula...",          IDM_SHOWCELL
!     MENUITEM "Mostrar estado de servidor...", IDM_SERVER_STATUS
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Información de volumen"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Aceptar",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "Ayuda",9,240,150,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "Archivo/directorio",IDC_STATIC,10,10,74,10
!     LTEXT           "Nombre",IDC_STATIC,90,10,71,8
!     LTEXT           "Cuota",IDC_STATIC,225,10,38,8
!     LTEXT           "Utilizado",IDC_STATIC,270,10,32,8
!     LTEXT           "%Utilizado",IDC_STATIC,305,10,34,8
!     LTEXT           "ID",IDC_STATIC,175,10,42,8
!     LTEXT           "Cuota nueva:",IDC_STATIC,10,127,46,10
!     EDITTEXT        IDC_NEW_QUOTA,58,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "Mostrar información de partición",IDC_PARTITION_INFO,
!                     205,125,112,14,WS_DISABLED
!     LTEXT           "KBytes",IDC_STATIC,128,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,115,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Establecer ACL de AFS"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Leer",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - Grabar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - Buscar",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - Suprimir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - Insertar",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Bloquear",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,200,141,61,10
!     PUSHBUTTON      "Aña&dir...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "&Eliminar",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "&Borrar",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "&Aceptar",IDOK,270,150,45,14
!     PUSHBUTTON      "Ca&ncelar",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "A&yuda",9,270,201,45,14
!     LTEXT           "Directorio:",IDC_STATIC,15,12,34,10
!     GROUPBOX        "Permisos",IDC_STATIC,195,41,71,115
!     LTEXT           "normales",IDC_STATIC,10,36,30,8
!     LTEXT           "Nombre",IDC_COLUMN_3,69,38,36,8
!     LTEXT           "Permisos",IDC_STATIC,10,28,37,8
!     LTEXT           "negativos",IDC_STATIC,9,132,38,8
!     LTEXT           "Permisos",IDC_STATIC,9,124,38,8
!     LTEXT           "Nombre",IDC_COLUMN_4,69,133,42,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "Co&piar...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 223, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Crear punto de montaje"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_DIR,45,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,45,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,45,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "Aceptar",IDOK,20,81,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "Ayuda",9,150,81,50,14
!     LTEXT           "Directorio:",IDC_STATIC,8,12,33,10
!     LTEXT           "Volumen:",IDC_STATIC,10,28,33,10
!     LTEXT           "Célula:",IDC_STATIC,18,42,25,10
!     GROUPBOX        "",IDC_STATIC,47,52,115,20
!     LTEXT           "Opciones:",IDC_STATIC,10,59,35,10
!     CONTROL         "Normales",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,51,59,41,10
!     CONTROL         "Leer/Grabar",IDC_RW,"Button",BS_AUTORADIOBUTTON,103,59,
!                     57,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 250, 114
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Añadir entrada de ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_NAME,48,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - Leer",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - Buscar",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - Insertar",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - Suprimir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - Grabar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Bloquear",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,80,35,60,10
!     CONTROL         "Entrada normal",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,69,10
!     CONTROL         "Entrada negativa",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,72,10
!     PUSHBUTTON      "Aceptar",IDOK,22,90,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "Ayuda",9,162,90,50,14
!     LTEXT           "Nombre:",IDC_STATIC,10,72,32,8
!     GROUPBOX        "Permisos",IDC_STATIC,10,5,135,55
!     GROUPBOX        "Tipo de entrada",IDC_STATIC,155,6,84,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 152, 82
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Información de partición"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,61,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,61,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,61,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "Cerrar",IDOK,14,62,40,14
!     PUSHBUTTON      "Ayuda",9,69,62,40,14
!     LTEXT           "% Utilizado:",IDC_STATIC,19,42,38,8
!     LTEXT           "Bloques libres:",IDC_STATIC,10,27,47,8
!     LTEXT           "Tamaño total:",IDC_STATIC,12,12,46,8
!     LTEXT           "Kilobytes",IDC_STATIC,106,12,33,8
!     LTEXT           "Kilobytes",IDC_STATIC,105,27,37,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Copiar ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Examinar",IDC_BROWSE,191,25,39,15
!     CONTROL         "Borrar entradas actuales:",IDC_CLEAR,"Button",
!                     BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,10,46,97,10
!     DEFPUSHBUTTON   "Aceptar",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "Ayuda",9,170,65,50,14
!     LTEXT           "Copiar desde:",IDC_STATIC,8,12,44,8
!     LTEXT           "Copiar a:",IDC_STATIC,22,29,30,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Dónde está"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Cerrar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ayuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Archivo/directorio",IDC_STATIC,10,10,111,8
!     LTEXT           "Servidor(es) de archivos",IDC_STATIC,128,10,130,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Resultados"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Cerrar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ayuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Archivo/directorio",-1,10,10,105,8
!     LTEXT           "Resultado",IDC_RESULTS_LABEL,128,10,148,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Puntos de montaje"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Cerrar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ayuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Archivo",IDC_STATIC,10,11,53,8
!     LTEXT           "Volumen",IDC_STATIC,75,11,66,8
!     LTEXT           "Célula",IDC_STATIC,155,11,63,8
!     LTEXT           "Tipo",IDC_STATIC,230,11,55,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Servidores no activos"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "Estos servidores siguen sin estar activos:",IDC_STATIC,
!                     10,10,182,8
!     DEFPUSHBUTTON   "Aceptar",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Estado de servidor"
! FONT 8, "MS Sans Serif"
! BEGIN
!     CONTROL         "Célula local",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,136,8
!     CONTROL         "Célula especificada:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,136,10
!     CONTROL         "Todas las células",IDC_ALL_CELLS,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,65,135,10
!     CONTROL         "No investigar servidores",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,93,10
!     PUSHBUTTON      "Mostrar estado",IDC_SHOWSTATUS,10,120,54,14
!     GROUPBOX        "Célula",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,100,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Cerrar",IDCANCEL,67,120,48,14
!     PUSHBUTTON      "Ayuda",9,119,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Autentificación"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "Obtener señales",ID_GET_TOKENS,12,137,57,14
!     PUSHBUTTON      "Descartar señales",ID_DISCARD_TOKENS,79,137,62,14
!     PUSHBUTTON      "Cerrar",IDCANCEL,151,137,55,14
!     PUSHBUTTON      "Ayuda",9,217,137,55,14
!     LTEXT           "Nombre de usuario",IDC_STATIC,10,9,88,8
!     LTEXT           "Nombre de célula",IDC_STATIC,104,9,113,8
!     LTEXT           "Caducidad",IDC_STATIC,222,9,49,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 179, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Obtener señales"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_NAME,54,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,53,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,53,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "Aceptar",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "Ayuda",9,120,70,35,14
!     LTEXT           "Nombre:",IDC_STATIC,21,12,29,8
!     LTEXT           "Contraseña:",IDC_STATIC,9,32,41,8
!     LTEXT           "Célula:",IDC_STATIC,25,52,24,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 192, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Descartar señales"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Aceptar",IDOK,27,40,35,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,77,40,37,14
!     PUSHBUTTON      "Ayuda",9,129,40,35,14
!     LTEXT           "Célula:",IDC_STATIC,10,17,23,8
!     EDITTEXT        IDC_CELL_NAME,37,15,145,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Submontajes"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Añadir ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "Suprimir",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "Cambiar",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "Submontajes:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "Aceptar",IDOK,202,145,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 282, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Añadir submontaje"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,107,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,107,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Aceptar",IDOK,22,53,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "Ayuda",9,167,53,45,14
!     LTEXT           "Nombre de compartición:",IDC_STATIC,18,10,87,8
!     LTEXT           "Nombre de vía de acceso:",IDC_STATIC,19,25,86,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_MAKE_MOUNT_POINT, DIALOG
!     BEGIN
!         RIGHTMARGIN, 222
!     END
! 
!     IDD_ADD_ACL, DIALOG
!     BEGIN
!         RIGHTMARGIN, 235
!         BOTTOMMARGIN, 113
!     END
! 
!     IDD_PARTITION_INFO, DIALOG
!     BEGIN
!         RIGHTMARGIN, 123
!     END
! 
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 172
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 185
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 275
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "Iniciar o finalizar la sesión de AFS"
!     ID_SERVER_STATUS        "Comprobar servidores"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "No puede descargarse archivo activo %o"
!     IDS_FLUSH_ERROR         "Error al descargar archivo %o: %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "Archivo(s) seleccionado(s) descargado(s) satisfactoriamente"
!     IDS_CANT_GET_CELL       "Error al determinar célula:"
!     IDS_FLUSH_VOLUME_ERROR  "Error al descargar volumen para %o:  %s"
!     IDS_FLUSH_VOLUME_OK     "Volumen descargado satisfactoriamente"
!     IDS_WHERE_IS            "Archivo %o está en sistema principal %s"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "No puede limpiarse ACL para archivo %o:  borrado de Acl no soportado para listas de acceso de DFS"
!     IDS_ACL_IS_FINE         "Lista de acceso para %o correcta"
!     IDS_CLEANACL_INVALID_ARG 
!                             "No puede limpiarse ACL para archivo %o: Argumento no válido, los posibles motivos incluyen: archivo no en servicio o demasiados usuarios de la lista de control de acceso. "
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "Se han eliminado entradas de ACL obsoletas."
!     ID_SUBMOUNTS            "Crear o eliminar un submontaje de AFS"
!     IDS_GETRIGHTS_ERROR     "No se ha podido leer lista de acceso para directorio %o:  %o"
!     IDS_DFSACL_ERROR        "No se han podido editar las ACL de DFS con este mandato"
!     IDS_SAVE_ACL_ERROR      "No se puede guardar ACL para %o:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "No se puede guardar ACL para %o: Argumento no válido, los posibles motivos incluyen: archivo no en AFS, demasiados usuarios en la lista de control de acceso, se ha intentado añadir un usuario no existente a la lista de control de acceso"
!     IDS_ACL_READ_ERROR      "No se puede leer ACL para %o:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "No puede copiarse ACL en dir %o: copiar ACL no soportado para listas de acceso de DFS"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "No se puede copiar ACL en dir %o: Argumento no válido, los posibles motivos incluyen: Archivo no en AFS."
!     IDS_COPY_ACL_ERROR      "No se puede copiar ACL en %o:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o no es un punto de montaje."
!     IDS_LIST_MOUNT_POINT_ERROR "Error:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "Deben crearse puntos de montaje en el sistema de archivos de AFS"
!     IDS_MOUNT_POINT_ERROR   "Error al crear punto de montaje:  %o"
!     IDS_ERROR               "Error:  %o"
!     IDS_DELETED             "Suprimido satisfactoriamente"
!     IDS_SET_QUOTA_ERROR     "Error al definir cuota:  %o"
!     ID_SUBMOUNTS_CREATE     "Crear un submontaje de AFS"
!     ID_SUBMOUNTS_EDIT       "Añadir, cambiar o suprimir submontajes de AFS"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "Error al comprobar el estado de máquinas de servidor de archivo:  %o"
!     IDS_ALL_SERVERS_RUNNING "Se están ejecutando todos los servidores."
!     IDS_CHECK_VOLUMES_OK    "Se están comprobando todas las correlaciones de ID de volumen/nombre."
!     IDS_CHECK_VOLUMES_ERROR "Error al comprobar las correlaciones de ID de volumen/nombre:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "El nombre elegido ya se está utilizando. Por favor, entre un nombre diferente."
!     IDS_REALLY_DEL_MOUNT_POINTS 
!                             "¿Está seguro de que desea eliminar el (los) punto(s) de montaje seleccionado(s)?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "El directorio '%o' no existe."
!     IDS_CLEANACL_MSG        "¡Las ACL obsoletas se eliminarán!"
!     IDS_COPY_ACL_OK         "ACL copiada satisfactoriamente."
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "No puede leerse la información de señal: Es posible que no se haya iniciado el servicio de AFS."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "No puede leerse la información de señal: Error inesperado, código %d."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "No puede leerse la información de señal: Error inesperado, servicio %s.%s.%s, código %d."
!     IDS_ENTER_QUOTA         "Por favor, entre una cuota válida."
!     IDS_AUTHENTICATION_ITEM "&Autentificación..."
!     IDS_ACLS_ITEM           "Listas de &control de acceso..."
!     IDS_VOL_PART_ITEM       "&Volumen/Partición"
!     IDS_VOL_PART_PROPS_ITEM "&Propiedades"
!     IDS_VOL_PART_REFRESH_ITEM "&Actualizar nombre/mapa de ID"
!     IDS_MOUNT_POINT_ITEM    "Punto de &montaje"
!     IDS_MP_SHOW_ITEM        "&Mostrar..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS Client"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "&Eliminar..."
!     IDS_MP_MAKE_ITEM        "&Crear..."
!     IDS_FLUSH_FILE_DIR_ITEM "&Descargar archivo/dir"
!     IDS_FLUSH_VOLUME_ITEM   "Descargar vol&umen"
!     IDS_SHOW_FILE_SERVERS_ITEM "Mostrar ser&vidores de archivo..."
!     IDS_SHOW_CELL_ITEM      "Mostrar &célula..."
!     IDS_SHOW_SERVER_STATUS_ITEM "Mostrar estado de servidor..."
!     IDS_AFS_ITEM            "&AFS"
!     IDS_SUBMOUNTS_ITEM      "Su&bmontajes"
!     IDS_GET_SUBMT_INFO_ERROR 
!                             "No se ha podido leer información de submontaje para el nombre de recurso compartido %o."
!     IDS_REALLY_DELETE_SUBMT "Suprimir nombre de recurso compartido %o?"
!     IDS_SUBMT_SAVE_FAILED   "Han fallado los cambios en la base de datos de submontaje."
!     IDS_SUBMOUNTS_CREATE_ITEM "&Añadir"
!     IDS_SUBMOUNTS_EDIT_ITEM "&Editar..."
!     IDS_EDIT_PATH_NAME      "Editar nombre de vía de acceso"
!     IDS_SHOW_CELL           "Mostrar célula"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "Célula"
!     IDS_SHOW_FS             "Mostrar servidores de archivo"
!     IDS_SHOW_FS_COLUMN      "Servidor(es) de archivo"
!     IDS_REMOVE_MP           "Eliminar puntos de montaje"
!     IDS_REMOVE_MP_COLUMN    "Resultado"
! END
! 
! #endif    // English (U.S.) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE 9, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
--- 7,661 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // English (U.S.) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 9, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "Autentificación...",          IDM_AUTHENTICATION
!     MENUITEM "Listas de control de acceso...", IDM_ACL_SET
!     POPUP "Vo&lumen/Partición"
!     BEGIN
!         MENUITEM "&Propiedades...",             IDM_VOLUME_PROPERTIES
!         MENUITEM "&Actualizar nombre/mapa de ID", 
!                                                 IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "Punto de monta&je"
!     BEGIN
!         MENUITEM "&Mostrar...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "&Eliminar...",                IDM_MOUNTPOINT_REMOVE
!         MENUITEM "&Crear...",                   IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "&Descargar archivo/dir",      IDM_FLUSH
!     MENUITEM "Descargar vol&umen",          IDM_FLUSH_VOLUME
!     MENUITEM "Mostrar ser&vidores de archivo...", IDM_SHOW_SERVER
!     MENUITEM "Mostrar &célula...",          IDM_SHOWCELL
!     MENUITEM "Mostrar estado de servidor...", IDM_SERVER_STATUS
!     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Información de volumen"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Aceptar",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "Ayuda",9,240,150,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "Archivo/directorio",IDC_STATIC,10,10,74,10
!     LTEXT           "Nombre",IDC_STATIC,90,10,71,8
!     LTEXT           "Cuota",IDC_STATIC,225,10,38,8
!     LTEXT           "Utilizado",IDC_STATIC,270,10,32,8
!     LTEXT           "%Utilizado",IDC_STATIC,305,10,34,8
!     LTEXT           "ID",IDC_STATIC,175,10,42,8
!     LTEXT           "Cuota nueva:",IDC_STATIC,10,127,46,10
!     EDITTEXT        IDC_NEW_QUOTA,58,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "Mostrar información de partición",IDC_PARTITION_INFO,
!                     205,125,112,14,WS_DISABLED
!     LTEXT           "KBytes",IDC_STATIC,128,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,115,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Establecer ACL de AFS"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Leer",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - Grabar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - Buscar",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - Suprimir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - Insertar",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Bloquear",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,200,141,61,10
!     PUSHBUTTON      "Aña&dir...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "&Eliminar",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "&Borrar",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "&Aceptar",IDOK,270,150,45,14
!     PUSHBUTTON      "Ca&ncelar",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "A&yuda",9,270,201,45,14
!     LTEXT           "Directorio:",IDC_STATIC,15,12,34,10
!     GROUPBOX        "Permisos",IDC_STATIC,195,41,71,115
!     LTEXT           "normales",IDC_STATIC,10,36,30,8
!     LTEXT           "Nombre",IDC_COLUMN_3,69,38,36,8
!     LTEXT           "Permisos",IDC_STATIC,10,28,37,8
!     LTEXT           "negativos",IDC_STATIC,9,132,38,8
!     LTEXT           "Permisos",IDC_STATIC,9,124,38,8
!     LTEXT           "Nombre",IDC_COLUMN_4,69,133,42,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "Co&piar...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 223, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Crear punto de montaje"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_DIR,45,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,45,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,45,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "Aceptar",IDOK,20,81,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "Ayuda",9,150,81,50,14
!     LTEXT           "Directorio:",IDC_STATIC,8,12,33,10
!     LTEXT           "Volumen:",IDC_STATIC,10,28,33,10
!     LTEXT           "Célula:",IDC_STATIC,18,42,25,10
!     GROUPBOX        "",IDC_STATIC,47,52,115,20
!     LTEXT           "Opciones:",IDC_STATIC,10,59,35,10
!     CONTROL         "Normales",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,51,59,41,10
!     CONTROL         "Leer/Grabar",IDC_RW,"Button",BS_AUTORADIOBUTTON,103,59,
!                     57,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 250, 114
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Añadir entrada de ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_NAME,48,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - Leer",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - Buscar",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - Insertar",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - Suprimir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - Grabar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Bloquear",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,80,35,60,10
!     CONTROL         "Entrada normal",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,69,10
!     CONTROL         "Entrada negativa",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,72,10
!     PUSHBUTTON      "Aceptar",IDOK,22,90,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "Ayuda",9,162,90,50,14
!     LTEXT           "Nombre:",IDC_STATIC,10,72,32,8
!     GROUPBOX        "Permisos",IDC_STATIC,10,5,135,55
!     GROUPBOX        "Tipo de entrada",IDC_STATIC,155,6,84,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 152, 82
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Información de partición"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,61,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,61,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,61,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "Cerrar",IDOK,14,62,40,14
!     PUSHBUTTON      "Ayuda",9,69,62,40,14
!     LTEXT           "% Utilizado:",IDC_STATIC,19,42,38,8
!     LTEXT           "Bloques libres:",IDC_STATIC,10,27,47,8
!     LTEXT           "Tamaño total:",IDC_STATIC,12,12,46,8
!     LTEXT           "Kilobytes",IDC_STATIC,106,12,33,8
!     LTEXT           "Kilobytes",IDC_STATIC,105,27,37,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Copiar ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Examinar",IDC_BROWSE,191,25,39,15
!     CONTROL         "Borrar entradas actuales:",IDC_CLEAR,"Button",
!                     BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,10,46,97,10
!     DEFPUSHBUTTON   "Aceptar",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "Ayuda",9,170,65,50,14
!     LTEXT           "Copiar desde:",IDC_STATIC,8,12,44,8
!     LTEXT           "Copiar a:",IDC_STATIC,22,29,30,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Dónde está"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Cerrar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ayuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Archivo/directorio",IDC_STATIC,10,10,111,8
!     LTEXT           "Servidor(es) de archivos",IDC_STATIC,128,10,130,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Resultados"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Cerrar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ayuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Archivo/directorio",-1,10,10,105,8
!     LTEXT           "Resultado",IDC_RESULTS_LABEL,128,10,148,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Puntos de montaje"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Cerrar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ayuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Archivo",IDC_STATIC,10,11,53,8
!     LTEXT           "Volumen",IDC_STATIC,75,11,66,8
!     LTEXT           "Célula",IDC_STATIC,155,11,63,8
!     LTEXT           "Tipo",IDC_STATIC,230,11,55,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Servidores no activos"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "Estos servidores siguen sin estar activos:",IDC_STATIC,
!                     10,10,182,8
!     DEFPUSHBUTTON   "Aceptar",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Estado de servidor"
! FONT 8, "MS Sans Serif"
! BEGIN
!     CONTROL         "Célula local",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,136,8
!     CONTROL         "Célula especificada:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,136,10
!     CONTROL         "Todas las células",IDC_ALL_CELLS,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,65,135,10
!     CONTROL         "No investigar servidores",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,93,10
!     PUSHBUTTON      "Mostrar estado",IDC_SHOWSTATUS,10,120,54,14
!     GROUPBOX        "Célula",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,100,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Cerrar",IDCANCEL,67,120,48,14
!     PUSHBUTTON      "Ayuda",9,119,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Autentificación"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "Obtener señales",ID_GET_TOKENS,12,137,57,14
!     PUSHBUTTON      "Descartar señales",ID_DISCARD_TOKENS,79,137,62,14
!     PUSHBUTTON      "Cerrar",IDCANCEL,151,137,55,14
!     PUSHBUTTON      "Ayuda",9,217,137,55,14
!     LTEXT           "Nombre de usuario",IDC_STATIC,10,9,88,8
!     LTEXT           "Nombre de célula",IDC_STATIC,104,9,113,8
!     LTEXT           "Caducidad",IDC_STATIC,222,9,49,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 179, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Obtener señales"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_NAME,54,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,53,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,53,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "Aceptar",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "Ayuda",9,120,70,35,14
!     LTEXT           "Nombre:",IDC_STATIC,21,12,29,8
!     LTEXT           "Contraseña:",IDC_STATIC,9,32,41,8
!     LTEXT           "Célula:",IDC_STATIC,25,52,24,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 192, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Descartar señales"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Aceptar",IDOK,27,40,35,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,77,40,37,14
!     PUSHBUTTON      "Ayuda",9,129,40,35,14
!     LTEXT           "Célula:",IDC_STATIC,10,17,23,8
!     EDITTEXT        IDC_CELL_NAME,37,15,145,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Submontajes"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Añadir ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "Suprimir",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "Cambiar",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "Submontajes:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "Aceptar",IDOK,202,145,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 282, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Añadir submontaje"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,107,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,107,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Aceptar",IDOK,22,53,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "Ayuda",9,167,53,45,14
!     LTEXT           "Nombre de compartición:",IDC_STATIC,18,10,87,8
!     LTEXT           "Nombre de vía de acceso:",IDC_STATIC,19,25,86,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_MAKE_MOUNT_POINT, DIALOG
!     BEGIN
!         RIGHTMARGIN, 222
!     END
! 
!     IDD_ADD_ACL, DIALOG
!     BEGIN
!         RIGHTMARGIN, 235
!         BOTTOMMARGIN, 113
!     END
! 
!     IDD_PARTITION_INFO, DIALOG
!     BEGIN
!         RIGHTMARGIN, 123
!     END
! 
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 172
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 185
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 275
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "Iniciar o finalizar la sesión de AFS"
!     ID_SERVER_STATUS        "Comprobar servidores"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "No puede descargarse archivo activo %o"
!     IDS_FLUSH_ERROR         "Error al descargar archivo %o: %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "Archivo(s) seleccionado(s) descargado(s) satisfactoriamente"
!     IDS_CANT_GET_CELL       "Error al determinar célula:"
!     IDS_FLUSH_VOLUME_ERROR  "Error al descargar volumen para %o:  %s"
!     IDS_FLUSH_VOLUME_OK     "Volumen descargado satisfactoriamente"
!     IDS_WHERE_IS            "Archivo %o está en sistema principal %s"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "No puede limpiarse ACL para archivo %o:  borrado de Acl no soportado para listas de acceso de DFS"
!     IDS_ACL_IS_FINE         "Lista de acceso para %o correcta"
!     IDS_CLEANACL_INVALID_ARG 
!                             "No puede limpiarse ACL para archivo %o: Argumento no válido, los posibles motivos incluyen: archivo no en servicio o demasiados usuarios de la lista de control de acceso. "
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "Se han eliminado entradas de ACL obsoletas."
!     ID_SUBMOUNTS            "Crear o eliminar un submontaje de AFS"
!     IDS_GETRIGHTS_ERROR     "No se ha podido leer lista de acceso para directorio %o:  %o"
!     IDS_DFSACL_ERROR        "No se han podido editar las ACL de DFS con este mandato"
!     IDS_SAVE_ACL_ERROR      "No se puede guardar ACL para %o:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "No se puede guardar ACL para %o: Argumento no válido, los posibles motivos incluyen: archivo no en AFS, demasiados usuarios en la lista de control de acceso, se ha intentado añadir un usuario no existente a la lista de control de acceso"
!     IDS_ACL_READ_ERROR      "No se puede leer ACL para %o:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "No puede copiarse ACL en dir %o: copiar ACL no soportado para listas de acceso de DFS"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "No se puede copiar ACL en dir %o: Argumento no válido, los posibles motivos incluyen: Archivo no en AFS."
!     IDS_COPY_ACL_ERROR      "No se puede copiar ACL en %o:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o no es un punto de montaje."
!     IDS_LIST_MOUNT_POINT_ERROR "Error:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "Deben crearse puntos de montaje en el sistema de archivos de AFS"
!     IDS_MOUNT_POINT_ERROR   "Error al crear punto de montaje:  %o"
!     IDS_ERROR               "Error:  %o"
!     IDS_DELETED             "Suprimido satisfactoriamente"
!     IDS_SET_QUOTA_ERROR     "Error al definir cuota:  %o"
!     ID_SUBMOUNTS_CREATE     "Crear un submontaje de AFS"
!     ID_SUBMOUNTS_EDIT       "Añadir, cambiar o suprimir submontajes de AFS"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "Error al comprobar el estado de máquinas de servidor de archivo:  %o"
!     IDS_ALL_SERVERS_RUNNING "Se están ejecutando todos los servidores."
!     IDS_CHECK_VOLUMES_OK    "Se están comprobando todas las correlaciones de ID de volumen/nombre."
!     IDS_CHECK_VOLUMES_ERROR "Error al comprobar las correlaciones de ID de volumen/nombre:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "El nombre elegido ya se está utilizando. Por favor, entre un nombre diferente."
!     IDS_REALLY_DEL_MOUNT_POINTS 
!                             "¿Está seguro de que desea eliminar el (los) punto(s) de montaje seleccionado(s)?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "El directorio '%o' no existe."
!     IDS_CLEANACL_MSG        "¡Las ACL obsoletas se eliminarán!"
!     IDS_COPY_ACL_OK         "ACL copiada satisfactoriamente."
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "No puede leerse la información de señal: Es posible que no se haya iniciado el servicio de AFS."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "No puede leerse la información de señal: Error inesperado, código %d."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "No puede leerse la información de señal: Error inesperado, servicio %s.%s.%s, código %d."
!     IDS_ENTER_QUOTA         "Por favor, entre una cuota válida."
!     IDS_AUTHENTICATION_ITEM "&Autentificación..."
!     IDS_ACLS_ITEM           "Listas de &control de acceso..."
!     IDS_VOL_PART_ITEM       "&Volumen/Partición"
!     IDS_VOL_PART_PROPS_ITEM "&Propiedades"
!     IDS_VOL_PART_REFRESH_ITEM "&Actualizar nombre/mapa de ID"
!     IDS_MOUNT_POINT_ITEM    "Punto de &montaje"
!     IDS_MP_SHOW_ITEM        "&Mostrar..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS Client"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "&Eliminar..."
!     IDS_MP_MAKE_ITEM        "&Crear..."
!     IDS_FLUSH_FILE_DIR_ITEM "&Descargar archivo/dir"
!     IDS_FLUSH_VOLUME_ITEM   "Descargar vol&umen"
!     IDS_SHOW_FILE_SERVERS_ITEM "Mostrar ser&vidores de archivo..."
!     IDS_SHOW_CELL_ITEM      "Mostrar &célula..."
!     IDS_SHOW_SERVER_STATUS_ITEM "Mostrar estado de servidor..."
!     IDS_AFS_ITEM            "&AFS"
!     IDS_SUBMOUNTS_ITEM      "Su&bmontajes"
!     IDS_GET_SUBMT_INFO_ERROR 
!                             "No se ha podido leer información de submontaje para el nombre de recurso compartido %o."
!     IDS_REALLY_DELETE_SUBMT "Suprimir nombre de recurso compartido %o?"
!     IDS_SUBMT_SAVE_FAILED   "Han fallado los cambios en la base de datos de submontaje."
!     IDS_SUBMOUNTS_CREATE_ITEM "&Añadir"
!     IDS_SUBMOUNTS_EDIT_ITEM "&Editar..."
!     IDS_EDIT_PATH_NAME      "Editar nombre de vía de acceso"
!     IDS_SHOW_CELL           "Mostrar célula"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "Célula"
!     IDS_SHOW_FS             "Mostrar servidores de archivo"
!     IDS_SHOW_FS_COLUMN      "Servidor(es) de archivo"
!     IDS_REMOVE_MP           "Eliminar puntos de montaje"
!     IDS_REMOVE_MP_COLUMN    "Resultado"
! END
! 
! #endif    // English (U.S.) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE 9, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
Index: openafs/src/WINNT/client_exp/lang/ja_JP/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/ja_JP/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/ja_JP/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/ja_JP/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:58 2000
--- openafs/src/WINNT/client_exp/lang/ja_JP/afs_shl_ext.rc	Wed Dec  4 09:26:00 2002
***************
*** 7,643 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Japanese resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
! #ifdef _WIN32
! LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 17, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "”FØ...",                     IDM_AUTHENTICATION
!     MENUITEM "ƒAƒNƒZƒX§ŒäƒŠƒXƒg...",       IDM_ACL_SET
!     POPUP "ƒ{ƒŠƒ…[ƒ€ / ƒp[ƒeƒBƒVƒ‡ƒ“(&V)"
!     BEGIN
!         MENUITEM "ƒvƒƒpƒeƒB[(&P)...",         IDM_VOLUME_PROPERTIES
!         MENUITEM "–¼‘O /ID ƒ}ƒbƒsƒ“ƒO‚ÌÅV•\Ž¦(&R)", 
!                                                 IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg(&M)"
!     BEGIN
!         MENUITEM "•\Ž¦(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "íœ(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "ì¬(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "ƒtƒ@ƒCƒ‹ / ƒfƒBƒŒƒNƒgƒŠ[‚Ìƒtƒ‰ƒbƒVƒ…(&F)", IDM_FLUSH
!     MENUITEM "ƒ{ƒŠƒ…[ƒ€‚Ìƒtƒ‰ƒbƒVƒ…(&U)",  IDM_FLUSH_VOLUME
!     MENUITEM "ƒtƒ@ƒCƒ‹EƒT[ƒo[‚Ì•\Ž¦(&F)...", IDM_SHOW_SERVER
!     MENUITEM "ƒZƒ‹‚Ì•\Ž¦(&C)...",           IDM_SHOWCELL
!     MENUITEM "ƒT[ƒo[ó‹µ‚Ì•\Ž¦...",       IDM_SERVER_STATUS
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "ƒ{ƒŠƒ…[ƒ€î•ñ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,240,150,50,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹ / ƒfƒBƒŒƒNƒgƒŠ[",IDC_STATIC,10,3,55,17
!     LTEXT           "–¼‘O",IDC_STATIC,90,10,20,8
!     LTEXT           "Š„‚è“–‚Ä—Ê",IDC_STATIC,225,10,41,8
!     LTEXT           "Žg—p—Ê",IDC_STATIC,270,10,25,8
!     LTEXT           "Žg—p—¦ (%)",IDC_STATIC,305,10,39,8
!     LTEXT           "ID",IDC_STATIC,175,10,10,8
!     LTEXT           "V‹KŠ„‚è“–‚Ä—Ê:",IDC_STATIC,10,127,56,10
!     EDITTEXT        IDC_NEW_QUOTA,75,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "ƒp[ƒeƒBƒVƒ‡ƒ“î•ñ‚Ì•\Ž¦",IDC_PARTITION_INFO,205,125,
!                     102,14,WS_DISABLED
!     LTEXT           "KB",IDC_STATIC,145,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,128,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "AFS ACL ‚ÌÝ’è"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,76,12,239,10
!     LISTBOX         IDC_NORMAL_RIGHTS,8,46,145,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,8,143,145,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Read (“Ç‚ÝŽæ‚è)",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,52,81,10
!     CONTROL         "w - Write (‘‚«ž‚Ý)",IDC_WRITE,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,160,111,81,10
!     CONTROL         "l - Lookup (ŒŸõ)",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,66,81,10
!     CONTROL         "d - Delete (íœ)",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,96,81,10
!     CONTROL         "i - Insert (‘}“ü)",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,81,81,10
!     CONTROL         "k - Lock (ƒƒbƒN)",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,126,81,10
!     CONTROL         "a - Administer (ŠÇ—)",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,160,141,81,10
!     PUSHBUTTON      "’Ç‰Á(&A)...",IDC_ADD,246,45,69,14
!     PUSHBUTTON      "íœ(&R)",IDC_REMOVE,246,70,69,14,WS_DISABLED
!     PUSHBUTTON      "ƒNƒŠ[ƒjƒ“ƒO(&C)",IDC_CLEAN,246,95,69,14
!     DEFPUSHBUTTON   "—¹‰ð(&O)",IDOK,246,150,69,14
!     PUSHBUTTON      "ŽæÁ‚µ(&N)",IDCANCEL,246,175,69,14
!     PUSHBUTTON      "ƒwƒ‹ƒv(&H)",9,246,201,69,14
!     LTEXT           "ƒfƒBƒŒƒNƒgƒŠ[:",IDC_STATIC,15,12,60,10
!     GROUPBOX        "ƒAƒNƒZƒXŒ ",IDC_STATIC,155,41,89,115
!     LTEXT           "•W€",IDC_STATIC,10,30,23,8
!     LTEXT           "–¼‘O",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "ƒAƒNƒZƒXŒ ",IDC_STATIC,10,38,41,8
!     LTEXT           "‹ÖŽ~",IDC_STATIC,10,127,17,8
!     LTEXT           "ƒAƒNƒZƒXŒ ",IDC_STATIC,10,135,41,8
!     LTEXT           "–¼‘O",IDC_COLUMN_4,69,135,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "ƒRƒs[(&P)...",IDC_COPY,246,120,69,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 249, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚Ìì¬"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_DIR,70,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,70,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,70,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,20,81,50,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,150,81,50,14
!     LTEXT           "ƒfƒBƒŒƒNƒgƒŠ[:",IDC_STATIC,9,12,45,10
!     LTEXT           "ƒ{ƒŠƒ…[ƒ€:",IDC_STATIC,9,28,45,10
!     LTEXT           "ƒZƒ‹:",IDC_STATIC,9,42,45,10
!     GROUPBOX        "",IDC_STATIC,70,52,145,20
!     LTEXT           "ƒIƒvƒVƒ‡ƒ“:",IDC_STATIC,9,59,45,10
!     CONTROL         "’Êí",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,75,59,41,10
!     CONTROL         "“Ç‚ÝŽæ‚è/‘‚«ž‚Ý",IDC_RW,"Button",BS_AUTORADIOBUTTON,
!                     120,59,77,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 245, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL €–Ú‚Ì’Ç‰Á"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_NAME,37,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - Read (“Ç‚ÝŽæ‚è)",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,73,10
!     CONTROL         "l - Lookup (ŒŸõ)",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,67,10
!     CONTROL         "i - Insert (‘}“ü)",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,60,10
!     CONTROL         "d - Delete (íœ)",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,67,10
!     CONTROL         "w - Write (‘‚«ž‚Ý)",IDC_WRITE,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,100,15,79,10
!     CONTROL         "k - Lock (ƒƒbƒN)",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,100,25,69,10
!     CONTROL         "a - Administer (ŠÇ—)",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,100,35,81,10
!     CONTROL         "•W€€–Ú",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,191,16,43,10
!     CONTROL         "‹ÖŽ~€–Ú",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,191,26,43,10
!     PUSHBUTTON      "—¹‰ð",IDOK,22,90,50,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,162,90,50,14
!     LTEXT           "–¼‘O:",IDC_STATIC,10,72,18,8
!     GROUPBOX        "ƒAƒNƒZƒXŒ ",IDC_STATIC,10,5,175,55
!     GROUPBOX        "€–Úƒ^ƒCƒv",IDC_STATIC,186,6,53,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒp[ƒeƒBƒVƒ‡ƒ“î•ñ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,60,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,60,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,60,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,14,62,40,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,69,62,40,14
!     LTEXT           "Žg—p—¦(%):",IDC_STATIC,10,42,42,8
!     LTEXT           "‹ó‚«ƒuƒƒbƒN:",IDC_STATIC,10,27,42,8
!     LTEXT           "‡ŒvƒTƒCƒY:",IDC_STATIC,10,12,42,8
!     LTEXT           "KB",IDC_STATIC,107,12,10,8
!     LTEXT           "KB",IDC_STATIC,107,27,10,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL ‚ÌƒRƒs["
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,56,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,56,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ŽQÆ",IDC_BROWSE,195,25,35,15
!     CONTROL         "Œ»Ý‚Ì€–Ú‚ðÁ‹Ž:",IDC_CLEAR,"Button",BS_AUTOCHECKBOX | 
!                     BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,170,65,50,14
!     LTEXT           "ƒRƒs[Œ³:",IDC_STATIC,14,12,34,8
!     LTEXT           "ƒRƒs[æ:",IDC_STATIC,14,29,34,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ŒŸõ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,65,145,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,21,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹/ƒfƒBƒŒƒNƒgƒŠ[",IDC_STATIC,10,10,91,8
!     LTEXT           "ƒtƒ@ƒCƒ‹EƒT[ƒo[",IDC_STATIC,128,10,73,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Œ‹‰Ê"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,65,145,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,22,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹/ƒfƒBƒŒƒNƒgƒŠ[",-1,10,10,91,8
!     LTEXT           "Œ‹‰Ê",IDC_RESULTS_LABEL,128,10,17,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,65,145,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,23,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹",IDC_STATIC,10,11,33,8
!     LTEXT           "ƒ{ƒŠƒ…[ƒ€",IDC_STATIC,75,11,41,8
!     LTEXT           "ƒZƒ‹",IDC_STATIC,155,11,17,8
!     LTEXT           "ƒ^ƒCƒv",IDC_STATIC,230,11,25,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒT[ƒo[‚ªƒ_ƒEƒ“"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LISTBOX         1029,10,22,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "ˆÈ‰º‚ÌƒT[ƒo[‚Í‚Ü‚¾ƒ_ƒEƒ“‚µ‚Ä‚¢‚Ü‚·:",IDC_STATIC,10,10,
!                     146,8
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "ƒT[ƒo[ó‹µ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     CONTROL         "ƒ[ƒJƒ‹EƒZƒ‹",IDC_LOCALCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,20,20,59,8
!     CONTROL         "Žw’èƒZƒ‹:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,59,10
!     CONTROL         "‚·‚×‚Ä‚ÌƒZƒ‹",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON | 
!                     WS_TABSTOP,20,65,59,10
!     CONTROL         "ƒT[ƒo[‚ðƒvƒ[ƒu‚µ‚È‚¢",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,107,10
!     PUSHBUTTON      "ó‹µ‚Ì•\Ž¦",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "ƒZƒ‹",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,120,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,48,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ƒNƒ[ƒY",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "”FØ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,19,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "ƒg[ƒNƒ“‚ÌŽæ“¾",ID_GET_TOKENS,15,137,62,14
!     PUSHBUTTON      "ƒg[ƒNƒ“‚Ì”jŠü",ID_DISCARD_TOKENS,80,137,62,14
!     PUSHBUTTON      "ƒNƒ[ƒY",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,215,137,55,14
!     LTEXT           "ƒ†[ƒU[–¼",IDC_STATIC,10,9,41,8
!     LTEXT           "ƒZƒ‹–¼",IDC_STATIC,104,9,25,8
!     LTEXT           "—LŒøŠúŒÀ",IDC_STATIC,222,9,33,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 179, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ƒg[ƒNƒ“‚ÌŽæ“¾"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_NAME,52,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,52,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,52,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,120,70,35,14
!     LTEXT           "–¼‘O:",IDC_STATIC,25,13,20,8
!     LTEXT           "ƒpƒXƒ[ƒh:",IDC_STATIC,10,32,35,8
!     LTEXT           "ƒZƒ‹:",IDC_STATIC,26,51,19,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ƒg[ƒNƒ“‚Ì”jŠü"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,25,40,35,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,75,40,35,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,125,40,35,14
!     LTEXT           "ƒZƒ‹:",IDC_STATIC,10,17,18,8
!     EDITTEXT        IDC_CELL_NAME,37,15,136,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒTƒuƒ}ƒEƒ“ƒg"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "’Ç‰Á ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "íœ",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "•ÏX",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "ƒTƒuƒ}ƒEƒ“ƒg:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "—¹‰ð",IDOK,202,145,45,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒTƒuƒ}ƒEƒ“ƒg‚Ì’Ç‰Á"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,62,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,62,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "—¹‰ð",IDOK,22,53,45,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,167,53,45,14
!     LTEXT           "‹¤—p–¼:",IDC_STATIC,19,10,29,8
!     LTEXT           "ƒpƒX–¼:",IDC_STATIC,19,25,28,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 165
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "AFS ‚ÌƒƒOƒCƒ“‚Ü‚½‚ÍƒƒOƒAƒEƒg"
!     ID_SERVER_STATUS        "ƒT[ƒo[‚ÌŒŸ¸"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "Šˆ“®ó‘Ô‚Ìƒtƒ@ƒCƒ‹ %o ‚ðƒtƒ‰ƒbƒVƒ…‚Å‚«‚Ü‚¹‚ñ"
!     IDS_FLUSH_ERROR         "ƒtƒ@ƒCƒ‹ %o ‚Ìƒtƒ‰ƒbƒVƒ…EƒGƒ‰[:  %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "‘I‘ð‚³‚ê‚½ƒtƒ@ƒCƒ‹‚ª³í‚Éƒtƒ‰ƒbƒVƒ…‚³‚ê‚Ü‚µ‚½"
!     IDS_CANT_GET_CELL       "ƒZƒ‹‚Ì”»•ÊƒGƒ‰[:  "
!     IDS_FLUSH_VOLUME_ERROR  "%o ‚Ìƒ{ƒŠƒ…[ƒ€‚Ìƒtƒ‰ƒbƒVƒ…EƒGƒ‰[:  %s"
!     IDS_FLUSH_VOLUME_OK     "ƒ{ƒŠƒ…[ƒ€‚ª³í‚Éƒtƒ‰ƒbƒVƒ…‚³‚ê‚Ü‚µ‚½"
!     IDS_WHERE_IS            "ƒtƒ@ƒCƒ‹ %o ‚ÍƒzƒXƒg %s ‚É‚ ‚è‚Ü‚·"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "ƒtƒ@ƒCƒ‹ %o ‚Ì ACL ‚ðƒNƒŠ[ƒjƒ“ƒO‚Å‚«‚Ü‚¹‚ñ:  ACL ‚ÌƒNƒŠ[ƒjƒ“ƒO‚Í DFS ƒAƒNƒZƒXEƒŠƒXƒg‚Å‚ÍƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
!     IDS_ACL_IS_FINE         "%o ‚ÌƒAƒNƒZƒXEƒŠƒXƒg‚Í³í‚Å‚·"
!     IDS_CLEANACL_INVALID_ARG 
!                             "ƒtƒ@ƒCƒ‹ %o ‚Ì ACL ‚ðƒNƒŠ[ƒjƒ“ƒO‚Å‚«‚Ü‚¹‚ñ:  –³Œø‚Èˆø‚«”Al‚¦‚ç‚ê‚é——R:  ƒtƒ@ƒCƒ‹‚ª vice ‚É‚È‚¢A‚Ü‚½‚ÍƒAƒNƒZƒX§ŒäƒŠƒXƒg‚Éƒ†[ƒU[‚ª‘½‚·‚¬‚é"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "ŒÃ‚¢ ACL €–Ú‚ªíœ‚³‚ê‚Ü‚µ‚½B"
!     ID_SUBMOUNTS            "AFS ƒTƒuƒ}ƒEƒ“ƒg‚Ìì¬‚Ü‚½‚Ííœ"
!     IDS_GETRIGHTS_ERROR     "ƒfƒBƒŒƒNƒgƒŠ[ %o ‚ÌƒAƒNƒZƒXEƒŠƒXƒg‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  %o"
!     IDS_DFSACL_ERROR        "DFS ACL ‚Í‚±‚ÌƒRƒ}ƒ“ƒh‚Å•ÒW‚Å‚«‚Ü‚¹‚ñ"
!     IDS_SAVE_ACL_ERROR      "%o ‚Ì ACL ‚ð•ÛŠÇ‚Å‚«‚Ü‚¹‚ñ:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "%o ‚Ì ACL ‚ð•ÛŠÇ‚Å‚«‚Ü‚¹‚ñ:  –³Œø‚Èˆø‚«”Al‚¦‚ç‚ê‚é——R:  ƒtƒ@ƒCƒ‹‚ª AFS ‚É‚È‚¢AƒAƒNƒZƒX§ŒäƒŠƒXƒg‚Éƒ†[ƒU[‚ª‘½‚·‚¬‚éA‘¶Ý‚µ‚È‚¢ƒ†[ƒU[‚ðƒAƒNƒZƒX§ŒäƒŠƒXƒg‚É’Ç‰Á‚µ‚æ‚¤‚Æ‚µ‚½"
!     IDS_ACL_READ_ERROR      "%o ‚Ì ACL ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "ƒfƒBƒŒƒNƒgƒŠ[ %o ‚É ACL ‚ðƒRƒs[‚Å‚«‚Ü‚¹‚ñ:  ACL ‚ÌƒRƒs[‚Í DFSƒAƒNƒZƒXEƒŠƒXƒg‚Å‚ÍƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "ƒfƒBƒŒƒNƒgƒŠ[ %o ‚É ACL ‚ðƒRƒs[‚Å‚«‚Ü‚¹‚ñ:  –³Œø‚Èˆø‚«”Al‚¦‚ç‚ê‚é——R:  ƒtƒ@ƒCƒ‹‚ª AFS ‚É‚È‚¢B"
!     IDS_COPY_ACL_ERROR      "ACL ‚ð %o ‚ÉƒRƒs[‚Å‚«‚Ü‚¹‚ñ:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o ‚Íƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚Å‚Í‚ ‚è‚Ü‚¹‚ñB"
!     IDS_LIST_MOUNT_POINT_ERROR "ƒGƒ‰[:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚ð AFS ƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€“à‚Éì¬‚·‚é•K—v‚ª‚ ‚è‚Ü‚·"
!     IDS_MOUNT_POINT_ERROR   "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚Ìì¬ƒGƒ‰[:  %o"
!     IDS_ERROR               "ƒGƒ‰[:  %o"
!     IDS_DELETED             "³í‚Éíœ‚³‚ê‚Ü‚µ‚½"
!     IDS_SET_QUOTA_ERROR     "Š„‚è“–‚Ä—Ê‚ÌÝ’èƒGƒ‰[:  %o"
!     ID_SUBMOUNTS_CREATE     "AFS ƒTƒuƒ}ƒEƒ“ƒg‚Ìì¬"
!     ID_SUBMOUNTS_EDIT       "AFS ƒTƒuƒ}ƒEƒ“ƒg‚Ì’Ç‰ÁA•ÏXA‚Ü‚½‚Ííœ"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "ƒtƒ@ƒCƒ‹EƒT[ƒo[Eƒ}ƒVƒ“‚Ìó‹µ‚ÌŒŸ¸ƒGƒ‰[:  %o"
!     IDS_ALL_SERVERS_RUNNING "‚·‚×‚Ä‚ÌƒT[ƒo[‚ªŽÀs’†‚Å‚·B"
!     IDS_CHECK_VOLUMES_OK    "‚·‚×‚Ä‚Ìƒ{ƒŠƒ…[ƒ€ ID/–¼‘O‚Ìƒ}ƒbƒsƒ“ƒO‚ªŒŸ¸‚³‚ê‚Ü‚µ‚½B"
!     IDS_CHECK_VOLUMES_ERROR "ƒ{ƒŠƒ…[ƒ€ ID/–¼‘Oƒ}ƒbƒsƒ“ƒO‚ÌŒŸ¸ƒGƒ‰[:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "‘I‘ð‚µ‚½–¼‘O‚Í‚·‚Å‚ÉŽg—p‚³‚ê‚Ä‚¢‚Ü‚·B•Ê‚Ì–¼‘O‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
!     IDS_REALLY_DEL_MOUNT_POINTS 
!                             "‘I‘ð‚µ‚½ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚ðíœ‚µ‚Ä‚à‚¢‚¢‚Å‚·‚©?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "ƒfƒBƒŒƒNƒgƒŠ[ '%o' ‚ª‘¶Ý‚µ‚Ü‚¹‚ñB"
!     IDS_CLEANACL_MSG        "ŒÃ‚¢ ACL ‚Ííœ‚³‚ê‚Ü‚·!"
!     IDS_COPY_ACL_OK         "ACL ‚ª³í‚ÉƒRƒs[‚³‚ê‚Ü‚µ‚½B"
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "ƒg[ƒNƒ“î•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  AFS ƒT[ƒrƒX‚ªŠJŽn‚³‚ê‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "ƒg[ƒNƒ“î•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  —\Šú‚µ‚È‚¢ƒGƒ‰[AƒR[ƒh %d "
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "ƒg[ƒNƒ“î•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  —\Šú‚µ‚È‚¢ƒGƒ‰[AƒT[ƒrƒX %s.%s.%s, ƒR[ƒh %d "
!     IDS_ENTER_QUOTA         "—LŒø‚ÈŠ„‚è“–‚Ä—Ê‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
!     IDS_AUTHENTICATION_ITEM "”FØ(&A)..."
!     IDS_ACLS_ITEM           "ƒAƒNƒZƒX§ŒäƒŠƒXƒg(&C)..."
!     IDS_VOL_PART_ITEM       "ƒ{ƒŠƒ…[ƒ€/ƒp[ƒeƒBƒVƒ‡ƒ“(&V)"
!     IDS_VOL_PART_PROPS_ITEM "ƒvƒƒpƒeƒB[(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "–¼‘O /ID ƒ}ƒbƒsƒ“ƒO‚ÌÅV•\Ž¦(&R)"
!     IDS_MOUNT_POINT_ITEM    "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg(&M)"
!     IDS_MP_SHOW_ITEM        "•\Ž¦(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS ƒNƒ‰ƒCƒAƒ“ƒg"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "íœ(&R)..."
!     IDS_MP_MAKE_ITEM        "ì¬(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "ƒtƒ@ƒCƒ‹/ƒfƒBƒŒƒNƒgƒŠ[‚Ìƒtƒ‰ƒbƒVƒ…(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "ƒ{ƒŠƒ…[ƒ€‚Ìƒtƒ‰ƒbƒVƒ…(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "ƒtƒ@ƒCƒ‹EƒT[ƒo[‚Ì•\Ž¦(&F)..."
!     IDS_SHOW_CELL_ITEM      "ƒZƒ‹‚Ì•\Ž¦(&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "ƒT[ƒo[ó‹µ‚Ì•\Ž¦..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "ƒTƒuƒ}ƒEƒ“ƒg(&B)"
!     IDS_GET_SUBMT_INFO_ERROR "‹¤—p–¼ %o ‚ÌƒTƒuƒ}ƒEƒ“ƒgî•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñB"
!     IDS_REALLY_DELETE_SUBMT "‹¤—p–¼ %o ‚ðíœ‚µ‚Ü‚·‚©?"
!     IDS_SUBMT_SAVE_FAILED   "ƒTƒuƒ}ƒEƒ“ƒgEƒf[ƒ^ƒx[ƒX‚É‘Î‚·‚é•ÏX‚ªŽ¸”s‚µ‚Ü‚µ‚½B"
!     IDS_SUBMOUNTS_CREATE_ITEM "’Ç‰Á(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "•ÒW(&E)..."
!     IDS_EDIT_PATH_NAME      "ƒpƒX–¼‚Ì•ÒW"
!     IDS_SHOW_CELL           "ƒZƒ‹‚ð•\Ž¦"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "ƒZƒ‹"
!     IDS_SHOW_FS             "ƒtƒ@ƒCƒ‹EƒT[ƒo[‚ð•\Ž¦"
!     IDS_SHOW_FS_COLUMN      "ƒtƒ@ƒCƒ‹EƒT[ƒo["
!     IDS_REMOVE_MP           "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚ðíœ"
!     IDS_REMOVE_MP_COLUMN    "Œ‹‰Ê"
! END
! 
! #endif    // Japanese resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
! #ifdef _WIN32
! LANGUAGE 17, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
--- 7,644 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Japanese resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
! #ifdef _WIN32
! LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 17, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "”FØ...",                     IDM_AUTHENTICATION
!     MENUITEM "ƒAƒNƒZƒX§ŒäƒŠƒXƒg...",       IDM_ACL_SET
!     POPUP "ƒ{ƒŠƒ…[ƒ€ / ƒp[ƒeƒBƒVƒ‡ƒ“(&V)"
!     BEGIN
!         MENUITEM "ƒvƒƒpƒeƒB[(&P)...",         IDM_VOLUME_PROPERTIES
!         MENUITEM "–¼‘O /ID ƒ}ƒbƒsƒ“ƒO‚ÌÅV•\Ž¦(&R)", 
!                                                 IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg(&M)"
!     BEGIN
!         MENUITEM "•\Ž¦(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "íœ(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "ì¬(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "ƒtƒ@ƒCƒ‹ / ƒfƒBƒŒƒNƒgƒŠ[‚Ìƒtƒ‰ƒbƒVƒ…(&F)", IDM_FLUSH
!     MENUITEM "ƒ{ƒŠƒ…[ƒ€‚Ìƒtƒ‰ƒbƒVƒ…(&U)",  IDM_FLUSH_VOLUME
!     MENUITEM "ƒtƒ@ƒCƒ‹EƒT[ƒo[‚Ì•\Ž¦(&F)...", IDM_SHOW_SERVER
!     MENUITEM "ƒZƒ‹‚Ì•\Ž¦(&C)...",           IDM_SHOWCELL
!     MENUITEM "ƒT[ƒo[ó‹µ‚Ì•\Ž¦...",       IDM_SERVER_STATUS
!     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "ƒ{ƒŠƒ…[ƒ€î•ñ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,240,150,50,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹ / ƒfƒBƒŒƒNƒgƒŠ[",IDC_STATIC,10,3,55,17
!     LTEXT           "–¼‘O",IDC_STATIC,90,10,20,8
!     LTEXT           "Š„‚è“–‚Ä—Ê",IDC_STATIC,225,10,41,8
!     LTEXT           "Žg—p—Ê",IDC_STATIC,270,10,25,8
!     LTEXT           "Žg—p—¦ (%)",IDC_STATIC,305,10,39,8
!     LTEXT           "ID",IDC_STATIC,175,10,10,8
!     LTEXT           "V‹KŠ„‚è“–‚Ä—Ê:",IDC_STATIC,10,127,56,10
!     EDITTEXT        IDC_NEW_QUOTA,75,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "ƒp[ƒeƒBƒVƒ‡ƒ“î•ñ‚Ì•\Ž¦",IDC_PARTITION_INFO,205,125,
!                     102,14,WS_DISABLED
!     LTEXT           "KB",IDC_STATIC,145,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,128,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "AFS ACL ‚ÌÝ’è"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,76,12,239,10
!     LISTBOX         IDC_NORMAL_RIGHTS,8,46,145,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,8,143,145,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Read (“Ç‚ÝŽæ‚è)",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,52,81,10
!     CONTROL         "w - Write (‘‚«ž‚Ý)",IDC_WRITE,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,160,111,81,10
!     CONTROL         "l - Lookup (ŒŸõ)",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,66,81,10
!     CONTROL         "d - Delete (íœ)",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,96,81,10
!     CONTROL         "i - Insert (‘}“ü)",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,81,81,10
!     CONTROL         "k - Lock (ƒƒbƒN)",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,160,126,81,10
!     CONTROL         "a - Administer (ŠÇ—)",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,160,141,81,10
!     PUSHBUTTON      "’Ç‰Á(&A)...",IDC_ADD,246,45,69,14
!     PUSHBUTTON      "íœ(&R)",IDC_REMOVE,246,70,69,14,WS_DISABLED
!     PUSHBUTTON      "ƒNƒŠ[ƒjƒ“ƒO(&C)",IDC_CLEAN,246,95,69,14
!     DEFPUSHBUTTON   "—¹‰ð(&O)",IDOK,246,150,69,14
!     PUSHBUTTON      "ŽæÁ‚µ(&N)",IDCANCEL,246,175,69,14
!     PUSHBUTTON      "ƒwƒ‹ƒv(&H)",9,246,201,69,14
!     LTEXT           "ƒfƒBƒŒƒNƒgƒŠ[:",IDC_STATIC,15,12,60,10
!     GROUPBOX        "ƒAƒNƒZƒXŒ ",IDC_STATIC,155,41,89,115
!     LTEXT           "•W€",IDC_STATIC,10,30,23,8
!     LTEXT           "–¼‘O",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "ƒAƒNƒZƒXŒ ",IDC_STATIC,10,38,41,8
!     LTEXT           "‹ÖŽ~",IDC_STATIC,10,127,17,8
!     LTEXT           "ƒAƒNƒZƒXŒ ",IDC_STATIC,10,135,41,8
!     LTEXT           "–¼‘O",IDC_COLUMN_4,69,135,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "ƒRƒs[(&P)...",IDC_COPY,246,120,69,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 249, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚Ìì¬"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_DIR,70,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,70,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,70,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,20,81,50,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,150,81,50,14
!     LTEXT           "ƒfƒBƒŒƒNƒgƒŠ[:",IDC_STATIC,9,12,45,10
!     LTEXT           "ƒ{ƒŠƒ…[ƒ€:",IDC_STATIC,9,28,45,10
!     LTEXT           "ƒZƒ‹:",IDC_STATIC,9,42,45,10
!     GROUPBOX        "",IDC_STATIC,70,52,145,20
!     LTEXT           "ƒIƒvƒVƒ‡ƒ“:",IDC_STATIC,9,59,45,10
!     CONTROL         "’Êí",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,75,59,41,10
!     CONTROL         "“Ç‚ÝŽæ‚è/‘‚«ž‚Ý",IDC_RW,"Button",BS_AUTORADIOBUTTON,
!                     120,59,77,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 245, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL €–Ú‚Ì’Ç‰Á"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_NAME,37,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - Read (“Ç‚ÝŽæ‚è)",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,73,10
!     CONTROL         "l - Lookup (ŒŸõ)",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,67,10
!     CONTROL         "i - Insert (‘}“ü)",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,60,10
!     CONTROL         "d - Delete (íœ)",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,67,10
!     CONTROL         "w - Write (‘‚«ž‚Ý)",IDC_WRITE,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,100,15,79,10
!     CONTROL         "k - Lock (ƒƒbƒN)",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,100,25,69,10
!     CONTROL         "a - Administer (ŠÇ—)",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,100,35,81,10
!     CONTROL         "•W€€–Ú",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,191,16,43,10
!     CONTROL         "‹ÖŽ~€–Ú",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,191,26,43,10
!     PUSHBUTTON      "—¹‰ð",IDOK,22,90,50,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,162,90,50,14
!     LTEXT           "–¼‘O:",IDC_STATIC,10,72,18,8
!     GROUPBOX        "ƒAƒNƒZƒXŒ ",IDC_STATIC,10,5,175,55
!     GROUPBOX        "€–Úƒ^ƒCƒv",IDC_STATIC,186,6,53,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒp[ƒeƒBƒVƒ‡ƒ“î•ñ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,60,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,60,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,60,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,14,62,40,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,69,62,40,14
!     LTEXT           "Žg—p—¦(%):",IDC_STATIC,10,42,42,8
!     LTEXT           "‹ó‚«ƒuƒƒbƒN:",IDC_STATIC,10,27,42,8
!     LTEXT           "‡ŒvƒTƒCƒY:",IDC_STATIC,10,12,42,8
!     LTEXT           "KB",IDC_STATIC,107,12,10,8
!     LTEXT           "KB",IDC_STATIC,107,27,10,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL ‚ÌƒRƒs["
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,56,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,56,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ŽQÆ",IDC_BROWSE,195,25,35,15
!     CONTROL         "Œ»Ý‚Ì€–Ú‚ðÁ‹Ž:",IDC_CLEAR,"Button",BS_AUTOCHECKBOX | 
!                     BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,170,65,50,14
!     LTEXT           "ƒRƒs[Œ³:",IDC_STATIC,14,12,34,8
!     LTEXT           "ƒRƒs[æ:",IDC_STATIC,14,29,34,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ŒŸõ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,65,145,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,21,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹/ƒfƒBƒŒƒNƒgƒŠ[",IDC_STATIC,10,10,91,8
!     LTEXT           "ƒtƒ@ƒCƒ‹EƒT[ƒo[",IDC_STATIC,128,10,73,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Œ‹‰Ê"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,65,145,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,22,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹/ƒfƒBƒŒƒNƒgƒŠ[",-1,10,10,91,8
!     LTEXT           "Œ‹‰Ê",IDC_RESULTS_LABEL,128,10,17,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "ƒNƒ[ƒY",IDOK,65,145,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,23,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ƒtƒ@ƒCƒ‹",IDC_STATIC,10,11,33,8
!     LTEXT           "ƒ{ƒŠƒ…[ƒ€",IDC_STATIC,75,11,41,8
!     LTEXT           "ƒZƒ‹",IDC_STATIC,155,11,17,8
!     LTEXT           "ƒ^ƒCƒv",IDC_STATIC,230,11,25,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒT[ƒo[‚ªƒ_ƒEƒ“"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LISTBOX         1029,10,22,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "ˆÈ‰º‚ÌƒT[ƒo[‚Í‚Ü‚¾ƒ_ƒEƒ“‚µ‚Ä‚¢‚Ü‚·:",IDC_STATIC,10,10,
!                     146,8
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "ƒT[ƒo[ó‹µ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     CONTROL         "ƒ[ƒJƒ‹EƒZƒ‹",IDC_LOCALCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,20,20,59,8
!     CONTROL         "Žw’èƒZƒ‹:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,59,10
!     CONTROL         "‚·‚×‚Ä‚ÌƒZƒ‹",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON | 
!                     WS_TABSTOP,20,65,59,10
!     CONTROL         "ƒT[ƒo[‚ðƒvƒ[ƒu‚µ‚È‚¢",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,107,10
!     PUSHBUTTON      "ó‹µ‚Ì•\Ž¦",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "ƒZƒ‹",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,120,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,48,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ƒNƒ[ƒY",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "”FØ"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,19,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "ƒg[ƒNƒ“‚ÌŽæ“¾",ID_GET_TOKENS,15,137,62,14
!     PUSHBUTTON      "ƒg[ƒNƒ“‚Ì”jŠü",ID_DISCARD_TOKENS,80,137,62,14
!     PUSHBUTTON      "ƒNƒ[ƒY",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,215,137,55,14
!     LTEXT           "ƒ†[ƒU[–¼",IDC_STATIC,10,9,41,8
!     LTEXT           "ƒZƒ‹–¼",IDC_STATIC,104,9,25,8
!     LTEXT           "—LŒøŠúŒÀ",IDC_STATIC,222,9,33,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 179, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ƒg[ƒNƒ“‚ÌŽæ“¾"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_NAME,52,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,52,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,52,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,120,70,35,14
!     LTEXT           "–¼‘O:",IDC_STATIC,25,13,20,8
!     LTEXT           "ƒpƒXƒ[ƒh:",IDC_STATIC,10,32,35,8
!     LTEXT           "ƒZƒ‹:",IDC_STATIC,26,51,19,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ƒg[ƒNƒ“‚Ì”jŠü"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     DEFPUSHBUTTON   "—¹‰ð",IDOK,25,40,35,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,75,40,35,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,125,40,35,14
!     LTEXT           "ƒZƒ‹:",IDC_STATIC,10,17,18,8
!     EDITTEXT        IDC_CELL_NAME,37,15,136,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒTƒuƒ}ƒEƒ“ƒg"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "’Ç‰Á ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "íœ",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "•ÏX",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "ƒTƒuƒ}ƒEƒ“ƒg:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "—¹‰ð",IDOK,202,145,45,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ƒTƒuƒ}ƒEƒ“ƒg‚Ì’Ç‰Á"
! FONT 9, "‚l‚r ‚oƒSƒVƒbƒN"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,62,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,62,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "—¹‰ð",IDOK,22,53,45,14
!     PUSHBUTTON      "ŽæÁ‚µ",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "ƒwƒ‹ƒv",9,167,53,45,14
!     LTEXT           "‹¤—p–¼:",IDC_STATIC,19,10,29,8
!     LTEXT           "ƒpƒX–¼:",IDC_STATIC,19,25,28,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 165
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "AFS ‚ÌƒƒOƒCƒ“‚Ü‚½‚ÍƒƒOƒAƒEƒg"
!     ID_SERVER_STATUS        "ƒT[ƒo[‚ÌŒŸ¸"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "Šˆ“®ó‘Ô‚Ìƒtƒ@ƒCƒ‹ %o ‚ðƒtƒ‰ƒbƒVƒ…‚Å‚«‚Ü‚¹‚ñ"
!     IDS_FLUSH_ERROR         "ƒtƒ@ƒCƒ‹ %o ‚Ìƒtƒ‰ƒbƒVƒ…EƒGƒ‰[:  %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "‘I‘ð‚³‚ê‚½ƒtƒ@ƒCƒ‹‚ª³í‚Éƒtƒ‰ƒbƒVƒ…‚³‚ê‚Ü‚µ‚½"
!     IDS_CANT_GET_CELL       "ƒZƒ‹‚Ì”»•ÊƒGƒ‰[:  "
!     IDS_FLUSH_VOLUME_ERROR  "%o ‚Ìƒ{ƒŠƒ…[ƒ€‚Ìƒtƒ‰ƒbƒVƒ…EƒGƒ‰[:  %s"
!     IDS_FLUSH_VOLUME_OK     "ƒ{ƒŠƒ…[ƒ€‚ª³í‚Éƒtƒ‰ƒbƒVƒ…‚³‚ê‚Ü‚µ‚½"
!     IDS_WHERE_IS            "ƒtƒ@ƒCƒ‹ %o ‚ÍƒzƒXƒg %s ‚É‚ ‚è‚Ü‚·"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "ƒtƒ@ƒCƒ‹ %o ‚Ì ACL ‚ðƒNƒŠ[ƒjƒ“ƒO‚Å‚«‚Ü‚¹‚ñ:  ACL ‚ÌƒNƒŠ[ƒjƒ“ƒO‚Í DFS ƒAƒNƒZƒXEƒŠƒXƒg‚Å‚ÍƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
!     IDS_ACL_IS_FINE         "%o ‚ÌƒAƒNƒZƒXEƒŠƒXƒg‚Í³í‚Å‚·"
!     IDS_CLEANACL_INVALID_ARG 
!                             "ƒtƒ@ƒCƒ‹ %o ‚Ì ACL ‚ðƒNƒŠ[ƒjƒ“ƒO‚Å‚«‚Ü‚¹‚ñ:  –³Œø‚Èˆø‚«”Al‚¦‚ç‚ê‚é——R:  ƒtƒ@ƒCƒ‹‚ª vice ‚É‚È‚¢A‚Ü‚½‚ÍƒAƒNƒZƒX§ŒäƒŠƒXƒg‚Éƒ†[ƒU[‚ª‘½‚·‚¬‚é"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "ŒÃ‚¢ ACL €–Ú‚ªíœ‚³‚ê‚Ü‚µ‚½B"
!     ID_SUBMOUNTS            "AFS ƒTƒuƒ}ƒEƒ“ƒg‚Ìì¬‚Ü‚½‚Ííœ"
!     IDS_GETRIGHTS_ERROR     "ƒfƒBƒŒƒNƒgƒŠ[ %o ‚ÌƒAƒNƒZƒXEƒŠƒXƒg‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  %o"
!     IDS_DFSACL_ERROR        "DFS ACL ‚Í‚±‚ÌƒRƒ}ƒ“ƒh‚Å•ÒW‚Å‚«‚Ü‚¹‚ñ"
!     IDS_SAVE_ACL_ERROR      "%o ‚Ì ACL ‚ð•ÛŠÇ‚Å‚«‚Ü‚¹‚ñ:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "%o ‚Ì ACL ‚ð•ÛŠÇ‚Å‚«‚Ü‚¹‚ñ:  –³Œø‚Èˆø‚«”Al‚¦‚ç‚ê‚é——R:  ƒtƒ@ƒCƒ‹‚ª AFS ‚É‚È‚¢AƒAƒNƒZƒX§ŒäƒŠƒXƒg‚Éƒ†[ƒU[‚ª‘½‚·‚¬‚éA‘¶Ý‚µ‚È‚¢ƒ†[ƒU[‚ðƒAƒNƒZƒX§ŒäƒŠƒXƒg‚É’Ç‰Á‚µ‚æ‚¤‚Æ‚µ‚½"
!     IDS_ACL_READ_ERROR      "%o ‚Ì ACL ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "ƒfƒBƒŒƒNƒgƒŠ[ %o ‚É ACL ‚ðƒRƒs[‚Å‚«‚Ü‚¹‚ñ:  ACL ‚ÌƒRƒs[‚Í DFSƒAƒNƒZƒXEƒŠƒXƒg‚Å‚ÍƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "ƒfƒBƒŒƒNƒgƒŠ[ %o ‚É ACL ‚ðƒRƒs[‚Å‚«‚Ü‚¹‚ñ:  –³Œø‚Èˆø‚«”Al‚¦‚ç‚ê‚é——R:  ƒtƒ@ƒCƒ‹‚ª AFS ‚É‚È‚¢B"
!     IDS_COPY_ACL_ERROR      "ACL ‚ð %o ‚ÉƒRƒs[‚Å‚«‚Ü‚¹‚ñ:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o ‚Íƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚Å‚Í‚ ‚è‚Ü‚¹‚ñB"
!     IDS_LIST_MOUNT_POINT_ERROR "ƒGƒ‰[:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚ð AFS ƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€“à‚Éì¬‚·‚é•K—v‚ª‚ ‚è‚Ü‚·"
!     IDS_MOUNT_POINT_ERROR   "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚Ìì¬ƒGƒ‰[:  %o"
!     IDS_ERROR               "ƒGƒ‰[:  %o"
!     IDS_DELETED             "³í‚Éíœ‚³‚ê‚Ü‚µ‚½"
!     IDS_SET_QUOTA_ERROR     "Š„‚è“–‚Ä—Ê‚ÌÝ’èƒGƒ‰[:  %o"
!     ID_SUBMOUNTS_CREATE     "AFS ƒTƒuƒ}ƒEƒ“ƒg‚Ìì¬"
!     ID_SUBMOUNTS_EDIT       "AFS ƒTƒuƒ}ƒEƒ“ƒg‚Ì’Ç‰ÁA•ÏXA‚Ü‚½‚Ííœ"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "ƒtƒ@ƒCƒ‹EƒT[ƒo[Eƒ}ƒVƒ“‚Ìó‹µ‚ÌŒŸ¸ƒGƒ‰[:  %o"
!     IDS_ALL_SERVERS_RUNNING "‚·‚×‚Ä‚ÌƒT[ƒo[‚ªŽÀs’†‚Å‚·B"
!     IDS_CHECK_VOLUMES_OK    "‚·‚×‚Ä‚Ìƒ{ƒŠƒ…[ƒ€ ID/–¼‘O‚Ìƒ}ƒbƒsƒ“ƒO‚ªŒŸ¸‚³‚ê‚Ü‚µ‚½B"
!     IDS_CHECK_VOLUMES_ERROR "ƒ{ƒŠƒ…[ƒ€ ID/–¼‘Oƒ}ƒbƒsƒ“ƒO‚ÌŒŸ¸ƒGƒ‰[:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "‘I‘ð‚µ‚½–¼‘O‚Í‚·‚Å‚ÉŽg—p‚³‚ê‚Ä‚¢‚Ü‚·B•Ê‚Ì–¼‘O‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
!     IDS_REALLY_DEL_MOUNT_POINTS 
!                             "‘I‘ð‚µ‚½ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚ðíœ‚µ‚Ä‚à‚¢‚¢‚Å‚·‚©?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "ƒfƒBƒŒƒNƒgƒŠ[ '%o' ‚ª‘¶Ý‚µ‚Ü‚¹‚ñB"
!     IDS_CLEANACL_MSG        "ŒÃ‚¢ ACL ‚Ííœ‚³‚ê‚Ü‚·!"
!     IDS_COPY_ACL_OK         "ACL ‚ª³í‚ÉƒRƒs[‚³‚ê‚Ü‚µ‚½B"
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "ƒg[ƒNƒ“î•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  AFS ƒT[ƒrƒX‚ªŠJŽn‚³‚ê‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "ƒg[ƒNƒ“î•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  —\Šú‚µ‚È‚¢ƒGƒ‰[AƒR[ƒh %d "
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "ƒg[ƒNƒ“î•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñ:  —\Šú‚µ‚È‚¢ƒGƒ‰[AƒT[ƒrƒX %s.%s.%s, ƒR[ƒh %d "
!     IDS_ENTER_QUOTA         "—LŒø‚ÈŠ„‚è“–‚Ä—Ê‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
!     IDS_AUTHENTICATION_ITEM "”FØ(&A)..."
!     IDS_ACLS_ITEM           "ƒAƒNƒZƒX§ŒäƒŠƒXƒg(&C)..."
!     IDS_VOL_PART_ITEM       "ƒ{ƒŠƒ…[ƒ€/ƒp[ƒeƒBƒVƒ‡ƒ“(&V)"
!     IDS_VOL_PART_PROPS_ITEM "ƒvƒƒpƒeƒB[(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "–¼‘O /ID ƒ}ƒbƒsƒ“ƒO‚ÌÅV•\Ž¦(&R)"
!     IDS_MOUNT_POINT_ITEM    "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg(&M)"
!     IDS_MP_SHOW_ITEM        "•\Ž¦(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS ƒNƒ‰ƒCƒAƒ“ƒg"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "íœ(&R)..."
!     IDS_MP_MAKE_ITEM        "ì¬(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "ƒtƒ@ƒCƒ‹/ƒfƒBƒŒƒNƒgƒŠ[‚Ìƒtƒ‰ƒbƒVƒ…(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "ƒ{ƒŠƒ…[ƒ€‚Ìƒtƒ‰ƒbƒVƒ…(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "ƒtƒ@ƒCƒ‹EƒT[ƒo[‚Ì•\Ž¦(&F)..."
!     IDS_SHOW_CELL_ITEM      "ƒZƒ‹‚Ì•\Ž¦(&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "ƒT[ƒo[ó‹µ‚Ì•\Ž¦..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "ƒTƒuƒ}ƒEƒ“ƒg(&B)"
!     IDS_GET_SUBMT_INFO_ERROR "‹¤—p–¼ %o ‚ÌƒTƒuƒ}ƒEƒ“ƒgî•ñ‚ð“Ç‚ÝŽæ‚ê‚Ü‚¹‚ñB"
!     IDS_REALLY_DELETE_SUBMT "‹¤—p–¼ %o ‚ðíœ‚µ‚Ü‚·‚©?"
!     IDS_SUBMT_SAVE_FAILED   "ƒTƒuƒ}ƒEƒ“ƒgEƒf[ƒ^ƒx[ƒX‚É‘Î‚·‚é•ÏX‚ªŽ¸”s‚µ‚Ü‚µ‚½B"
!     IDS_SUBMOUNTS_CREATE_ITEM "’Ç‰Á(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "•ÒW(&E)..."
!     IDS_EDIT_PATH_NAME      "ƒpƒX–¼‚Ì•ÒW"
!     IDS_SHOW_CELL           "ƒZƒ‹‚ð•\Ž¦"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "ƒZƒ‹"
!     IDS_SHOW_FS             "ƒtƒ@ƒCƒ‹EƒT[ƒo[‚ð•\Ž¦"
!     IDS_SHOW_FS_COLUMN      "ƒtƒ@ƒCƒ‹EƒT[ƒo["
!     IDS_REMOVE_MP           "ƒ}ƒEƒ“ƒgEƒ|ƒCƒ“ƒg‚ðíœ"
!     IDS_REMOVE_MP_COLUMN    "Œ‹‰Ê"
! END
! 
! #endif    // Japanese resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
! #ifdef _WIN32
! LANGUAGE 17, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
Index: openafs/src/WINNT/client_exp/lang/ko_KR/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/ko_KR/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/ko_KR/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/ko_KR/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:58 2000
--- openafs/src/WINNT/client_exp/lang/ko_KR/afs_shl_ext.rc	Wed Dec  4 09:26:01 2002
***************
*** 7,642 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Korean resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
! #ifdef _WIN32
! LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 18, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "ÀÎÁõ...",                     IDM_AUTHENTICATION
!     MENUITEM "¾×¼¼½º Á¦¾î ¸ñ·Ï...",         IDM_ACL_SET
!     POPUP "º¼·ý/ÆÄÆ¼¼Ç(&V)"
!     BEGIN
!         MENUITEM "Æ¯¼º(&P)...",                 IDM_VOLUME_PROPERTIES
!         MENUITEM "ÀÌ¸§/ID ¸ÊÇÎ »õ·Î °íÄ§(&R)",  IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "¸¶¿îÆ® Æ÷ÀÎÆ®(&M)"
!     BEGIN
!         MENUITEM "Ç¥½Ã(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "Á¦°Å(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "ÀÛ¼º(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "ÆÄÀÏ/µð·ºÅä¸® ÇÃ·¯½¬(&F)",    IDM_FLUSH
!     MENUITEM "º¼·ý ÇÃ·¯½¬(&U)",             IDM_FLUSH_VOLUME
!     MENUITEM "ÆÄÀÏ ¼­¹ö Ç¥½Ã(&F)...",       IDM_SHOW_SERVER
!     MENUITEM "¼¿ Ç¥½Ã(&C)...",              IDM_SHOWCELL
!     MENUITEM "¼­¹ö »óÅÂ Ç¥½Ã ...",          IDM_SERVER_STATUS
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "º¼·ý Á¤º¸"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "µµ¿ò¸»",9,240,150,50,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ÆÄÀÏ/µð·ºÅä¸®",IDC_STATIC,10,9,56,8
!     LTEXT           "ÀÌ¸§",IDC_STATIC,90,10,20,8
!     LTEXT           "ÇÒ´ç·®",IDC_STATIC,225,10,29,8
!     LTEXT           "»ç¿ë",IDC_STATIC,270,10,24,8
!     LTEXT           "»ç¿ë ¹éºÐÀ²",IDC_STATIC,298,10,38,8
!     LTEXT           "ID",IDC_STATIC,171,10,14,8
!     LTEXT           "»õ ÇÒ´ç·®:",IDC_STATIC,10,127,40,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "ÆÄÆ¼¼Ç Á¤º¸ Ç¥½Ã",IDC_PARTITION_INFO,205,125,69,14,
!                     WS_DISABLED
!     LTEXT           "KB",IDC_STATIC,118,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "AFS ACL ¼³Á¤"
! FONT 9, "±¼¸²"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - ÀÐ±â",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - ¾²±â",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - Á¶È¸",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - »èÁ¦",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - »ðÀÔ",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Àá±Ý",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - °ü¸®ÀÚ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,141,55,10
!     PUSHBUTTON      "Ãß°¡(&A)...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "Á¦°Å(&R)",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "Á¤¸®(&C)",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "È®ÀÎ(&O)",IDOK,270,150,45,14
!     PUSHBUTTON      "Ãë¼Ò(&N)",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "µµ¿ò¸»(&H)",9,270,201,45,14
!     LTEXT           "µð·ºÅä¸®:",IDC_STATIC,15,12,41,10
!     GROUPBOX        "±ÇÇÑ",IDC_STATIC,195,41,65,115
!     LTEXT           "±àÁ¤",IDC_STATIC,10,30,23,8
!     LTEXT           "ÀÌ¸§",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "±ÇÇÑ",IDC_STATIC,10,38,37,8
!     LTEXT           "ºÎÁ¤",IDC_STATIC,10,125,30,8
!     LTEXT           "±ÇÇÑ",IDC_STATIC,10,133,38,8
!     LTEXT           "ÀÌ¸§",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "º¹»ç(&P)...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸¶¿îÆ® Æ÷ÀÎÆ® ÀÛ¼º"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,20,81,50,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,150,81,50,14
!     LTEXT           "µð·ºÅä¸®:",IDC_STATIC,5,12,30,10
!     LTEXT           "º¼·ý:",IDC_STATIC,12,26,25,10
!     LTEXT           "¼¿:",IDC_STATIC,19,41,15,10
!     GROUPBOX        "",IDC_STATIC,40,52,115,20
!     LTEXT           "¿É¼Ç:",IDC_STATIC,12,57,24,10
!     CONTROL         "ÀÏ¹Ý",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,45,59,41,10
!     CONTROL         "ÀÐ±â/¾²±â",IDC_RW,"Button",BS_AUTORADIOBUTTON,100,59,50,
!                     10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL Ç×¸ñ Ãß°¡"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_NAME,35,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - ÀÐ±â",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - Á¶È¸",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - »ðÀÔ",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - »èÁ¦",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - ¾²±â",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Àá±Ý",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - °ü¸®ÀÚ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,35,60,10
!     CONTROL         "±àÁ¤ Ç×¸ñ",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,54,10
!     CONTROL         "ºÎÁ¤ Ç×¸ñ",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,59,10
!     PUSHBUTTON      "È®ÀÎ",IDOK,22,90,50,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,162,90,50,14
!     LTEXT           "ÀÌ¸§:",IDC_STATIC,10,72,20,8
!     GROUPBOX        "±ÇÇÑ",IDC_STATIC,10,5,135,55
!     GROUPBOX        "Ç×¸ñ À¯Çü",IDC_STATIC,155,6,70,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÆÄÆ¼¼Ç Á¤º¸"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,67,9,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,67,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,67,39,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "´Ý±â",IDOK,14,62,40,14
!     PUSHBUTTON      "µµ¿ò¸»",9,69,62,40,14
!     LTEXT           "»ç¿ë %:",IDC_STATIC,5,42,52,8
!     LTEXT           "»ç¿ë°¡´ÉÇÑ ºí·°:",IDC_STATIC,5,27,54,8
!     LTEXT           "ÃÑ Å©±â:",IDC_STATIC,7,12,36,8
!     LTEXT           "KB",IDC_STATIC,109,11,11,8
!     LTEXT           "K",IDC_STATIC,109,27,8,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL º¹»ç"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Ã£¾Æº¸±â",IDC_BROWSE,195,25,35,15
!     CONTROL         "ÇöÀç ÀÔ·Â Ç×¸ñ Áö¿ì±â:",IDC_CLEAR,"Button",
!                     BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,170,65,50,14
!     LTEXT           "º¹»ç ¿øº»:",IDC_STATIC,13,13,35,8
!     LTEXT           "º¹»ç ´ë»ó:",IDC_STATIC,13,29,37,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "À§Ä¡"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "´Ý±â",IDOK,65,145,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÆÄÀÏ/µð·ºÅä¸®",IDC_STATIC,10,10,59,8
!     LTEXT           "ÆÄÀÏ ¼­¹ö",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "°á°ú"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "´Ý±â",IDOK,65,145,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÆÄÀÏ/µð·ºÅä¸®",-1,10,10,45,8
!     LTEXT           "°á°ú",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸¶¿îÆ® Æ÷ÀÎÆ®"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "´Ý±â",IDOK,65,145,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÆÄÀÏ",IDC_STATIC,10,11,13,8
!     LTEXT           "º¼·ý",IDC_STATIC,75,11,27,8
!     LTEXT           "¼¿",IDC_STATIC,155,11,15,8
!     LTEXT           "À¯Çü",IDC_STATIC,230,11,20,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¼­¹ö Áß´Ü"
! FONT 9, "±¼¸²"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "ÀÌ ¼­¹ö´Â ¾ÆÁ÷ ½ÃÀÛµÇÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù",IDC_STATIC,10,
!                     10,186,8
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "¼­¹ö »óÅÂ"
! FONT 9, "±¼¸²"
! BEGIN
!     CONTROL         "Áö¿ª ¼¿",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,50,8
!     CONTROL         "ÁöÁ¤µÈ ¼¿:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,60,10
!     CONTROL         "¸ðµç ¼¿",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON | 
!                     WS_TABSTOP,21,69,45,10
!     CONTROL         "¼­¹ö »óÅÂ¸¦ Á¶»çÇÏÁö ¾ÊÀ½",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,112,10
!     PUSHBUTTON      "»óÅÂ Ç¥½Ã",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "¼¿",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,137,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,31,51,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "´Ý±â",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÀÎÁõ"
! FONT 9, "±¼¸²"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "ÅäÅ« È®º¸",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "ÅäÅ« ¹ö¸®±â",ID_DISCARD_TOKENS,80,137,55,14
!     PUSHBUTTON      "´Ý±â",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "µµ¿ò¸»",9,215,137,55,14
!     LTEXT           "»ç¿ëÀÚ ÀÌ¸§",IDC_STATIC,10,9,38,8
!     LTEXT           "¼¿ ÀÌ¸§",IDC_STATIC,104,9,33,8
!     LTEXT           "¸¸±â",IDC_STATIC,222,9,32,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ÅäÅ« È®º¸"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "µµ¿ò¸»",9,120,70,35,14
!     LTEXT           "ÀÌ¸§:",IDC_STATIC,17,12,22,8
!     LTEXT           "¾ÏÈ£:",IDC_STATIC,17,32,20,8
!     LTEXT           "¼¿:",IDC_STATIC,24,52,15,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ÅäÅ« ¹ö¸®±â"
! FONT 9, "±¼¸²", 0, 0, 0x1
! BEGIN
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,25,40,35,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,75,40,35,14
!     PUSHBUTTON      "µµ¿ò¸»",9,125,40,35,14
!     LTEXT           "¼¿:",IDC_STATIC,10,17,14,8
!     EDITTEXT        IDC_CELL_NAME,29,15,145,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¼­ºê¸¶¿îÆ®"
! FONT 9, "±¼¸²"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Ãß°¡ ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "»èÁ¦",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "º¯°æ",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "¼­ºê¸¶¿îÆ®:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "È®ÀÎ",IDOK,202,145,45,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¼­ºê¸¶¿îÆ® Ãß°¡"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,62,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,62,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "È®ÀÎ",IDOK,22,53,45,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "µµ¿ò¸»",9,167,53,45,14
!     LTEXT           "°øÀ¯ ÀÌ¸§:",IDC_STATIC,18,10,37,8
!     LTEXT           "°æ·Î ÀÌ¸§:",IDC_STATIC,19,25,39,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "AFS·Î ·Î±×ÀÎ ¶Ç´Â AFS¿¡¼­ ·Î±× ¾Æ¿ô"
!     ID_SERVER_STATUS        "¼­¹ö È®ÀÎ"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "È°¼ºÈ­µÈ %o ÆÄÀÏÀ» ÇÃ·¯½¬ÇÒ ¼ö ¾ø½À´Ï´Ù"
!     IDS_FLUSH_ERROR         "%o ÆÄÀÏ ÇÃ·¯½¬ ¿À·ù: %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "¼±ÅÃµÈ ÆÄÀÏÀ» ÇÃ·¯½¬Çß½À´Ï´Ù"
!     IDS_CANT_GET_CELL       "¼¿ ÆÇº° ¿À·ù:"
!     IDS_FLUSH_VOLUME_ERROR  "%o¿¡ ´ëÇÑ º¼·ý ÇÃ·¯½¬ ¿À·ù:  %s"
!     IDS_FLUSH_VOLUME_OK     "º¼·ýÀÌ ÇÃ·¯½¬µÇ¾ú½À´Ï´Ù"
!     IDS_WHERE_IS            "%o ÆÄÀÏÀÌ %s È£½ºÆ®¿¡ ÀÖ½À´Ï´Ù"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "%o ÆÄÀÏ¿¡ ´ëÇÑ ACLÀ» Á¤¸®ÇÒ ¼ö ¾ø½À´Ï´Ù. ACL Á¤¸®´Â DFS ¾×¼¼½º ¸ñ·Ï¿¡¼­ Áö¿øµÇÁö ¾Ê½À´Ï´Ù"
!     IDS_ACL_IS_FINE         "%o¿¡ ´ëÇÑ ¾×¼¼½º ¸ñ·ÏÀÌ Á¦´ë·Î ÀÛ¼ºµÇ¾ú½À´Ï´Ù"
!     IDS_CLEANACL_INVALID_ARG 
!                             "%o ÆÄÀÏ¿¡ ´ëÇÑ ACLÀ» Á¤¸®ÇÒ ¼ö ¾ø½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº ÀÎ¼ö, °¡´ÉÇÑ ¿øÀÎÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÆÄÀÏÀÌ ¾ø°Å³ª ¾×¼¼½º Á¦¾î ¸ñ·Ï¿¡ »ç¿ëÀÚ°¡ ³Ê¹« ¸¹½À´Ï´Ù"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "¸ðÈ£ÇÑ ACL ÀÔ·Â Ç×¸ñÀº »èÁ¦µÇ¾ú½À´Ï´Ù."
!     ID_SUBMOUNTS            "AFS ¼­ºê¸¶¿îÆ®¸¦ ÀÛ¼ºÇÏ°Å³ª »èÁ¦ÇÏ½Ê½Ã¿À"
!     IDS_GETRIGHTS_ERROR     "%o µð·ºÅä¸®¿¡ ´ëÇÑ ¾×¼¼½º ¸ñ·ÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù:  %o"
!     IDS_DFSACL_ERROR        "ÀÌ ¸í·ÉÀ¸·Î DFS ACLÀ» ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù"
!     IDS_SAVE_ACL_ERROR      "%o¿¡ ´ëÇÑ ACLÀ» ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "%o¿¡ ´ëÇÑ ACLÀ» ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº ÀÎ¼ö ¹× °¡´ÉÇÑ ¿øÀÎÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÆÄÀÏÀÌ AFS¿¡ ¾ø°Å³ª ¾×¼¼½º Á¦¾î ¸ñ·Ï¿¡ »ç¿ëÀÚ°¡ ³Ê¹« ¸¹°Å³ª ¶Ç´Â ¾ø´Â »ç¿ëÀÚ¸¦ ¾×¼¼½º Á¦¾î ¸ñ·Ï¿¡ Ãß°¡ÇÏ·Á°í Çß½À´Ï´Ù."
!     IDS_ACL_READ_ERROR      "%o¿¡ ´ëÇÑ ACLÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "ACLÀ» %o µð·ºÅä¸®·Î º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù.  DFS ¾×¼¼½º ¸ñ·Ï¿¡¼­´Â ACL º¹»ç¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "ACLÀ» %o µð·ºÅä¸®·Î º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº ÀÎ¼ö ¹× °¡´ÉÇÑ ¿øÀÎÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÆÄÀÏÀÌ AFS¿¡ ¾ø½À´Ï´Ù."
!     IDS_COPY_ACL_ERROR      "ACLÀ» %o¿¡ º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%oÀº(´Â) ¸¶¿îÆ® Æ÷ÀÎÆ®°¡ ¾Æ´Õ´Ï´Ù."
!     IDS_LIST_MOUNT_POINT_ERROR "¿À·ù:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "¸¶¿îÆ® Æ÷ÀÎÆ®´Â AFS ÆÄÀÏ ½Ã½ºÅÛ ³»¿¡ ÀÛ¼ºµÇ¾î¾ß ÇÕ´Ï´Ù"
!     IDS_MOUNT_POINT_ERROR   "¸¶¿îÆ® Æ÷ÀÎÆ® ÀÛ¼º ¿À·ù:  %o"
!     IDS_ERROR               "¿À·ù:  %o"
!     IDS_DELETED             "»èÁ¦µÇ¾ú½À´Ï´Ù"
!     IDS_SET_QUOTA_ERROR     "ÇÒ´ç·® ¼³Á¤ ¿À·ù:  %o"
!     ID_SUBMOUNTS_CREATE     "AFS ¼­ºê¸¶¿îÆ® ÀÛ¼º"
!     ID_SUBMOUNTS_EDIT       "AFS ¼­ºê¸¶¿îÆ® Ãß°¡, º¯°æ ¶Ç´Â »èÁ¦"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "%o ÆÄÀÏ ¼­¹ö ±â°èÀÇ »óÅÂ È®ÀÎ ¿À·ù"
!     IDS_ALL_SERVERS_RUNNING "¸ðµç ¼­¹ö°¡ ½ÇÇà ÁßÀÔ´Ï´Ù."
!     IDS_CHECK_VOLUMES_OK    "¸ðµç º¼·ý ID/ÀÌ¸§ ¸ÊÇÎÀÌ È®ÀÎµÇ¾ú½À´Ï´Ù."
!     IDS_CHECK_VOLUMES_ERROR "º¼·ý ID/ÀÌ¸§ ¸ÊÇÎ È®ÀÎ ¿À·ù:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "¼±ÅÃÇÑ ÀÌ¸§ÀÌ ÀÌ¹Ì »ç¿ë ÁßÀÔ´Ï´Ù.  ´Ù¸¥ ÀÌ¸§À» ÀÔ·ÂÇÏ½Ê½Ã¿À."
!     IDS_REALLY_DEL_MOUNT_POINTS "¼±ÅÃµÈ ¸¶¿îÆ® Æ÷ÀÎÆ®¸¦ Á¦°ÅÇÏ½Ã°Ú½À´Ï±î?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "'%o' µð·ºÅä¸®°¡ ¾ø½À´Ï´Ù."
!     IDS_CLEANACL_MSG        "¸ðÈ£ÇÑ ACLÀº »èÁ¦µË´Ï´Ù."
!     IDS_COPY_ACL_OK         "ACLÀÌ º¹»çµÇ¾ú½À´Ï´Ù."
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "ÅäÅ« Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. AFS ¼­ºñ½º°¡ ½ÃÀÛµÇÁö ¾Ê¾ÒÀ» ¼ö ÀÖ½À´Ï´Ù."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "ÅäÅ« Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. ¿¹±âÄ¡ ¸øÇÑ ¿À·ù ¹ß»ý, ÄÚµå %d."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "ÅäÅ« Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. ¿¹±âÄ¡ ¸øÇÑ ¿À·ù ¹ß»ý, ¼­ºñ½º %s.%s.%s, ÄÚµå %d."
!     IDS_ENTER_QUOTA         "À¯È¿ÇÑ ÇÒ´ç·®À» ÀÔ·ÂÇÏ½Ê½Ã¿À."
!     IDS_AUTHENTICATION_ITEM "ÀÎÁõ(&A)..."
!     IDS_ACLS_ITEM           "¾×¼¼½º Á¦¾î ¸ñ·Ï(&O)..."
!     IDS_VOL_PART_ITEM       "º¼·ý/ÆÄÆ¼¼Ç(&V)"
!     IDS_VOL_PART_PROPS_ITEM "Æ¯¼º(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "ÀÌ¸§/ID ¸ÊÇÎ »õ·Î °íÄ§(&R)"
!     IDS_MOUNT_POINT_ITEM    "¸¶¿îÆ® Æ÷ÀÎÆ®(&M)"
!     IDS_MP_SHOW_ITEM        "Ç¥½Ã(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS Å¬¶óÀÌ¾ðÆ®"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "Á¦°Å(&R)..."
!     IDS_MP_MAKE_ITEM        "ÀÛ¼º(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "ÆÄÀÏ/µð·ºÅä¸® ÇÃ·¯½¬(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "º¼·ý ÇÃ·¯½¬(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "ÆÄÀÏ ¼­¹ö Ç¥½Ã(&F)..."
!     IDS_SHOW_CELL_ITEM      "¼¿ Ç¥½Ã(&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "¼­¹ö »óÅÂ Ç¥½Ã ..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "¼­ºê¸¶¿îÆ®(&B)"
!     IDS_GET_SUBMT_INFO_ERROR 
!                             "%o °øÀ¯ ÀÌ¸§¿¡ ´ëÇÑ ¼­ºê¸¶¿îÆ® Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù."
!     IDS_REALLY_DELETE_SUBMT "%o °øÀ¯ ÀÌ¸§À» »èÁ¦ÇÏ½Ã°Ú½À´Ï±î?"
!     IDS_SUBMT_SAVE_FAILED   "¼­ºê¸¶¿îÆ® µ¥ÀÌÅÍº£ÀÌ½º¸¦ º¯°æÇÏ´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù."
!     IDS_SUBMOUNTS_CREATE_ITEM "Ãß°¡(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "ÆíÁý(&E)..."
!     IDS_EDIT_PATH_NAME      "°æ·Î ÀÌ¸§ ÆíÁý"
!     IDS_SHOW_CELL           "¼¿ Ç¥½Ã"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "¼¿"
!     IDS_SHOW_FS             "ÆÄÀÏ ¼­¹ö Ç¥½Ã"
!     IDS_SHOW_FS_COLUMN      "ÆÄÀÏ ¼­¹ö"
!     IDS_REMOVE_MP           "¸¶¿îÆ® Æ÷ÀÎÆ® Á¦°Å"
!     IDS_REMOVE_MP_COLUMN    "°á°ú"
! END
! 
! #endif    // Korean resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
! #ifdef _WIN32
! LANGUAGE 18, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
--- 7,643 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Korean resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
! #ifdef _WIN32
! LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 18, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "ÀÎÁõ...",                     IDM_AUTHENTICATION
!     MENUITEM "¾×¼¼½º Á¦¾î ¸ñ·Ï...",         IDM_ACL_SET
!     POPUP "º¼·ý/ÆÄÆ¼¼Ç(&V)"
!     BEGIN
!         MENUITEM "Æ¯¼º(&P)...",                 IDM_VOLUME_PROPERTIES
!         MENUITEM "ÀÌ¸§/ID ¸ÊÇÎ »õ·Î °íÄ§(&R)",  IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "¸¶¿îÆ® Æ÷ÀÎÆ®(&M)"
!     BEGIN
!         MENUITEM "Ç¥½Ã(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "Á¦°Å(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "ÀÛ¼º(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "ÆÄÀÏ/µð·ºÅä¸® ÇÃ·¯½¬(&F)",    IDM_FLUSH
!     MENUITEM "º¼·ý ÇÃ·¯½¬(&U)",             IDM_FLUSH_VOLUME
!     MENUITEM "ÆÄÀÏ ¼­¹ö Ç¥½Ã(&F)...",       IDM_SHOW_SERVER
!     MENUITEM "¼¿ Ç¥½Ã(&C)...",              IDM_SHOWCELL
!     MENUITEM "¼­¹ö »óÅÂ Ç¥½Ã ...",          IDM_SERVER_STATUS
!     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "º¼·ý Á¤º¸"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "µµ¿ò¸»",9,240,150,50,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ÆÄÀÏ/µð·ºÅä¸®",IDC_STATIC,10,9,56,8
!     LTEXT           "ÀÌ¸§",IDC_STATIC,90,10,20,8
!     LTEXT           "ÇÒ´ç·®",IDC_STATIC,225,10,29,8
!     LTEXT           "»ç¿ë",IDC_STATIC,270,10,24,8
!     LTEXT           "»ç¿ë ¹éºÐÀ²",IDC_STATIC,298,10,38,8
!     LTEXT           "ID",IDC_STATIC,171,10,14,8
!     LTEXT           "»õ ÇÒ´ç·®:",IDC_STATIC,10,127,40,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "ÆÄÆ¼¼Ç Á¤º¸ Ç¥½Ã",IDC_PARTITION_INFO,205,125,69,14,
!                     WS_DISABLED
!     LTEXT           "KB",IDC_STATIC,118,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "AFS ACL ¼³Á¤"
! FONT 9, "±¼¸²"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - ÀÐ±â",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - ¾²±â",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - Á¶È¸",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - »èÁ¦",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - »ðÀÔ",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Àá±Ý",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - °ü¸®ÀÚ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,141,55,10
!     PUSHBUTTON      "Ãß°¡(&A)...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "Á¦°Å(&R)",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "Á¤¸®(&C)",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "È®ÀÎ(&O)",IDOK,270,150,45,14
!     PUSHBUTTON      "Ãë¼Ò(&N)",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "µµ¿ò¸»(&H)",9,270,201,45,14
!     LTEXT           "µð·ºÅä¸®:",IDC_STATIC,15,12,41,10
!     GROUPBOX        "±ÇÇÑ",IDC_STATIC,195,41,65,115
!     LTEXT           "±àÁ¤",IDC_STATIC,10,30,23,8
!     LTEXT           "ÀÌ¸§",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "±ÇÇÑ",IDC_STATIC,10,38,37,8
!     LTEXT           "ºÎÁ¤",IDC_STATIC,10,125,30,8
!     LTEXT           "±ÇÇÑ",IDC_STATIC,10,133,38,8
!     LTEXT           "ÀÌ¸§",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "º¹»ç(&P)...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸¶¿îÆ® Æ÷ÀÎÆ® ÀÛ¼º"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,20,81,50,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,150,81,50,14
!     LTEXT           "µð·ºÅä¸®:",IDC_STATIC,5,12,30,10
!     LTEXT           "º¼·ý:",IDC_STATIC,12,26,25,10
!     LTEXT           "¼¿:",IDC_STATIC,19,41,15,10
!     GROUPBOX        "",IDC_STATIC,40,52,115,20
!     LTEXT           "¿É¼Ç:",IDC_STATIC,12,57,24,10
!     CONTROL         "ÀÏ¹Ý",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,45,59,41,10
!     CONTROL         "ÀÐ±â/¾²±â",IDC_RW,"Button",BS_AUTORADIOBUTTON,100,59,50,
!                     10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL Ç×¸ñ Ãß°¡"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_NAME,35,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - ÀÐ±â",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - Á¶È¸",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - »ðÀÔ",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - »èÁ¦",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - ¾²±â",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Àá±Ý",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - °ü¸®ÀÚ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,35,60,10
!     CONTROL         "±àÁ¤ Ç×¸ñ",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,54,10
!     CONTROL         "ºÎÁ¤ Ç×¸ñ",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,59,10
!     PUSHBUTTON      "È®ÀÎ",IDOK,22,90,50,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,162,90,50,14
!     LTEXT           "ÀÌ¸§:",IDC_STATIC,10,72,20,8
!     GROUPBOX        "±ÇÇÑ",IDC_STATIC,10,5,135,55
!     GROUPBOX        "Ç×¸ñ À¯Çü",IDC_STATIC,155,6,70,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÆÄÆ¼¼Ç Á¤º¸"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,67,9,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,67,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,67,39,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "´Ý±â",IDOK,14,62,40,14
!     PUSHBUTTON      "µµ¿ò¸»",9,69,62,40,14
!     LTEXT           "»ç¿ë %:",IDC_STATIC,5,42,52,8
!     LTEXT           "»ç¿ë°¡´ÉÇÑ ºí·°:",IDC_STATIC,5,27,54,8
!     LTEXT           "ÃÑ Å©±â:",IDC_STATIC,7,12,36,8
!     LTEXT           "KB",IDC_STATIC,109,11,11,8
!     LTEXT           "K",IDC_STATIC,109,27,8,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ACL º¹»ç"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Ã£¾Æº¸±â",IDC_BROWSE,195,25,35,15
!     CONTROL         "ÇöÀç ÀÔ·Â Ç×¸ñ Áö¿ì±â:",IDC_CLEAR,"Button",
!                     BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,170,65,50,14
!     LTEXT           "º¹»ç ¿øº»:",IDC_STATIC,13,13,35,8
!     LTEXT           "º¹»ç ´ë»ó:",IDC_STATIC,13,29,37,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "À§Ä¡"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "´Ý±â",IDOK,65,145,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÆÄÀÏ/µð·ºÅä¸®",IDC_STATIC,10,10,59,8
!     LTEXT           "ÆÄÀÏ ¼­¹ö",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "°á°ú"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "´Ý±â",IDOK,65,145,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÆÄÀÏ/µð·ºÅä¸®",-1,10,10,45,8
!     LTEXT           "°á°ú",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸¶¿îÆ® Æ÷ÀÎÆ®"
! FONT 9, "±¼¸²"
! BEGIN
!     DEFPUSHBUTTON   "´Ý±â",IDOK,65,145,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÆÄÀÏ",IDC_STATIC,10,11,13,8
!     LTEXT           "º¼·ý",IDC_STATIC,75,11,27,8
!     LTEXT           "¼¿",IDC_STATIC,155,11,15,8
!     LTEXT           "À¯Çü",IDC_STATIC,230,11,20,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¼­¹ö Áß´Ü"
! FONT 9, "±¼¸²"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "ÀÌ ¼­¹ö´Â ¾ÆÁ÷ ½ÃÀÛµÇÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù",IDC_STATIC,10,
!                     10,186,8
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "¼­¹ö »óÅÂ"
! FONT 9, "±¼¸²"
! BEGIN
!     CONTROL         "Áö¿ª ¼¿",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,50,8
!     CONTROL         "ÁöÁ¤µÈ ¼¿:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,60,10
!     CONTROL         "¸ðµç ¼¿",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON | 
!                     WS_TABSTOP,21,69,45,10
!     CONTROL         "¼­¹ö »óÅÂ¸¦ Á¶»çÇÏÁö ¾ÊÀ½",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,112,10
!     PUSHBUTTON      "»óÅÂ Ç¥½Ã",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "¼¿",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,137,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,31,51,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "´Ý±â",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "µµ¿ò¸»",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÀÎÁõ"
! FONT 9, "±¼¸²"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "ÅäÅ« È®º¸",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "ÅäÅ« ¹ö¸®±â",ID_DISCARD_TOKENS,80,137,55,14
!     PUSHBUTTON      "´Ý±â",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "µµ¿ò¸»",9,215,137,55,14
!     LTEXT           "»ç¿ëÀÚ ÀÌ¸§",IDC_STATIC,10,9,38,8
!     LTEXT           "¼¿ ÀÌ¸§",IDC_STATIC,104,9,33,8
!     LTEXT           "¸¸±â",IDC_STATIC,222,9,32,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ÅäÅ« È®º¸"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "µµ¿ò¸»",9,120,70,35,14
!     LTEXT           "ÀÌ¸§:",IDC_STATIC,17,12,22,8
!     LTEXT           "¾ÏÈ£:",IDC_STATIC,17,32,20,8
!     LTEXT           "¼¿:",IDC_STATIC,24,52,15,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "ÅäÅ« ¹ö¸®±â"
! FONT 9, "±¼¸²", 0, 0, 0x1
! BEGIN
!     DEFPUSHBUTTON   "È®ÀÎ",IDOK,25,40,35,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,75,40,35,14
!     PUSHBUTTON      "µµ¿ò¸»",9,125,40,35,14
!     LTEXT           "¼¿:",IDC_STATIC,10,17,14,8
!     EDITTEXT        IDC_CELL_NAME,29,15,145,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¼­ºê¸¶¿îÆ®"
! FONT 9, "±¼¸²"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Ãß°¡ ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "»èÁ¦",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "º¯°æ",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "¼­ºê¸¶¿îÆ®:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "È®ÀÎ",IDOK,202,145,45,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¼­ºê¸¶¿îÆ® Ãß°¡"
! FONT 9, "±¼¸²"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,62,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,62,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "È®ÀÎ",IDOK,22,53,45,14
!     PUSHBUTTON      "Ãë¼Ò",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "µµ¿ò¸»",9,167,53,45,14
!     LTEXT           "°øÀ¯ ÀÌ¸§:",IDC_STATIC,18,10,37,8
!     LTEXT           "°æ·Î ÀÌ¸§:",IDC_STATIC,19,25,39,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "AFS·Î ·Î±×ÀÎ ¶Ç´Â AFS¿¡¼­ ·Î±× ¾Æ¿ô"
!     ID_SERVER_STATUS        "¼­¹ö È®ÀÎ"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "È°¼ºÈ­µÈ %o ÆÄÀÏÀ» ÇÃ·¯½¬ÇÒ ¼ö ¾ø½À´Ï´Ù"
!     IDS_FLUSH_ERROR         "%o ÆÄÀÏ ÇÃ·¯½¬ ¿À·ù: %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "¼±ÅÃµÈ ÆÄÀÏÀ» ÇÃ·¯½¬Çß½À´Ï´Ù"
!     IDS_CANT_GET_CELL       "¼¿ ÆÇº° ¿À·ù:"
!     IDS_FLUSH_VOLUME_ERROR  "%o¿¡ ´ëÇÑ º¼·ý ÇÃ·¯½¬ ¿À·ù:  %s"
!     IDS_FLUSH_VOLUME_OK     "º¼·ýÀÌ ÇÃ·¯½¬µÇ¾ú½À´Ï´Ù"
!     IDS_WHERE_IS            "%o ÆÄÀÏÀÌ %s È£½ºÆ®¿¡ ÀÖ½À´Ï´Ù"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "%o ÆÄÀÏ¿¡ ´ëÇÑ ACLÀ» Á¤¸®ÇÒ ¼ö ¾ø½À´Ï´Ù. ACL Á¤¸®´Â DFS ¾×¼¼½º ¸ñ·Ï¿¡¼­ Áö¿øµÇÁö ¾Ê½À´Ï´Ù"
!     IDS_ACL_IS_FINE         "%o¿¡ ´ëÇÑ ¾×¼¼½º ¸ñ·ÏÀÌ Á¦´ë·Î ÀÛ¼ºµÇ¾ú½À´Ï´Ù"
!     IDS_CLEANACL_INVALID_ARG 
!                             "%o ÆÄÀÏ¿¡ ´ëÇÑ ACLÀ» Á¤¸®ÇÒ ¼ö ¾ø½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº ÀÎ¼ö, °¡´ÉÇÑ ¿øÀÎÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÆÄÀÏÀÌ ¾ø°Å³ª ¾×¼¼½º Á¦¾î ¸ñ·Ï¿¡ »ç¿ëÀÚ°¡ ³Ê¹« ¸¹½À´Ï´Ù"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "¸ðÈ£ÇÑ ACL ÀÔ·Â Ç×¸ñÀº »èÁ¦µÇ¾ú½À´Ï´Ù."
!     ID_SUBMOUNTS            "AFS ¼­ºê¸¶¿îÆ®¸¦ ÀÛ¼ºÇÏ°Å³ª »èÁ¦ÇÏ½Ê½Ã¿À"
!     IDS_GETRIGHTS_ERROR     "%o µð·ºÅä¸®¿¡ ´ëÇÑ ¾×¼¼½º ¸ñ·ÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù:  %o"
!     IDS_DFSACL_ERROR        "ÀÌ ¸í·ÉÀ¸·Î DFS ACLÀ» ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù"
!     IDS_SAVE_ACL_ERROR      "%o¿¡ ´ëÇÑ ACLÀ» ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "%o¿¡ ´ëÇÑ ACLÀ» ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº ÀÎ¼ö ¹× °¡´ÉÇÑ ¿øÀÎÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÆÄÀÏÀÌ AFS¿¡ ¾ø°Å³ª ¾×¼¼½º Á¦¾î ¸ñ·Ï¿¡ »ç¿ëÀÚ°¡ ³Ê¹« ¸¹°Å³ª ¶Ç´Â ¾ø´Â »ç¿ëÀÚ¸¦ ¾×¼¼½º Á¦¾î ¸ñ·Ï¿¡ Ãß°¡ÇÏ·Á°í Çß½À´Ï´Ù."
!     IDS_ACL_READ_ERROR      "%o¿¡ ´ëÇÑ ACLÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "ACLÀ» %o µð·ºÅä¸®·Î º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù.  DFS ¾×¼¼½º ¸ñ·Ï¿¡¼­´Â ACL º¹»ç¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "ACLÀ» %o µð·ºÅä¸®·Î º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº ÀÎ¼ö ¹× °¡´ÉÇÑ ¿øÀÎÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÆÄÀÏÀÌ AFS¿¡ ¾ø½À´Ï´Ù."
!     IDS_COPY_ACL_ERROR      "ACLÀ» %o¿¡ º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%oÀº(´Â) ¸¶¿îÆ® Æ÷ÀÎÆ®°¡ ¾Æ´Õ´Ï´Ù."
!     IDS_LIST_MOUNT_POINT_ERROR "¿À·ù:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "¸¶¿îÆ® Æ÷ÀÎÆ®´Â AFS ÆÄÀÏ ½Ã½ºÅÛ ³»¿¡ ÀÛ¼ºµÇ¾î¾ß ÇÕ´Ï´Ù"
!     IDS_MOUNT_POINT_ERROR   "¸¶¿îÆ® Æ÷ÀÎÆ® ÀÛ¼º ¿À·ù:  %o"
!     IDS_ERROR               "¿À·ù:  %o"
!     IDS_DELETED             "»èÁ¦µÇ¾ú½À´Ï´Ù"
!     IDS_SET_QUOTA_ERROR     "ÇÒ´ç·® ¼³Á¤ ¿À·ù:  %o"
!     ID_SUBMOUNTS_CREATE     "AFS ¼­ºê¸¶¿îÆ® ÀÛ¼º"
!     ID_SUBMOUNTS_EDIT       "AFS ¼­ºê¸¶¿îÆ® Ãß°¡, º¯°æ ¶Ç´Â »èÁ¦"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "%o ÆÄÀÏ ¼­¹ö ±â°èÀÇ »óÅÂ È®ÀÎ ¿À·ù"
!     IDS_ALL_SERVERS_RUNNING "¸ðµç ¼­¹ö°¡ ½ÇÇà ÁßÀÔ´Ï´Ù."
!     IDS_CHECK_VOLUMES_OK    "¸ðµç º¼·ý ID/ÀÌ¸§ ¸ÊÇÎÀÌ È®ÀÎµÇ¾ú½À´Ï´Ù."
!     IDS_CHECK_VOLUMES_ERROR "º¼·ý ID/ÀÌ¸§ ¸ÊÇÎ È®ÀÎ ¿À·ù:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "¼±ÅÃÇÑ ÀÌ¸§ÀÌ ÀÌ¹Ì »ç¿ë ÁßÀÔ´Ï´Ù.  ´Ù¸¥ ÀÌ¸§À» ÀÔ·ÂÇÏ½Ê½Ã¿À."
!     IDS_REALLY_DEL_MOUNT_POINTS "¼±ÅÃµÈ ¸¶¿îÆ® Æ÷ÀÎÆ®¸¦ Á¦°ÅÇÏ½Ã°Ú½À´Ï±î?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "'%o' µð·ºÅä¸®°¡ ¾ø½À´Ï´Ù."
!     IDS_CLEANACL_MSG        "¸ðÈ£ÇÑ ACLÀº »èÁ¦µË´Ï´Ù."
!     IDS_COPY_ACL_OK         "ACLÀÌ º¹»çµÇ¾ú½À´Ï´Ù."
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "ÅäÅ« Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. AFS ¼­ºñ½º°¡ ½ÃÀÛµÇÁö ¾Ê¾ÒÀ» ¼ö ÀÖ½À´Ï´Ù."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "ÅäÅ« Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. ¿¹±âÄ¡ ¸øÇÑ ¿À·ù ¹ß»ý, ÄÚµå %d."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "ÅäÅ« Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. ¿¹±âÄ¡ ¸øÇÑ ¿À·ù ¹ß»ý, ¼­ºñ½º %s.%s.%s, ÄÚµå %d."
!     IDS_ENTER_QUOTA         "À¯È¿ÇÑ ÇÒ´ç·®À» ÀÔ·ÂÇÏ½Ê½Ã¿À."
!     IDS_AUTHENTICATION_ITEM "ÀÎÁõ(&A)..."
!     IDS_ACLS_ITEM           "¾×¼¼½º Á¦¾î ¸ñ·Ï(&O)..."
!     IDS_VOL_PART_ITEM       "º¼·ý/ÆÄÆ¼¼Ç(&V)"
!     IDS_VOL_PART_PROPS_ITEM "Æ¯¼º(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "ÀÌ¸§/ID ¸ÊÇÎ »õ·Î °íÄ§(&R)"
!     IDS_MOUNT_POINT_ITEM    "¸¶¿îÆ® Æ÷ÀÎÆ®(&M)"
!     IDS_MP_SHOW_ITEM        "Ç¥½Ã(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS Å¬¶óÀÌ¾ðÆ®"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "Á¦°Å(&R)..."
!     IDS_MP_MAKE_ITEM        "ÀÛ¼º(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "ÆÄÀÏ/µð·ºÅä¸® ÇÃ·¯½¬(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "º¼·ý ÇÃ·¯½¬(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "ÆÄÀÏ ¼­¹ö Ç¥½Ã(&F)..."
!     IDS_SHOW_CELL_ITEM      "¼¿ Ç¥½Ã(&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "¼­¹ö »óÅÂ Ç¥½Ã ..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "¼­ºê¸¶¿îÆ®(&B)"
!     IDS_GET_SUBMT_INFO_ERROR 
!                             "%o °øÀ¯ ÀÌ¸§¿¡ ´ëÇÑ ¼­ºê¸¶¿îÆ® Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù."
!     IDS_REALLY_DELETE_SUBMT "%o °øÀ¯ ÀÌ¸§À» »èÁ¦ÇÏ½Ã°Ú½À´Ï±î?"
!     IDS_SUBMT_SAVE_FAILED   "¼­ºê¸¶¿îÆ® µ¥ÀÌÅÍº£ÀÌ½º¸¦ º¯°æÇÏ´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù."
!     IDS_SUBMOUNTS_CREATE_ITEM "Ãß°¡(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "ÆíÁý(&E)..."
!     IDS_EDIT_PATH_NAME      "°æ·Î ÀÌ¸§ ÆíÁý"
!     IDS_SHOW_CELL           "¼¿ Ç¥½Ã"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "¼¿"
!     IDS_SHOW_FS             "ÆÄÀÏ ¼­¹ö Ç¥½Ã"
!     IDS_SHOW_FS_COLUMN      "ÆÄÀÏ ¼­¹ö"
!     IDS_REMOVE_MP           "¸¶¿îÆ® Æ÷ÀÎÆ® Á¦°Å"
!     IDS_REMOVE_MP_COLUMN    "°á°ú"
! END
! 
! #endif    // Korean resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
! #ifdef _WIN32
! LANGUAGE 18, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
Index: openafs/src/WINNT/client_exp/lang/pt_BR/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/pt_BR/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/pt_BR/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/pt_BR/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:58 2000
--- openafs/src/WINNT/client_exp/lang/pt_BR/afs_shl_ext.rc	Wed Dec  4 09:26:02 2002
***************
*** 7,643 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // English (U.S.) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 9, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "Autenticação...",             IDM_AUTHENTICATION
!     MENUITEM "Listas de Controle de Acesso...", IDM_ACL_SET
!     POPUP "&Volume/Partição"
!     BEGIN
!         MENUITEM "&Propriedades...",            IDM_VOLUME_PROPERTIES
!         MENUITEM "&Atualizar mapa de nome/ID",  IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "Ponto de &Montagem"
!     BEGIN
!         MENUITEM "E&xibir...",                  IDM_MOUNTPOINT_SHOW
!         MENUITEM "&Remover...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "&Fazer...",                   IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "&Esvaziar Arquivo/Dir",       IDM_FLUSH
!     MENUITEM "Esvaziar Vol&ume",            IDM_FLUSH_VOLUME
!     MENUITEM "Mostrar Servidores de Ar&quivos...", IDM_SHOW_SERVER
!     MENUITEM "Mostrar &Célula...",          IDM_SHOWCELL
!     MENUITEM "Mostrar &Status do Servidor...", IDM_SERVER_STATUS
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Informações do Volume"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "OK",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "Ajuda",9,240,150,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "Arquivo/Diretório",IDC_STATIC,10,10,55,10
!     LTEXT           "Nome",IDC_STATIC,90,10,25,8
!     LTEXT           "Quota",IDC_STATIC,225,10,19,8
!     LTEXT           "Usado",IDC_STATIC,270,10,24,8
!     LTEXT           "%Usada",IDC_STATIC,305,10,29,8
!     LTEXT           "ID",IDC_STATIC,175,10,10,8
!     LTEXT           "Nova Quota:",IDC_STATIC,10,127,44,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "Mostrar Informações da Partição",IDC_PARTITION_INFO,205,
!                     125,107,14,WS_DISABLED
!     LTEXT           "KBytes",IDC_STATIC,118,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Definir ACL do AFS"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Ler",IDC_READ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
!                     200,52,55,10
!     CONTROL         "w - Gravar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - Procurar",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - Excluir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - Inserir",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Bloquear",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,200,141,59,10
!     PUSHBUTTON      "&Incluir...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "&Remover",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "&Limpar",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "&OK",IDOK,270,150,45,14
!     PUSHBUTTON      "Ca&ncelar",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "&Ajuda",9,270,201,45,14
!     LTEXT           "Diretório:",IDC_STATIC,15,12,30,10
!     GROUPBOX        "Permissões",IDC_STATIC,195,41,68,115
!     LTEXT           "Permissões",IDC_STATIC,10,30,41,8
!     LTEXT           "Nome",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "Normais",IDC_STATIC,10,38,37,8
!     LTEXT           "Permissões",IDC_STATIC,10,125,42,8
!     LTEXT           "Negativas",IDC_STATIC,10,133,38,8
!     LTEXT           "Nome",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "Co&piar...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Fazer Ponto de Montagem"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "OK",IDOK,20,81,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "Ajuda",9,150,81,50,14
!     LTEXT           "Diretório:",IDC_STATIC,5,12,30,10
!     LTEXT           "Volume:",IDC_STATIC,5,28,25,10
!     LTEXT           "Célula:",IDC_STATIC,5,42,26,10
!     GROUPBOX        "",IDC_STATIC,41,52,137,20
!     LTEXT           "Opções:",IDC_STATIC,9,59,25,10
!     CONTROL         "Regular",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,47,59,41,10
!     CONTROL         "Leitura/Gravação",IDC_RW,"Button",BS_AUTORADIOBUTTON,
!                     102,59,74,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Incluir Entrada na ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_NAME,35,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - Ler",IDC_READ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
!                     20,15,45,10
!     CONTROL         "l - Procurar",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - Inserir",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - Excluir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - Gravar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Bloquear",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,80,35,60,10
!     CONTROL         "Entrada Normal",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,155,14,64,10
!     CONTROL         "Entrada negativa",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,155,24,69,10
!     PUSHBUTTON      "OK",IDOK,22,90,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "Ajuda",9,162,90,50,14
!     LTEXT           "Nome:",IDC_STATIC,10,72,20,8
!     GROUPBOX        "Permissões",IDC_STATIC,10,5,135,55
!     GROUPBOX        "Tipo de Entrada",IDC_STATIC,150,5,77,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 133, 82
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Informações da Partição"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,61,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,61,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,61,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "Fechar",IDOK,14,62,40,14
!     PUSHBUTTON      "Ajuda",9,69,62,40,14
!     LTEXT           "% Usada:",IDC_STATIC,5,42,37,8
!     LTEXT           "Blocos Livres:",IDC_STATIC,5,27,50,8
!     LTEXT           "Tamanho Total:",IDC_STATIC,5,12,52,8
!     LTEXT           "K Bytes",IDC_STATIC,103,12,25,8
!     LTEXT           "K Bytes",IDC_STATIC,103,27,25,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Copiar da ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Procurar",IDC_BROWSE,195,25,35,15
!     CONTROL         "Limpar Entradas Atuais:",IDC_CLEAR,"Button",
!                     BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,10,46,95,10
!     DEFPUSHBUTTON   "OK",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "Ajuda",9,170,65,50,14
!     LTEXT           "Copiar De:",IDC_STATIC,13,12,35,8
!     LTEXT           "Copiar Para:",IDC_STATIC,13,29,43,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Onde Está"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Fechar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ajuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Arquivo/Diretório",IDC_STATIC,10,10,62,8
!     LTEXT           "Servidor(es) de Arquivos",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Resultados"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Fechar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ajuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Arquivo/Diretório",-1,10,10,60,8
!     LTEXT           "Resultado",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Pontos de Montagem"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Fechar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ajuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Arquivo",IDC_STATIC,10,11,30,8
!     LTEXT           "Volume",IDC_STATIC,75,11,27,8
!     LTEXT           "Célula",IDC_STATIC,155,11,27,8
!     LTEXT           "Tipo",IDC_STATIC,230,11,20,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Servidores Inoperantes"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "Estes servidores ainda estão inoperantes:",IDC_STATIC,
!                     10,10,136,8
!     DEFPUSHBUTTON   "OK",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Status do Servidor"
! FONT 8, "MS Sans Serif"
! BEGIN
!     CONTROL         "Célula Local",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,61,8
!     CONTROL         "Célula Especificada:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,82,10
!     CONTROL         "Todas as Células",IDC_ALL_CELLS,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,65,71,10
!     CONTROL         "Não sondar servidores",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,86,10
!     PUSHBUTTON      "Mostrar Status",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "Célula",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,95,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Fechar",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "Ajuda",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Autenticação"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "Obter Tokens",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "Descartar Tokens",ID_DISCARD_TOKENS,79,137,62,14
!     PUSHBUTTON      "Fechar",IDCANCEL,150,137,55,14
!     PUSHBUTTON      "Ajuda",9,214,137,55,14
!     LTEXT           "Nome do Usuário",IDC_STATIC,10,9,61,8
!     LTEXT           "Nome da Célula",IDC_STATIC,104,9,57,8
!     LTEXT           "Vencimento",IDC_STATIC,222,9,38,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Obter Tokens"
! FONT 8, "MS Sans Serif", 0, 0, 0x1
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "OK",IDOK,20,70,33,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,70,70,33,14
!     PUSHBUTTON      "Ajuda",9,120,70,33,14
!     LTEXT           "Nome:",IDC_STATIC,13,12,22,8
!     LTEXT           "Senha:",IDC_STATIC,13,32,34,8
!     LTEXT           "Célula:",IDC_STATIC,13,52,24,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 189, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Descartar Tokens"
! FONT 8, "MS Sans Serif", 0, 0, 0x1
! BEGIN
!     DEFPUSHBUTTON   "OK",IDOK,29,40,35,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,79,40,35,14
!     PUSHBUTTON      "Ajuda",9,129,40,35,14
!     LTEXT           "Célula:",IDC_STATIC,10,17,24,8
!     EDITTEXT        IDC_CELL_NAME,34,15,145,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Submontagens"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Incluir ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "Excluir",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "Alterar",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "Submontagens:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "OK",IDOK,202,145,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 267, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Incluir Submontagem"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,97,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,97,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "OK",IDOK,24,53,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,111,53,45,14
!     PUSHBUTTON      "Ajuda",9,198,53,45,14
!     LTEXT           "Nome do Compartilhamento:",IDC_STATIC,4,10,90,8
!     LTEXT           "Nome do Caminho:",IDC_STATIC,4,25,61,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 182
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 260
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "Entrar ou sair do AFS"
!     ID_SERVER_STATUS        "Verificar Servidores"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "Não é possível esvaziar o arquivo ativo %o"
!     IDS_FLUSH_ERROR         "Erro ao esvaziar o arquivo %o:  %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "Arquivo(s) selecionado(s) esvaziado(s) com êxito"
!     IDS_CANT_GET_CELL       "Erro ao determinar a célula:"
!     IDS_FLUSH_VOLUME_ERROR  "Erro ao esvaziar volume para %o:  %s"
!     IDS_FLUSH_VOLUME_OK     "Volume esvaziado com êxito"
!     IDS_WHERE_IS            "O arquivo %o está no host %s"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "Não é possível limpar a ACL para o arquivo %o:  clean Acl não é suportado para listas de acesso DFS"
!     IDS_ACL_IS_FINE         "Lista de acesso para %o está boa"
!     IDS_CLEANACL_INVALID_ARG 
!                             "Não é possível limpar a ACL para o arquivo %o:  Argumento inválido, motivos possíveis incluem:  o arquivo não está com erro ou existem muitos usuários na lista de controle de acesso"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "Entradas obsoletas na ACL foram excluídas."
!     ID_SUBMOUNTS            "Criar ou excluir uma submontagem AFS"
!     IDS_GETRIGHTS_ERROR     "Incapaz de ler a lista de acesso para o diretório %o:  %o"
!     IDS_DFSACL_ERROR        "Não é possível editar ACLs do DFS com este comando"
!     IDS_SAVE_ACL_ERROR      "Não é possível salvar a ACL para %o:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "Não é possível salvar a ACL para %o:  Argumento inválido, motivos possíveis incluem:  o arquivo não está na AFS, muitos usuários na lista de controle do acesso, tentativa de incluir usuário não existente na lista de controle de acesso"
!     IDS_ACL_READ_ERROR      "Não é possível ler a ACL para %o:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "Não é possível copiar a ACL para o diretório %o:  a função copiar a ACL não é suportada para listas de acesso DFS"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "Não é possível copiar a ACL para o diretório %o:  Argumento inválido, motivos possíveis incluem:  Arquivo não está na AFS."
!     IDS_COPY_ACL_ERROR      "Não é possível copiar a ACL para %o:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o não é um ponto de montagem."
!     IDS_LIST_MOUNT_POINT_ERROR "Erro:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "Pontos de montagem devem ser criados no sistema de arquivos do AFS"
!     IDS_MOUNT_POINT_ERROR   "Erro ao criar ponto de montagem:  %o"
!     IDS_ERROR               "Erro:  %o"
!     IDS_DELETED             "Excluído com êxito"
!     IDS_SET_QUOTA_ERROR     "Erro ao definir quota:  %o"
!     ID_SUBMOUNTS_CREATE     "Criar uma Submontagem AFS"
!     ID_SUBMOUNTS_EDIT       "Incluir, alterar ou excluir submontagens do AFS"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "Erro ao verificar status de máquinas de servidor de arquivos:  %o"
!     IDS_ALL_SERVERS_RUNNING "Todos os servidores estão em execução."
!     IDS_CHECK_VOLUMES_OK    "Todos os mapeamentos de ID/nome de volume verificados."
!     IDS_CHECK_VOLUMES_ERROR "Erro ao verificar mapeamentos de ID/nome de volume:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "O nome escolhido já está em uso. Digite um nome diferente."
!     IDS_REALLY_DEL_MOUNT_POINTS 
!                             "Tem certeza de que deseja remover o(s) ponto(s) de montagem selecionado(s)?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "O diretório '%o' não existe."
!     IDS_CLEANACL_MSG        "As ACLs obsoletas serão excluídas!"
!     IDS_COPY_ACL_OK         "ACL copiada com êxito."
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "Não é possível ler as informações de token:  o serviço do AFS pode não ter iniciado."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "Não é possível ler as informações de token:  Erro inesperado, código %d."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "Não é possível ler as informações de token:  Erro inesperado, serviço %s.%s.%s, código %d."
!     IDS_ENTER_QUOTA         "Digite uma quota válida."
!     IDS_AUTHENTICATION_ITEM "&Autenticação..."
!     IDS_ACLS_ITEM           "&Listas de Controle de Acesso..."
!     IDS_VOL_PART_ITEM       "&Volume/Partição"
!     IDS_VOL_PART_PROPS_ITEM "&Propriedades"
!     IDS_VOL_PART_REFRESH_ITEM "&Atualizar mapa de nome/ID"
!     IDS_MOUNT_POINT_ITEM    "Ponto de &Montagem"
!     IDS_MP_SHOW_ITEM        "E&xibir..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS Client"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "&Remover..."
!     IDS_MP_MAKE_ITEM        "&Fazer..."
!     IDS_FLUSH_FILE_DIR_ITEM "&Esvaziar Arquivo/Dir"
!     IDS_FLUSH_VOLUME_ITEM   "Esvaziar Vol&ume"
!     IDS_SHOW_FILE_SERVERS_ITEM "Mostrar Servidores de Ar&quivos..."
!     IDS_SHOW_CELL_ITEM      "Mostrar &Célula..."
!     IDS_SHOW_SERVER_STATUS_ITEM "Mostrar &Status do Servidor..."
!     IDS_AFS_ITEM            "&AFS"
!     IDS_SUBMOUNTS_ITEM      "Su&bmontagens"
!     IDS_GET_SUBMT_INFO_ERROR 
!                             "Incapaz de ler as informações de submontagem para o sharename %o."
!     IDS_REALLY_DELETE_SUBMT "Excluir sharename %o?"
!     IDS_SUBMT_SAVE_FAILED   "Falha nas alterações ao banco de dados de submontagem."
!     IDS_SUBMOUNTS_CREATE_ITEM "&Incluir"
!     IDS_SUBMOUNTS_EDIT_ITEM "&Editar..."
!     IDS_EDIT_PATH_NAME      "Editar Nome do Caminho"
!     IDS_SHOW_CELL           "Mostrar Célula"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "Célula"
!     IDS_SHOW_FS             "Mostrar Servidores de Arquivos"
!     IDS_SHOW_FS_COLUMN      "Servidor(es) de Arquivos"
!     IDS_REMOVE_MP           "Remover Pontos de Montagem"
!     IDS_REMOVE_MP_COLUMN    "Resultado"
! END
! 
! #endif    // English (U.S.) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE 9, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
--- 7,644 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // English (U.S.) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 9, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "Autenticação...",             IDM_AUTHENTICATION
!     MENUITEM "Listas de Controle de Acesso...", IDM_ACL_SET
!     POPUP "&Volume/Partição"
!     BEGIN
!         MENUITEM "&Propriedades...",            IDM_VOLUME_PROPERTIES
!         MENUITEM "&Atualizar mapa de nome/ID",  IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "Ponto de &Montagem"
!     BEGIN
!         MENUITEM "E&xibir...",                  IDM_MOUNTPOINT_SHOW
!         MENUITEM "&Remover...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "&Fazer...",                   IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "&Esvaziar Arquivo/Dir",       IDM_FLUSH
!     MENUITEM "Esvaziar Vol&ume",            IDM_FLUSH_VOLUME
!     MENUITEM "Mostrar Servidores de Ar&quivos...", IDM_SHOW_SERVER
!     MENUITEM "Mostrar &Célula...",          IDM_SHOWCELL
!     MENUITEM "Mostrar &Status do Servidor...", IDM_SERVER_STATUS
!     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Informações do Volume"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "OK",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "Ajuda",9,240,150,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "Arquivo/Diretório",IDC_STATIC,10,10,55,10
!     LTEXT           "Nome",IDC_STATIC,90,10,25,8
!     LTEXT           "Quota",IDC_STATIC,225,10,19,8
!     LTEXT           "Usado",IDC_STATIC,270,10,24,8
!     LTEXT           "%Usada",IDC_STATIC,305,10,29,8
!     LTEXT           "ID",IDC_STATIC,175,10,10,8
!     LTEXT           "Nova Quota:",IDC_STATIC,10,127,44,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "Mostrar Informações da Partição",IDC_PARTITION_INFO,205,
!                     125,107,14,WS_DISABLED
!     LTEXT           "KBytes",IDC_STATIC,118,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Definir ACL do AFS"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Ler",IDC_READ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
!                     200,52,55,10
!     CONTROL         "w - Gravar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - Procurar",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - Excluir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - Inserir",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Bloquear",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,200,141,59,10
!     PUSHBUTTON      "&Incluir...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "&Remover",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "&Limpar",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "&OK",IDOK,270,150,45,14
!     PUSHBUTTON      "Ca&ncelar",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "&Ajuda",9,270,201,45,14
!     LTEXT           "Diretório:",IDC_STATIC,15,12,30,10
!     GROUPBOX        "Permissões",IDC_STATIC,195,41,68,115
!     LTEXT           "Permissões",IDC_STATIC,10,30,41,8
!     LTEXT           "Nome",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "Normais",IDC_STATIC,10,38,37,8
!     LTEXT           "Permissões",IDC_STATIC,10,125,42,8
!     LTEXT           "Negativas",IDC_STATIC,10,133,38,8
!     LTEXT           "Nome",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "Co&piar...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Fazer Ponto de Montagem"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "OK",IDOK,20,81,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "Ajuda",9,150,81,50,14
!     LTEXT           "Diretório:",IDC_STATIC,5,12,30,10
!     LTEXT           "Volume:",IDC_STATIC,5,28,25,10
!     LTEXT           "Célula:",IDC_STATIC,5,42,26,10
!     GROUPBOX        "",IDC_STATIC,41,52,137,20
!     LTEXT           "Opções:",IDC_STATIC,9,59,25,10
!     CONTROL         "Regular",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,47,59,41,10
!     CONTROL         "Leitura/Gravação",IDC_RW,"Button",BS_AUTORADIOBUTTON,
!                     102,59,74,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Incluir Entrada na ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_NAME,35,70,190,12,ES_AUTOHSCROLL
!     CONTROL         "r - Ler",IDC_READ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
!                     20,15,45,10
!     CONTROL         "l - Procurar",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - Inserir",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - Excluir",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - Gravar",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Bloquear",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - Administrar",IDC_ADMINISTER,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,80,35,60,10
!     CONTROL         "Entrada Normal",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,155,14,64,10
!     CONTROL         "Entrada negativa",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,155,24,69,10
!     PUSHBUTTON      "OK",IDOK,22,90,50,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "Ajuda",9,162,90,50,14
!     LTEXT           "Nome:",IDC_STATIC,10,72,20,8
!     GROUPBOX        "Permissões",IDC_STATIC,10,5,135,55
!     GROUPBOX        "Tipo de Entrada",IDC_STATIC,150,5,77,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 133, 82
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Informações da Partição"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,61,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,61,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,61,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "Fechar",IDOK,14,62,40,14
!     PUSHBUTTON      "Ajuda",9,69,62,40,14
!     LTEXT           "% Usada:",IDC_STATIC,5,42,37,8
!     LTEXT           "Blocos Livres:",IDC_STATIC,5,27,50,8
!     LTEXT           "Tamanho Total:",IDC_STATIC,5,12,52,8
!     LTEXT           "K Bytes",IDC_STATIC,103,12,25,8
!     LTEXT           "K Bytes",IDC_STATIC,103,27,25,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Copiar da ACL"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Procurar",IDC_BROWSE,195,25,35,15
!     CONTROL         "Limpar Entradas Atuais:",IDC_CLEAR,"Button",
!                     BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,10,46,95,10
!     DEFPUSHBUTTON   "OK",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "Ajuda",9,170,65,50,14
!     LTEXT           "Copiar De:",IDC_STATIC,13,12,35,8
!     LTEXT           "Copiar Para:",IDC_STATIC,13,29,43,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Onde Está"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Fechar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ajuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Arquivo/Diretório",IDC_STATIC,10,10,62,8
!     LTEXT           "Servidor(es) de Arquivos",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Resultados"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Fechar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ajuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Arquivo/Diretório",-1,10,10,60,8
!     LTEXT           "Resultado",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Pontos de Montagem"
! FONT 8, "MS Sans Serif"
! BEGIN
!     DEFPUSHBUTTON   "Fechar",IDOK,65,145,50,14
!     PUSHBUTTON      "Ajuda",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "Arquivo",IDC_STATIC,10,11,30,8
!     LTEXT           "Volume",IDC_STATIC,75,11,27,8
!     LTEXT           "Célula",IDC_STATIC,155,11,27,8
!     LTEXT           "Tipo",IDC_STATIC,230,11,20,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Servidores Inoperantes"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "Estes servidores ainda estão inoperantes:",IDC_STATIC,
!                     10,10,136,8
!     DEFPUSHBUTTON   "OK",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "Status do Servidor"
! FONT 8, "MS Sans Serif"
! BEGIN
!     CONTROL         "Célula Local",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,61,8
!     CONTROL         "Célula Especificada:",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,82,10
!     CONTROL         "Todas as Células",IDC_ALL_CELLS,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,65,71,10
!     CONTROL         "Não sondar servidores",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,86,10
!     PUSHBUTTON      "Mostrar Status",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "Célula",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,95,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Fechar",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "Ajuda",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Autenticação"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "Obter Tokens",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "Descartar Tokens",ID_DISCARD_TOKENS,79,137,62,14
!     PUSHBUTTON      "Fechar",IDCANCEL,150,137,55,14
!     PUSHBUTTON      "Ajuda",9,214,137,55,14
!     LTEXT           "Nome do Usuário",IDC_STATIC,10,9,61,8
!     LTEXT           "Nome da Célula",IDC_STATIC,104,9,57,8
!     LTEXT           "Vencimento",IDC_STATIC,222,9,38,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Obter Tokens"
! FONT 8, "MS Sans Serif", 0, 0, 0x1
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "OK",IDOK,20,70,33,14,WS_DISABLED
!     PUSHBUTTON      "Cancelar",IDCANCEL,70,70,33,14
!     PUSHBUTTON      "Ajuda",9,120,70,33,14
!     LTEXT           "Nome:",IDC_STATIC,13,12,22,8
!     LTEXT           "Senha:",IDC_STATIC,13,32,34,8
!     LTEXT           "Célula:",IDC_STATIC,13,52,24,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 189, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "Descartar Tokens"
! FONT 8, "MS Sans Serif", 0, 0, 0x1
! BEGIN
!     DEFPUSHBUTTON   "OK",IDOK,29,40,35,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,79,40,35,14
!     PUSHBUTTON      "Ajuda",9,129,40,35,14
!     LTEXT           "Célula:",IDC_STATIC,10,17,24,8
!     EDITTEXT        IDC_CELL_NAME,34,15,145,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "Submontagens"
! FONT 8, "MS Sans Serif"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Incluir ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "Excluir",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "Alterar",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "Submontagens:",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "OK",IDOK,202,145,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 267, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Incluir Submontagem"
! FONT 8, "MS Sans Serif"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,97,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,97,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "OK",IDOK,24,53,45,14
!     PUSHBUTTON      "Cancelar",IDCANCEL,111,53,45,14
!     PUSHBUTTON      "Ajuda",9,198,53,45,14
!     LTEXT           "Nome do Compartilhamento:",IDC_STATIC,4,10,90,8
!     LTEXT           "Nome do Caminho:",IDC_STATIC,4,25,61,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 182
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 260
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "Entrar ou sair do AFS"
!     ID_SERVER_STATUS        "Verificar Servidores"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "Não é possível esvaziar o arquivo ativo %o"
!     IDS_FLUSH_ERROR         "Erro ao esvaziar o arquivo %o:  %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "Arquivo(s) selecionado(s) esvaziado(s) com êxito"
!     IDS_CANT_GET_CELL       "Erro ao determinar a célula:"
!     IDS_FLUSH_VOLUME_ERROR  "Erro ao esvaziar volume para %o:  %s"
!     IDS_FLUSH_VOLUME_OK     "Volume esvaziado com êxito"
!     IDS_WHERE_IS            "O arquivo %o está no host %s"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "Não é possível limpar a ACL para o arquivo %o:  clean Acl não é suportado para listas de acesso DFS"
!     IDS_ACL_IS_FINE         "Lista de acesso para %o está boa"
!     IDS_CLEANACL_INVALID_ARG 
!                             "Não é possível limpar a ACL para o arquivo %o:  Argumento inválido, motivos possíveis incluem:  o arquivo não está com erro ou existem muitos usuários na lista de controle de acesso"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "Entradas obsoletas na ACL foram excluídas."
!     ID_SUBMOUNTS            "Criar ou excluir uma submontagem AFS"
!     IDS_GETRIGHTS_ERROR     "Incapaz de ler a lista de acesso para o diretório %o:  %o"
!     IDS_DFSACL_ERROR        "Não é possível editar ACLs do DFS com este comando"
!     IDS_SAVE_ACL_ERROR      "Não é possível salvar a ACL para %o:  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "Não é possível salvar a ACL para %o:  Argumento inválido, motivos possíveis incluem:  o arquivo não está na AFS, muitos usuários na lista de controle do acesso, tentativa de incluir usuário não existente na lista de controle de acesso"
!     IDS_ACL_READ_ERROR      "Não é possível ler a ACL para %o:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "Não é possível copiar a ACL para o diretório %o:  a função copiar a ACL não é suportada para listas de acesso DFS"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "Não é possível copiar a ACL para o diretório %o:  Argumento inválido, motivos possíveis incluem:  Arquivo não está na AFS."
!     IDS_COPY_ACL_ERROR      "Não é possível copiar a ACL para %o:  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o não é um ponto de montagem."
!     IDS_LIST_MOUNT_POINT_ERROR "Erro:  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR 
!                             "Pontos de montagem devem ser criados no sistema de arquivos do AFS"
!     IDS_MOUNT_POINT_ERROR   "Erro ao criar ponto de montagem:  %o"
!     IDS_ERROR               "Erro:  %o"
!     IDS_DELETED             "Excluído com êxito"
!     IDS_SET_QUOTA_ERROR     "Erro ao definir quota:  %o"
!     ID_SUBMOUNTS_CREATE     "Criar uma Submontagem AFS"
!     ID_SUBMOUNTS_EDIT       "Incluir, alterar ou excluir submontagens do AFS"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "Erro ao verificar status de máquinas de servidor de arquivos:  %o"
!     IDS_ALL_SERVERS_RUNNING "Todos os servidores estão em execução."
!     IDS_CHECK_VOLUMES_OK    "Todos os mapeamentos de ID/nome de volume verificados."
!     IDS_CHECK_VOLUMES_ERROR "Erro ao verificar mapeamentos de ID/nome de volume:  %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE 
!                             "O nome escolhido já está em uso. Digite um nome diferente."
!     IDS_REALLY_DEL_MOUNT_POINTS 
!                             "Tem certeza de que deseja remover o(s) ponto(s) de montagem selecionado(s)?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "O diretório '%o' não existe."
!     IDS_CLEANACL_MSG        "As ACLs obsoletas serão excluídas!"
!     IDS_COPY_ACL_OK         "ACL copiada com êxito."
!     IDS_GET_TOKENS_NO_AFS_SERVICE 
!                             "Não é possível ler as informações de token:  o serviço do AFS pode não ter iniciado."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "Não é possível ler as informações de token:  Erro inesperado, código %d."
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "Não é possível ler as informações de token:  Erro inesperado, serviço %s.%s.%s, código %d."
!     IDS_ENTER_QUOTA         "Digite uma quota válida."
!     IDS_AUTHENTICATION_ITEM "&Autenticação..."
!     IDS_ACLS_ITEM           "&Listas de Controle de Acesso..."
!     IDS_VOL_PART_ITEM       "&Volume/Partição"
!     IDS_VOL_PART_PROPS_ITEM "&Propriedades"
!     IDS_VOL_PART_REFRESH_ITEM "&Atualizar mapa de nome/ID"
!     IDS_MOUNT_POINT_ITEM    "Ponto de &Montagem"
!     IDS_MP_SHOW_ITEM        "E&xibir..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS Client"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "&Remover..."
!     IDS_MP_MAKE_ITEM        "&Fazer..."
!     IDS_FLUSH_FILE_DIR_ITEM "&Esvaziar Arquivo/Dir"
!     IDS_FLUSH_VOLUME_ITEM   "Esvaziar Vol&ume"
!     IDS_SHOW_FILE_SERVERS_ITEM "Mostrar Servidores de Ar&quivos..."
!     IDS_SHOW_CELL_ITEM      "Mostrar &Célula..."
!     IDS_SHOW_SERVER_STATUS_ITEM "Mostrar &Status do Servidor..."
!     IDS_AFS_ITEM            "&AFS"
!     IDS_SUBMOUNTS_ITEM      "Su&bmontagens"
!     IDS_GET_SUBMT_INFO_ERROR 
!                             "Incapaz de ler as informações de submontagem para o sharename %o."
!     IDS_REALLY_DELETE_SUBMT "Excluir sharename %o?"
!     IDS_SUBMT_SAVE_FAILED   "Falha nas alterações ao banco de dados de submontagem."
!     IDS_SUBMOUNTS_CREATE_ITEM "&Incluir"
!     IDS_SUBMOUNTS_EDIT_ITEM "&Editar..."
!     IDS_EDIT_PATH_NAME      "Editar Nome do Caminho"
!     IDS_SHOW_CELL           "Mostrar Célula"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "Célula"
!     IDS_SHOW_FS             "Mostrar Servidores de Arquivos"
!     IDS_SHOW_FS_COLUMN      "Servidor(es) de Arquivos"
!     IDS_REMOVE_MP           "Remover Pontos de Montagem"
!     IDS_REMOVE_MP_COLUMN    "Resultado"
! END
! 
! #endif    // English (U.S.) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE 9, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
Index: openafs/src/WINNT/client_exp/lang/zh_CN/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/zh_CN/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/zh_CN/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/zh_CN/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:58 2000
--- openafs/src/WINNT/client_exp/lang/zh_CN/afs_shl_ext.rc	Wed Dec  4 09:26:03 2002
***************
*** 7,637 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Chinese (P.R.C.) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
! #ifdef _WIN32
! LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 9, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "ÈÏÖ¤...",                     IDM_AUTHENTICATION
!     MENUITEM "´æÈ¡¿ØÖÆ±í...",               IDM_ACL_SET
!     POPUP "¾í£¯·ÖÇø(&V)"
!     BEGIN
!         MENUITEM "ÌØÐÔ(&P)...",                 IDM_VOLUME_PROPERTIES
!         MENUITEM "Ë¢ÐÂÃû³Æ£¯±êÊ¶·ûÓ³Éä(&R)",    IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "°²×°µã(&M)"
!     BEGIN
!         MENUITEM "ÏÔÊ¾(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "³ýÈ¥(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "¶¨ÖÆ(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "Çå²ÖÎÄ¼þ£¯Ä¿Â¼(&F)",          IDM_FLUSH
!     MENUITEM "Çå²Ö¾í(&U)",                  IDM_FLUSH_VOLUME
!     MENUITEM "ÏÔÊ¾ÎÄ¼þ·þÎñÆ÷(&F)...",       IDM_SHOW_SERVER
!     MENUITEM "ÏÔÊ¾µ¥Ôª(&C)...",             IDM_SHOWCELL
!     MENUITEM "ÏÔÊ¾·þÎñÆ÷×´Ì¬...",           IDM_SERVER_STATUS
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "¾íÐÅÏ¢"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "È·¶¨",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "°ïÖú",9,240,150,50,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ÎÄ¼þ/Ä¿Â¼",IDC_STATIC,10,10,44,10
!     LTEXT           "Ãû³Æ",IDC_STATIC,90,10,20,8
!     LTEXT           "ÏÞ¶î",IDC_STATIC,225,10,19,8
!     LTEXT           "ÒÑÊ¹ÓÃ",IDC_STATIC,270,10,24,8
!     LTEXT           "ÒÑÊ¹ÓÃ %",IDC_STATIC,305,10,34,8
!     LTEXT           "±êÊ¶·û",IDC_STATIC,175,10,29,8
!     LTEXT           "ÐÂÏÞ¶î£º",IDC_STATIC,10,127,40,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "ÏÔÊ¾·ÖÇøÐÅÏ¢",IDC_PARTITION_INFO,205,125,69,14,
!                     WS_DISABLED
!     LTEXT           "Ç§×Ö½Ú",IDC_STATIC,118,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÉèÖÃ AFS ACL"
! FONT 8, "System"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - ¶ÁÈ¡",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - Ð´Èë",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - ²é±í",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - É¾³ý",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - ²åÈë",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Ëø¶¨",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - ¹ÜÀí",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,141,55,10
!     PUSHBUTTON      "Ìí¼Ó(&A)...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "³ýÈ¥(&R)",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "Çå³ý(&C)",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "È·¶¨(&O)",IDOK,270,150,45,14
!     PUSHBUTTON      "È¡Ïû(&N)",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "°ïÖú(&H)",9,270,201,45,14
!     LTEXT           "Ä¿Â¼£º",IDC_STATIC,15,12,30,10
!     GROUPBOX        "Ðí¿ÉÈ¨",IDC_STATIC,195,41,65,115
!     LTEXT           "Õý³£",IDC_STATIC,10,30,23,8
!     LTEXT           "Ãû³Æ",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "Ðí¿ÉÈ¨",IDC_STATIC,10,38,37,8
!     LTEXT           "ä¯ÀÀ",IDC_STATIC,10,125,30,8
!     LTEXT           "Ðí¿ÉÈ¨",IDC_STATIC,10,133,38,8
!     LTEXT           "Ãû³Æ",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "¸´ÖÆ(&P)...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¶¨ÖÆ°²×°µã"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È·¶¨",IDOK,20,81,50,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "°ïÖú",9,150,81,50,14
!     LTEXT           "Ä¿Â¼£º",IDC_STATIC,5,12,30,10
!     LTEXT           "¾í£º",IDC_STATIC,5,27,30,10
!     LTEXT           "µ¥Ôª£º",IDC_STATIC,5,42,30,10
!     GROUPBOX        "",IDC_STATIC,40,52,115,20
!     LTEXT           "Ñ¡Ïî£º",IDC_STATIC,5,57,30,10
!     CONTROL         "¹æÔò",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,45,59,41,10
!     CONTROL         "¶ÁÈ¡£¯Ð´Èë",IDC_RW,"Button",BS_AUTORADIOBUTTON,100,59,
!                     50,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Ìí¼Ó ACL ÌõÄ¿"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_NAME,41,70,184,12,ES_AUTOHSCROLL
!     CONTROL         "r - ¶ÁÈ¡",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - ²é±í",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - ²åÈë",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - É¾³ý",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - Ð´Èë",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Ëø¶¨",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - ¹ÜÀí",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,35,60,10
!     CONTROL         "Ò»°ãÌõÄ¿",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,54,10
!     CONTROL         "ä¯ÀÀÌõÄ¿",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,59,10
!     PUSHBUTTON      "È·¶¨",IDOK,22,90,50,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "°ïÖú",9,162,90,50,14
!     LTEXT           "Ãû³Æ£º",IDC_STATIC,10,72,26,8
!     GROUPBOX        "Ðí¿ÉÈ¨",IDC_STATIC,10,5,135,55
!     GROUPBOX        "ÌõÄ¿ÀàÐÍ",IDC_STATIC,155,6,70,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "·ÖÇøÐÅÏ¢"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,50,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,50,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,50,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,14,62,40,14
!     PUSHBUTTON      "°ïÖú",9,69,62,40,14
!     LTEXT           "ÒÑÊ¹ÓÃ %£º",IDC_STATIC,5,42,40,8
!     LTEXT           "¿ÕÏÐ¿é£º",IDC_STATIC,5,27,40,8
!     LTEXT           "×Ü¼Æ´óÐ¡£º",IDC_STATIC,5,12,40,8
!     LTEXT           "Ç§×Ö½Ú",IDC_STATIC,92,12,25,8
!     LTEXT           "Ç§×Ö½Ú",IDC_STATIC,92,27,25,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸´ÖÆ ACL"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ä¯ÀÀ",IDC_BROWSE,195,25,35,15
!     CONTROL         "Çå³ýµ±Ç°ÌõÄ¿£º",IDC_CLEAR,"Button",BS_AUTOCHECKBOX | 
!                     BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "È·¶¨",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "°ïÖú",9,170,65,50,14
!     LTEXT           "¸´ÖÆ×Ô£º",IDC_STATIC,15,12,35,8
!     LTEXT           "¸´ÖÆµ½£º",IDC_STATIC,15,29,35,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Î»ÖÃ"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,65,145,50,14
!     PUSHBUTTON      "°ïÖú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÎÄ¼þ/Ä¿Â¼",IDC_STATIC,10,10,47,8
!     LTEXT           "ÎÄ¼þ·þÎñÆ÷",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "½á¹û"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,65,145,50,14
!     PUSHBUTTON      "°ïÖú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÎÄ¼þ/Ä¿Â¼",-1,10,10,45,8
!     LTEXT           "½á¹û",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "°²×°µã"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,65,145,50,14
!     PUSHBUTTON      "°ïÖú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÎÄ¼þ",IDC_STATIC,10,11,27,8
!     LTEXT           "¾í",IDC_STATIC,75,11,27,8
!     LTEXT           "µ¥Ôª",IDC_STATIC,155,11,27,8
!     LTEXT           "ÀàÐÍ",IDC_STATIC,230,11,27,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¹Ø±ÕµÄ·þÎñÆ÷"
! FONT 8, "System"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "ÕâÐ©·þÎñÆ÷ÈÔÈ»¹Ø±Õ×Å£º",IDC_STATIC,10,10,95,8
!     DEFPUSHBUTTON   "È·¶¨",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "·þÎñÆ÷×´Ì¬"
! FONT 8, "System"
! BEGIN
!     CONTROL         "±¾µØµ¥Ôª",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,50,8
!     CONTROL         "Ö¸¶¨µÄµ¥Ôª£º",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,60,10
!     CONTROL         "ËùÓÐµ¥Ôª",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON | 
!                     WS_TABSTOP,20,65,45,10
!     CONTROL         "²»¼ì²â·þÎñÆ÷",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,80,10
!     PUSHBUTTON      "ÏÔÊ¾×´Ì¬",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "µ¥Ôª",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,90,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "¹Ø±Õ",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "°ïÖú",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÈÏÖ¤"
! FONT 8, "System"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "»ñµÃÁîÅÆ",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "¶ªÆúÁîÅÆ",ID_DISCARD_TOKENS,80,137,55,14
!     PUSHBUTTON      "¹Ø±Õ",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "°ïÖú",9,215,137,55,14
!     LTEXT           "ÓÃ»§Ãû",IDC_STATIC,10,9,38,8
!     LTEXT           "µ¥ÔªÃû",IDC_STATIC,104,9,33,8
!     LTEXT           "µ½ÆÚ",IDC_STATIC,222,9,32,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "»ñµÃÁîÅÆ"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È·¶¨",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "°ïÖú",9,120,70,35,14
!     LTEXT           "Ãû³Æ£º",IDC_STATIC,10,12,27,8
!     LTEXT           "¿ÚÁî£º",IDC_STATIC,10,32,27,8
!     LTEXT           "µ¥Ôª£º",IDC_STATIC,10,52,27,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "¶ªÆúÁîÅÆ"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "È·¶¨",IDOK,25,40,35,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,75,40,35,14
!     PUSHBUTTON      "°ïÖú",9,125,40,35,14
!     LTEXT           "µ¥Ôª£º",IDC_STATIC,10,17,24,8
!     EDITTEXT        IDC_CELL_NAME,37,15,137,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "×Ó°²×°"
! FONT 8, "System"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Ìí¼Ó ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "É¾³ý",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "¸ü¸Ä",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "×Ó°²×°£º",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "È·¶¨",IDOK,202,145,45,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Ìí¼Ó×Ó°²×°"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,62,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,62,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "È·¶¨",IDOK,22,53,45,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "°ïÖú",9,167,53,45,14
!     LTEXT           "¹²ÏíÃû£º",IDC_STATIC,18,10,41,8
!     LTEXT           "Â·¾¶Ãû£º",IDC_STATIC,18,25,41,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "µÇÂ¼½øÈë»òÍË³ö AFS"
!     ID_SERVER_STATUS        "¼ì²é·þÎñÆ÷"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "²»ÄÜÇå²Ö»î¶¯µÄÎÄ¼þ %o"
!     IDS_FLUSH_ERROR         "Çå²ÖÎÄ¼þ %o ³ö´í£º %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "³É¹¦Çå²ÖÑ¡¶¨µÄÎÄ¼þ"
!     IDS_CANT_GET_CELL       "È·¶¨µ¥Ôª³ö´í£º"
!     IDS_FLUSH_VOLUME_ERROR  "Çå²Ö %o µÄ¾í³ö´í£º%s"
!     IDS_FLUSH_VOLUME_OK     "Çå²Ö¾í³É¹¦"
!     IDS_WHERE_IS            "ÎÄ¼þ %o ÔÚÖ÷»ú %s ÉÏ"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "²»ÄÜÇå³ýÎÄ¼þ %o µÄ ACL£ºDFS ´æÈ¡ÁÐ±í²»Ö§³ÖÇå³ý Acl"
!     IDS_ACL_IS_FINE         "%o ´æÈ¡ÁÐ±í¿ÉÓÃ"
!     IDS_CLEANACL_INVALID_ARG 
!                             "²»ÄÜÇå³ýÎÄ¼þ %o µÄ ACL£ºÎÞÐ§±äÁ¿,¿ÉÄÜµÄÔ­Òò°üÀ¨£ºÎÄ¼þ²»ÔÚ vice ÖÐ»ò´æÈ¡¿ØÖÆ±íÖÐÓÃ»§Ì«¶à"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "ÒÑÉ¾³ý¹ýÊ±µÄ ACL ÌõÄ¿¡£"
!     ID_SUBMOUNTS            "´´½¨»òÉ¾³ýÒ»¸ö AFS ×Ó°²×°"
!     IDS_GETRIGHTS_ERROR     "ÎÞ·¨¶ÁÈ¡Ä¿Â¼ %o µÄ´æÈ¡ÁÐ±í£º%o"
!     IDS_DFSACL_ERROR        "²»ÄÜÓÃ´ËÃüÁî±à¼­ DFS ACL"
!     IDS_SAVE_ACL_ERROR      "²»ÄÜ±£´æ %o µÄ ACL£º%o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "²»ÄÜ±£´æ %o µÄ ACL£ºÎÞÐ§±äÁ¿£¬¿ÉÄÜµÄÔ­Òò°üÀ¨£ºÎÄ¼þ²»ÔÚ AFS ÖÐ£¬»ò´æÈ¡¿ØÖÆ±íÖÐÓÃ»§Ì«¶à£¬Çë³¢ÊÔÌí¼Ó·ÇÏÖÓÐÓÃ»§ÖÁ´æÈ¡¿ØÖÆ±íÖÐ"
!     IDS_ACL_READ_ERROR      "²»ÄÜ¶ÁÈ¡ %o µÄ ACL£º%o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "²»ÄÜÎªÄ¿Â¼ %o ¸´ÖÆ ACL£ºDFS ´æÈ¡ÁÐ±í²»Ö§³Ö¸´ÖÆ ACL"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "²»ÄÜ¸´ÖÆ ACL ÖÁÄ¿Â¼ %o£ºÎÞÐ§±äÁ¿£¬¿ÉÄÜµÄÔ­Òò°üÀ¨£ºÎÄ¼þ²»ÔÚ AFS ÖÐ¡£"
!     IDS_COPY_ACL_ERROR      "²»ÄÜ¸´ÖÆ ACL ÖÁ %o£º%o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o ²»ÊÇÒ»¸ö°²×°µã¡£"
!     IDS_LIST_MOUNT_POINT_ERROR "³ö´í£º%o"
!     IDS_MAKE_MP_NOT_AFS_ERROR "°²×°µã±ØÐë´´½¨ÔÚ AFS ÎÄ¼þÏµÍ³ÖÐ"
!     IDS_MOUNT_POINT_ERROR   "´´½¨°²×°µã³ö´í£º%o"
!     IDS_ERROR               "³ö´í£º%o"
!     IDS_DELETED             "³É¹¦É¾³ý"
!     IDS_SET_QUOTA_ERROR     "ÉèÖÃÏÞ¶î³ö´í£º%o"
!     ID_SUBMOUNTS_CREATE     "´´½¨Ò»¸ö AFS ×Ó°²×°"
!     ID_SUBMOUNTS_EDIT       "Ìí¼Ó¡¢¸ü¸Ä»òÉ¾³ý AFS ×Ó°²×°"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "¼ì²éÎÄ¼þ·þÎñÆ÷µÄ×´Ì¬³ö´í£º %o"
!     IDS_ALL_SERVERS_RUNNING "ËùÓÐ·þÎñÆ÷ÕýÔÚÔËÐÐ¡£"
!     IDS_CHECK_VOLUMES_OK    "ÒÑ¼ì²éËùÓÐ¾í±êÊ¶·û£¯Ãû³ÆÓ³Éä¡£"
!     IDS_CHECK_VOLUMES_ERROR "¼ì²é¾í±êÊ¶·û£¯Ãû³ÆÓ³Éä³ö´í£º %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE "ÄúËùÑ¡ÔñµÄÃû³ÆÔÚÊ¹ÓÃÖÐ¡£ÇëÊäÈëÒ»¸ö²»Í¬µÄÃû³Æ¡£"
!     IDS_REALLY_DEL_MOUNT_POINTS "È·ÈÏÄúÒª³ýÈ¥Ñ¡¶¨µÄ°²×°µãÂð?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "Ä¿Â¼¡®%o¡¯²»´æÔÚ¡£"
!     IDS_CLEANACL_MSG        "½«É¾³ý¹ýÊ±µÄ ACL!"
!     IDS_COPY_ACL_OK         "ACL ¸´ÖÆ³É¹¦¡£"
!     IDS_GET_TOKENS_NO_AFS_SERVICE "²»ÄÜ¶ÁÈ¡ÁîÅÆÐÅÏ¢£ºAFS ·þÎñ¿ÉÄÜÃ»ÓÐÆô¶¯¡£"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "²»ÄÜ¶ÁÈ¡ÁîÅÆÐÅÏ¢£º²»¿ÉÔ¤¼ÆµÄ´íÎó£¬´úÂë %d¡£"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "²»ÄÜ¶ÁÈ¡ÁîÅÆÐÅÏ¢£º²»¿ÉÔ¤¼ÆµÄ´íÎó£¬·þÎñ %s.%s.%s£¬´úÂë %d¡£"
!     IDS_ENTER_QUOTA         "ÇëÊäÈëÒ»¸öÓÐÐ§µÄÏÞ¶î¡£"
!     IDS_AUTHENTICATION_ITEM "ÈÏÖ¤(&A)..."
!     IDS_ACLS_ITEM           "´æÈ¡¿ØÖÆ±í(&C)..."
!     IDS_VOL_PART_ITEM       "¾í£¯·ÖÇø(&V)"
!     IDS_VOL_PART_PROPS_ITEM "ÌØÐÔ(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "Ë¢ÐÂÃû³Æ£¯±êÊ¶·ûÓ³Éä(&R)"
!     IDS_MOUNT_POINT_ITEM    "°²×°µã(&M)"
!     IDS_MP_SHOW_ITEM        "ÏÔÊ¾(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS ¿Í»§»ú"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "³ýÈ¥(&R)..."
!     IDS_MP_MAKE_ITEM        "¶¨ÖÆ(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "Çå²ÖÎÄ¼þ£¯Ä¿Â¼(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "Çå²Ö¾í(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "ÏÔÊ¾ÎÄ¼þ·þÎñÆ÷(&F)..."
!     IDS_SHOW_CELL_ITEM      "ÏÔÊ¾µ¥Ôª(&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "ÏÔÊ¾·þÎñÆ÷×´Ì¬..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "×Ó°²×°(&B)"
!     IDS_GET_SUBMT_INFO_ERROR "ÎÞ·¨¶ÁÈ¡ÓÐ¹Ø¹²ÏíÃû %o µÄ×Ó°²×°ÐÅÏ¢¡£"
!     IDS_REALLY_DELETE_SUBMT "É¾³ý¹²ÏíÃû %o Âð?"
!     IDS_SUBMT_SAVE_FAILED   "¶ÔÓÚ×Ó°²×°Êý¾Ý¿âµÄ¸ü¸ÄÊ§°Ü¡£"
!     IDS_SUBMOUNTS_CREATE_ITEM "Ìí¼Ó(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "±à¼­(&E)..."
!     IDS_EDIT_PATH_NAME      "±à¼­Â·¾¶Ãû"
!     IDS_SHOW_CELL           "ÏÔÊ¾µ¥Ôª"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "µ¥Ôª"
!     IDS_SHOW_FS             "ÏÔÊ¾ÎÄ¼þ·þÎñÆ÷"
!     IDS_SHOW_FS_COLUMN      "ÎÄ¼þ·þÎñÆ÷"
!     IDS_REMOVE_MP           "³ýÈ¥°²×°µã"
!     IDS_REMOVE_MP_COLUMN    "½á¹û"
! END
! 
! #endif    // Chinese (P.R.C.) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE 9, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
--- 7,638 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Chinese (P.R.C.) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
! #ifdef _WIN32
! LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE 
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 9, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE 
! BEGIN
!     MENUITEM "ÈÏÖ¤...",                     IDM_AUTHENTICATION
!     MENUITEM "´æÈ¡¿ØÖÆ±í...",               IDM_ACL_SET
!     POPUP "¾í£¯·ÖÇø(&V)"
!     BEGIN
!         MENUITEM "ÌØÐÔ(&P)...",                 IDM_VOLUME_PROPERTIES
!         MENUITEM "Ë¢ÐÂÃû³Æ£¯±êÊ¶·ûÓ³Éä(&R)",    IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "°²×°µã(&M)"
!     BEGIN
!         MENUITEM "ÏÔÊ¾(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "³ýÈ¥(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "¶¨ÖÆ(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "Çå²ÖÎÄ¼þ£¯Ä¿Â¼(&F)",          IDM_FLUSH
!     MENUITEM "Çå²Ö¾í(&U)",                  IDM_FLUSH_VOLUME
!     MENUITEM "ÏÔÊ¾ÎÄ¼þ·þÎñÆ÷(&F)...",       IDM_SHOW_SERVER
!     MENUITEM "ÏÔÊ¾µ¥Ôª(&C)...",             IDM_SHOWCELL
!     MENUITEM "ÏÔÊ¾·þÎñÆ÷×´Ì¬...",           IDM_SERVER_STATUS
!     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "¾íÐÅÏ¢"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "È·¶¨",IDOK,60,150,50,14,WS_DISABLED
!     PUSHBUTTON      "°ïÖú",9,240,150,50,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,150,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ÎÄ¼þ/Ä¿Â¼",IDC_STATIC,10,10,44,10
!     LTEXT           "Ãû³Æ",IDC_STATIC,90,10,20,8
!     LTEXT           "ÏÞ¶î",IDC_STATIC,225,10,19,8
!     LTEXT           "ÒÑÊ¹ÓÃ",IDC_STATIC,270,10,24,8
!     LTEXT           "ÒÑÊ¹ÓÃ %",IDC_STATIC,305,10,34,8
!     LTEXT           "±êÊ¶·û",IDC_STATIC,175,10,29,8
!     LTEXT           "ÐÂÏÞ¶î£º",IDC_STATIC,10,127,40,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "ÏÔÊ¾·ÖÇøÐÅÏ¢",IDC_PARTITION_INFO,205,125,69,14,
!                     WS_DISABLED
!     LTEXT           "Ç§×Ö½Ú",IDC_STATIC,118,127,25,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP | 
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | 
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÉèÖÃ AFS ACL"
! FONT 8, "System"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | 
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - ¶ÁÈ¡",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - Ð´Èë",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - ²é±í",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - É¾³ý",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - ²åÈë",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Ëø¶¨",IDC_LOCK,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - ¹ÜÀí",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,200,141,55,10
!     PUSHBUTTON      "Ìí¼Ó(&A)...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "³ýÈ¥(&R)",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "Çå³ý(&C)",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "È·¶¨(&O)",IDOK,270,150,45,14
!     PUSHBUTTON      "È¡Ïû(&N)",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "°ïÖú(&H)",9,270,201,45,14
!     LTEXT           "Ä¿Â¼£º",IDC_STATIC,15,12,30,10
!     GROUPBOX        "Ðí¿ÉÈ¨",IDC_STATIC,195,41,65,115
!     LTEXT           "Õý³£",IDC_STATIC,10,30,23,8
!     LTEXT           "Ãû³Æ",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "Ðí¿ÉÈ¨",IDC_STATIC,10,38,37,8
!     LTEXT           "ä¯ÀÀ",IDC_STATIC,10,125,30,8
!     LTEXT           "Ðí¿ÉÈ¨",IDC_STATIC,10,133,38,8
!     LTEXT           "Ãû³Æ",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "¸´ÖÆ(&P)...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¶¨ÖÆ°²×°µã"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È·¶¨",IDOK,20,81,50,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "°ïÖú",9,150,81,50,14
!     LTEXT           "Ä¿Â¼£º",IDC_STATIC,5,12,30,10
!     LTEXT           "¾í£º",IDC_STATIC,5,27,30,10
!     LTEXT           "µ¥Ôª£º",IDC_STATIC,5,42,30,10
!     GROUPBOX        "",IDC_STATIC,40,52,115,20
!     LTEXT           "Ñ¡Ïî£º",IDC_STATIC,5,57,30,10
!     CONTROL         "¹æÔò",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,45,59,41,10
!     CONTROL         "¶ÁÈ¡£¯Ð´Èë",IDC_RW,"Button",BS_AUTORADIOBUTTON,100,59,
!                     50,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Ìí¼Ó ACL ÌõÄ¿"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_NAME,41,70,184,12,ES_AUTOHSCROLL
!     CONTROL         "r - ¶ÁÈ¡",IDC_READ,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - ²é±í",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - ²åÈë",IDC_INSERT,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - É¾³ý",IDC_DELETE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - Ð´Èë",IDC_WRITE,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Ëø¶¨",IDC_LOCK2,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - ¹ÜÀí",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX | 
!                     WS_TABSTOP,80,35,60,10
!     CONTROL         "Ò»°ãÌõÄ¿",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,54,10
!     CONTROL         "ä¯ÀÀÌõÄ¿",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,59,10
!     PUSHBUTTON      "È·¶¨",IDOK,22,90,50,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,92,90,50,14
!     PUSHBUTTON      "°ïÖú",9,162,90,50,14
!     LTEXT           "Ãû³Æ£º",IDC_STATIC,10,72,26,8
!     GROUPBOX        "Ðí¿ÉÈ¨",IDC_STATIC,10,5,135,55
!     GROUPBOX        "ÌõÄ¿ÀàÐÍ",IDC_STATIC,155,6,70,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "·ÖÇøÐÅÏ¢"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,50,10,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,50,25,40,12,ES_AUTOHSCROLL | WS_DISABLED | 
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,50,40,40,12,ES_AUTOHSCROLL | 
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,14,62,40,14
!     PUSHBUTTON      "°ïÖú",9,69,62,40,14
!     LTEXT           "ÒÑÊ¹ÓÃ %£º",IDC_STATIC,5,42,40,8
!     LTEXT           "¿ÕÏÐ¿é£º",IDC_STATIC,5,27,40,8
!     LTEXT           "×Ü¼Æ´óÐ¡£º",IDC_STATIC,5,12,40,8
!     LTEXT           "Ç§×Ö½Ú",IDC_STATIC,92,12,25,8
!     LTEXT           "Ç§×Ö½Ú",IDC_STATIC,92,27,25,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸´ÖÆ ACL"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ä¯ÀÀ",IDC_BROWSE,195,25,35,15
!     CONTROL         "Çå³ýµ±Ç°ÌõÄ¿£º",IDC_CLEAR,"Button",BS_AUTOCHECKBOX | 
!                     BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "È·¶¨",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "°ïÖú",9,170,65,50,14
!     LTEXT           "¸´ÖÆ×Ô£º",IDC_STATIC,15,12,35,8
!     LTEXT           "¸´ÖÆµ½£º",IDC_STATIC,15,29,35,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Î»ÖÃ"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,65,145,50,14
!     PUSHBUTTON      "°ïÖú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÎÄ¼þ/Ä¿Â¼",IDC_STATIC,10,10,47,8
!     LTEXT           "ÎÄ¼þ·þÎñÆ÷",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "½á¹û"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,65,145,50,14
!     PUSHBUTTON      "°ïÖú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÎÄ¼þ/Ä¿Â¼",-1,10,10,45,8
!     LTEXT           "½á¹û",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "°²×°µã"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "¹Ø±Õ",IDOK,65,145,50,14
!     PUSHBUTTON      "°ïÖú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     LTEXT           "ÎÄ¼þ",IDC_STATIC,10,11,27,8
!     LTEXT           "¾í",IDC_STATIC,75,11,27,8
!     LTEXT           "µ¥Ôª",IDC_STATIC,155,11,27,8
!     LTEXT           "ÀàÐÍ",IDC_STATIC,230,11,27,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¹Ø±ÕµÄ·þÎñÆ÷"
! FONT 8, "System"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "ÕâÐ©·þÎñÆ÷ÈÔÈ»¹Ø±Õ×Å£º",IDC_STATIC,10,10,95,8
!     DEFPUSHBUTTON   "È·¶¨",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
!     WS_SYSMENU
! CAPTION "·þÎñÆ÷×´Ì¬"
! FONT 8, "System"
! BEGIN
!     CONTROL         "±¾µØµ¥Ôª",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP | WS_TABSTOP,20,20,50,8
!     CONTROL         "Ö¸¶¨µÄµ¥Ôª£º",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,60,10
!     CONTROL         "ËùÓÐµ¥Ôª",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON | 
!                     WS_TABSTOP,20,65,45,10
!     CONTROL         "²»¼ì²â·þÎñÆ÷",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,80,10
!     PUSHBUTTON      "ÏÔÊ¾×´Ì¬",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "µ¥Ôª",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,90,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "¹Ø±Õ",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "°ïÖú",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "ÈÏÖ¤"
! FONT 8, "System"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS | 
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | 
!                     WS_TABSTOP
!     PUSHBUTTON      "»ñµÃÁîÅÆ",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "¶ªÆúÁîÅÆ",ID_DISCARD_TOKENS,80,137,55,14
!     PUSHBUTTON      "¹Ø±Õ",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "°ïÖú",9,215,137,55,14
!     LTEXT           "ÓÃ»§Ãû",IDC_STATIC,10,9,38,8
!     LTEXT           "µ¥ÔªÃû",IDC_STATIC,104,9,33,8
!     LTEXT           "µ½ÆÚ",IDC_STATIC,222,9,32,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "»ñµÃÁîÅÆ"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "È·¶¨",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "°ïÖú",9,120,70,35,14
!     LTEXT           "Ãû³Æ£º",IDC_STATIC,10,12,27,8
!     LTEXT           "¿ÚÁî£º",IDC_STATIC,10,32,27,8
!     LTEXT           "µ¥Ôª£º",IDC_STATIC,10,52,27,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "¶ªÆúÁîÅÆ"
! FONT 8, "System"
! BEGIN
!     DEFPUSHBUTTON   "È·¶¨",IDOK,25,40,35,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,75,40,35,14
!     PUSHBUTTON      "°ïÖú",9,125,40,35,14
!     LTEXT           "µ¥Ôª£º",IDC_STATIC,10,17,24,8
!     EDITTEXT        IDC_CELL_NAME,37,15,137,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "×Ó°²×°"
! FONT 8, "System"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT | 
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "Ìí¼Ó ",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "É¾³ý",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "¸ü¸Ä",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "×Ó°²×°£º",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "È·¶¨",IDOK,202,145,45,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Ìí¼Ó×Ó°²×°"
! FONT 8, "System"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,62,8,163,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,62,23,163,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "È·¶¨",IDOK,22,53,45,14
!     PUSHBUTTON      "È¡Ïû",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "°ïÖú",9,167,53,45,14
!     LTEXT           "¹²ÏíÃû£º",IDC_STATIC,18,10,41,8
!     LTEXT           "Â·¾¶Ãû£º",IDC_STATIC,18,25,41,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE 
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "µÇÂ¼½øÈë»òÍË³ö AFS"
!     ID_SERVER_STATUS        "¼ì²é·þÎñÆ÷"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "²»ÄÜÇå²Ö»î¶¯µÄÎÄ¼þ %o"
!     IDS_FLUSH_ERROR         "Çå²ÖÎÄ¼þ %o ³ö´í£º %s"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_FLUSH_OK            "³É¹¦Çå²ÖÑ¡¶¨µÄÎÄ¼þ"
!     IDS_CANT_GET_CELL       "È·¶¨µ¥Ôª³ö´í£º"
!     IDS_FLUSH_VOLUME_ERROR  "Çå²Ö %o µÄ¾í³ö´í£º%s"
!     IDS_FLUSH_VOLUME_OK     "Çå²Ö¾í³É¹¦"
!     IDS_WHERE_IS            "ÎÄ¼þ %o ÔÚÖ÷»ú %s ÉÏ"
!     IDS_CLEANACL_NOT_SUPPORTED 
!                             "²»ÄÜÇå³ýÎÄ¼þ %o µÄ ACL£ºDFS ´æÈ¡ÁÐ±í²»Ö§³ÖÇå³ý Acl"
!     IDS_ACL_IS_FINE         "%o ´æÈ¡ÁÐ±í¿ÉÓÃ"
!     IDS_CLEANACL_INVALID_ARG 
!                             "²»ÄÜÇå³ýÎÄ¼þ %o µÄ ACL£ºÎÞÐ§±äÁ¿,¿ÉÄÜµÄÔ­Òò°üÀ¨£ºÎÄ¼þ²»ÔÚ vice ÖÐ»ò´æÈ¡¿ØÖÆ±íÖÐÓÃ»§Ì«¶à"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "ÒÑÉ¾³ý¹ýÊ±µÄ ACL ÌõÄ¿¡£"
!     ID_SUBMOUNTS            "´´½¨»òÉ¾³ýÒ»¸ö AFS ×Ó°²×°"
!     IDS_GETRIGHTS_ERROR     "ÎÞ·¨¶ÁÈ¡Ä¿Â¼ %o µÄ´æÈ¡ÁÐ±í£º%o"
!     IDS_DFSACL_ERROR        "²»ÄÜÓÃ´ËÃüÁî±à¼­ DFS ACL"
!     IDS_SAVE_ACL_ERROR      "²»ÄÜ±£´æ %o µÄ ACL£º%o"
!     IDS_SAVE_ACL_EINVAL_ERROR 
!                             "²»ÄÜ±£´æ %o µÄ ACL£ºÎÞÐ§±äÁ¿£¬¿ÉÄÜµÄÔ­Òò°üÀ¨£ºÎÄ¼þ²»ÔÚ AFS ÖÐ£¬»ò´æÈ¡¿ØÖÆ±íÖÐÓÃ»§Ì«¶à£¬Çë³¢ÊÔÌí¼Ó·ÇÏÖÓÐÓÃ»§ÖÁ´æÈ¡¿ØÖÆ±íÖÐ"
!     IDS_ACL_READ_ERROR      "²»ÄÜ¶ÁÈ¡ %o µÄ ACL£º%o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "²»ÄÜÎªÄ¿Â¼ %o ¸´ÖÆ ACL£ºDFS ´æÈ¡ÁÐ±í²»Ö§³Ö¸´ÖÆ ACL"
!     IDS_COPY_ACL_EINVAL_ERROR 
!                             "²»ÄÜ¸´ÖÆ ACL ÖÁÄ¿Â¼ %o£ºÎÞÐ§±äÁ¿£¬¿ÉÄÜµÄÔ­Òò°üÀ¨£ºÎÄ¼þ²»ÔÚ AFS ÖÐ¡£"
!     IDS_COPY_ACL_ERROR      "²»ÄÜ¸´ÖÆ ACL ÖÁ %o£º%o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o ²»ÊÇÒ»¸ö°²×°µã¡£"
!     IDS_LIST_MOUNT_POINT_ERROR "³ö´í£º%o"
!     IDS_MAKE_MP_NOT_AFS_ERROR "°²×°µã±ØÐë´´½¨ÔÚ AFS ÎÄ¼þÏµÍ³ÖÐ"
!     IDS_MOUNT_POINT_ERROR   "´´½¨°²×°µã³ö´í£º%o"
!     IDS_ERROR               "³ö´í£º%o"
!     IDS_DELETED             "³É¹¦É¾³ý"
!     IDS_SET_QUOTA_ERROR     "ÉèÖÃÏÞ¶î³ö´í£º%o"
!     ID_SUBMOUNTS_CREATE     "´´½¨Ò»¸ö AFS ×Ó°²×°"
!     ID_SUBMOUNTS_EDIT       "Ìí¼Ó¡¢¸ü¸Ä»òÉ¾³ý AFS ×Ó°²×°"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "¼ì²éÎÄ¼þ·þÎñÆ÷µÄ×´Ì¬³ö´í£º %o"
!     IDS_ALL_SERVERS_RUNNING "ËùÓÐ·þÎñÆ÷ÕýÔÚÔËÐÐ¡£"
!     IDS_CHECK_VOLUMES_OK    "ÒÑ¼ì²éËùÓÐ¾í±êÊ¶·û£¯Ãû³ÆÓ³Éä¡£"
!     IDS_CHECK_VOLUMES_ERROR "¼ì²é¾í±êÊ¶·û£¯Ãû³ÆÓ³Éä³ö´í£º %o"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE "ÄúËùÑ¡ÔñµÄÃû³ÆÔÚÊ¹ÓÃÖÐ¡£ÇëÊäÈëÒ»¸ö²»Í¬µÄÃû³Æ¡£"
!     IDS_REALLY_DEL_MOUNT_POINTS "È·ÈÏÄúÒª³ýÈ¥Ñ¡¶¨µÄ°²×°µãÂð?"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "Ä¿Â¼¡®%o¡¯²»´æÔÚ¡£"
!     IDS_CLEANACL_MSG        "½«É¾³ý¹ýÊ±µÄ ACL!"
!     IDS_COPY_ACL_OK         "ACL ¸´ÖÆ³É¹¦¡£"
!     IDS_GET_TOKENS_NO_AFS_SERVICE "²»ÄÜ¶ÁÈ¡ÁîÅÆÐÅÏ¢£ºAFS ·þÎñ¿ÉÄÜÃ»ÓÐÆô¶¯¡£"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR 
!                             "²»ÄÜ¶ÁÈ¡ÁîÅÆÐÅÏ¢£º²»¿ÉÔ¤¼ÆµÄ´íÎó£¬´úÂë %d¡£"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2 
!                             "²»ÄÜ¶ÁÈ¡ÁîÅÆÐÅÏ¢£º²»¿ÉÔ¤¼ÆµÄ´íÎó£¬·þÎñ %s.%s.%s£¬´úÂë %d¡£"
!     IDS_ENTER_QUOTA         "ÇëÊäÈëÒ»¸öÓÐÐ§µÄÏÞ¶î¡£"
!     IDS_AUTHENTICATION_ITEM "ÈÏÖ¤(&A)..."
!     IDS_ACLS_ITEM           "´æÈ¡¿ØÖÆ±í(&C)..."
!     IDS_VOL_PART_ITEM       "¾í£¯·ÖÇø(&V)"
!     IDS_VOL_PART_PROPS_ITEM "ÌØÐÔ(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "Ë¢ÐÂÃû³Æ£¯±êÊ¶·ûÓ³Éä(&R)"
!     IDS_MOUNT_POINT_ITEM    "°²×°µã(&M)"
!     IDS_MP_SHOW_ITEM        "ÏÔÊ¾(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS ¿Í»§»ú"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_MP_REMOVE_ITEM      "³ýÈ¥(&R)..."
!     IDS_MP_MAKE_ITEM        "¶¨ÖÆ(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "Çå²ÖÎÄ¼þ£¯Ä¿Â¼(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "Çå²Ö¾í(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "ÏÔÊ¾ÎÄ¼þ·þÎñÆ÷(&F)..."
!     IDS_SHOW_CELL_ITEM      "ÏÔÊ¾µ¥Ôª(&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "ÏÔÊ¾·þÎñÆ÷×´Ì¬..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "×Ó°²×°(&B)"
!     IDS_GET_SUBMT_INFO_ERROR "ÎÞ·¨¶ÁÈ¡ÓÐ¹Ø¹²ÏíÃû %o µÄ×Ó°²×°ÐÅÏ¢¡£"
!     IDS_REALLY_DELETE_SUBMT "É¾³ý¹²ÏíÃû %o Âð?"
!     IDS_SUBMT_SAVE_FAILED   "¶ÔÓÚ×Ó°²×°Êý¾Ý¿âµÄ¸ü¸ÄÊ§°Ü¡£"
!     IDS_SUBMOUNTS_CREATE_ITEM "Ìí¼Ó(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "±à¼­(&E)..."
!     IDS_EDIT_PATH_NAME      "±à¼­Â·¾¶Ãû"
!     IDS_SHOW_CELL           "ÏÔÊ¾µ¥Ôª"
! END
! 
! STRINGTABLE DISCARDABLE 
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "µ¥Ôª"
!     IDS_SHOW_FS             "ÏÔÊ¾ÎÄ¼þ·þÎñÆ÷"
!     IDS_SHOW_FS_COLUMN      "ÎÄ¼þ·þÎñÆ÷"
!     IDS_REMOVE_MP           "³ýÈ¥°²×°µã"
!     IDS_REMOVE_MP_COLUMN    "½á¹û"
! END
! 
! #endif    // Chinese (P.R.C.) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
! #ifdef _WIN32
! LANGUAGE 9, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
Index: openafs/src/WINNT/client_exp/lang/zh_TW/afs_shl_ext.rc
diff -c openafs/src/WINNT/client_exp/lang/zh_TW/afs_shl_ext.rc:1.2 openafs/src/WINNT/client_exp/lang/zh_TW/afs_shl_ext.rc:1.2.8.1
*** openafs/src/WINNT/client_exp/lang/zh_TW/afs_shl_ext.rc:1.2	Sat Nov  4 05:02:59 2000
--- openafs/src/WINNT/client_exp/lang/zh_TW/afs_shl_ext.rc	Wed Dec  4 09:26:04 2002
***************
*** 7,638 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Chinese (Taiwan) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
! #ifdef _WIN32
! LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 4, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE
! BEGIN
!     MENUITEM "Å²§O...",                     IDM_AUTHENTICATION
!     MENUITEM "¦s¨ú±±¨î²M³æ...",             IDM_ACL_SET
!     POPUP "®eÅé/¤À³Î°Ï(&V)"
!     BEGIN
!         MENUITEM "¤º®e(&P)...",                 IDM_VOLUME_PROPERTIES
!         MENUITEM "­«·s¾ã²z¦WºÙ/ID ¹ïÀ³(&R)",    IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "¸Ë¸üÂI(&M)"
!     BEGIN
!         MENUITEM "Åã¥Ü(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "²¾°£(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "»s§@(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "¨R¼gÀÉ®×/¥Ø¿ý(&F)",           IDM_FLUSH
!     MENUITEM "¨R¼g®eÅé(&U)",                IDM_FLUSH_VOLUME
!     MENUITEM "Åã¥ÜÀÉ®×¦øªA¾¹(&F)...",       IDM_SHOW_SERVER
!     MENUITEM "Åã¥Ü Cell (&C)...",           IDM_SHOWCELL
!     MENUITEM "Åã¥Ü¦øªA¾¹ª¬ºA...",           IDM_SERVER_STATUS
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
!     WS_SYSMENU
! CAPTION "®eÅé¸ê°T"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "½T©w",IDOK,55,150,50,14,WS_DISABLED
!     PUSHBUTTON      "»¡©ú",9,235,150,50,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,145,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ÀÉ®× / ¥Ø¿ý",IDC_STATIC,10,10,44,10
!     LTEXT           "¦WºÙ",IDC_STATIC,90,10,20,8
!     LTEXT           "°tÃB",IDC_STATIC,225,10,19,8
!     LTEXT           "¤w¨Ï¥Îªº",IDC_STATIC,270,10,20,8
!     LTEXT           "¤w¨Ï¥Îªº % (U)",IDC_STATIC,305,10,25,8
!     LTEXT           "ID",IDC_STATIC,175,10,10,8
!     LTEXT           "·s°tÃB¡G",IDC_STATIC,10,127,40,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "Åã¥Ü¤À³Î°Ï¸ê°T",IDC_PARTITION_INFO,216,125,69,14,
!                     WS_DISABLED
!     LTEXT           "¤d¦ì¤¸²Õ",IDC_STATIC,122,128,51,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP |
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS |
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "³]©w AFS ACL"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL |
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL |
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Åª¨ú",IDC_READ,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - ¼g¤J",IDC_WRITE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - ¬d¾\",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - §R°£",IDC_DELETE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - ´¡¤J",IDC_INSERT,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Âê©w",IDC_LOCK,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - ºÞ²zªÌ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,141,55,10
!     PUSHBUTTON      "·s¼W(&A)...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "²¾°£(&R)",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "²M°£(&C)",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "½T©w(&O)",IDOK,270,150,45,14
!     PUSHBUTTON      "¨ú®ø(&N)",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "»¡©ú(&H)",9,270,201,45,14
!     LTEXT           "¥Ø¿ý¡G",IDC_STATIC,15,12,30,10
!     GROUPBOX        "³\¥iÅv",IDC_STATIC,195,41,65,115
!     LTEXT           "¤@¯ë",IDC_STATIC,10,30,23,8
!     LTEXT           "¦WºÙ",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "³\¥iÅv",IDC_STATIC,10,38,37,8
!     LTEXT           "­t­±ªº",IDC_STATIC,10,125,30,8
!     LTEXT           "³\¥iÅv",IDC_STATIC,10,133,38,8
!     LTEXT           "¦WºÙ",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "½Æ»s(&P)...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "»s§@¸Ë¸üÂI"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "½T©w",IDOK,20,81,50,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "»¡©ú",9,150,81,50,14
!     LTEXT           "¥Ø¿ý¡G",IDC_STATIC,9,12,30,10
!     LTEXT           "®eÅé¡G",IDC_STATIC,9,28,25,10
!     LTEXT           "Cell¡G",IDC_STATIC,9,42,26,10
!     GROUPBOX        "",IDC_STATIC,40,52,115,20
!     LTEXT           "¿ï¶µ¡G",IDC_STATIC,9,59,25,10
!     CONTROL         "¼Ð·Ç",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON |
!                     WS_GROUP,45,59,41,10
!     CONTROL         "Åª¨ú / ¼g¤J",IDC_RW,"Button",BS_AUTORADIOBUTTON,100,59,
!                     54,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "·s¼W ACL ¶µ¥Ø"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_NAME,41,70,184,12,ES_AUTOHSCROLL
!     CONTROL         "r - Åª¨ú",IDC_READ,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - ¬d¾\",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - ´¡¤J",IDC_INSERT,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - §R°£",IDC_DELETE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - ¼g¤J",IDC_WRITE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Âê©w",IDC_LOCK2,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - ºÞ²zªÌ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,80,35,60,10
!     CONTROL         "¤@¯ë¶µ¥Ø",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,54,10
!     CONTROL         "­t­±ªº¶µ¥Ø",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,59,10
!     PUSHBUTTON      "½T©w",IDOK,36,90,50,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,106,90,50,14
!     PUSHBUTTON      "»¡©ú",9,173,90,50,14
!     LTEXT           "¦WºÙ¡G",IDC_STATIC,10,72,27,8
!     GROUPBOX        "³\¥iÅv",IDC_STATIC,10,5,135,55
!     GROUPBOX        "¶µ¥ØÃþ«¬",IDC_STATIC,155,6,70,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¤À³Î°Ï¸ê°T"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,51,10,34,12,ES_AUTOHSCROLL | WS_DISABLED |
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,51,25,34,12,ES_AUTOHSCROLL | WS_DISABLED |
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,51,40,34,12,ES_AUTOHSCROLL |
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,14,62,40,14
!     PUSHBUTTON      "»¡©ú",9,69,62,40,14
!     LTEXT           "¤w¨Ï¥Îªº %¡G",IDC_STATIC,4,42,51,8
!     LTEXT           "¥i¥Î°Ï¶ô¡G",IDC_STATIC,4,27,40,8
!     LTEXT           "Á`­p¤j¤p¡G",IDC_STATIC,4,12,46,8
!     LTEXT           "K ¦ì¤¸²Õ",IDC_STATIC,89,12,32,8
!     LTEXT           "K ¦ì¤¸²Õ",IDC_STATIC,88,27,31,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "½Æ»s ACL"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ÂsÄý",IDC_BROWSE,195,25,35,15
!     CONTROL         "²M°£¥Ø«eªº¶µ¥Ø¡G",IDC_CLEAR,"Button",BS_AUTOCHECKBOX |
!                     BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "½T©w",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "»¡©ú",9,170,65,50,14
!     LTEXT           "½Æ»s¦Û¡G",IDC_STATIC,10,12,35,8
!     LTEXT           "½Æ»s¨ì¡G",IDC_STATIC,10,29,38,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¦ó³B"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,65,145,50,14
!     PUSHBUTTON      "»¡©ú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     LTEXT           "ÀÉ®× / ¥Ø¿ý",IDC_STATIC,10,10,47,8
!     LTEXT           "ÀÉ®×¦øªA¾¹",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "µ²ªG"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,65,145,50,14
!     PUSHBUTTON      "»¡©ú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     LTEXT           "ÀÉ®× / ¥Ø¿ý",-1,10,10,45,8
!     LTEXT           "µ²ªG",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸Ë¸üÂI"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,65,145,50,14
!     PUSHBUTTON      "»¡©ú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     LTEXT           "ÀÉ®×",IDC_STATIC,12,11,32,8
!     LTEXT           "®eÅé",IDC_STATIC,75,11,27,8
!     LTEXT           "Cell",IDC_STATIC,155,11,15,8
!     LTEXT           "Ãþ«¬",IDC_STATIC,230,11,20,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¦øªA¾¹°±¤î¹B§@"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT |
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "³o¨Ç¦øªA¾¹¨ÌµM°±¤î¹B§@¡G",IDC_STATIC,10,7,147,8
!     DEFPUSHBUTTON   "½T©w",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
!     WS_SYSMENU
! CAPTION "¦øªA¾¹ª¬ºA"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     CONTROL         "¥»ºÝ Cell",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON |
!                     WS_GROUP | WS_TABSTOP,20,20,50,8
!     CONTROL         "«ü©wªº Cell¡G",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,60,10
!     CONTROL         "©Ò¦³ªº Cell",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON |
!                     WS_TABSTOP,20,65,74,10
!     CONTROL         "¤£­n±´¬d¦øªA¾¹",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,80,10
!     PUSHBUTTON      "Åã¥Üª¬ºA",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "Cell",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,90,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Ãö³¬",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "»¡©ú",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Å²§O"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     PUSHBUTTON      "¨ú±o°O¸¹",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "±Ë±ó°O¸¹",ID_DISCARD_TOKENS,80,137,55,14
!     PUSHBUTTON      "Ãö³¬",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "»¡©ú",9,215,137,55,14
!     LTEXT           "¨Ï¥ÎªÌ¦WºÙ",IDC_STATIC,10,9,51,8
!     LTEXT           "Cell ¦WºÙ",IDC_STATIC,104,9,33,8
!     LTEXT           "¹L´Á",IDC_STATIC,222,9,43,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "¨ú±o°O¸¹"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "½T©w",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "»¡©ú",9,120,70,35,14
!     LTEXT           "¦WºÙ¡G",IDC_STATIC,7,12,32,8
!     LTEXT           "±K½X¡G",IDC_STATIC,7,32,34,8
!     LTEXT           "Cell¡G",IDC_STATIC,7,52,25,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "±Ë±ó°O¸¹"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "½T©w",IDOK,29,40,35,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,79,40,35,14
!     PUSHBUTTON      "»¡©ú",9,129,40,35,14
!     LTEXT           "Cell¡G",IDC_STATIC,7,17,22,8
!     EDITTEXT        IDC_CELL_NAME,31,15,143,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¤l¸Ë¸ü"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT |
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "·s¼W",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "§R°£",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "ÅÜ§ó",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "¤l¸Ë¸ü¡G",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "½T©w",IDOK,202,145,45,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "·s¼W¤l¸Ë¸ü"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,66,8,147,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,66,23,147,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "½T©w",IDOK,22,53,45,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "»¡©ú",9,167,53,45,14
!     LTEXT           "¦@¥Î¦WºÙ¡G",IDC_STATIC,18,10,49,8
!     LTEXT           "¸ô®|¦WºÙ¡G",IDC_STATIC,19,25,43,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "µn¤J©Îµn¥X AFS"
!     ID_SERVER_STATUS        "ÀË¬d¦øªA¾¹"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "µLªk¨R¼g§@¥Î¤¤ªºÀÉ®× %o"
!     IDS_FLUSH_ERROR         "¨R¼gÀÉ®× %o ®Éµo¥Í¿ù»~¡G %s"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_FLUSH_OK            "¶¶§Q¨R¼g©Ò¿ï¨úªºÀÉ®×"
!     IDS_CANT_GET_CELL       "§PÂ_ Cell ®Éµo¥Í¿ù»~¡G"
!     IDS_FLUSH_VOLUME_ERROR  "¨R¼g %o ®eÅé®Éµo¥Í¿ù»~¡G  %s"
!     IDS_FLUSH_VOLUME_OK     "¶¶§Q¨R¼g®eÅé"
!     IDS_WHERE_IS            "ÀÉ®× %o ¦b¥D¹q¸£ %s ¤W"
!     IDS_CLEANACL_NOT_SUPPORTED
!                             "µLªk²M°£ÀÉ®× %o ªº ACL¡GDFS ¦s¨ú²M³æ¤£¤ä´©²M°£ Acl "
!     IDS_ACL_IS_FINE         "%o ªº¦s¨ú²M³æ¨S¦³°ÝÃD"
!     IDS_CLEANACL_INVALID_ARG
!                             "µLªk²M°£ÀÉ®× %o ªº ACL¡G  ¤Þ¼ÆµL®Ä¡A¥i¯àªº­ì¦]¥]¬A¡GÀÉ®×¥¼ºÞ¨î¡A©Î¬O¦s¨ú±±¨î²M³æ¤Wªº¨Ï¥ÎªÌ¤H¼Æ¹L¦h"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "¤w§R°£§@¼oªº ACL ¶µ¥Ø¡C"
!     ID_SUBMOUNTS            "«Ø¥ß©Î§R°£ AFS ¤l¸Ë¸ü"
!     IDS_GETRIGHTS_ERROR     "µLªkÅª¨ú¥Ø¿ý %o ªº¦s¨ú²M³æ¡G  %o"
!     IDS_DFSACL_ERROR        "µLªk¥H¦¹«ü¥O½s¿è DFS ACL"
!     IDS_SAVE_ACL_ERROR      "µLªkÀx¦s %o ªº ACL¡G  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR
!                             "µLªkÀx¦s %o ªº ACL¡G¤Þ¼ÆµL®Ä¡A¥i¯àªº­ì¦]¥]¬A¡GÀÉ®×¤£¦b AFS¡B¦s¨ú±±¨î²M³æ¤Wªº¨Ï¥ÎªÌ¤H¼Æ¹L¦h¡A©Î¬O¸Õ¹Ï±N¤£¦s¦bªº¨Ï¥ÎªÌ·s¼W¨ì¦s¨ú±±¨î²M³æ"
!     IDS_ACL_READ_ERROR      "µLªkÅª¨ú %o ªº ACL¡G  %o"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "µLªk±N ACL ½Æ»s¨ì¥Ø¿ý %o¡GDFS ¦s¨ú²M³æ¤£¤ä´©½Æ»s ACL "
!     IDS_COPY_ACL_EINVAL_ERROR
!                             "µLªk±N ACL ½Æ»s¨ì¥Ø¿ý %o¡G¤Þ¼ÆµL®Ä¡A¥i¯àªº­ì¦]¥]¬A¡GÀÉ®×¤£¦b AFS¡C"
!     IDS_COPY_ACL_ERROR      "µLªk±N ACL ½Æ»s¨ì %o¡G  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o ¨Ã«D¸Ë¸üÂI¡C"
!     IDS_LIST_MOUNT_POINT_ERROR "¿ù»~¡G  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR "¸Ë¸üÂI¥²¶·¦b AFS ÀÉ®×¨t²Î¤º«Ø¥ß"
!     IDS_MOUNT_POINT_ERROR   "«Ø¥ß¸Ë¸üÂI®Éµo¥Í¿ù»~¡G  %o"
!     IDS_ERROR               "¿ù»~¡G%o"
!     IDS_DELETED             "¤w¶¶§Q§R°£"
!     IDS_SET_QUOTA_ERROR     "³]©w°tÃB®Éµo¥Í¿ù»~¡G  %o"
!     ID_SUBMOUNTS_CREATE     "«Ø¥ß AFS ¤l¸Ë¸ü"
!     ID_SUBMOUNTS_EDIT       "·s¼W¡BÅÜ§ó©Î¬O§R°£ AFS ¤l¸Ë¸ü"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "ÀË¬dÀÉ®×¦øªA¾¹¾÷¾¹®Éµo¥Í¿ù»~¡G¡uAFS ¦øªA¾¹ºÞ²zµ{¦¡¡v¡G  %o"
!     IDS_ALL_SERVERS_RUNNING "©Ò¦³¦øªA¾¹³£¦b°õ¦æ¤¤¡C"
!     IDS_CHECK_VOLUMES_OK    "¤wÀË¬d©Ò¦³®eÅéID/¦WºÙ¹ïÀ³¡C"
!     IDS_CHECK_VOLUMES_ERROR "ÀË¬d®eÅéID/¦WºÙ¹ïÀ³®Éµo¥Í¿ù»~¡G  %o"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE "±z©Ò¿ï¾Üªº¦WºÙ¤w¸g¦s¦b¡C½Ð¿é¤J¤£¦Pªº¦WºÙ¡C"
!     IDS_REALLY_DEL_MOUNT_POINTS "±z½T©w­n²¾°£©Ò¿ï¨úªº¸Ë¸üÂI¶Ü¡H"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "¥Ø¿ý '%o' ¨Ã¤£¦s¦b¡C"
!     IDS_CLEANACL_MSG        "±N§R°£¤w§@¼oªº ACL ¡I"
!     IDS_COPY_ACL_OK         "¤w¶¶§Q³Æ¥÷ ACL¡C"
!     IDS_GET_TOKENS_NO_AFS_SERVICE
!                             "µLªkÅª¨ú°O¸¹¸ê°T¡GAFS ªA°Èµ{¦¡¥i¯à©|¥¼±Ò°Ê¡C"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR
!                             "µLªkÅª¨ú°O¸¹¸ê°T¡G«D¹w´Áªº¿ù»~¡Aµ{¦¡½X %d¡C"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2
!                             "µLªkÅª¨ú°O¸¹¸ê°T¡G«D¹w´Áªº¿ù»~¡AªA°Èµ{¦¡ %s.%s.%s¡Aµ{¦¡½X %d¡C"
!     IDS_ENTER_QUOTA         "½Ð¿é¤J¦³®Äªº°tÃB¡C"
!     IDS_AUTHENTICATION_ITEM "Å²§O(&A)..."
!     IDS_ACLS_ITEM           "¦s¨ú±±¨î²M³æ(&C)..."
!     IDS_VOL_PART_ITEM       "®eÅé / ¤À³Î°Ï(&V)"
!     IDS_VOL_PART_PROPS_ITEM "¤º®e(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "­«·s¾ã²z¦WºÙ/ID ¹ïÀ³(&R)"
!     IDS_MOUNT_POINT_ITEM    "¸Ë¸üÂI(&M)"
!     IDS_MP_SHOW_ITEM        "Åã¥Ü(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS ¥Î¤áºÝ"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_MP_REMOVE_ITEM      "²¾°£(&R)..."
!     IDS_MP_MAKE_ITEM        "»s§@(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "¨R¼gÀÉ®× / ¥Ø¿ý(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "¨R¼g®eÅé(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "Åã¥ÜÀÉ®×¦øªA¾¹(&F)..."
!     IDS_SHOW_CELL_ITEM      "Åã¥Ü Cell (&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "Åã¥Ü¦øªA¾¹ª¬ºA..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "¤l¸Ë¸ü(&B)"
!     IDS_GET_SUBMT_INFO_ERROR "µLªkÅª¨ú¦@¨É¦WºÙ %o ªº¤l¸Ë¸ü¸ê°T¡C"
!     IDS_REALLY_DELETE_SUBMT "§R°£¦@¨É¦WºÙ %o ¶Ü¡H"
!     IDS_SUBMT_SAVE_FAILED   "±z¹ï¤l¸Ë¸ü¸ê®Æ®w©Ò§@ªºÅÜ§óµL®Ä¡C"
!     IDS_SUBMOUNTS_CREATE_ITEM "·s¼W(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "½s¿è(&E)..."
!     IDS_EDIT_PATH_NAME      "½s¿è¸ô®|¦WºÙ"
!     IDS_SHOW_CELL           "Åã¥Ü Cell"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "Cell"
!     IDS_SHOW_FS             "Åã¥ÜÀÉ®×¦øªA¾¹"
!     IDS_SHOW_FS_COLUMN      "ÀÉ®×¦øªA¾¹"
!     IDS_REMOVE_MP           "²¾°£¸Ë¸üÂI"
!     IDS_REMOVE_MP_COLUMN    "µ²ªG"
! END
! 
! #endif    // Chinese (Taiwan) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
! #ifdef _WIN32
! LANGUAGE 4, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
--- 7,639 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
! #include "resource.h"
! 
! #define APSTUDIO_READONLY_SYMBOLS
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 2 resource.
! //
! #include "afxres.h"
! 
! /////////////////////////////////////////////////////////////////////////////
! #undef APSTUDIO_READONLY_SYMBOLS
! 
! /////////////////////////////////////////////////////////////////////////////
! // Chinese (Taiwan) resources
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
! #ifdef _WIN32
! LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
! #endif //_WIN32
! 
! #ifdef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // TEXTINCLUDE
! //
! 
! 1 TEXTINCLUDE DISCARDABLE
! BEGIN
!     "resource.h\0"
! END
! 
! 2 TEXTINCLUDE DISCARDABLE
! BEGIN
!     "#include ""afxres.h""\r\n"
!     "\0"
! END
! 
! 3 TEXTINCLUDE DISCARDABLE
! BEGIN
!     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
!     "#define _AFX_NO_OLE_RESOURCES\r\n"
!     "#define _AFX_NO_TRACKER_RESOURCES\r\n"
!     "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
!     "\r\n"
!     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)\r\n"
!     "#ifdef _WIN32\r\n"
!     "LANGUAGE 4, 1\r\n"
!     "#endif\r\n"
!     "#include ""afs_shl_ext.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
!     "#include ""afxres.rc""         // Standard components\r\n"
!     "#endif\0"
! END
! 
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Menu
! //
! 
! IDR_MENU_FILE MENU DISCARDABLE
! BEGIN
!     MENUITEM "Å²§O...",                     IDM_AUTHENTICATION
!     MENUITEM "¦s¨ú±±¨î²M³æ...",             IDM_ACL_SET
!     POPUP "®eÅé/¤À³Î°Ï(&V)"
!     BEGIN
!         MENUITEM "¤º®e(&P)...",                 IDM_VOLUME_PROPERTIES
!         MENUITEM "­«·s¾ã²z¦WºÙ/ID ¹ïÀ³(&R)",    IDM_VOLUMEPARTITION_UPDATENAMEIDTABLE
! 
!     END
!     POPUP "¸Ë¸üÂI(&M)"
!     BEGIN
!         MENUITEM "Åã¥Ü(&S)...",                 IDM_MOUNTPOINT_SHOW
!         MENUITEM "²¾°£(&R)...",                 IDM_MOUNTPOINT_REMOVE
!         MENUITEM "»s§@(&M)...",                 IDM_MOUNTPOINT_MAKE
!     END
!     MENUITEM "¨R¼gÀÉ®×/¥Ø¿ý(&F)",           IDM_FLUSH
!     MENUITEM "¨R¼g®eÅé(&U)",                IDM_FLUSH_VOLUME
!     MENUITEM "Åã¥ÜÀÉ®×¦øªA¾¹(&F)...",       IDM_SHOW_SERVER
!     MENUITEM "Åã¥Ü Cell (&C)...",           IDM_SHOWCELL
!     MENUITEM "Åã¥Ü¦øªA¾¹ª¬ºA...",           IDM_SERVER_STATUS
!     MENUITEM "Remove SymLink",              IDM_REMOVE_SYMLINK
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // Dialog
! //
! 
! IDD_VOLUME_INFO DIALOG DISCARDABLE  0, 0, 349, 173
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
!     WS_SYSMENU
! CAPTION "®eÅé¸ê°T"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "½T©w",IDOK,55,150,50,14,WS_DISABLED
!     PUSHBUTTON      "»¡©ú",9,235,150,50,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,145,150,50,14
!     LISTBOX         IDC_LIST,10,20,330,100,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
!     LTEXT           "ÀÉ®× / ¥Ø¿ý",IDC_STATIC,10,10,44,10
!     LTEXT           "¦WºÙ",IDC_STATIC,90,10,20,8
!     LTEXT           "°tÃB",IDC_STATIC,225,10,19,8
!     LTEXT           "¤w¨Ï¥Îªº",IDC_STATIC,270,10,20,8
!     LTEXT           "¤w¨Ï¥Îªº % (U)",IDC_STATIC,305,10,25,8
!     LTEXT           "ID",IDC_STATIC,175,10,10,8
!     LTEXT           "·s°tÃB¡G",IDC_STATIC,10,127,40,10
!     EDITTEXT        IDC_NEW_QUOTA,55,126,50,12,ES_AUTOHSCROLL | WS_DISABLED
!     PUSHBUTTON      "Åã¥Ü¤À³Î°Ï¸ê°T",IDC_PARTITION_INFO,216,125,69,14,
!                     WS_DISABLED
!     LTEXT           "¤d¦ì¤¸²Õ",IDC_STATIC,122,128,51,10
!     CONTROL         "Spin1",IDC_QUOTA_SPIN,"msctls_updown32",UDS_WRAP |
!                     UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS |
!                     WS_DISABLED,106,125,10,14
! END
! 
! IDD_SET_AFS_ACL DIALOG DISCARDABLE  0, 0, 325, 228
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "³]©w AFS ACL"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LTEXT           "",IDC_DIR_NAME,51,12,259,10
!     LISTBOX         IDC_NORMAL_RIGHTS,10,46,175,75,LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL |
!                     WS_HSCROLL | WS_TABSTOP
!     LISTBOX         IDC_NEGATIVE_ENTRIES,10,141,175,75,LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL |
!                     WS_HSCROLL | WS_TABSTOP
!     CONTROL         "r - Åª¨ú",IDC_READ,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,52,55,10
!     CONTROL         "w - ¼g¤J",IDC_WRITE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,111,55,10
!     CONTROL         "l - ¬d¾\",IDC_LOOKUP,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,66,55,10
!     CONTROL         "d - §R°£",IDC_DELETE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,96,55,10
!     CONTROL         "i - ´¡¤J",IDC_INSERT,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,81,55,10
!     CONTROL         "k - Âê©w",IDC_LOCK,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,126,55,10
!     CONTROL         "a - ºÞ²zªÌ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,200,141,55,10
!     PUSHBUTTON      "·s¼W(&A)...",IDC_ADD,270,45,45,14
!     PUSHBUTTON      "²¾°£(&R)",IDC_REMOVE,270,70,45,14,WS_DISABLED
!     PUSHBUTTON      "²M°£(&C)",IDC_CLEAN,270,95,45,14
!     DEFPUSHBUTTON   "½T©w(&O)",IDOK,270,150,45,14
!     PUSHBUTTON      "¨ú®ø(&N)",IDCANCEL,270,175,45,14
!     PUSHBUTTON      "»¡©ú(&H)",9,270,201,45,14
!     LTEXT           "¥Ø¿ý¡G",IDC_STATIC,15,12,30,10
!     GROUPBOX        "³\¥iÅv",IDC_STATIC,195,41,65,115
!     LTEXT           "¤@¯ë",IDC_STATIC,10,30,23,8
!     LTEXT           "¦WºÙ",IDC_COLUMN_3,69,38,20,8
!     LTEXT           "³\¥iÅv",IDC_STATIC,10,38,37,8
!     LTEXT           "­t­±ªº",IDC_STATIC,10,125,30,8
!     LTEXT           "³\¥iÅv",IDC_STATIC,10,133,38,8
!     LTEXT           "¦WºÙ",IDC_COLUMN_4,69,133,20,8
!     GROUPBOX        "",IDC_STATIC,10,5,305,20
!     PUSHBUTTON      "½Æ»s(&P)...",IDC_COPY,270,120,45,14
! END
! 
! IDD_MAKE_MOUNT_POINT DIALOG DISCARDABLE  0, 0, 219, 103
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "»s§@¸Ë¸üÂI"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_DIR,40,10,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_VOLUME,40,25,170,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL,40,40,170,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "½T©w",IDOK,20,81,50,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,85,81,50,14
!     PUSHBUTTON      "»¡©ú",9,150,81,50,14
!     LTEXT           "¥Ø¿ý¡G",IDC_STATIC,9,12,30,10
!     LTEXT           "®eÅé¡G",IDC_STATIC,9,28,25,10
!     LTEXT           "Cell¡G",IDC_STATIC,9,42,26,10
!     GROUPBOX        "",IDC_STATIC,40,52,115,20
!     LTEXT           "¿ï¶µ¡G",IDC_STATIC,9,59,25,10
!     CONTROL         "¼Ð·Ç",IDC_REGULAR,"Button",BS_AUTORADIOBUTTON |
!                     WS_GROUP,45,59,41,10
!     CONTROL         "Åª¨ú / ¼g¤J",IDC_RW,"Button",BS_AUTORADIOBUTTON,100,59,
!                     54,10
! END
! 
! IDD_ADD_ACL DIALOG DISCARDABLE  0, 0, 235, 113
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "·s¼W ACL ¶µ¥Ø"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_NAME,41,70,184,12,ES_AUTOHSCROLL
!     CONTROL         "r - Åª¨ú",IDC_READ,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,15,45,10
!     CONTROL         "l - ¬d¾\",IDC_LOOKUP2,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,25,50,10
!     CONTROL         "i - ´¡¤J",IDC_INSERT,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,35,50,10
!     CONTROL         "d - §R°£",IDC_DELETE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,20,45,50,10
!     CONTROL         "w - ¼g¤J",IDC_WRITE,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,80,15,50,10
!     CONTROL         "k - Âê©w",IDC_LOCK2,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,80,25,55,10
!     CONTROL         "a - ºÞ²zªÌ",IDC_ADMINISTER,"Button",BS_AUTOCHECKBOX |
!                     WS_TABSTOP,80,35,60,10
!     CONTROL         "¤@¯ë¶µ¥Ø",IDC_ADD_NORMAL_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON | WS_GROUP,161,16,54,10
!     CONTROL         "­t­±ªº¶µ¥Ø",IDC_ADD_NEGATIVE_ENTRY,"Button",
!                     BS_AUTORADIOBUTTON,161,26,59,10
!     PUSHBUTTON      "½T©w",IDOK,36,90,50,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,106,90,50,14
!     PUSHBUTTON      "»¡©ú",9,173,90,50,14
!     LTEXT           "¦WºÙ¡G",IDC_STATIC,10,72,27,8
!     GROUPBOX        "³\¥iÅv",IDC_STATIC,10,5,135,55
!     GROUPBOX        "¶µ¥ØÃþ«¬",IDC_STATIC,155,6,70,34
! END
! 
! IDD_PARTITION_INFO DIALOG DISCARDABLE  0, 0, 123, 83
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¤À³Î°Ï¸ê°T"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_TOTAL_SIZE,51,10,34,12,ES_AUTOHSCROLL | WS_DISABLED |
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_BLOCKS_FREE,51,25,34,12,ES_AUTOHSCROLL | WS_DISABLED |
!                     NOT WS_TABSTOP
!     EDITTEXT        IDC_PERCENT_USED,51,40,34,12,ES_AUTOHSCROLL |
!                     WS_DISABLED | NOT WS_TABSTOP
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,14,62,40,14
!     PUSHBUTTON      "»¡©ú",9,69,62,40,14
!     LTEXT           "¤w¨Ï¥Îªº %¡G",IDC_STATIC,4,42,51,8
!     LTEXT           "¥i¥Î°Ï¶ô¡G",IDC_STATIC,4,27,40,8
!     LTEXT           "Á`­p¤j¤p¡G",IDC_STATIC,4,12,46,8
!     LTEXT           "K ¦ì¤¸²Õ",IDC_STATIC,89,12,32,8
!     LTEXT           "K ¦ì¤¸²Õ",IDC_STATIC,88,27,31,8
! END
! 
! IDD_COPY_ACL DIALOG DISCARDABLE  0, 0, 239, 88
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "½Æ»s ACL"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_FROM_DIR,55,10,175,12,ES_AUTOHSCROLL | ES_READONLY
!     EDITTEXT        IDC_TO_DIR,55,26,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "ÂsÄý",IDC_BROWSE,195,25,35,15
!     CONTROL         "²M°£¥Ø«eªº¶µ¥Ø¡G",IDC_CLEAR,"Button",BS_AUTOCHECKBOX |
!                     BS_LEFTTEXT | WS_TABSTOP,10,46,82,10
!     DEFPUSHBUTTON   "½T©w",IDOK,20,65,50,14,WS_DISABLED
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,95,65,50,14
!     PUSHBUTTON      "»¡©ú",9,170,65,50,14
!     LTEXT           "½Æ»s¦Û¡G",IDC_STATIC,10,12,35,8
!     LTEXT           "½Æ»s¨ì¡G",IDC_STATIC,10,29,38,8
! END
! 
! IDD_WHERE_IS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¦ó³B"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,65,145,50,14
!     PUSHBUTTON      "»¡©ú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     LTEXT           "ÀÉ®× / ¥Ø¿ý",IDC_STATIC,10,10,47,8
!     LTEXT           "ÀÉ®×¦øªA¾¹",IDC_STATIC,128,10,44,8
! END
! 
! IDD_RESULTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "µ²ªG"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,65,145,50,14
!     PUSHBUTTON      "»¡©ú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     LTEXT           "ÀÉ®× / ¥Ø¿ý",-1,10,10,45,8
!     LTEXT           "µ²ªG",IDC_RESULTS_LABEL,128,10,44,8
! END
! 
! IDD_MOUNT_POINTS DIALOG DISCARDABLE  0, 0, 299, 168
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "¸Ë¸üÂI"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "Ãö³¬",IDOK,65,145,50,14
!     PUSHBUTTON      "»¡©ú",9,180,145,50,14
!     LISTBOX         IDC_LIST,10,20,280,115,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     LTEXT           "ÀÉ®×",IDC_STATIC,12,11,32,8
!     LTEXT           "®eÅé",IDC_STATIC,75,11,27,8
!     LTEXT           "Cell",IDC_STATIC,155,11,15,8
!     LTEXT           "Ãþ«¬",IDC_STATIC,230,11,20,8
! END
! 
! IDD_DOWN_SERVERS DIALOG DISCARDABLE  0, 0, 209, 163
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¦øªA¾¹°±¤î¹B§@"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LISTBOX         1029,10,20,190,110,LBS_SORT | LBS_NOINTEGRALHEIGHT |
!                     WS_VSCROLL | WS_HSCROLL
!     LTEXT           "³o¨Ç¦øªA¾¹¨ÌµM°±¤î¹B§@¡G",IDC_STATIC,10,7,147,8
!     DEFPUSHBUTTON   "½T©w",IDOK,82,140,45,15
! END
! 
! IDD_SERVERSTATUS DIALOG DISCARDABLE  0, 0, 179, 143
! STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
!     WS_SYSMENU
! CAPTION "¦øªA¾¹ª¬ºA"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     CONTROL         "¥»ºÝ Cell",IDC_LOCALCELL,"Button",BS_AUTORADIOBUTTON |
!                     WS_GROUP | WS_TABSTOP,20,20,50,8
!     CONTROL         "«ü©wªº Cell¡G",IDC_SPECIFIEDCELL,"Button",
!                     BS_AUTORADIOBUTTON | WS_TABSTOP,20,36,60,10
!     CONTROL         "©Ò¦³ªº Cell",IDC_ALL_CELLS,"Button",BS_AUTORADIOBUTTON |
!                     WS_TABSTOP,20,65,74,10
!     CONTROL         "¤£­n±´¬d¦øªA¾¹",IDC_DONTPROBESERVERS,"Button",
!                     BS_AUTOCHECKBOX | WS_TABSTOP,24,87,80,10
!     PUSHBUTTON      "Åã¥Üª¬ºA",IDC_SHOWSTATUS,10,120,50,14
!     GROUPBOX        "Cell",IDC_STATIC,10,5,160,105,WS_GROUP
!     GROUPBOX        "",IDC_STATIC,20,80,90,20,WS_GROUP
!     EDITTEXT        IDC_CELL_NAME,30,47,130,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "Ãö³¬",IDCANCEL,65,120,50,14
!     PUSHBUTTON      "»¡©ú",9,120,120,50,14
! END
! 
! IDD_AUTHENTICATION DIALOG DISCARDABLE  0, 0, 285, 158
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "Å²§O"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LISTBOX         IDC_TOKEN_LIST,10,18,265,110,LBS_SORT | LBS_USETABSTOPS |
!                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
!                     WS_TABSTOP
!     PUSHBUTTON      "¨ú±o°O¸¹",ID_GET_TOKENS,15,137,55,14
!     PUSHBUTTON      "±Ë±ó°O¸¹",ID_DISCARD_TOKENS,80,137,55,14
!     PUSHBUTTON      "Ãö³¬",IDCANCEL,145,137,55,14
!     PUSHBUTTON      "»¡©ú",9,215,137,55,14
!     LTEXT           "¨Ï¥ÎªÌ¦WºÙ",IDC_STATIC,10,9,51,8
!     LTEXT           "Cell ¦WºÙ",IDC_STATIC,104,9,33,8
!     LTEXT           "¹L´Á",IDC_STATIC,222,9,43,8
! END
! 
! IDD_KLOG_DIALOG DIALOGEX 0, 0, 169, 93
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "¨ú±o°O¸¹"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_NAME,40,10,115,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PASSWORD,40,30,115,12,ES_PASSWORD | ES_AUTOHSCROLL
!     EDITTEXT        IDC_CELL_NAME,40,50,115,12,ES_AUTOHSCROLL
!     DEFPUSHBUTTON   "½T©w",IDOK,20,70,35,14,WS_DISABLED
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,70,70,35,14
!     PUSHBUTTON      "»¡©ú",9,120,70,35,14
!     LTEXT           "¦WºÙ¡G",IDC_STATIC,7,12,32,8
!     LTEXT           "±K½X¡G",IDC_STATIC,7,32,34,8
!     LTEXT           "Cell¡G",IDC_STATIC,7,52,25,8
! END
! 
! IDD_UNLOG_DIALOG DIALOGEX 0, 0, 185, 63
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! EXSTYLE WS_EX_APPWINDOW
! CAPTION "±Ë±ó°O¸¹"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     DEFPUSHBUTTON   "½T©w",IDOK,29,40,35,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,79,40,35,14
!     PUSHBUTTON      "»¡©ú",9,129,40,35,14
!     LTEXT           "Cell¡G",IDC_STATIC,7,17,22,8
!     EDITTEXT        IDC_CELL_NAME,31,15,143,12,ES_AUTOHSCROLL
! END
! 
! IDD_SUBMTINFO DIALOG DISCARDABLE  0, 0, 257, 186
! STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
! CAPTION "¤l¸Ë¸ü"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     LISTBOX         IDC_LIST,10,20,183,157,LBS_SORT | LBS_NOINTEGRALHEIGHT |
!                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
!     PUSHBUTTON      "·s¼W",IDC_ADD,202,20,45,14
!     PUSHBUTTON      "§R°£",IDC_DELETE,202,39,45,14,WS_DISABLED
!     PUSHBUTTON      "ÅÜ§ó",IDC_CHANGE,202,58,45,14,WS_DISABLED
!     LTEXT           "¤l¸Ë¸ü¡G",IDC_STATIC,10,10,50,8
!     PUSHBUTTON      "½T©w",IDOK,202,145,45,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,202,163,45,14
! END
! 
! IDD_ADD_SUBMOUNT DIALOG DISCARDABLE  0, 0, 235, 79
! STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
! CAPTION "·s¼W¤l¸Ë¸ü"
! FONT 9, "·s²Ó©úÅé"
! BEGIN
!     EDITTEXT        IDC_SHARE_NAME,66,8,147,12,ES_AUTOHSCROLL
!     EDITTEXT        IDC_PATH_NAME,66,23,147,12,ES_AUTOHSCROLL
!     PUSHBUTTON      "½T©w",IDOK,22,53,45,14
!     PUSHBUTTON      "¨ú®ø",IDCANCEL,92,53,45,14
!     PUSHBUTTON      "»¡©ú",9,167,53,45,14
!     LTEXT           "¦@¥Î¦WºÙ¡G",IDC_STATIC,18,10,49,8
!     LTEXT           "¸ô®|¦WºÙ¡G",IDC_STATIC,19,25,43,8
! END
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // DESIGNINFO
! //
! 
! #ifdef APSTUDIO_INVOKED
! GUIDELINES DESIGNINFO DISCARDABLE
! BEGIN
!     IDD_SERVERSTATUS, DIALOG
!     BEGIN
!         RIGHTMARGIN, 171
!     END
! 
!     IDD_AUTHENTICATION, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 278
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 151
!     END
! 
!     IDD_KLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 162
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 86
!     END
! 
!     IDD_UNLOG_DIALOG, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 178
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 56
!     END
! 
!     IDD_SUBMTINFO, DIALOG
!     BEGIN
!         LEFTMARGIN, 10
!         RIGHTMARGIN, 247
!         BOTTOMMARGIN, 177
!     END
! 
!     IDD_ADD_SUBMOUNT, DIALOG
!     BEGIN
!         LEFTMARGIN, 7
!         RIGHTMARGIN, 228
!         TOPMARGIN, 7
!         BOTTOMMARGIN, 25
!     END
! END
! #endif    // APSTUDIO_INVOKED
! 
! 
! /////////////////////////////////////////////////////////////////////////////
! //
! // String Table
! //
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     ID_ACL_CLEAN            "fs cleanacl"
!     ID_ACL_COPY             "fs copyacl"
!     ID_ACL_LIST             "fs listacl"
!     ID_ACL_SET              "fs setacl"
!     ID_VOLUME_CHECK         "fs checkvolumes"
!     ID_VOLUME_DISKFREE      "fs diskfree"
!     ID_VOLUME_EXAMINE       "fs examine"
!     ID_VOLUME_FLUSH         "fs flushvolume"
!     ID_VOLUME_QUOTA_BRIEF   "fs quota"
!     ID_VOLUME_QUOTA_FULL    "fs listquota"
!     ID_VOLUME_QUOTA_SET     "fs setvol"
!     ID_VOLUME_SET           "fs setvol"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     ID_FLUSH                "fs flush"
!     ID_WHEREIS              "fs whereis"
!     ID_SHOWCELL             "fs whichcell"
!     ID_MOUNTPOINT_SHOW      "fs lsmount"
!     ID_MOUNTPOINT_REMOVE    "fs rmmount"
!     ID_SHOW_SERVER          "fs whereis"
!     ID_AUTHENTICATE         "µn¤J©Îµn¥X AFS"
!     ID_SERVER_STATUS        "ÀË¬d¦øªA¾¹"
!     ID_VOLUME_PROPERTIES    "fs listquota, diskfree, examine, quota, setquota, setvol"
!     ID_VOLUMEPARTITION_UPDATENAMEIDTABLE "fs checkvolumes"
!     ID_MOUNTPOINT_MAKE      "fs mkmount"
!     IDS_FLUSH_FAILED        "µLªk¨R¼g§@¥Î¤¤ªºÀÉ®× %o"
!     IDS_FLUSH_ERROR         "¨R¼gÀÉ®× %o ®Éµo¥Í¿ù»~¡G %s"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_FLUSH_OK            "¶¶§Q¨R¼g©Ò¿ï¨úªºÀÉ®×"
!     IDS_CANT_GET_CELL       "§PÂ_ Cell ®Éµo¥Í¿ù»~¡G"
!     IDS_FLUSH_VOLUME_ERROR  "¨R¼g %o ®eÅé®Éµo¥Í¿ù»~¡G  %s"
!     IDS_FLUSH_VOLUME_OK     "¶¶§Q¨R¼g®eÅé"
!     IDS_WHERE_IS            "ÀÉ®× %o ¦b¥D¹q¸£ %s ¤W"
!     IDS_CLEANACL_NOT_SUPPORTED
!                             "µLªk²M°£ÀÉ®× %o ªº ACL¡GDFS ¦s¨ú²M³æ¤£¤ä´©²M°£ Acl "
!     IDS_ACL_IS_FINE         "%o ªº¦s¨ú²M³æ¨S¦³°ÝÃD"
!     IDS_CLEANACL_INVALID_ARG
!                             "µLªk²M°£ÀÉ®× %o ªº ACL¡G  ¤Þ¼ÆµL®Ä¡A¥i¯àªº­ì¦]¥]¬A¡GÀÉ®×¥¼ºÞ¨î¡A©Î¬O¦s¨ú±±¨î²M³æ¤Wªº¨Ï¥ÎªÌ¤H¼Æ¹L¦h"
!     IDS_ANY_STRING          "%o"
!     IDS_CLEANACL_DONE       "¤w§R°£§@¼oªº ACL ¶µ¥Ø¡C"
!     ID_SUBMOUNTS            "«Ø¥ß©Î§R°£ AFS ¤l¸Ë¸ü"
!     IDS_GETRIGHTS_ERROR     "µLªkÅª¨ú¥Ø¿ý %o ªº¦s¨ú²M³æ¡G  %o"
!     IDS_DFSACL_ERROR        "µLªk¥H¦¹«ü¥O½s¿è DFS ACL"
!     IDS_SAVE_ACL_ERROR      "µLªkÀx¦s %o ªº ACL¡G  %o"
!     IDS_SAVE_ACL_EINVAL_ERROR
!                             "µLªkÀx¦s %o ªº ACL¡G¤Þ¼ÆµL®Ä¡A¥i¯àªº­ì¦]¥]¬A¡GÀÉ®×¤£¦b AFS¡B¦s¨ú±±¨î²M³æ¤Wªº¨Ï¥ÎªÌ¤H¼Æ¹L¦h¡A©Î¬O¸Õ¹Ï±N¤£¦s¦bªº¨Ï¥ÎªÌ·s¼W¨ì¦s¨ú±±¨î²M³æ"
!     IDS_ACL_READ_ERROR      "µLªkÅª¨ú %o ªº ACL¡G  %o"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_NO_DFS_COPY_ACL     "µLªk±N ACL ½Æ»s¨ì¥Ø¿ý %o¡GDFS ¦s¨ú²M³æ¤£¤ä´©½Æ»s ACL "
!     IDS_COPY_ACL_EINVAL_ERROR
!                             "µLªk±N ACL ½Æ»s¨ì¥Ø¿ý %o¡G¤Þ¼ÆµL®Ä¡A¥i¯àªº­ì¦]¥]¬A¡GÀÉ®×¤£¦b AFS¡C"
!     IDS_COPY_ACL_ERROR      "µLªk±N ACL ½Æ»s¨ì %o¡G  %o"
!     IDS_NOT_MOUNT_POINT_ERROR "%o ¨Ã«D¸Ë¸üÂI¡C"
!     IDS_LIST_MOUNT_POINT_ERROR "¿ù»~¡G  %o"
!     IDS_MAKE_MP_NOT_AFS_ERROR "¸Ë¸üÂI¥²¶·¦b AFS ÀÉ®×¨t²Î¤º«Ø¥ß"
!     IDS_MOUNT_POINT_ERROR   "«Ø¥ß¸Ë¸üÂI®Éµo¥Í¿ù»~¡G  %o"
!     IDS_ERROR               "¿ù»~¡G%o"
!     IDS_DELETED             "¤w¶¶§Q§R°£"
!     IDS_SET_QUOTA_ERROR     "³]©w°tÃB®Éµo¥Í¿ù»~¡G  %o"
!     ID_SUBMOUNTS_CREATE     "«Ø¥ß AFS ¤l¸Ë¸ü"
!     ID_SUBMOUNTS_EDIT       "·s¼W¡BÅÜ§ó©Î¬O§R°£ AFS ¤l¸Ë¸ü"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_CHECK_SERVERS_ERROR "ÀË¬dÀÉ®×¦øªA¾¹¾÷¾¹®Éµo¥Í¿ù»~¡G¡uAFS ¦øªA¾¹ºÞ²zµ{¦¡¡v¡G  %o"
!     IDS_ALL_SERVERS_RUNNING "©Ò¦³¦øªA¾¹³£¦b°õ¦æ¤¤¡C"
!     IDS_CHECK_VOLUMES_OK    "¤wÀË¬d©Ò¦³®eÅéID/¦WºÙ¹ïÀ³¡C"
!     IDS_CHECK_VOLUMES_ERROR "ÀË¬d®eÅéID/¦WºÙ¹ïÀ³®Éµo¥Í¿ù»~¡G  %o"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_ACL_ENTRY_NAME_IN_USE "±z©Ò¿ï¾Üªº¦WºÙ¤w¸g¦s¦b¡C½Ð¿é¤J¤£¦Pªº¦WºÙ¡C"
!     IDS_REALLY_DEL_MOUNT_POINTS "±z½T©w­n²¾°£©Ò¿ï¨úªº¸Ë¸üÂI¶Ü¡H"
!     IDS_DIR_DOES_NOT_EXIST_ERROR "¥Ø¿ý '%o' ¨Ã¤£¦s¦b¡C"
!     IDS_CLEANACL_MSG        "±N§R°£¤w§@¼oªº ACL ¡I"
!     IDS_COPY_ACL_OK         "¤w¶¶§Q³Æ¥÷ ACL¡C"
!     IDS_GET_TOKENS_NO_AFS_SERVICE
!                             "µLªkÅª¨ú°O¸¹¸ê°T¡GAFS ªA°Èµ{¦¡¥i¯à©|¥¼±Ò°Ê¡C"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR
!                             "µLªkÅª¨ú°O¸¹¸ê°T¡G«D¹w´Áªº¿ù»~¡Aµ{¦¡½X %d¡C"
!     IDS_GET_TOKENS_UNEXPECTED_ERROR2
!                             "µLªkÅª¨ú°O¸¹¸ê°T¡G«D¹w´Áªº¿ù»~¡AªA°Èµ{¦¡ %s.%s.%s¡Aµ{¦¡½X %d¡C"
!     IDS_ENTER_QUOTA         "½Ð¿é¤J¦³®Äªº°tÃB¡C"
!     IDS_AUTHENTICATION_ITEM "Å²§O(&A)..."
!     IDS_ACLS_ITEM           "¦s¨ú±±¨î²M³æ(&C)..."
!     IDS_VOL_PART_ITEM       "®eÅé / ¤À³Î°Ï(&V)"
!     IDS_VOL_PART_PROPS_ITEM "¤º®e(&P)"
!     IDS_VOL_PART_REFRESH_ITEM "­«·s¾ã²z¦WºÙ/ID ¹ïÀ³(&R)"
!     IDS_MOUNT_POINT_ITEM    "¸Ë¸üÂI(&M)"
!     IDS_MP_SHOW_ITEM        "Åã¥Ü(&S)..."
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     AFX_IDS_APP_TITLE       "AFS ¥Î¤áºÝ"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_MP_REMOVE_ITEM      "²¾°£(&R)..."
!     IDS_MP_MAKE_ITEM        "»s§@(&M)..."
!     IDS_FLUSH_FILE_DIR_ITEM "¨R¼gÀÉ®× / ¥Ø¿ý(&F)"
!     IDS_FLUSH_VOLUME_ITEM   "¨R¼g®eÅé(&U)"
!     IDS_SHOW_FILE_SERVERS_ITEM "Åã¥ÜÀÉ®×¦øªA¾¹(&F)..."
!     IDS_SHOW_CELL_ITEM      "Åã¥Ü Cell (&C)..."
!     IDS_SHOW_SERVER_STATUS_ITEM "Åã¥Ü¦øªA¾¹ª¬ºA..."
!     IDS_AFS_ITEM            "AFS(&A)"
!     IDS_SUBMOUNTS_ITEM      "¤l¸Ë¸ü(&B)"
!     IDS_GET_SUBMT_INFO_ERROR "µLªkÅª¨ú¦@¨É¦WºÙ %o ªº¤l¸Ë¸ü¸ê°T¡C"
!     IDS_REALLY_DELETE_SUBMT "§R°£¦@¨É¦WºÙ %o ¶Ü¡H"
!     IDS_SUBMT_SAVE_FAILED   "±z¹ï¤l¸Ë¸ü¸ê®Æ®w©Ò§@ªºÅÜ§óµL®Ä¡C"
!     IDS_SUBMOUNTS_CREATE_ITEM "·s¼W(&A)"
!     IDS_SUBMOUNTS_EDIT_ITEM "½s¿è(&E)..."
!     IDS_EDIT_PATH_NAME      "½s¿è¸ô®|¦WºÙ"
!     IDS_SHOW_CELL           "Åã¥Ü Cell"
! END
! 
! STRINGTABLE DISCARDABLE
! BEGIN
!     IDS_SHOW_CELL_COLUMN    "Cell"
!     IDS_SHOW_FS             "Åã¥ÜÀÉ®×¦øªA¾¹"
!     IDS_SHOW_FS_COLUMN      "ÀÉ®×¦øªA¾¹"
!     IDS_REMOVE_MP           "²¾°£¸Ë¸üÂI"
!     IDS_REMOVE_MP_COLUMN    "µ²ªG"
! END
! 
! #endif    // Chinese (Taiwan) resources
! /////////////////////////////////////////////////////////////////////////////
! 
! 
! 
! #ifndef APSTUDIO_INVOKED
! /////////////////////////////////////////////////////////////////////////////
! //
! // Generated from the TEXTINCLUDE 3 resource.
! //
! #define _AFX_NO_SPLITTER_RESOURCES
! #define _AFX_NO_OLE_RESOURCES
! #define _AFX_NO_TRACKER_RESOURCES
! #define _AFX_NO_PROPERTY_RESOURCES
! 
! #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
! #ifdef _WIN32
! LANGUAGE 4, 1
! #endif
! #include "afs_shl_ext.rc2"  // non-Microsoft Visual C++ edited resources
! #include "afxres.rc"         // Standard components
! #endif
! /////////////////////////////////////////////////////////////////////////////
! #endif    // not APSTUDIO_INVOKED
! 
Index: openafs/src/WINNT/eventlog/lang/NTMakefile
diff -c openafs/src/WINNT/eventlog/lang/NTMakefile:1.3 openafs/src/WINNT/eventlog/lang/NTMakefile:1.3.4.1
*** openafs/src/WINNT/eventlog/lang/NTMakefile:1.3	Mon Apr 30 02:50:15 2001
--- openafs/src/WINNT/eventlog/lang/NTMakefile	Wed Dec  4 09:20:49 2002
***************
*** 40,46 ****
  DLLOBJS = $(DLLRESFILE)
  
  $(DLLFILE): $(DLLOBJS)
! 	$(DLLCONLINK)
  	$(DLLPREP)
  
  ############################################################################
--- 40,46 ----
  DLLOBJS = $(DLLRESFILE)
  
  $(DLLFILE): $(DLLOBJS)
! 	$(DLLRESLINK)
  	$(DLLPREP)
  
  ############################################################################
Index: openafs/src/WINNT/install/InstallShield5/NTMakefile
diff -c openafs/src/WINNT/install/InstallShield5/NTMakefile:1.6.2.1 openafs/src/WINNT/install/InstallShield5/NTMakefile:1.6.2.3
*** openafs/src/WINNT/install/InstallShield5/NTMakefile:1.6.2.1	Wed Nov 14 22:38:50 2001
--- openafs/src/WINNT/install/InstallShield5/NTMakefile	Thu Dec  5 00:59:54 2002
***************
*** 20,25 ****
--- 20,34 ----
   
  ############################################################################
  
+ #CHECK which OS we are using to avoid using the wrong options
+ !IF	(([$(DESTDIR)\bin\util_cr.exe _ xp w2])==1) 
+ XCOPY= xcopy /s/e/y
+ !ELSE
+ XCOPY= xcopy /s/e
+ !ENDIF
+ 
+ #check which version of the complier we are using
+ 
  prep: AFS_component_version_number.txt
  	$(DESTDIR)\bin\util_cr.exe } "$(AFSPRODUCT_VERSION)" ".\lang\en_US\value.txt" ".\lang\en_US\value.shl"
  	$(DESTDIR)\bin\util_cr.exe } "$(AFSPRODUCT_VERSION)" "default.txt" "default.rge"
***************
*** 62,69 ****
  	$(DEL) /q $(DESTDIR)\Wininstall\PackageWeb\*.*
  	$(ISWEB)\Pftwwiz.exe $(AFSROOT)\src\winnt\install\InstallShield5\PackageWeb.pfw -s -a 
  !ENDIF
! 	xcopy /s/e/y "Media\OpenAFS\Disk Images\disk1\*.*" $(DESTDIR)\WinInstall
  	copy AFS_component_version_number.txt $(DESTDIR)\WinInstall\Version.txt
  	$(DEL) /q "Media\OpenAFS\Disk Images\disk1\*.*"
- 
  install: prep build
--- 71,77 ----
  	$(DEL) /q $(DESTDIR)\Wininstall\PackageWeb\*.*
  	$(ISWEB)\Pftwwiz.exe $(AFSROOT)\src\winnt\install\InstallShield5\PackageWeb.pfw -s -a 
  !ENDIF
! 	$(XCOPY) Media\OpenAFS\DiskIm~1\disk1\*.* $(DESTDIR)\WinInstall
  	copy AFS_component_version_number.txt $(DESTDIR)\WinInstall\Version.txt
  	$(DEL) /q "Media\OpenAFS\Disk Images\disk1\*.*"
  install: prep build
Index: openafs/src/afs/afs_dynroot.c
diff -c openafs/src/afs/afs_dynroot.c:1.1.2.4 openafs/src/afs/afs_dynroot.c:1.1.2.6
*** openafs/src/afs/afs_dynroot.c:1.1.2.4	Fri Jul 26 16:41:10 2002
--- openafs/src/afs/afs_dynroot.c	Tue Nov 19 22:24:47 2002
***************
*** 126,131 ****
--- 126,148 ----
  }
  
  /*
+  * Given the current page and chunk pointers in a directory, adjust them
+  * appropriately so that the given file name can be appended.  Used for
+  * computing the size of a directory.
+  */
+ static void afs_dynroot_computeDirEnt(char *name, int *curPageP, int *curChunkP)
+ {
+     int esize;
+ 
+     esize = afs_dir_NameBlobs(name);
+     if (*curChunkP + esize > EPP) {
+ 	*curPageP += 1;
+ 	*curChunkP = 1;
+     }
+     *curChunkP += esize;
+ }
+ 
+ /*
   * Add directory entry by given name to a directory.  Assumes the
   * caller has allocated the directory to be large enough to hold
   * the necessary entry.
***************
*** 207,213 ****
      int cellidx, maxcellidx, i;
      struct cell *c;
      int curChunk, curPage;
!     int dirSize, sizeOfCurEntry;
      char *newDir, *dotCell;
      struct DirHeader *dirHeader;
      struct PageHeader *pageHeader;
--- 224,230 ----
      int cellidx, maxcellidx, i;
      struct cell *c;
      int curChunk, curPage;
!     int dirSize, sizeOfCurEntry, dotLen;
      char *newDir, *dotCell;
      struct DirHeader *dirHeader;
      struct PageHeader *pageHeader;
***************
*** 229,234 ****
--- 246,254 ----
      curChunk = 13;
      curPage = 0;
  
+     /* Reserve space for "." and ".." */
+     curChunk += 2;
+ 
      for (cellidx = 0; cellidx < maxcellidx; cellidx++) {
  	c = afs_GetCellByIndex(cellidx, READ_LOCK, 0 /* don't refresh */);
  	if (!c) continue;
***************
*** 240,246 ****
  	}
  	curChunk += sizeOfCurEntry;
  
! 	dotCell = afs_osi_Alloc(strlen(c->cellName) + 2);
  	strcpy(dotCell, ".");
  	strcat(dotCell, c->cellName);
  	sizeOfCurEntry = afs_dir_NameBlobs(dotCell);
--- 260,267 ----
  	}
  	curChunk += sizeOfCurEntry;
  
! 	dotLen = strlen(c->cellName) + 2;
! 	dotCell = afs_osi_Alloc(dotLen);
  	strcpy(dotCell, ".");
  	strcat(dotCell, c->cellName);
  	sizeOfCurEntry = afs_dir_NameBlobs(dotCell);
***************
*** 250,255 ****
--- 271,277 ----
  	}
  	curChunk += sizeOfCurEntry;
  
+ 	afs_osi_Free(dotCell, dotLen);
  	afs_PutCell(c, READ_LOCK);
      }
  
***************
*** 294,307 ****
      afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, "..", 1);
      linkCount += 2;
  
-     /* Reserve space for "." and ".." */
-     curChunk += 2;
- 
      for (cellidx = 0; cellidx < maxcellidx; cellidx++) {
  	c = afs_GetCellByIndex(cellidx, READ_LOCK, 0 /* don't refresh */);
  	if (!c) continue;
  
! 	dotCell = afs_osi_Alloc(strlen(c->cellName) + 2);
  	strcpy(dotCell, ".");
  	strcat(dotCell, c->cellName);
  	afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk,
--- 316,327 ----
      afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, "..", 1);
      linkCount += 2;
  
      for (cellidx = 0; cellidx < maxcellidx; cellidx++) {
  	c = afs_GetCellByIndex(cellidx, READ_LOCK, 0 /* don't refresh */);
  	if (!c) continue;
  
! 	dotLen = strlen(c->cellName) + 2;
! 	dotCell = afs_osi_Alloc(dotLen);
  	strcpy(dotCell, ".");
  	strcat(dotCell, c->cellName);
  	afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk,
***************
*** 310,315 ****
--- 330,337 ----
  			      dotCell, VNUM_FROM_CIDX_RW(cellidx, 1));
  
  	if (!(c->states & CAlias)) linkCount += 2;
+ 
+ 	afs_osi_Free(dotCell, dotLen);
  	afs_PutCell(c, READ_LOCK);
      }
  
Index: openafs/src/afs/afs_init.c
diff -c openafs/src/afs/afs_init.c:1.11.2.1 openafs/src/afs/afs_init.c:1.11.2.4
*** openafs/src/afs/afs_init.c:1.11.2.1	Tue Sep 10 18:33:27 2002
--- openafs/src/afs/afs_init.c	Fri Nov 15 08:28:32 2002
***************
*** 16,22 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_init.c,v 1.11.2.1 2002/09/10 22:33:27 zacheiss Exp $");
  
  #include "../afs/stds.h"
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
--- 16,22 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_init.c,v 1.11.2.4 2002/11/15 13:28:32 shadow Exp $");
  
  #include "../afs/stds.h"
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 39,44 ****
--- 39,45 ----
  extern afs_rwlock_t afs_xvolume;
  extern afs_rwlock_t afs_xuser;
  extern afs_rwlock_t afs_xserver;
+ extern afs_rwlock_t afs_xsrvAddr;
  #ifndef AFS_AIX41_ENV
  extern afs_lock_t osi_fsplock;
  #endif
***************
*** 89,94 ****
--- 90,96 ----
  
  /* afs_server.c */
  extern afs_int32 afs_setTime;
+ extern afs_rwlock_t afs_xsrvAddr;
  
  /* Imported functions. */
  extern struct rx_securityClass *rxnull_NewServerSecurityObject();
***************
*** 521,526 ****
--- 523,530 ----
      RWLOCK_INIT(&afs_xvolume, "afs_xvolume");
      RWLOCK_INIT(&afs_xcell, "afs_xcell");
      RWLOCK_INIT(&afs_xserver, "afs_xserver");
+     RWLOCK_INIT(&afs_xsrvAddr, "afs_xsrvAddr");
+     RWLOCK_INIT(&afs_icl_lock, "afs_icl_lock");
      RWLOCK_INIT(&afs_xinterface, "afs_xinterface");
      LOCK_INIT(&afs_puttofileLock, "afs_puttofileLock");
  #ifndef	AFS_AIX32_ENV
Index: openafs/src/afs/afs_nfsdisp.c
diff -c openafs/src/afs/afs_nfsdisp.c:1.1.2.5 openafs/src/afs/afs_nfsdisp.c:1.1.2.8
*** openafs/src/afs/afs_nfsdisp.c:1.1.2.5	Fri Jul 26 16:56:32 2002
--- openafs/src/afs/afs_nfsdisp.c	Tue Dec 10 18:17:43 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_nfsdisp.c,v 1.1.2.5 2002/07/26 20:56:32 shadow Exp $");
  
  /* Ugly Ugly Ugly  but precludes conflicting XDR macros; We want kernel xdr */
  #define __XDR_INCLUDE__
--- 10,16 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_nfsdisp.c,v 1.1.2.8 2002/12/10 23:17:43 shadow Exp $");
  
  /* Ugly Ugly Ugly  but precludes conflicting XDR macros; We want kernel xdr */
  #define __XDR_INCLUDE__
***************
*** 37,212 ****
  
  static int xlatorinit_v2_done=0;
  static int xlatorinit_v3_done=0;
- 
  extern int afs_nobody;
  extern int afs_NFSRootOnly;
  
- /* It's bigger than this, but we don't care about anything else */
  struct rfs_disp_tbl {
! 	void  (*dis_proc)();	
  };
  
  struct afs_nfs_disp_tbl {
      void (*afs_proc)();
      void (*orig_proc)();
  };
- 
  struct afs_nfs2_resp {
      enum nfsstat status;
  };
  
  #ifndef ACL2_NPROC
! #define ACL2_NPROC	5
  #endif
- 
  struct afs_nfs_disp_tbl afs_rfs_disp_tbl[RFS_NPROC];
  struct afs_nfs_disp_tbl afs_acl_disp_tbl[ACL2_NPROC];
  
! static int 
  is_afs_fh(fhandle_t *fhp) {
      if ((fhp->fh_fsid.val[0] == AFS_VFSMAGIC) &&
! 	(fhp->fh_fsid.val[1] == AFS_VFSFSID)) 
  	return 1;
      return 0;
  }
  
! afs_int32 
  nfs2_to_afs_call(int which, caddr_t *args, fhandle_t **fhpp, fhandle_t **fh2pp)
  {
      struct vnode *vp;
      fhandle_t *fhp1=0;
      fhandle_t *fhp2=0;
      int errorcode;
! 
      *fh2pp = (fhandle_t *)0;
      switch (which) {
! 	case RFS_GETATTR:
!         case RFS_READLINK:
!         case RFS_STATFS:
! 	    fhp1 = (fhandle_t *)args;
! 	    break;
! 	case RFS_SETATTR: 
! 	{
! 	    struct nfssaargs *sargs = (struct nfssaargs *)args; 
! 	    fhp1 = (fhandle_t *)&sargs->saa_fh;
! 	    break;
! 	} 
!         case RFS_LOOKUP: 
! 	{
! 	    struct nfsdiropargs *sargs = (struct nfsdiropargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->da_fhandle;
! 	    break;
! 	} 
! 	case RFS_READ:
! 	{
! 	    struct nfsreadargs *sargs = (struct nfsreadargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->ra_fhandle;
! 	    break;
! 	} 
!         case RFS_WRITE: 
! 	{
! 	    struct nfswriteargs *sargs = (struct nfswriteargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->wa_fhandle;
! 	    break;
! 	} 
!         case RFS_CREATE: 
! 	{
! 	    struct nfscreatargs *sargs = (struct nfscreatargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->ca_da.da_fhandle;
! 	    break;
! 	} 
!         case RFS_REMOVE: 
! 	{
! 	    struct nfsdiropargs *sargs = (struct nfsdiropargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->da_fhandle;
! 	    break;
! 	}
!         case RFS_RENAME: 
! 	{
! 	    struct nfsrnmargs *sargs = (struct nfsrnmargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->rna_from.da_fhandle;
! 	    fhp2 = (fhandle_t *)&sargs->rna_to.da_fhandle;
! 	    break;
! 	} 
!         case RFS_LINK: 
! 	{
! 	    struct nfslinkargs *sargs = (struct nfslinkargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->la_from;
! 	    fhp2 = (fhandle_t *)&sargs->la_to.da_fhandle;
! 	    break;
! 	} 
!         case RFS_SYMLINK: 
! 	{
! 	    struct nfsslargs *sargs = (struct nfsslargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->sla_from.da_fhandle;
! 	    break;
! 	} 
!         case RFS_MKDIR: 
! 	{
! 	    struct nfscreatargs *sargs = (struct nfscreatargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->ca_da.da_fhandle;
! 	    break;
! 	} 
!         case RFS_RMDIR: 
! 	{
! 	    struct nfsdiropargs *sargs = (struct nfsdiropargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->da_fhandle;
! 	    break;
! 	} 
!         case RFS_READDIR: 
! 	{
! 	    struct nfsrddirargs *sargs = (struct nfsrddirargs *)args;
! 	    fhp1 = (fhandle_t *)&sargs->rda_fh;
! 	    break;
! 	} 
! 	default:
! 	    return NULL;
      }
! 
      /* Ok if arg 1 is in AFS or if 2 args and arg 2 is in AFS */
      if (is_afs_fh(fhp1)) {
  	*fhpp = fhp1;
! 	if (fhp2) 
  	    *fh2pp = fhp2;
! 	return 1;	    
      }
!     if (is_afs_fh(fhp2)) {
  	*fhpp = fhp1;
  	*fh2pp = fhp2;
! 	return 1;	    
      }
      return NULL;
  }
  
! afs_int32 
  acl2_to_afs_call(int which, caddr_t *args, fhandle_t **fhpp)
  {
      fhandle_t *fhp;
! 
      switch(which) {
      case ACLPROC2_NULL:
      {
  	return NULL;
      }
!     case ACLPROC2_GETACL: 
      {
  	struct GETACL2args *sargs = (struct GETACL2args *) args;
  	fhp = &sargs->fh;
  	break;
      }
!     case ACLPROC2_SETACL: 
      {
  	struct SETACL2args *sargs = (struct SETACL2args *) args;
  	fhp = &sargs->fh;
  	break;
      }
!     case ACLPROC2_GETATTR: 
      {
  	struct GETATTR2args *sargs = (struct GETATTR2args *) args;
  	fhp = &sargs->fh;
  	break;
      }
!     case ACLPROC2_ACCESS: 
      {
  	struct ACCESS2args *sargs = (struct ACCESS2args *) args;
  	fhp = &sargs->fh;
--- 37,217 ----
  
  static int xlatorinit_v2_done=0;
  static int xlatorinit_v3_done=0;
  extern int afs_nobody;
  extern int afs_NFSRootOnly;
  
  struct rfs_disp_tbl {
!     void (*dis_proc)();
!     xdrproc_t dis_xdrargs;
!     xdrproc_t dis_fastxdrargs;
!     int       dis_argsz;           
!     xdrproc_t dis_xdrres;          
!     xdrproc_t dis_fastxdrres;      
!     int       dis_ressz;           
!     void      (*dis_resfree)();    
!     int       dis_flags;
!     fhandle_t (*dis_getfh)();      
  };
  
  struct afs_nfs_disp_tbl {
      void (*afs_proc)();
      void (*orig_proc)();
  };
  struct afs_nfs2_resp {
      enum nfsstat status;
  };
  
  #ifndef ACL2_NPROC
! #define ACL2_NPROC      5
  #endif
  struct afs_nfs_disp_tbl afs_rfs_disp_tbl[RFS_NPROC];
  struct afs_nfs_disp_tbl afs_acl_disp_tbl[ACL2_NPROC];
  
! static int
  is_afs_fh(fhandle_t *fhp) {
      if ((fhp->fh_fsid.val[0] == AFS_VFSMAGIC) &&
! 	(fhp->fh_fsid.val[1] == AFS_VFSFSID))
  	return 1;
      return 0;
  }
  
! afs_int32
  nfs2_to_afs_call(int which, caddr_t *args, fhandle_t **fhpp, fhandle_t **fh2pp)
  {
      struct vnode *vp;
      fhandle_t *fhp1=0;
      fhandle_t *fhp2=0;
      int errorcode;
!     
      *fh2pp = (fhandle_t *)0;
      switch (which) {
!     case RFS_GETATTR:
!     case RFS_READLINK:
!     case RFS_STATFS:
! 	fhp1 = (fhandle_t *)args;
! 	break;
!     case RFS_SETATTR:
!     {
! 	struct nfssaargs *sargs = (struct nfssaargs *)args;
! 	fhp1 = (fhandle_t *)&sargs->saa_fh;
! 	break;
      }
!     case RFS_LOOKUP:
!     {
! 	struct nfsdiropargs *sargs = (struct nfsdiropargs *)args;
! 	fhp1 = sargs->da_fhandle;
! 	break;
!     }
!     case RFS_READ:
!     {
! 	struct nfsreadargs *sargs = (struct nfsreadargs *)args;
! 	fhp1 = (fhandle_t *)&sargs->ra_fhandle;
! 	break;
!     }
!     case RFS_WRITE:
!     {
! 	struct nfswriteargs *sargs = (struct nfswriteargs *)args;
! 	fhp1 = (fhandle_t *)&sargs->wa_fhandle;
! 	break;
!     }
!     case RFS_CREATE:
!     {
! 	struct nfscreatargs *sargs = (struct nfscreatargs *)args;
! 	fhp1 = sargs->ca_da.da_fhandle;
! 	break;
!     }
!     case RFS_REMOVE:
!     {
! 	struct nfsdiropargs *sargs = (struct nfsdiropargs *)args;
! 	fhp1 = sargs->da_fhandle;
! 	break;
!     }
!     case RFS_RENAME:
!     {
! 	struct nfsrnmargs *sargs = (struct nfsrnmargs *)args;
! 	fhp1 = sargs->rna_from.da_fhandle;
! 	fhp2 = sargs->rna_to.da_fhandle;
! 	break;
!     }
!     case RFS_LINK:
!     {
! 	struct nfslinkargs *sargs = (struct nfslinkargs *)args;
! 	fhp1 = sargs->la_from;
! 	fhp2 = sargs->la_to.da_fhandle;
! 	break;
!     }
!     case RFS_SYMLINK:
!     {
! 	struct nfsslargs *sargs = (struct nfsslargs *)args;
! 	fhp1 = sargs->sla_from.da_fhandle;
! 	break;
!     }
!     case RFS_MKDIR:
!     {
! 	struct nfscreatargs *sargs = (struct nfscreatargs *)args;
! 	fhp1 = sargs->ca_da.da_fhandle;
! 	break;
!     }
!     case RFS_RMDIR:
!     {
! 	struct nfsdiropargs *sargs = (struct nfsdiropargs *)args;
! 	fhp1 = sargs->da_fhandle;
! 	break;
!     }
!     case RFS_READDIR:
!     {
! 	struct nfsrddirargs *sargs = (struct nfsrddirargs *)args;
! 	fhp1 = (fhandle_t *)&sargs->rda_fh;
! 	break;
!     }
!     default:
! 	return NULL;
!     }
!     
      /* Ok if arg 1 is in AFS or if 2 args and arg 2 is in AFS */
      if (is_afs_fh(fhp1)) {
  	*fhpp = fhp1;
! 	if (fhp2)
  	    *fh2pp = fhp2;
! 	return 1;
      }
!     if (fhp2 && is_afs_fh(fhp2)) {
  	*fhpp = fhp1;
  	*fh2pp = fhp2;
! 	return 1;
      }
      return NULL;
  }
  
! afs_int32
  acl2_to_afs_call(int which, caddr_t *args, fhandle_t **fhpp)
  {
      fhandle_t *fhp;
!     
      switch(which) {
      case ACLPROC2_NULL:
      {
  	return NULL;
      }
!     case ACLPROC2_GETACL:
      {
  	struct GETACL2args *sargs = (struct GETACL2args *) args;
  	fhp = &sargs->fh;
  	break;
      }
!     case ACLPROC2_SETACL:
      {
  	struct SETACL2args *sargs = (struct SETACL2args *) args;
  	fhp = &sargs->fh;
  	break;
      }
!     case ACLPROC2_GETATTR:
      {
  	struct GETATTR2args *sargs = (struct GETATTR2args *) args;
  	fhp = &sargs->fh;
  	break;
      }
!     case ACLPROC2_ACCESS:
      {
  	struct ACCESS2args *sargs = (struct ACCESS2args *) args;
  	fhp = &sargs->fh;
***************
*** 215,233 ****
      default:
  	return NULL;
      }
! 
      if (is_afs_fh(fhp)) {
  	*fhpp = fhp;
  	return 1;
      }
! 
      return NULL;
  }
  
  int
! afs_nfs2_dispatcher(int type, afs_int32 which, char *argp, 
! 		    struct exportinfo **expp, 
! 		    struct svc_req *rp, struct AFS_UCRED *crp)
  {
      afs_int32 call = 0;
      afs_int32 code = 0;
--- 220,238 ----
      default:
  	return NULL;
      }
!     
      if (is_afs_fh(fhp)) {
  	*fhpp = fhp;
  	return 1;
      }
!     
      return NULL;
  }
  
  int
! afs_nfs2_dispatcher(int type, afs_int32 which, char *argp,
!                     struct exportinfo **expp,
!                     struct svc_req *rp, struct AFS_UCRED *crp)
  {
      afs_int32 call = 0;
      afs_int32 code = 0;
***************
*** 235,267 ****
      struct sockaddr *sa;
      fhandle_t *fh = (fhandle_t *)argp;
      fhandle_t *fh2 = (fhandle_t *)0;
! 
      if (!xlatorinit_v2_done)
  	return 2;
! 
      sa = (struct sockaddr *)svc_getrpccaller(rp->rq_xprt)->buf;
!     client = ((struct sockaddr_in *)sa)->sin_addr.s_addr;
! 
      AFS_GLOCK();
      code = 0;
      switch (type) {
      case 0:
! 	code = nfs2_to_afs_call(which, argp, &fh, &fh2);
  	break;
      case 1:
! 	code = acl2_to_afs_call(which, argp, &fh);
  	break;
      default:
  	break;
      }
! 
      if (code) {
  	struct afs_exporter *out = 0;
  	afs_int32 dummy;
  	static int once = 0;
  	struct SmallFid Sfid;
! 
  	memcpy((char *)&Sfid, fh->fh_data, SIZEOF_SMALLFID);
  
  	/* We ran */
  	call = 1;
--- 240,277 ----
      struct sockaddr *sa;
      fhandle_t *fh = (fhandle_t *)argp;
      fhandle_t *fh2 = (fhandle_t *)0;
!     
      if (!xlatorinit_v2_done)
  	return 2;
!     
      sa = (struct sockaddr *)svc_getrpccaller(rp->rq_xprt)->buf;
!     if (sa->sa_family == AF_INET)
! 	client = ((struct sockaddr_in *)sa)->sin_addr.s_addr;
!     
      AFS_GLOCK();
      code = 0;
      switch (type) {
      case 0:
! 	code = (client && nfs2_to_afs_call(which, argp, &fh, &fh2));
  	break;
      case 1:
! 	code = (client && acl2_to_afs_call(which, argp, &fh));
  	break;
      default:
  	break;
      }
!     
      if (code) {
  	struct afs_exporter *out = 0;
  	afs_int32 dummy;
  	static int once = 0;
  	struct SmallFid Sfid;
! 	
  	memcpy((char *)&Sfid, fh->fh_data, SIZEOF_SMALLFID);
+ 	
+ 	afs_Trace2(afs_iclSetp, CM_TRACE_NFSIN1,
+ 		   ICL_TYPE_POINTER, client,
+ 		   ICL_TYPE_FID, &Sfid);
  
  	/* We ran */
  	call = 1;
***************
*** 271,314 ****
  	}
  	code = afs_nfsclient_reqhandler((struct afs_exporter *)0, &crp,
  					client, &dummy, &out);
! 	/* Be careful to release this */
  	if (!code && out)
  	    EXP_RELE(out);
! 
! 	/* We ran and failed */
! 	if (code == EINVAL) 
  	    call = 2;
      }
! 
      AFS_GUNLOCK();
      return call;
  }
  
! void 
  afs_nfs2_smallfidder(struct nfsdiropres *dr)
  {
      register fhandle_t *fhp = (fhandle_t *)&dr->dr_fhandle;
      afs_int32 addr[2];
      struct vcache *vcp;
! 
  #if defined(AFS_SUN57_64BIT_ENV)
      /* See also afs_fid() */    
!     memcpy((char *)addr, fhp->fh_data, 10);
      addr[1] = (addr[1] >> 48) & 0xffff;
  #else 
      memcpy((char *)addr, fhp->fh_data, 2 * sizeof(long));
  #endif
! 
      AFS_GLOCK();
      vcp = VTOAFS((struct vnode*)addr[0]);
! 
!     /* See also afs_osi_vget */
      if (addr[1] == AFS_XLATOR_MAGIC)
      {
  	if (dr->dr_status == NFS_OK) {
  	    struct SmallFid Sfid;
  	    struct cell *tcell;
! 
  	    /* Make up and copy out a SmallFid */
  	    tcell = afs_GetCell(vcp->fid.Cell, READ_LOCK);
  	    Sfid.Volume = vcp->fid.Fid.Volume;
--- 281,322 ----
  	}
  	code = afs_nfsclient_reqhandler((struct afs_exporter *)0, &crp,
  					client, &dummy, &out);
! 	
  	if (!code && out)
  	    EXP_RELE(out);
! 	
! 	if (code == EINVAL)
  	    call = 2;
      }
!     
      AFS_GUNLOCK();
      return call;
  }
  
! void
  afs_nfs2_smallfidder(struct nfsdiropres *dr)
  {
      register fhandle_t *fhp = (fhandle_t *)&dr->dr_fhandle;
      afs_int32 addr[2];
      struct vcache *vcp;
!     
  #if defined(AFS_SUN57_64BIT_ENV)
      /* See also afs_fid() */    
!     memcpy((char *)addr, fhp->fh_data, SIZEOF_SMALLFID);
      addr[1] = (addr[1] >> 48) & 0xffff;
  #else 
      memcpy((char *)addr, fhp->fh_data, 2 * sizeof(long));
  #endif
!     
      AFS_GLOCK();
      vcp = VTOAFS((struct vnode*)addr[0]);
!     
      if (addr[1] == AFS_XLATOR_MAGIC)
      {
  	if (dr->dr_status == NFS_OK) {
  	    struct SmallFid Sfid;
  	    struct cell *tcell;
! 	    
  	    /* Make up and copy out a SmallFid */
  	    tcell = afs_GetCell(vcp->fid.Cell, READ_LOCK);
  	    Sfid.Volume = vcp->fid.Fid.Volume;
***************
*** 318,329 ****
  	    Sfid.Vnode = (u_short)(vcp->fid.Fid.Vnode & 0xffff);
  	    fhp->fh_len = SIZEOF_SMALLFID;
  	    memcpy(dr->dr_fhandle.fh_data, (char*)&Sfid, fhp->fh_len);
- 	}
  
  	/* If we have a ref, release it */
! 	if (vcp->vrefCount >= 1) 
  	    AFS_RELE(AFSTOV(vcp));
!     } 
      AFS_GUNLOCK();
  }
  
--- 326,340 ----
  	    Sfid.Vnode = (u_short)(vcp->fid.Fid.Vnode & 0xffff);
  	    fhp->fh_len = SIZEOF_SMALLFID;
  	    memcpy(dr->dr_fhandle.fh_data, (char*)&Sfid, fhp->fh_len);
  
+ 	    afs_Trace3(afs_iclSetp, CM_TRACE_NFSOUT, ICL_TYPE_INT32, 0,
+                        ICL_TYPE_POINTER, vcp, ICL_TYPE_FID, &Sfid);
+ 	}
+ 	
  	/* If we have a ref, release it */
! 	if (vcp->vrefCount >= 1)
  	    AFS_RELE(AFSTOV(vcp));
!     }
      AFS_GUNLOCK();
  }
  
***************
*** 337,380 ****
  {
  }
  
! void 
  afs_nfs2_root(char *args, char *xp, char *exp, char *rp, char *crp)
  {
  }
  
! void 
  afs_nfs2_writecache(char *args, char *xp, char *exp, char *rp, char *crp)
  {
  }
  
! #define NFS_V2_REQ(FUNCNAME, RFSOP, POST) \
! void FUNCNAME(char *args, char *xp, char *exp, char *rp, char *crp) { \
!     u_int call; \
!     struct cred *svcred = curthread->t_cred; \
!     curthread->t_cred = (struct cred*)crp; \
!     call=afs_nfs2_dispatcher(0, RFSOP, (char *)args, &exp, rp, crp); \
!     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); \
!     else { (*afs_rfs_disp_tbl[RFSOP].orig_proc)(args, xp, exp, rp, crp); \
!     if (POST && afs_NFSRootOnly && call) afs_nfs2_smallfidder(xp); } \
!     curthread->t_cred = svcred; \
!     return; \
! }
! 
! NFS_V2_REQ(afs_nfs2_getattr, RFS_GETATTR, 0) 
! NFS_V2_REQ(afs_nfs2_setattr, RFS_SETATTR, 0)
! NFS_V2_REQ(afs_nfs2_lookup, RFS_LOOKUP, 1)
! NFS_V2_REQ(afs_nfs2_readlink, RFS_READLINK, 0)
! NFS_V2_REQ(afs_nfs2_read, RFS_READ, 0)
! NFS_V2_REQ(afs_nfs2_write, RFS_WRITE, 0)
! NFS_V2_REQ(afs_nfs2_create, RFS_CREATE, 1)
! NFS_V2_REQ(afs_nfs2_remove, RFS_REMOVE, 0)
! NFS_V2_REQ(afs_nfs2_rename, RFS_RENAME, 0)
! NFS_V2_REQ(afs_nfs2_link, RFS_LINK, 0)
! NFS_V2_REQ(afs_nfs2_symlink, RFS_SYMLINK, 0)
! NFS_V2_REQ(afs_nfs2_mkdir, RFS_MKDIR, 1)
! NFS_V2_REQ(afs_nfs2_rmdir, RFS_RMDIR, 0)
! NFS_V2_REQ(afs_nfs2_readdir, RFS_READDIR, 0)
! NFS_V2_REQ(afs_nfs2_statfs, RFS_STATFS, 0)
  
  struct afs_nfs_disp_tbl afs_rfs_disp_tbl[RFS_NPROC] = {
      { afs_nfs2_null },
--- 348,530 ----
  {
  }
  
! void
  afs_nfs2_root(char *args, char *xp, char *exp, char *rp, char *crp)
  {
  }
  
! void
  afs_nfs2_writecache(char *args, char *xp, char *exp, char *rp, char *crp)
  {
  }
+ 
+ void afs_nfs2_getattr(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_GETATTR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_GETATTR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_setattr(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_SETATTR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_SETATTR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_lookup(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_LOOKUP, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else { (*afs_rfs_disp_tbl[RFS_LOOKUP].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) afs_nfs2_smallfidder(xp); } 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_readlink(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_READLINK, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_READLINK].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_read(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_READ, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_READ].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_write(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_WRITE, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_WRITE].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_create(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_CREATE, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else { (*afs_rfs_disp_tbl[RFS_CREATE].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) afs_nfs2_smallfidder(xp); } 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_remove(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_REMOVE, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_REMOVE].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_rename(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_RENAME, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_RENAME].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_link(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_LINK, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_LINK].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_symlink(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_SYMLINK, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_SYMLINK].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_mkdir(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_MKDIR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else { (*afs_rfs_disp_tbl[RFS_MKDIR].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) afs_nfs2_smallfidder(xp); } 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_rmdir(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_RMDIR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_RMDIR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs2_readdir(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(0, RFS_READDIR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_rfs_disp_tbl[RFS_READDIR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
  
! void afs_nfs2_statfs(char *args, char *xp, char *exp, char *rp, char *crp) { 
!     u_int call; 
!     struct cred *svcred = curthread->t_cred; 
!     curthread->t_cred = (struct cred*)crp; 
!     call=afs_nfs2_dispatcher(0, RFS_STATFS, (char *)args, &exp, rp, crp); 
!     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
!     else (*afs_rfs_disp_tbl[RFS_STATFS].orig_proc)(args, xp, exp, rp, crp); 
!     curthread->t_cred = svcred; 
!     return; 
! }
  
  struct afs_nfs_disp_tbl afs_rfs_disp_tbl[RFS_NPROC] = {
      { afs_nfs2_null },
***************
*** 384,453 ****
      { afs_nfs2_lookup },
      { afs_nfs2_readlink },
      { afs_nfs2_read },
!     { afs_nfs2_writecache },	
      { afs_nfs2_write },
      { afs_nfs2_create },
!     { afs_nfs2_remove },	
      { afs_nfs2_rename },
!     { afs_nfs2_link },	
      { afs_nfs2_symlink },
      { afs_nfs2_mkdir },
      { afs_nfs2_rmdir },
      { afs_nfs2_readdir },
      { afs_nfs2_statfs }
  };
  
! #define ACL_V2_REQ(FUNCNAME, ACLOP) \
! void FUNCNAME(char *args, char *xp, char *exp, char *rp, char *crp) { \
!     u_int call; \
!     struct cred *svcred = curthread->t_cred; \
!     curthread->t_cred = (struct cred*)crp; \
!     call=afs_nfs2_dispatcher(1, ACLOP, (char *)args, &exp, rp, crp); \
!     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); \
!     else (*afs_rfs_disp_tbl[ACLOP].orig_proc)(args, xp, exp, rp, crp); \
!     curthread->t_cred = svcred; \
!     return; \
! }
! 
! ACL_V2_REQ(afs_acl2_getacl, ACLPROC2_GETACL)
! ACL_V2_REQ(afs_acl2_setacl, ACLPROC2_SETACL)
! ACL_V2_REQ(afs_acl2_getattr, ACLPROC2_GETATTR)
! ACL_V2_REQ(afs_acl2_access, ACLPROC2_ACCESS)
! 
! struct afs_nfs_disp_tbl afs_acl_disp_tbl[ACL2_NPROC] = {
!     { afs_nfs2_null }, 
!     { afs_acl2_getacl }, 
      { afs_acl2_setacl },
!     { afs_acl2_getattr }, 
!     { afs_acl2_access } 
  };
  
  /* Munge the dispatch tables to link us in first */
! void 
! afs_xlatorinit_v2(struct rfs_disp_tbl *_rfs_tbl, 
! 		  struct rfs_disp_tbl *_acl_tbl)
  {
      int i;
! 
      if (xlatorinit_v2_done++) return;
! 
      for (i=0; i < RFS_NPROC; i++) {
  	afs_rfs_disp_tbl[i].orig_proc = _rfs_tbl[i].dis_proc;
  	_rfs_tbl[i].dis_proc = afs_rfs_disp_tbl[i].afs_proc;
      }
! 
!     for (i=0; i < ACL2_NPROC; i++) {
  	afs_acl_disp_tbl[i].orig_proc = _acl_tbl[i].dis_proc;
  	_acl_tbl[i].dis_proc = afs_acl_disp_tbl[i].afs_proc;
      }
  }
  
  #ifndef RFS3_NPROC
! #define RFS3_NPROC	22
  #endif
  
  #ifndef ACL3_NPROC
! #define ACL3_NPROC	3
  #endif
  
  struct afs_nfs_disp_tbl afs_rfs3_disp_tbl[RFS3_NPROC];
--- 534,630 ----
      { afs_nfs2_lookup },
      { afs_nfs2_readlink },
      { afs_nfs2_read },
!     { afs_nfs2_writecache },
      { afs_nfs2_write },
      { afs_nfs2_create },
!     { afs_nfs2_remove },
      { afs_nfs2_rename },
!     { afs_nfs2_link },
      { afs_nfs2_symlink },
      { afs_nfs2_mkdir },
      { afs_nfs2_rmdir },
      { afs_nfs2_readdir },
      { afs_nfs2_statfs }
  };
+ 
+ void afs_acl2_getacl(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(1, ACLPROC2_GETACL, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_acl_disp_tbl[ACLPROC2_GETACL].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_acl2_setacl(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(1, ACLPROC2_SETACL, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_acl_disp_tbl[ACLPROC2_SETACL].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_acl2_getattr(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(1, ACLPROC2_GETATTR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_acl_disp_tbl[ACLPROC2_GETATTR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_acl2_access(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs2_dispatcher(1, ACLPROC2_ACCESS, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs2_noaccess((struct afs_nfs2_resp *)xp); 
+     else (*afs_acl_disp_tbl[ACLPROC2_ACCESS].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
  
! struct afs_nfs_disp_tbl afs_acl_disp_tbl[5] = {
!     { afs_nfs2_null },
!     { afs_acl2_getacl },
      { afs_acl2_setacl },
!     { afs_acl2_getattr },
!     { afs_acl2_access }
  };
  
  /* Munge the dispatch tables to link us in first */
! void
! afs_xlatorinit_v2(struct rfs_disp_tbl *_rfs_tbl,
!                   struct rfs_disp_tbl *_acl_tbl)
  {
      int i;
!     
      if (xlatorinit_v2_done++) return;
!     
      for (i=0; i < RFS_NPROC; i++) {
  	afs_rfs_disp_tbl[i].orig_proc = _rfs_tbl[i].dis_proc;
  	_rfs_tbl[i].dis_proc = afs_rfs_disp_tbl[i].afs_proc;
      }
!     
!     for (i=0; i < 5; i++) {
  	afs_acl_disp_tbl[i].orig_proc = _acl_tbl[i].dis_proc;
  	_acl_tbl[i].dis_proc = afs_acl_disp_tbl[i].afs_proc;
      }
  }
  
  #ifndef RFS3_NPROC
! #define RFS3_NPROC      22
  #endif
  
  #ifndef ACL3_NPROC
! #define ACL3_NPROC      3
  #endif
  
  struct afs_nfs_disp_tbl afs_rfs3_disp_tbl[RFS3_NPROC];
***************
*** 455,468 ****
  
  struct afs_nfs3_resp {
      nfsstat3 status;
!     bool_t flags; 
  };
  typedef struct afs_nfs3_resp afs_nfs3_resp;
  
! static int 
  is_afs_fh3(nfs_fh3 *fhp) {
      if ((fhp->fh3_fsid.val[0] == AFS_VFSMAGIC) &&
! 	(fhp->fh3_fsid.val[1] == AFS_VFSFSID)) 
  	return 1;
      return 0;
  }
--- 632,645 ----
  
  struct afs_nfs3_resp {
      nfsstat3 status;
!     bool_t flags;
  };
  typedef struct afs_nfs3_resp afs_nfs3_resp;
  
! static int
  is_afs_fh3(nfs_fh3 *fhp) {
      if ((fhp->fh3_fsid.val[0] == AFS_VFSMAGIC) &&
! 	(fhp->fh3_fsid.val[1] == AFS_VFSFSID))
  	return 1;
      return 0;
  }
***************
*** 474,670 ****
      resp->flags = FALSE;
  }
  
! afs_int32 
  nfs3_to_afs_call(int which, caddr_t *args, nfs_fh3 **fhpp, nfs_fh3 **fh2pp)
  {
      struct vnode *vp;
      nfs_fh3 *fhp1=0;
      nfs_fh3 *fhp2=0;
      int errorcode;
! 
      *fh2pp = (nfs_fh3 *)0;
      switch (which) {
!         case NFSPROC3_GETATTR: 
! 	{
!             GETATTR3args *arg = (GETATTR3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->object;
!             break;
!         } 
!         case NFSPROC3_SETATTR: 
! 	{
!             SETATTR3args *arg = (SETATTR3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->object;
!             break;
!         } 
!         case NFSPROC3_LOOKUP: 
! 	{
!             LOOKUP3args *arg = (LOOKUP3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->what.dirp;
!             break;
!         } 
!         case NFSPROC3_ACCESS: 
! 	{
!             ACCESS3args *arg = (ACCESS3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->object;
!             break;
!         } 
!         case NFSPROC3_READLINK: 
! 	{
!             READLINK3args *arg = (READLINK3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->symlink;       
!             break;
!         } 
!         case NFSPROC3_READ: 
! 	{
!             READ3args *arg = (READ3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->file;
!             break;
!         } 
!         case NFSPROC3_WRITE: 
! 	{
!             WRITE3args *arg = (WRITE3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->file;
!             break;
!         } 
!         case NFSPROC3_CREATE: 
! 	{
!             CREATE3args *arg = (CREATE3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->where.dir;
!             break;
!         } 
!         case NFSPROC3_MKDIR: 
! 	{
!             MKDIR3args *arg = (MKDIR3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->where.dir;
!             break;
!         } 
!         case NFSPROC3_SYMLINK: 
! 	{
!             SYMLINK3args *arg = (SYMLINK3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->where.dir;
!             break;
!         } 
!         case NFSPROC3_MKNOD:
! 	{
!             MKNOD3args *arg = (MKNOD3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->where.dir;
!             break;
!         } 
!         case NFSPROC3_REMOVE: 
! 	{
!             REMOVE3args *arg = (REMOVE3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->object.dir;
!             break;
!         } 
!         case NFSPROC3_RMDIR: 
! 	{
!             RMDIR3args *arg = (RMDIR3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->object.dir;
!             break;
!         } 
!         case NFSPROC3_RENAME: 
! 	{
!             RENAME3args *arg = (RENAME3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->from.dir;
!             fhp2 = (nfs_fh3 *) &arg->to.dir;
!             break;
!         } 
!         case NFSPROC3_LINK: 
! 	{
!             LINK3args *arg = (LINK3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->file;
!             fhp2 = (nfs_fh3 *) &arg->link.dir;
!             break;
!         } 
!         case NFSPROC3_READDIR: 
! 	{
!             READDIR3args *arg = (READDIR3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->dir;
!             break;
!         } 
!         case NFSPROC3_READDIRPLUS: 
! 	{
!             READDIRPLUS3args *arg = (READDIRPLUS3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->dir;
!             break;
!         } 
!         case NFSPROC3_FSSTAT: 
! 	{
!             FSSTAT3args *arg = (FSSTAT3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->fsroot;
!             break;
!         } 
!         case NFSPROC3_FSINFO: 
! 	{
!             FSINFO3args *arg = (FSINFO3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->fsroot;
!             break;
!         } 
!         case NFSPROC3_PATHCONF: 
! 	{
!             PATHCONF3args *arg = (PATHCONF3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->object;
!             break;
!         } 
!         case NFSPROC3_COMMIT: 
! 	{
!             COMMIT3args *arg = (COMMIT3args *)args;
!             fhp1 = (nfs_fh3 *) &arg->file;
!             break;
!         }
! 	default:
! 	    return NULL;
      }
! 
!     /* Ok if arg 1 is in AFS or if 2 args and arg 2 is in AFS */
      if (is_afs_fh3(fhp1)) {
  	*fhpp = fhp1;
! 	if (fhp2) 
  	    *fh2pp = fhp2;
! 	return 1;	    
      }
!     if (is_afs_fh3(fhp2)) {
  	*fhpp = fhp1;
  	*fh2pp = fhp2;
! 	return 1;	    
      }
      return NULL;
  }
  
! afs_int32 
  acl3_to_afs_call(int which, caddr_t *args, nfs_fh3 **fhpp)
  {
      nfs_fh3 *fhp;
! 
      switch(which) {
!     case ACLPROC3_GETACL: 
      {
!         struct GETACL3args *sargs = (struct GETACL3args *) args;
!         fhp = &sargs->fh;
!         break;
      }
!     case ACLPROC3_SETACL: 
      {
!         struct SETACL3args *sargs = (struct SETACL3args *) args;
!         fhp = &sargs->fh;
!         break;
      }
      default:
  	return NULL;
      }
! 
      if (is_afs_fh3(fhp)) {
  	*fhpp = fhp;
  	return 1;
      }
! 
      return NULL;
  }
  
  int
! afs_nfs3_dispatcher(int type, afs_int32 which, char *argp, 
! 		    struct exportinfo **expp, 
! 		    struct svc_req *rp, struct AFS_UCRED *crp)
  {
      afs_int32 call = 0;
      afs_int32 code = 0;
--- 651,851 ----
      resp->flags = FALSE;
  }
  
! afs_int32
  nfs3_to_afs_call(int which, caddr_t *args, nfs_fh3 **fhpp, nfs_fh3 **fh2pp)
  {
      struct vnode *vp;
      nfs_fh3 *fhp1=0;
      nfs_fh3 *fhp2=0;
      int errorcode;
!     
!     afs_Trace1(afs_iclSetp, CM_TRACE_NFS3IN, ICL_TYPE_INT32, which);
      *fh2pp = (nfs_fh3 *)0;
      switch (which) {
!     case NFSPROC3_GETATTR:
!     {
! 	GETATTR3args *arg = (GETATTR3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->object;
! 	break;
      }
!     case NFSPROC3_SETATTR:
!     {
! 	SETATTR3args *arg = (SETATTR3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->object;
! 	break;
!     }
!     case NFSPROC3_LOOKUP:
!     {
! 	LOOKUP3args *arg = (LOOKUP3args *)args;
! #ifdef AFS_SUN57_ENV
! 	fhp1 = (nfs_fh3 *) &arg->what.dirp;
! #else
! 	fhp1 = (nfs_fh3 *) &arg->what.dir;
! #endif
! 	break;
!     }
!     case NFSPROC3_ACCESS:
!     {
! 	ACCESS3args *arg = (ACCESS3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->object;
! 	break;
!     }
!     case NFSPROC3_READLINK:
!     {
! 	READLINK3args *arg = (READLINK3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->symlink;
! 	break;
!     }
!     case NFSPROC3_READ:
!     {
! 	READ3args *arg = (READ3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->file;
! 	break;
!     }
!     case NFSPROC3_WRITE:
!     {
! 	WRITE3args *arg = (WRITE3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->file;
! 	break;
!     }
!     case NFSPROC3_CREATE:
!     {
! 	CREATE3args *arg = (CREATE3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->where.dir;
! 	break;
!     }
!     case NFSPROC3_MKDIR:
!     {
! 	MKDIR3args *arg = (MKDIR3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->where.dir;
! 	break;
!     }
!     case NFSPROC3_SYMLINK:
!     {
! 	SYMLINK3args *arg = (SYMLINK3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->where.dir;
! 	break;
!     }
!     case NFSPROC3_MKNOD:
!     {
! 	MKNOD3args *arg = (MKNOD3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->where.dir;
! 	break;
!     }
!     case NFSPROC3_REMOVE:
!     {
! 	REMOVE3args *arg = (REMOVE3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->object.dir;
! 	break;
!     }
!     case NFSPROC3_RMDIR:
!     {
! 	RMDIR3args *arg = (RMDIR3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->object.dir;
! 	break;
!     }
!     case NFSPROC3_RENAME:
!     {
! 	RENAME3args *arg = (RENAME3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->from.dir;
! 	fhp2 = (nfs_fh3 *) &arg->to.dir;
! 	break;
!     }
!     case NFSPROC3_LINK:
!     {
! 	LINK3args *arg = (LINK3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->file;
! 	fhp2 = (nfs_fh3 *) &arg->link.dir;
! 	break;
!     }
!     case NFSPROC3_READDIR:
!     {
! 	READDIR3args *arg = (READDIR3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->dir;
! 	break;
!     }
!     case NFSPROC3_READDIRPLUS:
!     {
! 	READDIRPLUS3args *arg = (READDIRPLUS3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->dir;
! 	break;
!     }
!     case NFSPROC3_FSSTAT:
!     {
! 	FSSTAT3args *arg = (FSSTAT3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->fsroot;
! 	break;
!     }
!     case NFSPROC3_FSINFO:
!     {
! 	FSINFO3args *arg = (FSINFO3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->fsroot;
! 	break;
!     }
!     case NFSPROC3_PATHCONF:
!     {
! 	PATHCONF3args *arg = (PATHCONF3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->object;
! 	break;
!     }
!     case NFSPROC3_COMMIT:
!     {
! 	COMMIT3args *arg = (COMMIT3args *)args;
! 	fhp1 = (nfs_fh3 *) &arg->file;
! 	break;
!     }
!     default:
! 	return NULL;
!     }
!     
      if (is_afs_fh3(fhp1)) {
  	*fhpp = fhp1;
! 	if (fhp2)
  	    *fh2pp = fhp2;
! 	return 1;
      }
!     if (fhp2 && is_afs_fh3(fhp2)) {
  	*fhpp = fhp1;
  	*fh2pp = fhp2;
! 	return 1;
      }
      return NULL;
  }
  
! afs_int32
  acl3_to_afs_call(int which, caddr_t *args, nfs_fh3 **fhpp)
  {
      nfs_fh3 *fhp;
!     
      switch(which) {
!     case ACLPROC3_GETACL:
      {
! 	struct GETACL3args *sargs = (struct GETACL3args *) args;
! 	fhp = &sargs->fh;
! 	break;
      }
!     case ACLPROC3_SETACL:
      {
! 	struct SETACL3args *sargs = (struct SETACL3args *) args;
! 	fhp = &sargs->fh;
! 	break;
      }
      default:
  	return NULL;
      }
!     
      if (is_afs_fh3(fhp)) {
  	*fhpp = fhp;
  	return 1;
      }
!     
      return NULL;
  }
  
  int
! afs_nfs3_dispatcher(int type, afs_int32 which, char *argp,
!                     struct exportinfo **expp,
!                     struct svc_req *rp, struct AFS_UCRED *crp)
  {
      afs_int32 call = 0;
      afs_int32 code = 0;
***************
*** 672,706 ****
      struct sockaddr *sa;
      nfs_fh3 *fh = (nfs_fh3 *)argp;
      nfs_fh3 *fh2 = (nfs_fh3 *)0;
! 
      if (!xlatorinit_v3_done)
  	return 2;
! 
      sa = (struct sockaddr *)svc_getrpccaller(rp->rq_xprt)->buf;
!     client = ((struct sockaddr_in *)sa)->sin_addr.s_addr;
! 
      AFS_GLOCK();
      code = 0;
      switch (type) {
      case 0:
! 	code = nfs3_to_afs_call(which, argp, &fh, &fh2);
  	break;
      case 1:
! 	code = acl3_to_afs_call(which, argp, &fh);
  	break;
      default:
  	break;
      }
! 
      if (code) {
  	struct afs_exporter *out = 0;
  	afs_int32 dummy;
  	static int once = 0;
  	struct SmallFid Sfid;
! 
  	memcpy((char *)&Sfid, fh->fh3_data, SIZEOF_SMALLFID);
  
- 	/* We ran */
  	call = 1;
  	if (!once && *expp) {
  	    afs_nobody = (*expp)->exi_export.ex_anon;
--- 853,891 ----
      struct sockaddr *sa;
      nfs_fh3 *fh = (nfs_fh3 *)argp;
      nfs_fh3 *fh2 = (nfs_fh3 *)0;
!     
      if (!xlatorinit_v3_done)
  	return 2;
!     
      sa = (struct sockaddr *)svc_getrpccaller(rp->rq_xprt)->buf;
!     if (sa->sa_family == AF_INET) 
! 	client = ((struct sockaddr_in *)sa)->sin_addr.s_addr;
!     
      AFS_GLOCK();
      code = 0;
      switch (type) {
      case 0:
! 	code = (client && nfs3_to_afs_call(which, argp, &fh, &fh2));
  	break;
      case 1:
! 	code = (client && acl3_to_afs_call(which, argp, &fh));
  	break;
      default:
  	break;
      }
!     
      if (code) {
  	struct afs_exporter *out = 0;
  	afs_int32 dummy;
  	static int once = 0;
  	struct SmallFid Sfid;
! 	
  	memcpy((char *)&Sfid, fh->fh3_data, SIZEOF_SMALLFID);
+ 	
+ 	afs_Trace2(afs_iclSetp, CM_TRACE_NFS3IN1,
+ 		   ICL_TYPE_INT32, client,
+ 		   ICL_TYPE_FID, &Sfid);
  
  	call = 1;
  	if (!once && *expp) {
  	    afs_nobody = (*expp)->exi_export.ex_anon;
***************
*** 708,732 ****
  	}
  	code = afs_nfsclient_reqhandler((struct afs_exporter *)0, &crp,
  					client, &dummy, &out);
! 	/* Be careful to release this */
  	if (!code && out)
  	    EXP_RELE(out);
! 
! 	/* We ran and failed */
! 	if (code == EINVAL) 
  	    call = 2;
      }
! 
      AFS_GUNLOCK();
      return call;
  }
  
! void 
  afs_nfs3_smallfidder(struct nfs_fh3 *fhp, int status)
  {
      afs_int32 addr[2];
      struct vcache *vcp;
! 
  #if defined(AFS_SUN57_64BIT_ENV)
      /* See also afs_fid() */    
      memcpy((char *)addr, fhp->fh3_data, 10);
--- 893,917 ----
  	}
  	code = afs_nfsclient_reqhandler((struct afs_exporter *)0, &crp,
  					client, &dummy, &out);
! 	
  	if (!code && out)
  	    EXP_RELE(out);
! 	
! 	
! 	if (code == EINVAL)
  	    call = 2;
      }
!     
      AFS_GUNLOCK();
      return call;
  }
  
! void
  afs_nfs3_smallfidder(struct nfs_fh3 *fhp, int status)
  {
      afs_int32 addr[2];
      struct vcache *vcp;
!     
  #if defined(AFS_SUN57_64BIT_ENV)
      /* See also afs_fid() */    
      memcpy((char *)addr, fhp->fh3_data, 10);
***************
*** 734,751 ****
  #else 
      memcpy((char *)addr, fhp->fh3_data, 2 * sizeof(long));
  #endif
! 
      AFS_GLOCK();
      vcp = VTOAFS((struct vnode*)addr[0]);
! 
      /* See also afs_osi_vget */
      if (addr[1] == AFS_XLATOR_MAGIC)
      {
  	if (status == NFS_OK) {
  	    struct SmallFid Sfid;
  	    struct cell *tcell;
! 
! 	    /* Make up and copy out a SmallFid */
  	    tcell = afs_GetCell(vcp->fid.Cell, READ_LOCK);
  	    Sfid.Volume = vcp->fid.Fid.Volume;
  	    Sfid.CellAndUnique = ((tcell->cellIndex << 24) |
--- 919,936 ----
  #else 
      memcpy((char *)addr, fhp->fh3_data, 2 * sizeof(long));
  #endif
!     
      AFS_GLOCK();
      vcp = VTOAFS((struct vnode*)addr[0]);
!     
      /* See also afs_osi_vget */
      if (addr[1] == AFS_XLATOR_MAGIC)
      {
  	if (status == NFS_OK) {
  	    struct SmallFid Sfid;
  	    struct cell *tcell;
! 	    
! 	    /* Make up and copy out a SmallFid */	
  	    tcell = afs_GetCell(vcp->fid.Cell, READ_LOCK);
  	    Sfid.Volume = vcp->fid.Fid.Volume;
  	    Sfid.CellAndUnique = ((tcell->cellIndex << 24) |
***************
*** 754,807 ****
  	    Sfid.Vnode = (u_short)(vcp->fid.Fid.Vnode & 0xffff);
  	    fhp->fh3_len = SIZEOF_SMALLFID;
  	    memcpy(fhp->fh3_data, (char*)&Sfid, fhp->fh3_len);
- 	}
  
  	/* If we have a ref, release it */
! 	if (vcp->vrefCount >= 1) 
  	    AFS_RELE(AFSTOV(vcp));
!     } 
      AFS_GUNLOCK();
  }
  
! #define NFS_V3_REQ(FUNCNAME, NFSOP, POST, RESP, RESPP) \
! void FUNCNAME(char *args, char *xp, char *exp, char *rp, char *crp) { \
!     u_int call; \
!     afs_nfs3_resp dummy; \
!     struct cred *svcred = curthread->t_cred; \
!     curthread->t_cred = (struct cred*)crp; \
!     call=afs_nfs3_dispatcher(0, NFSOP, (char *)args, &exp, rp, crp); \
!     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); \
!     else { (*afs_rfs3_disp_tbl[NFSOP].orig_proc)(args, xp, exp, rp, crp); \
!     if (POST && afs_NFSRootOnly && call) { \
!     RESP *resp = ( RESP *)xp; \
!     afs_nfs3_smallfidder( RESPP , resp->status); } } \
!     curthread->t_cred = svcred; \
!     return; \
! }
! 
! NFS_V3_REQ(afs_nfs3_getattr, NFSPROC3_GETATTR, 0, afs_nfs3_resp, &dummy) 
! NFS_V3_REQ(afs_nfs3_setattr, NFSPROC3_SETATTR, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_lookup, NFSPROC3_LOOKUP, 1, LOOKUP3res, &resp->resok.object)
! NFS_V3_REQ(afs_nfs3_access, NFSPROC3_ACCESS, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_readlink, NFSPROC3_READLINK, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_read, NFSPROC3_READ, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_write, NFSPROC3_WRITE, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_create, NFSPROC3_CREATE, 1, CREATE3res, &resp->resok.obj.handle)
! NFS_V3_REQ(afs_nfs3_mkdir, NFSPROC3_MKDIR, 1, MKDIR3res, &resp->resok.obj.handle)
! NFS_V3_REQ(afs_nfs3_symlink, NFSPROC3_SYMLINK, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_mknod, NFSPROC3_MKNOD, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_remove, NFSPROC3_REMOVE, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_rmdir, NFSPROC3_RMDIR, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_rename, NFSPROC3_RENAME, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_link, NFSPROC3_LINK, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_readdir, NFSPROC3_READDIR, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_readdirplus, NFSPROC3_READDIRPLUS, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_fsstat, NFSPROC3_FSSTAT, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_fsinfo, NFSPROC3_FSINFO, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_pathconf, NFSPROC3_PATHCONF, 0, afs_nfs3_resp, &dummy)
! NFS_V3_REQ(afs_nfs3_commit, NFSPROC3_COMMIT, 0, afs_nfs3_resp, &dummy)
  
! struct afs_nfs_disp_tbl afs_rfs3_disp_tbl[RFS3_NPROC] = {
      { afs_nfs2_null },
      { afs_nfs3_getattr },
      { afs_nfs3_setattr },
--- 939,1223 ----
  	    Sfid.Vnode = (u_short)(vcp->fid.Fid.Vnode & 0xffff);
  	    fhp->fh3_len = SIZEOF_SMALLFID;
  	    memcpy(fhp->fh3_data, (char*)&Sfid, fhp->fh3_len);
  
+ 	    afs_Trace3(afs_iclSetp, CM_TRACE_NFS3OUT, ICL_TYPE_INT32, status,
+ 		       ICL_TYPE_POINTER, vcp, ICL_TYPE_FID, &Sfid);
+ 	}
+ 	
  	/* If we have a ref, release it */
! 	if (vcp->vrefCount >= 1)
  	    AFS_RELE(AFSTOV(vcp));
!     }
      AFS_GUNLOCK();
  }
+ 
+ void afs_nfs3_getattr(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_GETATTR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_GETATTR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_setattr(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_SETATTR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_SETATTR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_lookup(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_LOOKUP, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else { (*afs_rfs3_disp_tbl[NFSPROC3_LOOKUP].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) { 
+ 	LOOKUP3res *resp = ( LOOKUP3res *)xp; 
+ 	afs_nfs3_smallfidder( &resp->resok.object , resp->status); } } 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_access(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_ACCESS, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_ACCESS].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_readlink(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_READLINK, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_READLINK].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_read(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_READ, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_READ].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_write(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_WRITE, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_WRITE].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ void afs_nfs3_create(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_CREATE, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else { (*afs_rfs3_disp_tbl[NFSPROC3_CREATE].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) { 
+ 	CREATE3res *resp = ( CREATE3res *)xp; 
+ 	afs_nfs3_smallfidder( &resp->resok.obj.handle , resp->status); } } 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_mkdir(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_MKDIR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else { (*afs_rfs3_disp_tbl[NFSPROC3_MKDIR].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) { 
+ 	MKDIR3res *resp = ( MKDIR3res *)xp; 
+ 	afs_nfs3_smallfidder( &resp->resok.obj.handle , resp->status); } } 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_symlink(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_SYMLINK, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else { (*afs_rfs3_disp_tbl[NFSPROC3_SYMLINK].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) {
+         SYMLINK3res *resp = ( SYMLINK3res *)xp;
+         afs_nfs3_smallfidder( &resp->resok.obj.handle , resp->status); } }
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_mknod(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_MKNOD, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else { (*afs_rfs3_disp_tbl[NFSPROC3_MKNOD].orig_proc)(args, xp, exp, rp, crp); 
+     if (afs_NFSRootOnly && call) {
+         MKNOD3res *resp = ( MKNOD3res *)xp;
+         afs_nfs3_smallfidder( &resp->resok.obj.handle , resp->status); } }
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_remove(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_REMOVE, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_REMOVE].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_rmdir(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_RMDIR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_RMDIR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_rename(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_RENAME, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_RENAME].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_link(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_LINK, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_LINK].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_readdir(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_READDIR, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_READDIR].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_readdirplus(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_READDIRPLUS, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_READDIRPLUS].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_fsstat(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_FSSTAT, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_FSSTAT].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_fsinfo(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_FSINFO, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_FSINFO].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
+ 
+ void afs_nfs3_pathconf(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     afs_nfs3_resp dummy; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(0, NFSPROC3_PATHCONF, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_rfs3_disp_tbl[NFSPROC3_PATHCONF].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
  
! void afs_nfs3_commit(char *args, char *xp, char *exp, char *rp, char *crp) { 
!     u_int call; 
!     afs_nfs3_resp dummy; 
!     struct cred *svcred = curthread->t_cred; 
!     curthread->t_cred = (struct cred*)crp; 
!     call=afs_nfs3_dispatcher(0, NFSPROC3_COMMIT, (char *)args, &exp, rp, crp); 
!     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
!     else (*afs_rfs3_disp_tbl[NFSPROC3_COMMIT].orig_proc)(args, xp, exp, rp, crp); 
!     curthread->t_cred = svcred; 
!     return; 
! }
  
! struct afs_nfs_disp_tbl afs_rfs3_disp_tbl[22] = {
      { afs_nfs2_null },
      { afs_nfs3_getattr },
      { afs_nfs3_setattr },
***************
*** 814,823 ****
      { afs_nfs3_mkdir },
      { afs_nfs3_symlink },
      { afs_nfs3_mknod },
!     { afs_nfs3_remove },        
      { afs_nfs3_rmdir },
      { afs_nfs3_rename },
!     { afs_nfs3_link },  
      { afs_nfs3_readdir },
      { afs_nfs3_readdirplus },
      { afs_nfs3_fsstat },
--- 1230,1239 ----
      { afs_nfs3_mkdir },
      { afs_nfs3_symlink },
      { afs_nfs3_mknod },
!     { afs_nfs3_remove },
      { afs_nfs3_rmdir },
      { afs_nfs3_rename },
!     { afs_nfs3_link },
      { afs_nfs3_readdir },
      { afs_nfs3_readdirplus },
      { afs_nfs3_fsstat },
***************
*** 825,869 ****
      { afs_nfs3_pathconf },
      { afs_nfs3_commit }
  };
  
! #define ACL_V3_REQ(FUNCNAME, NFSOP) \
! void FUNCNAME(char *args, char *xp, char *exp, char *rp, char *crp) { \
!     u_int call; \
!     struct cred *svcred = curthread->t_cred; \
!     curthread->t_cred = (struct cred*)crp; \
!     call=afs_nfs3_dispatcher(1, NFSOP, (char *)args, &exp, rp, crp); \
!     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); \
!     else (*afs_rfs3_disp_tbl[NFSOP].orig_proc)(args, xp, exp, rp, crp); \
!     curthread->t_cred = svcred; \
!     return; \
! }
! 
! ACL_V3_REQ(afs_acl3_getacl, ACLPROC3_GETACL)
! ACL_V3_REQ(afs_acl3_setacl, ACLPROC3_SETACL)
! 
! struct afs_nfs_disp_tbl afs_acl3_disp_tbl[ACL3_NPROC] = {
!     { afs_nfs2_null }, 
!     { afs_acl3_getacl }, 
      { afs_acl3_setacl },
  };
  
  /* Munge the dispatch tables to link us in first */
! void 
! afs_xlatorinit_v3(struct rfs_disp_tbl *_rfs_tbl, 
                    struct rfs_disp_tbl *_acl_tbl)
  {
      int i;
! 
      if (xlatorinit_v3_done++) return;
! 
!     for (i=0; i < RFS3_NPROC; i++) {
!         afs_rfs3_disp_tbl[i].orig_proc = _rfs_tbl[i].dis_proc;
!         _rfs_tbl[i].dis_proc = afs_rfs3_disp_tbl[i].afs_proc;
!     }
! 
!     for (i=0; i < ACL3_NPROC; i++) {
!         afs_acl3_disp_tbl[i].orig_proc = _acl_tbl[i].dis_proc;
!         _acl_tbl[i].dis_proc = afs_acl3_disp_tbl[i].afs_proc;
      }
  }
  #endif /* !defined(AFS_NONFSTRANS) */
--- 1241,1292 ----
      { afs_nfs3_pathconf },
      { afs_nfs3_commit }
  };
+ 
+ void afs_acl3_getacl(char *args, char *xp, char *exp, char *rp, char *crp) { 
+     u_int call; 
+     struct cred *svcred = curthread->t_cred; 
+     curthread->t_cred = (struct cred*)crp; 
+     call=afs_nfs3_dispatcher(1, ACLPROC3_GETACL, (char *)args, &exp, rp, crp); 
+     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
+     else (*afs_acl3_disp_tbl[ACLPROC3_GETACL].orig_proc)(args, xp, exp, rp, crp); 
+     curthread->t_cred = svcred; 
+     return; 
+ }
  
! void afs_acl3_setacl(char *args, char *xp, char *exp, char *rp, char *crp) { 
!     u_int call; 
!     struct cred *svcred = curthread->t_cred; 
!     curthread->t_cred = (struct cred*)crp; 
!     call=afs_nfs3_dispatcher(1, ACLPROC3_SETACL, (char *)args, &exp, rp, crp); 
!     if (call>1) afs_nfs3_noaccess((struct afs_nfs3_resp *)xp); 
!     else (*afs_acl3_disp_tbl[ACLPROC3_SETACL].orig_proc)(args, xp, exp, rp, crp); 
!     curthread->t_cred = svcred; 
!     return; 
! }
! 
! struct afs_nfs_disp_tbl afs_acl3_disp_tbl[3] = {
!     { afs_nfs2_null },
!     { afs_acl3_getacl },
      { afs_acl3_setacl },
  };
  
  /* Munge the dispatch tables to link us in first */
! void
! afs_xlatorinit_v3(struct rfs_disp_tbl *_rfs_tbl,
                    struct rfs_disp_tbl *_acl_tbl)
  {
      int i;
!     
      if (xlatorinit_v3_done++) return;
!     
!     for (i=0; i < 22; i++) {
! 	afs_rfs3_disp_tbl[i].orig_proc = _rfs_tbl[i].dis_proc;
! 	_rfs_tbl[i].dis_proc = afs_rfs3_disp_tbl[i].afs_proc;
!     }
!     
!     for (i=0; i < 3; i++) {
! 	afs_acl3_disp_tbl[i].orig_proc = _acl_tbl[i].dis_proc;
! 	_acl_tbl[i].dis_proc = afs_acl3_disp_tbl[i].afs_proc;
      }
  }
  #endif /* !defined(AFS_NONFSTRANS) */
Index: openafs/src/afs/afs_prototypes.h
diff -c openafs/src/afs/afs_prototypes.h:1.4.4.1 openafs/src/afs/afs_prototypes.h:1.4.4.2
*** openafs/src/afs/afs_prototypes.h:1.4.4.1	Wed Jul 31 23:35:11 2002
--- openafs/src/afs/afs_prototypes.h	Thu Nov 14 16:03:57 2002
***************
*** 84,89 ****
--- 84,90 ----
  
  /* afs_util.c */
  extern char *afs_cv2string(char *ttp, afs_uint32 aval);
+ extern char *afs_strchr(char *s, int c);
  extern void print_internet_address(char *preamble, struct srvAddr *sa,
  			    char *postamble, int flag);
  extern afs_int32 afs_data_pointer_to_int32(const void *p);
Index: openafs/src/afs/afs_trace.et
diff -c openafs/src/afs/afs_trace.et:1.3.6.3 openafs/src/afs/afs_trace.et:1.3.6.4
*** openafs/src/afs/afs_trace.et:1.3.6.3	Mon Jul 22 18:14:52 2002
--- openafs/src/afs/afs_trace.et	Fri Nov 15 08:29:28 2002
***************
*** 131,136 ****
  	ec      CM_TRACE_RESIDCMD, "ResidencyCmd tvc 0x%x command %d fid (%d:%d.%d.%d)"
  	ec 	CM_TRACE_DENTRYDELETE, "d_delete inode 0x%x d_name %s/%s"
  	ec	CM_TRACE_DENTRYIPUT, "d_iput inode 0x%x d_name %s/%s"
! 	ec	CM_TRACE_TRYFLUSHDCACHECHILDREN, "TryFlushDcacheChildren ip 0x%x"
  end
  
--- 131,136 ----
  	ec      CM_TRACE_RESIDCMD, "ResidencyCmd tvc 0x%x command %d fid (%d:%d.%d.%d)"
  	ec 	CM_TRACE_DENTRYDELETE, "d_delete inode 0x%x d_name %s/%s"
  	ec	CM_TRACE_DENTRYIPUT, "d_iput inode 0x%x d_name %s/%s"
! 	ec	CM_TRACE_TRYFLUSHDCACHECHILDREN, "TryFlushDcacheChildren ip 0x%x name %s parent %s"
  end
  
Index: openafs/src/afs/afs_util.c
diff -c openafs/src/afs/afs_util.c:1.5.4.2 openafs/src/afs/afs_util.c:1.5.4.3
*** openafs/src/afs/afs_util.c:1.5.4.2	Wed Aug 21 16:53:22 2002
--- openafs/src/afs/afs_util.c	Thu Nov 14 16:03:57 2002
***************
*** 15,21 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_util.c,v 1.5.4.2 2002/08/21 20:53:22 shadow Exp $");
  
  #include "../afs/stds.h"
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
--- 15,21 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_util.c,v 1.5.4.3 2002/11/14 21:03:57 zacheiss Exp $");
  
  #include "../afs/stds.h"
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 70,75 ****
--- 70,85 ----
      return tp;
  
  } /*afs_cv2string*/
+ 
+ char *afs_strchr(char *s, int c)
+ {
+     char *p;
+    
+     for (p = s; *p; p++)
+       if (*p == c)
+ 	return p;
+     return NULL;
+ }
  
  void print_internet_address(char *preamble, struct srvAddr *sa,
  			    char *postamble, int flag)
Index: openafs/src/afs/afs_vcache.c
diff -c openafs/src/afs/afs_vcache.c:1.9.2.16 openafs/src/afs/afs_vcache.c:1.9.2.18
*** openafs/src/afs/afs_vcache.c:1.9.2.16	Tue Sep 10 18:33:27 2002
--- openafs/src/afs/afs_vcache.c	Tue Nov 19 22:18:47 2002
***************
*** 38,44 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_vcache.c,v 1.9.2.16 2002/09/10 22:33:27 zacheiss Exp $");
  
  #include "../afs/sysincludes.h" /*Standard vendor system headers*/
  #include "../afs/afsincludes.h" /*AFS-based standard headers*/
--- 38,44 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/afs_vcache.c,v 1.9.2.18 2002/11/20 03:18:47 zacheiss Exp $");
  
  #include "../afs/sysincludes.h" /*Standard vendor system headers*/
  #include "../afs/afsincludes.h" /*AFS-based standard headers*/
***************
*** 467,472 ****
--- 467,545 ----
  }
  
  #ifdef AFS_LINUX22_ENV
+ 
+ static void __shrink_dcache_parent(struct dentry * parent)
+ {
+ 	struct dentry *this_parent = parent;
+ 	struct list_head *next;
+ 	int found = 0;
+ 	LIST_HEAD(afs_dentry_unused);
+ 
+ repeat:
+ 	next = this_parent->d_subdirs.next;
+ resume:
+ 	while (next != &this_parent->d_subdirs) {
+ 		struct list_head *tmp = next;
+ 		struct dentry *dentry = list_entry(tmp, struct dentry, d_child);
+ 		next = tmp->next;
+ 		if (!DCOUNT(dentry)) {
+ 			list_del(&dentry->d_lru);
+ 			list_add(&dentry->d_lru, afs_dentry_unused.prev);
+ 			found++;
+ 		}
+ 		/*
+ 		 * Descend a level if the d_subdirs list is non-empty.
+ 		 */
+ 		if (!list_empty(&dentry->d_subdirs)) {
+ 			this_parent = dentry;
+ 			goto repeat;
+ 		}
+ 	}
+ 	/*
+ 	 * All done at this level ... ascend and resume the search.
+ 	 */
+ 	if (this_parent != parent) {
+ 		next = this_parent->d_child.next; 
+ 		this_parent = this_parent->d_parent;
+ 		goto resume;
+ 	}
+ 
+ 	for (;;) {
+ 		struct dentry *dentry;
+ 		struct list_head *tmp;
+ 
+ 		tmp = afs_dentry_unused.prev;
+ 
+ 		if (tmp == &afs_dentry_unused)
+ 			break;
+ #ifdef AFS_LINUX24_ENV
+ 		list_del_init(tmp);
+ #else
+ 		list_del(tmp);
+ 		INIT_LIST_HEAD(tmp);
+ #endif /* AFS_LINUX24_ENV */
+ 		dentry = list_entry(tmp, struct dentry, d_lru);
+ 
+ #ifdef AFS_LINUX24_ENV
+ 		/* Unused dentry with a count? */
+ 		if (DCOUNT(dentry))
+ 			BUG();
+ #endif
+ 		DGET(dentry);
+ #ifdef AFS_LINUX24_ENV
+ 		list_del_init(&dentry->d_hash);		/* d_drop */
+ #else
+ 		list_del(&dentry->d_hash);
+ 		INIT_LIST_HEAD(&dentry->d_hash);
+ #endif /* AFS_LINUX24_ENV */
+ 		DUNLOCK();
+ 		dput(dentry);
+ 		DLOCK();
+ 		if (!--found)
+ 			break;
+ 	}
+ }
+ 
  /* afs_TryFlushDcacheChildren -- Shakes loose vcache references held by
   *                               children of the dentry
   *
***************
*** 485,536 ****
      struct list_head *head = &ip->i_dentry;
      struct dentry *dentry;
      
  restart:
      DLOCK();
      cur = head;
      while ((cur = cur->next) != head) {
  	dentry = list_entry(cur, struct dentry, d_alias);
- #ifdef notdef
- 	if (DCOUNT(dentry)) {
- 	    this_parent = dentry;
- 	repeat:
- 	    next = this_parent->d_subdirs.next;
- 	resume:
- 	    while (next && next != &this_parent->d_subdirs) {
- 		struct list_head *tmp = next;
- 		struct dentry *dchld = list_entry(tmp, struct dentry, d_child);
- 		
- 		next = tmp->next;
- 		if (!DCOUNT(dchld) && !dchld->d_inode) {
- 		    DGET(dchld);
- 		    AFS_GUNLOCK();
- 		    DUNLOCK();
- 		    d_drop(dchld);
- 		    dput(dchld);
- 		    AFS_GLOCK();
- 		    DLOCK();
- 		    goto repeat;
- 		}
- 		/*
- 		 * Descend a level if the d_subdirs list is non-empty.
- 		 */
- 		if (!list_empty(&dchld->d_subdirs)) {
- 		    this_parent = dchld;
- 		    goto repeat;
- 		}
- 	    }
- 	    
- 	    /*
- 	     * All done at this level ... ascend and resume the search.
- 	     */
- 	    if (this_parent != dentry) {
- 		next = this_parent->d_child.next;
- 		this_parent = this_parent->d_parent;
- 		goto resume;
- 	    }
- 	}
- #endif
  
  	if (!DCOUNT(dentry)) {
  	    AFS_GUNLOCK();
  	    DGET(dentry);
--- 558,606 ----
      struct list_head *head = &ip->i_dentry;
      struct dentry *dentry;
      
+     AFS_GUNLOCK();
  restart:
+ #ifndef old_vcache_scheme
      DLOCK();
      cur = head;
      while ((cur = cur->next) != head) {
  	dentry = list_entry(cur, struct dentry, d_alias);
  
+ 	afs_Trace3(afs_iclSetp, CM_TRACE_TRYFLUSHDCACHECHILDREN,
+ 		   ICL_TYPE_POINTER, ip,
+ 		   ICL_TYPE_STRING, dentry->d_parent->d_name.name,
+ 		   ICL_TYPE_STRING, dentry->d_name.name);
+ 
+         if (!list_empty(&dentry->d_hash) && !list_empty(&dentry->d_subdirs))
+             __shrink_dcache_parent(dentry);
+ 
+         if (!DCOUNT(dentry)) {
+             DGET(dentry);
+ #ifdef AFS_LINUX24_ENV 
+             list_del_init(&dentry->d_hash);     /* d_drop */
+ #else
+ 	    list_del(&dentry->d_hash);
+ 	    INIT_LIST_HEAD(&dentry->d_hash);
+ #endif /* AFS_LINUX24_ENV */
+             DUNLOCK();
+             dput(dentry);
+             goto restart;
+         }
+     }
+     DUNLOCK();
+     AFS_GLOCK();
+ #else
+ restart:
+     DLOCK();
+     cur = head;
+     while ((cur = cur->next) != head) {
+         dentry = list_entry(cur, struct dentry, d_alias);
+ 
+         afs_Trace3(afs_iclSetp, CM_TRACE_TRYFLUSHDCACHECHILDREN,
+                    ICL_TYPE_POINTER, ip,
+                    ICL_TYPE_STRING, dentry->d_parent->d_name.name,
+                    ICL_TYPE_STRING, dentry->d_name.name);
+ 
  	if (!DCOUNT(dentry)) {
  	    AFS_GUNLOCK();
  	    DGET(dentry);
***************
*** 542,548 ****
  	}
      }
      DUNLOCK();
! 
  }
  #endif /* AFS_LINUX22_ENV */
  
--- 612,618 ----
  	}
      }
      DUNLOCK();
! #endif
  }
  #endif /* AFS_LINUX22_ENV */
  
Index: openafs/src/afs/sysincludes.h
diff -c openafs/src/afs/sysincludes.h:1.6.4.3 openafs/src/afs/sysincludes.h:1.6.4.4
*** openafs/src/afs/sysincludes.h:1.6.4.3	Tue Sep 10 18:33:27 2002
--- openafs/src/afs/sysincludes.h	Thu Nov 14 15:20:39 2002
***************
*** 72,77 ****
--- 72,80 ----
  #include <linux/string.h>
  #include <asm/semaphore.h>
  #include <linux/errno.h>
+ #ifdef COMPLETION_H_EXISTS
+ #include <linux/completion.h>
+ #endif
  
  #else /* AFS_LINUX22_ENV */
  #if defined(AFS_DARWIN_ENV)
Index: openafs/src/afs/HPUX/osi_machdep.h
diff -c openafs/src/afs/HPUX/osi_machdep.h:1.2.8.1 openafs/src/afs/HPUX/osi_machdep.h:1.2.8.3
*** openafs/src/afs/HPUX/osi_machdep.h:1.2.8.1	Tue Apr 23 21:41:30 2002
--- openafs/src/afs/HPUX/osi_machdep.h	Tue Nov 26 18:40:38 2002
***************
*** 87,97 ****
  extern caddr_t kmem_alloc();
  #include <sys/kthread_iface.h>	/* for kt_cred() */
  
! #endif /* _OSI_MACHDEP_H_ */
! 
! 
! 
  
! 
! 
! 
--- 87,94 ----
  extern caddr_t kmem_alloc();
  #include <sys/kthread_iface.h>	/* for kt_cred() */
  
! /* Expected to be available as a patch from HP */
! /* See section D of the top level README for details */
! #include <vfs_vm.h>
  
! #endif /* _OSI_MACHDEP_H_ */
Index: openafs/src/afs/HPUX/osi_vnodeops.c
diff -c openafs/src/afs/HPUX/osi_vnodeops.c:1.5.2.1 openafs/src/afs/HPUX/osi_vnodeops.c:1.5.2.2
*** openafs/src/afs/HPUX/osi_vnodeops.c:1.5.2.1	Tue Apr 23 21:41:30 2002
--- openafs/src/afs/HPUX/osi_vnodeops.c	Thu Nov 14 15:08:34 2002
***************
*** 12,18 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/HPUX/osi_vnodeops.c,v 1.5.2.1 2002/04/24 01:41:30 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
--- 12,18 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/HPUX/osi_vnodeops.c,v 1.5.2.2 2002/11/14 20:08:34 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
***************
*** 179,188 ****
  #include "../h/tuneable.h"
  #include "../h/buf.h"
  #include "../netinet/in.h"
- #include "../rpc/types.h"
- #include "../rpc/auth.h"
- #include "../rpc/clnt.h"
- #include "../rpc/xdr.h"
  
  /* a freelist of one */
  struct buf *afs_bread_freebp = 0;
--- 179,184 ----
Index: openafs/src/afs/LINUX/osi_groups.c
diff -c openafs/src/afs/LINUX/osi_groups.c:1.10.2.1 openafs/src/afs/LINUX/osi_groups.c:1.10.2.2
*** openafs/src/afs/LINUX/osi_groups.c:1.10.2.1	Mon Apr 22 23:32:36 2002
--- openafs/src/afs/LINUX/osi_groups.c	Thu Nov 14 14:47:12 2002
***************
*** 16,22 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.10.2.1 2002/04/23 03:32:36 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"
  #include "../afs/afsincludes.h"
--- 16,22 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.10.2.2 2002/11/14 19:47:12 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"
  #include "../afs/afsincludes.h"
***************
*** 42,48 ****
      gp = current->p_pptr->groups;
  
  
!     if (afs_get_pag_from_groups(gp[0], gp[1]) == NOPAG) {
  	/* We will have to shift grouplist to make room for pag */
  	if (ngroups + 2 > NGROUPS) {
  	    return EINVAL;
--- 42,48 ----
      gp = current->p_pptr->groups;
  
  
!     if ((ngroups < 2) || (afs_get_pag_from_groups(gp[0], gp[1]) == NOPAG)) {
  	/* We will have to shift grouplist to make room for pag */
  	if (ngroups + 2 > NGROUPS) {
  	    return EINVAL;
Index: openafs/src/afs/LINUX/osi_module.c
diff -c openafs/src/afs/LINUX/osi_module.c:1.16.2.5 openafs/src/afs/LINUX/osi_module.c:1.16.2.8
*** openafs/src/afs/LINUX/osi_module.c:1.16.2.5	Thu May  2 11:38:45 2002
--- openafs/src/afs/LINUX/osi_module.c	Mon Dec  9 23:32:40 2002
***************
*** 14,20 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/LINUX/osi_module.c,v 1.16.2.5 2002/05/02 15:38:45 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"
  #include "../afs/afsincludes.h"
--- 14,20 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/LINUX/osi_module.c,v 1.16.2.8 2002/12/10 04:32:40 shadow Exp $");
  
  #include "../afs/sysincludes.h"
  #include "../afs/afsincludes.h"
***************
*** 26,31 ****
--- 26,35 ----
  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
  #include <linux/init.h>
  #endif
+ #ifndef EXPORTED_SYS_CALL_TABLE
+ #include <linux/sched.h>
+ #include <linux/syscall.h>
+ #endif
  
  
  
***************
*** 40,50 ****
--- 44,62 ----
  asmlinkage int (*sys_killp)(int pid, int signal);
  asmlinkage long (*sys_setgroupsp)(int gidsetsize, gid_t *grouplist);
  
+ #ifdef EXPORTED_SYS_CALL_TABLE
  #ifdef AFS_SPARC64_LINUX20_ENV
  extern unsigned int sys_call_table[];  /* changed to uint because SPARC64 has syscaltable of 32bit items */
  #else
  extern void * sys_call_table[]; /* safer for other linuces */
  #endif
+ #else /* EXPORTED_SYS_CALL_TABLE */
+ #ifdef AFS_SPARC64_LINUX20_ENV
+ static unsigned int *sys_call_table;  /* changed to uint because SPARC64 has syscaltable of 32bit items */
+ #else
+ static void ** sys_call_table; /* safer for other linuces */
+ #endif
+ #endif
  extern struct file_system_type afs_file_system;
  
  static long get_page_offset(void);
***************
*** 72,78 ****
--- 84,94 ----
  #if defined(__NR_setgroups32)
  asmlinkage int (*sys32_setgroups32p)(int gidsetsize, __kernel_gid_t32 *grouplist);
  #endif
+ #ifdef EXPORTED_SYS_CALL_TABLE
  extern unsigned int sys_call_table32[];
+ #else
+ static unsigned int *sys_call_table32;
+ #endif
  
  asmlinkage int afs_syscall32(long syscall, long parm1, long parm2, long parm3,
  			     long parm4, long parm5)
***************
*** 200,206 ****
--- 216,239 ----
  #endif
  #endif
  
+ #ifndef EXPORTED_SYS_CALL_TABLE
+     unsigned long *ptr;
+     unsigned long offset;
+     unsigned long datalen;
+     int ret;
+     unsigned long token;
+     char      *mod_name;
+     unsigned long    mod_start;
+     unsigned long    mod_end;
+     char      *sec_name;
+     unsigned long    sec_start;
+     unsigned long    sec_end;
+     char      *sym_name;
+     unsigned long    sym_start;
+     unsigned long    sym_end;
+ #endif
  
+     RWLOCK_INIT(&afs_xosi, "afs_xosi");
  
      /* obtain PAGE_OFFSET value */
      afs_linux_page_offset = get_page_offset();
***************
*** 213,218 ****
--- 246,319 ----
      }
  #endif
  
+ #ifndef EXPORTED_SYS_CALL_TABLE
+     sys_call_table=0;
+ #ifdef EXPORTED_KALLSYMS_SYMBOL
+     ret=1;
+     token=0;
+     while (ret) {
+       sym_start=0;
+       ret=kallsyms_symbol_to_address("sys_call_table", &token, &mod_name,
+ 		     &mod_start, &mod_end, &sec_name, &sec_start, &sec_end,
+ 		     &sym_name, &sym_start, &sym_end);
+       if (ret && !strcmp(mod_name, "kernel"))
+ 	      break;
+     }
+     if (ret && sym_start) {
+            sys_call_table=sym_start;
+     }
+ #else
+ #ifdef EXPORTED_KALLSYMS_ADDRESS
+     ret=kallsyms_address_to_symbol((unsigned long)&init_mm, &mod_name,
+ 		   &mod_start, &mod_end, &sec_name, &sec_start, &sec_end,
+ 		   &sym_name, &sym_start, &sym_end);
+     ptr=(unsigned long *)sec_start;
+     datalen=(sec_end-sec_start)/sizeof(unsigned long);
+ #else
+ #if defined(AFS_IA64_LINUX20_ENV)
+     ptr = (unsigned long *) (&sys_close - 0x180000);
+     datalen=0x180000/sizeof(ptr);
+ #else
+     ptr=(unsigned long *)&init_mm;
+     datalen=16384;
+ #endif
+ #endif
+     for (offset=0;offset <datalen;ptr++,offset++) {
+ #if defined(AFS_IA64_LINUX20_ENV)
+ 	unsigned long close_ip=(unsigned long) ((struct fptr *)&sys_close)->ip;
+ 	unsigned long chdir_ip=(unsigned long) ((struct fptr *)&sys_chdir)->ip;
+ 	unsigned long write_ip=(unsigned long) ((struct fptr *)&sys_write)->ip;
+ 	if (ptr[0] == close_ip &&
+ 	    ptr[__NR_chdir - __NR_close] == chdir_ip &&
+ 	    ptr[__NR_write - __NR_close] == write_ip) {
+ 	    sys_call_table=(void *) &(ptr[ -1 * (__NR_close-1024)]);
+ 	    break;
+ 	}
+ #else
+         if (ptr[0] == (unsigned long)&sys_exit &&
+ 	    ptr[__NR_open - __NR_exit] == (unsigned long)&sys_open) {
+ 	    sys_call_table=ptr - __NR_exit;
+ 	    break;
+ 	}
+ #endif
+     }
+ #ifdef EXPORTED_KALLSYMS_ADDRESS
+     ret=kallsyms_address_to_symbol((unsigned long)sys_call_table, &mod_name,
+ 		   &mod_start, &mod_end, &sec_name, &sec_start, &sec_end,
+ 		   &sym_name, &sym_start, &sym_end);
+     if (ret && strcmp(sym_name, "sys_call_table"))
+             sys_call_table=0;
+ #endif
+ #endif
+     if (!sys_call_table) {
+          printf("Failed to find address of sys_call_table\n");
+ 	 return -EIO;
+     }
+ # ifdef AFS_SPARC64_LINUX20_ENV
+ error cant support this yet.
+ #endif
+ #endif /* SYS_CALL_TABLE */
+ 
      /* Initialize pointers to kernel syscalls. */
  #if defined(AFS_IA64_LINUX20_ENV)
      kernel_gp = ((struct fptr *)printk)->gp;
***************
*** 246,252 ****
  	printf("AFS syscall entry point already in use!\n");
  	return -EBUSY;
      }
- 
  
  #if defined(AFS_IA64_LINUX20_ENV)
      afs_ni_syscall = sys_call_table[__NR_afs_syscall - 1024];
--- 347,352 ----
Index: openafs/src/afs/LINUX/osi_prototypes.h
diff -c openafs/src/afs/LINUX/osi_prototypes.h:1.2.8.1 openafs/src/afs/LINUX/osi_prototypes.h:1.2.8.2
*** openafs/src/afs/LINUX/osi_prototypes.h:1.2.8.1	Wed Jul 31 18:31:15 2002
--- openafs/src/afs/LINUX/osi_prototypes.h	Thu Nov 14 14:53:04 2002
***************
*** 27,32 ****
--- 27,34 ----
  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,
Index: openafs/src/afs/LINUX/osi_vfs.hin
diff -c openafs/src/afs/LINUX/osi_vfs.hin:1.2.2.1 openafs/src/afs/LINUX/osi_vfs.hin:1.2.2.2
*** openafs/src/afs/LINUX/osi_vfs.hin:1.2.2.1	Sat Oct 13 00:28:46 2001
--- openafs/src/afs/LINUX/osi_vfs.hin	Thu Nov 14 15:39:56 2002
***************
*** 44,49 ****
--- 44,50 ----
  #define VCHR S_IFCHR
  #define VLNK S_IFLNK
  #define VSOCK S_IFSOCK
+ #define VFIFO S_IFIFO
  
  /* vcexcl - used only by afs_create */
  enum vcexcl { EXCL, NONEXCL } ;
Index: openafs/src/afs/LINUX/osi_vnodeops.c
diff -c openafs/src/afs/LINUX/osi_vnodeops.c:1.29.2.17 openafs/src/afs/LINUX/osi_vnodeops.c:1.29.2.21
*** openafs/src/afs/LINUX/osi_vnodeops.c:1.29.2.17	Thu Aug  1 15:12:01 2002
--- openafs/src/afs/LINUX/osi_vnodeops.c	Mon Dec  9 23:32:40 2002
***************
*** 23,29 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.29.2.17 2002/08/01 19:12:01 shadow Exp $");
  
  #include "../afs/sysincludes.h"
  #include "../afs/afsincludes.h"
--- 23,29 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.29.2.21 2002/12/10 04:32:40 shadow Exp $");
  
  #include "../afs/sysincludes.h"
  #include "../afs/afsincludes.h"
***************
*** 539,544 ****
--- 539,554 ----
      flock.l_whence = 0;
      flock.l_start = flp->fl_start;
      flock.l_len = flp->fl_end - flp->fl_start;
+ 
+     /* Safe because there are no large files, yet */
+ #if defined(F_GETLK64) && (F_GETLK != F_GETLK64)
+     if (cmd = F_GETLK64)
+ 	cmd = F_GETLK;
+     else if (cmd = F_SETLK64)
+ 	cmd = F_SETLK;
+     else if (cmd = F_SETLKW64)
+ 	cmd = F_SETLKW;
+ #endif /* F_GETLK64 && F_GETLK != F_GETLK64 */
  
      AFS_GLOCK();
      code = afs_lockctl(vcp, &flock, cmd, credp);
Index: openafs/src/afs/SOLARIS/osi_file.c
diff -c openafs/src/afs/SOLARIS/osi_file.c:1.6.2.2 openafs/src/afs/SOLARIS/osi_file.c:1.6.2.3
*** openafs/src/afs/SOLARIS/osi_file.c:1.6.2.2	Wed Aug 21 15:29:02 2002
--- openafs/src/afs/SOLARIS/osi_file.c	Thu Nov 14 15:36:31 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/SOLARIS/osi_file.c,v 1.6.2.2 2002/08/21 19:29:02 shadow Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
--- 10,16 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/SOLARIS/osi_file.c,v 1.6.2.3 2002/11/14 20:36:31 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
***************
*** 149,156 ****
  }
  #endif /* AFS_HAVE_VXFS */
  
! void *osi_UfsOpen(ainode)
!     afs_int32 ainode;
  {
      struct inode *ip;
      register struct osi_file *afile = NULL;
--- 149,159 ----
  }
  #endif /* AFS_HAVE_VXFS */
  
! #if defined(AFS_SUN57_64BIT_ENV)
! void *osi_UfsOpen(ino_t ainode)
! #else
! void *osi_UfsOpen(afs_int32 ainode)
! #endif
  {
      struct inode *ip;
      register struct osi_file *afile = NULL;
Index: openafs/src/afs/SOLARIS/osi_vnodeops.c
diff -c openafs/src/afs/SOLARIS/osi_vnodeops.c:1.7.2.3 openafs/src/afs/SOLARIS/osi_vnodeops.c:1.7.2.4
*** openafs/src/afs/SOLARIS/osi_vnodeops.c:1.7.2.3	Mon Jul 22 18:19:14 2002
--- openafs/src/afs/SOLARIS/osi_vnodeops.c	Thu Nov 14 16:58:40 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/SOLARIS/osi_vnodeops.c,v 1.7.2.3 2002/07/22 22:19:14 zacheiss Exp $");
  
  #if	defined(AFS_SUN_ENV) || defined(AFS_SUN5_ENV)
  /*
--- 10,16 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/SOLARIS/osi_vnodeops.c,v 1.7.2.4 2002/11/14 21:58:40 zacheiss Exp $");
  
  #if	defined(AFS_SUN_ENV) || defined(AFS_SUN5_ENV)
  /*
***************
*** 1935,1946 ****
          mutex_exit(&vp->v_lock);
          return;
      }	
!     mutex_exit(&vp->v_lock);    
      /*
!      * Solaris calls VOP_OPEN on exec, but isn't very diligent about calling
!      * VOP_CLOSE when executable exits.
       */
!     if (avc->opens > 0 && !(avc->states & CCore))
  	avc->opens = avc->execsOrWriters = 0;
  
      afs_InactiveVCache(avc, acred);
--- 1935,1951 ----
          mutex_exit(&vp->v_lock);
          return;
      }	
!     mutex_exit(&vp->v_lock);
! 
      /*
!      * Solaris calls VOP_OPEN on exec, but doesn't call VOP_CLOSE when
!      * the executable exits.  So we clean up the open count here.
!      *
!      * Only do this for mvstat 0 vnodes: when using fakestat, we can't
!      * lose the open count for volume roots (mvstat 2), even though they
!      * will get VOP_INACTIVE'd when released by afs_PutFakeStat().
       */
!     if (avc->opens > 0 && avc->mvstat == 0 && !(avc->states & CCore))
  	avc->opens = avc->execsOrWriters = 0;
  
      afs_InactiveVCache(avc, acred);
Index: openafs/src/afs/UKERNEL/afs_usrops.c
diff -c openafs/src/afs/UKERNEL/afs_usrops.c:1.9.2.1 openafs/src/afs/UKERNEL/afs_usrops.c:1.9.2.2
*** openafs/src/afs/UKERNEL/afs_usrops.c:1.9.2.1	Tue Apr 23 21:41:38 2002
--- openafs/src/afs/UKERNEL/afs_usrops.c	Tue Dec 10 14:11:39 2002
***************
*** 14,20 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.9.2.1 2002/04/24 01:41:38 zacheiss Exp $");
  
  
  #ifdef	UKERNEL
--- 14,20 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.9.2.2 2002/12/10 19:11:39 shadow Exp $");
  
  
  #ifdef	UKERNEL
***************
*** 2219,2225 ****
  	/*
  	 * terminate the current component and skip over slashes
  	 */
! 	nextPathP = strchr(pathP, '/');
  	if (nextPathP != NULL) {
  	    while (*nextPathP == '/') {
  		*(nextPathP++) = '\0';
--- 2219,2225 ----
  	/*
  	 * terminate the current component and skip over slashes
  	 */
! 	nextPathP = afs_strchr(pathP, '/');
  	if (nextPathP != NULL) {
  	    while (*nextPathP == '/') {
  		*(nextPathP++) = '\0';
Index: openafs/src/afs/VNOPS/afs_vnop_create.c
diff -c openafs/src/afs/VNOPS/afs_vnop_create.c:1.6.4.4 openafs/src/afs/VNOPS/afs_vnop_create.c:1.6.4.5
*** openafs/src/afs/VNOPS/afs_vnop_create.c:1.6.4.4	Mon Jul 22 19:14:54 2002
--- openafs/src/afs/VNOPS/afs_vnop_create.c	Thu Nov 14 15:39:58 2002
***************
*** 16,22 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/VNOPS/afs_vnop_create.c,v 1.6.4.4 2002/07/22 23:14:54 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
--- 16,22 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/VNOPS/afs_vnop_create.c,v 1.6.4.5 2002/11/14 20:39:58 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
***************
*** 106,119 ****
  	code = EINVAL;
  	goto done;
      }
! #if	defined(AFS_SUN5_ENV)
!     if ((attrs->va_type == VBLK) || (attrs->va_type == VCHR)) {
! #else
!     if ((attrs->va_type == VBLK) || (attrs->va_type == VCHR) || (attrs->va_type == VSOCK)) {
  #endif
! 	/* We don't support special devices */
  	code = EINVAL;		
  	goto done;
      }
      code = afs_EvalFakeStat(&adp, &fakestate, &treq);
      if (code) goto done;
--- 106,123 ----
  	code = EINVAL;
  	goto done;
      }
!     switch (attrs->va_type) {
!     case VBLK:
!     case VCHR:
! #if	!defined(AFS_SUN5_ENV)
!     case VSOCK:
  #endif
!     case VFIFO:
! 	/* We don't support special devices or FIFOs */
  	code = EINVAL;		
  	goto done;
+     default:
+ 	;
      }
      code = afs_EvalFakeStat(&adp, &fakestate, &treq);
      if (code) goto done;
Index: openafs/src/afs/VNOPS/afs_vnop_lookup.c
diff -c openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.14.2.8 openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.14.2.11
*** openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.14.2.8	Wed Sep 11 03:21:59 2002
--- openafs/src/afs/VNOPS/afs_vnop_lookup.c	Tue Dec 10 14:11:40 2002
***************
*** 22,28 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.14.2.8 2002/09/11 07:21:59 shadow Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
--- 22,28 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.14.2.11 2002/12/10 19:11:40 shadow Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
***************
*** 54,60 ****
  
  afs_int32 afs_bulkStatsDone;
  static int bulkStatCounter = 0;	/* counter for bulk stat seq. numbers */
! int afs_fakestat_enable = 0;
  
  
  /* this would be faster if it did comparison as int32word, but would be 
--- 54,60 ----
  
  afs_int32 afs_bulkStatsDone;
  static int bulkStatCounter = 0;	/* counter for bulk stat seq. numbers */
! int afs_fakestat_enable = 0;	/* 1: fakestat-all, 2: fakestat-crosscell */
  
  
  /* this would be faster if it did comparison as int32word, but would be 
***************
*** 268,279 ****
   *
   * Only issues RPCs if canblock is non-zero.
   */
! static int
! afs_EvalFakeStat_int(avcp, state, areq, canblock)
!     struct vcache **avcp;
!     struct afs_fakestat_state *state;
!     struct vrequest *areq;
!     int canblock;
  {
      struct vcache *tvc, *root_vp;
      struct volume *tvolp = NULL;
--- 268,275 ----
   *
   * Only issues RPCs if canblock is non-zero.
   */
! int afs_EvalFakeStat_int(struct vcache **avcp, struct afs_fakestat_state *state,
! 	struct vrequest *areq, int canblock)
  {
      struct vcache *tvc, *root_vp;
      struct volume *tvolp = NULL;
***************
*** 1400,1416 ****
      } /* sub-block just to reduce stack usage */
  
      if (tvc) {
!        if (adp->states & CForeign)
  	   tvc->states |= CForeign;
  	tvc->parentVnode = adp->fid.Fid.Vnode;
  	tvc->parentUnique = adp->fid.Fid.Unique;
  	tvc->states &= ~CBulkStat;
  
  #if defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS)
          if (!(flags & AFS_LOOKUP_NOEVAL))
            /* don't eval mount points */
  #endif /* UKERNEL && AFS_WEB_ENHANCEMENTS */
! 	if (!afs_fakestat_enable && tvc->mvstat == 1) {
  	    /* a mt point, possibly unevaluated */
  	    struct volume *tvolp;
  
--- 1396,1429 ----
      } /* sub-block just to reduce stack usage */
  
      if (tvc) {
! 	int force_eval = afs_fakestat_enable ? 0 : 1;
! 
! 	if (adp->states & CForeign)
  	   tvc->states |= CForeign;
  	tvc->parentVnode = adp->fid.Fid.Vnode;
  	tvc->parentUnique = adp->fid.Fid.Unique;
  	tvc->states &= ~CBulkStat;
  
+ 	if (afs_fakestat_enable == 2 && tvc->mvstat == 1) {
+ 	    ObtainSharedLock(&tvc->lock, 680);
+ 	    if (!tvc->linkData) {
+ 		UpgradeSToWLock(&tvc->lock, 681);
+ 		code = afs_HandleLink(tvc, &treq);
+ 		ConvertWToRLock(&tvc->lock);
+ 	    } else {
+ 		ConvertSToRLock(&tvc->lock);
+ 		code = 0;
+ 	    }
+ 	    if (!code && !afs_strchr(tvc->linkData, ':'))
+ 		force_eval = 1;
+ 	    ReleaseReadLock(&tvc->lock);
+ 	}
+ 
  #if defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS)
          if (!(flags & AFS_LOOKUP_NOEVAL))
            /* don't eval mount points */
  #endif /* UKERNEL && AFS_WEB_ENHANCEMENTS */
! 	if (tvc->mvstat == 1 && force_eval) {
  	    /* a mt point, possibly unevaluated */
  	    struct volume *tvolp;
  
Index: openafs/src/afs/VNOPS/afs_vnop_readdir.c
diff -c openafs/src/afs/VNOPS/afs_vnop_readdir.c:1.8.4.2 openafs/src/afs/VNOPS/afs_vnop_readdir.c:1.8.4.3
*** openafs/src/afs/VNOPS/afs_vnop_readdir.c:1.8.4.2	Tue Sep 10 18:33:34 2002
--- openafs/src/afs/VNOPS/afs_vnop_readdir.c	Fri Nov 22 14:14:53 2002
***************
*** 22,28 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/VNOPS/afs_vnop_readdir.c,v 1.8.4.2 2002/09/10 22:33:34 zacheiss Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
--- 22,28 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/afs/VNOPS/afs_vnop_readdir.c,v 1.8.4.3 2002/11/22 19:14:53 shadow Exp $");
  
  #include "../afs/sysincludes.h"	/* Standard vendor system headers */
  #include "../afs/afsincludes.h"	/* Afs-based standard headers */
***************
*** 783,789 ****
  #else
  afs1_readdir(avc, auio, acred)
  #endif
!     register struct vcache *avc;
      struct uio *auio;
      struct AFS_UCRED *acred; {
      struct vrequest treq;
--- 783,789 ----
  #else
  afs1_readdir(avc, auio, acred)
  #endif
!     struct vcache *avc;
      struct uio *auio;
      struct AFS_UCRED *acred; {
      struct vrequest treq;
Index: openafs/src/afsd/afsd.c
diff -c openafs/src/afsd/afsd.c:1.13.2.10 openafs/src/afsd/afsd.c:1.13.2.11
*** openafs/src/afsd/afsd.c:1.13.2.10	Wed Aug 21 15:24:55 2002
--- openafs/src/afsd/afsd.c	Thu Nov 14 16:04:27 2002
***************
*** 55,61 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/afsd/afsd.c,v 1.13.2.10 2002/08/21 19:24:55 shadow Exp $");
  
  #define VFS 1
  
--- 55,61 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/afsd/afsd.c,v 1.13.2.11 2002/11/14 21:04:27 zacheiss Exp $");
  
  #define VFS 1
  
***************
*** 1335,1340 ****
--- 1335,1344 ----
      }
      if (as->parms[27].items) {
  	/* -fakestat */
+ 	enable_fakestat = 2;
+     }
+     if (as->parms[28].items) {
+ 	/* -fakestat-all */
  	enable_fakestat = 1;
      }
  
***************
*** 1579,1585 ****
      if (enable_fakestat) {
  	if (afsd_verbose)
  	    printf("%s: Enabling fakestat support in kernel.\n", rn);
! 	code = call_syscall(AFSOP_SET_FAKESTAT, 1);
  	if (code)
  	    printf("%s: Error enabling fakestat support.\n", rn);
      }
--- 1583,1589 ----
      if (enable_fakestat) {
  	if (afsd_verbose)
  	    printf("%s: Enabling fakestat support in kernel.\n", rn);
! 	code = call_syscall(AFSOP_SET_FAKESTAT, enable_fakestat);
  	if (code)
  	    printf("%s: Error enabling fakestat support.\n", rn);
      }
***************
*** 1937,1943 ****
  		), "Enable AFSDB support");
      cmd_AddParm(ts, "-files_per_subdir", CMD_SINGLE, CMD_OPTIONAL, "log(2) of the number of cache files per cache subdirectory");
      cmd_AddParm(ts, "-dynroot", CMD_FLAG, CMD_OPTIONAL, "Enable dynroot support");
!     cmd_AddParm(ts, "-fakestat", CMD_FLAG, CMD_OPTIONAL, "Enable fakestat support");
      return (cmd_Dispatch(argc, argv));
  }
  
--- 1941,1948 ----
  		), "Enable AFSDB support");
      cmd_AddParm(ts, "-files_per_subdir", CMD_SINGLE, CMD_OPTIONAL, "log(2) of the number of cache files per cache subdirectory");
      cmd_AddParm(ts, "-dynroot", CMD_FLAG, CMD_OPTIONAL, "Enable dynroot support");
!     cmd_AddParm(ts, "-fakestat", CMD_FLAG, CMD_OPTIONAL, "Enable fakestat support for cross-cell mounts");
!     cmd_AddParm(ts, "-fakestat-all", CMD_FLAG, CMD_OPTIONAL, "Enable fakestat support for all mounts");
      return (cmd_Dispatch(argc, argv));
  }
  
Index: openafs/src/butc/read_tape.c
diff -c openafs/src/butc/read_tape.c:1.4 openafs/src/butc/read_tape.c:1.4.4.1
*** openafs/src/butc/read_tape.c:1.4	Thu Jul 12 15:58:28 2001
--- openafs/src/butc/read_tape.c	Thu Nov 14 16:40:34 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/butc/read_tape.c,v 1.4 2001/07/12 19:58:28 shadow Exp $");
  
  #include <afs/cmd.h>
  #include <lock.h>
--- 10,16 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/butc/read_tape.c,v 1.4.4.1 2002/11/14 21:40:34 zacheiss Exp $");
  
  #include <afs/cmd.h>
  #include <lock.h>
***************
*** 163,169 ****
    struct volumeHeader *headerPtr;
  {
    afs_int32 len;
!   char ch;
    int rc;
    int oflag;
    int  skip, first;
--- 163,169 ----
    struct volumeHeader *headerPtr;
  {
    afs_int32 len;
!   int ch;
    int rc;
    int oflag;
    int  skip, first;
Index: openafs/src/butc/recoverDb.c
diff -c openafs/src/butc/recoverDb.c:1.5 openafs/src/butc/recoverDb.c:1.5.2.1
*** openafs/src/butc/recoverDb.c:1.5	Tue Aug  7 20:03:40 2001
--- openafs/src/butc/recoverDb.c	Thu Nov 14 16:40:34 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/butc/recoverDb.c,v 1.5 2001/08/08 00:03:40 shadow Exp $");
  
  #include <stdio.h>
  #ifdef AFS_NT40_ENV
--- 10,16 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/butc/recoverDb.c,v 1.5.2.1 2002/11/14 21:40:34 zacheiss Exp $");
  
  #include <stdio.h>
  #ifdef AFS_NT40_ENV
***************
*** 113,119 ****
  Ask(st)
       char *st;
  {
!     char response;
  
      while (1)
      {
--- 113,119 ----
  Ask(st)
       char *st;
  {
!     int  response;
  
      while (1)
      {
***************
*** 123,129 ****
  	fflush(stdout);
  	response = getchar();
  	if      ( response == 'y' ) return(1);
! 	else if ( response == 'n' ) return(0);
  	printf("please answer y/n\n");
      }
  }
--- 123,129 ----
  	fflush(stdout);
  	response = getchar();
  	if      ( response == 'y' ) return(1);
! 	else if ( response == 'n' || response == EOF) return(0);
  	printf("please answer y/n\n");
      }
  }
Index: openafs/src/cf/linux-test4.m4
diff -c openafs/src/cf/linux-test4.m4:1.6.2.4 openafs/src/cf/linux-test4.m4:1.6.2.6
*** openafs/src/cf/linux-test4.m4:1.6.2.4	Wed Sep 11 03:02:51 2002
--- openafs/src/cf/linux-test4.m4	Tue Nov 26 18:54:44 2002
***************
*** 14,19 ****
--- 14,83 ----
  AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock)
  CPPFLAGS="$save_CPPFLAGS"])
  
+ AC_DEFUN(LINUX_EXPORTS_SYS_CALL_TABLE, [
+ AC_MSG_CHECKING(for exported sys_call_table)
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $CPPFLAGS"
+ AC_CACHE_VAL(ac_cv_linux_exports_sys_call_table,
+ [
+ AC_TRY_COMPILE(
+ [#include <linux/modversions.h>],
+ [#ifndef __ver_sys_call_table
+ #error sys_call_table not exported
+ #endif],
+ ac_cv_linux_exports_sys_call_table=yes,
+ ac_cv_linux_exports_sys_call_table=no)])
+ AC_MSG_RESULT($ac_cv_linux_exports_sys_call_table)
+ CPPFLAGS="$save_CPPFLAGS"])
+ 
+ AC_DEFUN(LINUX_EXPORTS_INIT_MM, [
+ AC_MSG_CHECKING(for exported init_mm)
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $CPPFLAGS"
+ AC_CACHE_VAL(ac_cv_linux_exports_init_mm,
+ [
+ AC_TRY_COMPILE(
+ [#include <linux/modversions.h>],
+ [#ifndef __ver_init_mm
+ #error init_mm not exported
+ #endif],
+ ac_cv_linux_exports_init_mm=yes,
+ ac_cv_linux_exports_init_mm=no)])
+ AC_MSG_RESULT($ac_cv_linux_exports_init_mm)
+ CPPFLAGS="$save_CPPFLAGS"])
+ 
+ AC_DEFUN(LINUX_EXPORTS_KALLSYMS_SYMBOL, [
+ AC_MSG_CHECKING(for exported kallsyms_symbol_to_address)
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $CPPFLAGS"
+ AC_CACHE_VAL(ac_cv_linux_exports_kallsyms_symbol,
+ [
+ AC_TRY_COMPILE(
+ [#include <linux/modversions.h>],
+ [#ifndef __ver_kallsyms_symbol_to_address
+ #error kallsyms_symbol_to_address not exported
+ #endif],
+ ac_cv_linux_exports_kallsyms_symbol=yes,
+ ac_cv_linux_exports_kallsyms_symbol=no)])
+ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_symbol)
+ CPPFLAGS="$save_CPPFLAGS"])
+ 
+ AC_DEFUN(LINUX_EXPORTS_KALLSYMS_ADDRESS, [
+ AC_MSG_CHECKING(for exported kallsyms_address_to_symbol)
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $CPPFLAGS"
+ AC_CACHE_VAL(ac_cv_linux_exports_kallsyms_address,
+ [
+ AC_TRY_COMPILE(
+ [#include <linux/modversions.h>],
+ [#ifndef __ver_kallsyms_address_to_symbol
+ #error kallsyms_address_to_symbol not exported
+ #endif],
+ ac_cv_linux_exports_kallsyms_address=yes,
+ ac_cv_linux_exports_kallsyms_address=no)])
+ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_address)
+ CPPFLAGS="$save_CPPFLAGS"])
+ 
  AC_DEFUN(LINUX_COMPLETION_H_EXISTS, [
  AC_MSG_CHECKING(for linux/completion.h existance)
  save_CPPFLAGS="$CPPFLAGS"
***************
*** 21,28 ****
  AC_CACHE_VAL(ac_cv_linux_completion_h_exists,
  [
  AC_TRY_COMPILE(
! [#include <linux/completion.h>],
! [struct completion _c;],
  ac_cv_linux_completion_h_exists=yes,
  ac_cv_linux_completion_h_exists=no)])
  AC_MSG_RESULT($ac_cv_linux_completion_h_exists)
--- 85,97 ----
  AC_CACHE_VAL(ac_cv_linux_completion_h_exists,
  [
  AC_TRY_COMPILE(
! [#include <linux/completion.h>
! #include <linux/version.h>],
! [struct completion _c;
! #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,8)
! lose
! #endif
! ],
  ac_cv_linux_completion_h_exists=yes,
  ac_cv_linux_completion_h_exists=no)])
  AC_MSG_RESULT($ac_cv_linux_completion_h_exists)
Index: openafs/src/cf/linux-test5.m4
diff -c /dev/null openafs/src/cf/linux-test5.m4:1.1.2.1
*** /dev/null	Tue Dec 10 18:46:38 2002
--- openafs/src/cf/linux-test5.m4	Thu Nov 14 17:18:01 2002
***************
*** 0 ****
--- 1,71 ----
+ 
+ AC_DEFUN(OPENAFS_GCC_SUPPORTS_MARCH, [
+ AC_MSG_CHECKING(if $CC accepts -march=pentium)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="-MARCH=pentium"
+ AC_CACHE_VAL(openafs_gcc_supports_march,[
+ AC_TRY_COMPILE(
+ [],
+ [int x;],
+ openafs_gcc_supports_march=yes,
+ openafs_gcc_supports_march=no)])
+ AC_MSG_RESULT($openafs_gcc_supports_march)
+ if test x$openafs_gcc_supports_march = xyes; then
+   P5PLUS_KOPTS="-march=pentium"
+ else
+   P5PLUS_KOPTS="-m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2"
+ fi
+ CFLAGS="$save_CFLAGS"
+ ])
+ 
+ AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING, [
+ AC_MSG_CHECKING(if $CC needs -fno-strict-aliasing)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="-fno-strict-aliasing"
+ AC_CACHE_VAL(openafs_gcc_needs_no_strict_aliasing,[
+ AC_TRY_COMPILE(
+ [],
+ [int x;],
+ openafs_gcc_needs_no_strict_aliasing=yes,
+ openafs_gcc_needs_no_strict_aliasing=no)])
+ AC_MSG_RESULT($openafs_gcc_needs_no_strict_aliasing)
+ if test x$openafs_gcc_needs_no_strict_aliasing = xyes; then
+   LINUX_GCC_KOPTS="$LINUX_GCC_KOPTS -fno-strict-aliasing"
+ fi
+ CFLAGS="$save_CFLAGS"
+ ])
+ 
+ AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE, [
+ AC_MSG_CHECKING(if $CC needs -fno-strength-reduce)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="-fno-strength-reduce"
+ AC_CACHE_VAL(openafs_gcc_needs_no_strength_reduce,[
+ AC_TRY_COMPILE(
+ [],
+ [int x;],
+ openafs_gcc_needs_no_strength_reduce=yes,
+ openafs_gcc_needs_no_strength_reduce=no)])
+ AC_MSG_RESULT($openafs_gcc_needs_no_strength_reduce)
+ if test x$openafs_gcc_needs_no_strength_reduce = xyes; then
+   LINUX_GCC_KOPTS="$LINUX_GCC_KOPTS -fno-strength-reduce"
+ fi
+ CFLAGS="$save_CFLAGS"
+ ])
+ 
+ AC_DEFUN(OPENAFS_GCC_SUPPORTS_NO_COMMON, [
+ AC_MSG_CHECKING(if $CC supports -fno-common)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="-fno-common"
+ AC_CACHE_VAL(openafs_gcc_supports_no_common,[
+ AC_TRY_COMPILE(
+ [],
+ [int x;],
+ openafs_gcc_supports_no_common=yes,
+ openafs_gcc_supports_no_common=no)])
+ AC_MSG_RESULT($openafs_gcc_supports_no_common)
+ if test x$openafs_gcc_supports_no_common = xyes; then
+   LINUX_GCC_KOPTS="$LINUX_GCC_KOPTS -fno-common"
+ fi
+ CFLAGS="$save_CFLAGS"
+ ])
+ 
Index: openafs/src/config/Makefile.hp_ux110.in
diff -c openafs/src/config/Makefile.hp_ux110.in:1.5.2.2 openafs/src/config/Makefile.hp_ux110.in:1.5.2.3
*** openafs/src/config/Makefile.hp_ux110.in:1.5.2.2	Tue Sep 10 01:41:58 2002
--- openafs/src/config/Makefile.hp_ux110.in	Thu Nov 14 15:01:59 2002
***************
*** 12,18 ****
  XCFLAGS=${XCFLAGS0} +DA1.0
  XCFLAGS64=${XCFLAGS0} +DA2.0W
  MT_CFLAGS=-D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV ${XCFLAGS}
! XLIBS=@LIB_AFSDB@ -lnsl
  XLIBELFA=-lelf
  TXLIBS=/usr/lib/libHcurses.a
  MTLIBS=-lpthread
--- 12,18 ----
  XCFLAGS=${XCFLAGS0} +DA1.0
  XCFLAGS64=${XCFLAGS0} +DA2.0W
  MT_CFLAGS=-D_POSIX_C_SOURCE=199506L -DAFS_PTHREAD_ENV ${XCFLAGS}
! XLIBS=@LIB_AFSDB@
  XLIBELFA=-lelf
  TXLIBS=/usr/lib/libHcurses.a
  MTLIBS=-lpthread
Index: openafs/src/config/NTMakefile.i386_nt40
diff -c openafs/src/config/NTMakefile.i386_nt40:1.6.2.3 openafs/src/config/NTMakefile.i386_nt40:1.6.2.5
*** openafs/src/config/NTMakefile.i386_nt40:1.6.2.3	Sun Jan 20 04:09:15 2002
--- openafs/src/config/NTMakefile.i386_nt40	Thu Dec  5 00:59:56 2002
***************
*** 37,44 ****
  !ENDIF
  
  #define used in WinNT/2000 installation and program version display
! AFSPRODUCT_VERSION=1.2.2 b
! CELLNAME_DEFAULT=Your Cell Name
  CELLSERVDB_INSTALL=CellServDB.GrandCentral
  CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB
  #NMAKE_DEFINES=-DDEBUG_VERBOSE
--- 37,44 ----
  !ENDIF
  
  #define used in WinNT/2000 installation and program version display
! AFSPRODUCT_VERSION=1.2.8
! CELLNAME_DEFAULT=openafs.org
  CELLSERVDB_INSTALL=CellServDB.GrandCentral
  CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB
  #NMAKE_DEFINES=-DDEBUG_VERBOSE
***************
*** 61,103 ****
  
  !ENDIF
  
- # Limit default include and library directories to those specified for build.
- 
- !IFNDEF AFSDEV_INCLUDE
- !ERROR Must define AFSDEV_INCLUDE to be the default include directories.
- !ENDIF
- 
- !IF ((!DEFINED(INCLUDE)) && ([set INCLUDE=$(AFSDEV_INCLUDE)] != 0))
- #    If env. var. INCLUDE not defined then macro assignment won't set it.
- !ERROR Failed setting environment variable INCLUDE.
- !ENDIF
- INCLUDE = $(AFSDEV_INCLUDE)
- 
- 
- !IFNDEF AFSDEV_LIB
- !ERROR Must define AFSDEV_LIB to be the default library directories.
- !ENDIF
- 
- !IF ((!DEFINED(LIB)) && ([set LIB=$(AFSDEV_LIB)] != 0))
- #    If env. var. LIB not defined then macro assignment won't set it.
- !ERROR Failed setting environment variable LIB.
- !ENDIF
- LIB = $(AFSDEV_LIB)
- 
- 
- # Put default build binary directories at front of path.
- 
  !IFNDEF AFSDEV_BIN
  !ERROR Must define AFSDEV_BIN to be the default build binary directories.
  !ENDIF
  
- !IF ((!DEFINED(PATH)) && ([set PATH=$(AFSDEV_BIN)] != 0))
- #    If env. var. PATH not defined then macro assignment won't set it.
- !ERROR Failed setting environment variable PATH.
- !ENDIF
- PATH = $(AFSDEV_BIN);$(PATH)
- 
- 
  # Undefine WIN32.MAK NODEBUG macro.
  # Always generate full debug info, unless profiling or tuning (see below).
  
--- 61,70 ----
***************
*** 118,123 ****
--- 85,126 ----
  DESTDIR = $(AFSROOT)\DEST
  !ENDIF
  
+ #CHECK which VERSION of the complier we are using
+ #v6.0 doesn't work using msvcrtd.lib unless AFSDEV_CRTDEBUG is defined, v7.0 requires it
+ !IF ("$(AFSVER)"=="")
+ !IF EXISTS("$(DESTDIR)\bin\util_cr.exe")
+ !IF EXISTS("$(AFSDEV_BIN)\CL.exe")
+ !IF	(([$(DESTDIR)\bin\util_cr.exe __ $(AFSDEV_BIN)\CL.exe 7])==1) 
+ AFSVER_CL=70
+ !ELSE
+ AFSVER_CL=60
+ !ENDIF
+ !ELSE
+ !MESSAGE WARNING-Complier version not available
+ !ENDIF
+ !ELSE
+ !MESSAGE WARNING-Complier version not available
+ !ENDIF
+ !ENDIF
+ 
+ #CHECK which VERSION of the complier we are using
+ #v6.0 doesn't work using msvcrtd.lib unless AFSDEV_CRTDEBUG is defined, v7.0 requires it
+ !IF ("$(AFSVER)"=="")
+ !IF EXISTS("$(DESTDIR)\bin\util_cr.exe")
+ !IF EXISTS("$(AFSDEV_BIN)\CL.exe")
+ !IF	(([$(DESTDIR)\bin\util_cr.exe __ $(AFSDEV_BIN)\CL.exe 7])==1) 
+ AFSVER_CL=70
+ !ELSE
+ AFSVER_CL=60
+ !ENDIF
+ !ELSE
+ !MESSAGE WARNING-Complier version not available
+ !ENDIF
+ !ELSE
+ !MESSAGE WARNING-Complier version not available
+ !ENDIF
+ !ENDIF
+ 
  # Command macros.
  COPY = copy
  DEL = -del
***************
*** 184,196 ****
  !IF ("$(AFSDEV_BUILDTYPE)" == "FREE")
  #    Apply full optimization; generate full debug info in obj.
  afscflags = $(afscflags) /Ox /Z7
! ldebug = $(ldebug) -debugtype:both
  cdebug = $(cdebug:-Od=)  # avoid annoying override warning (D4025)
  
  !ELSEIF ("$(AFSDEV_BUILDTYPE)" == "CHECKED")
  #    Disable optimization; generate full debug info in obj.
  afscflags = $(afscflags) /Od /Z7
  ldebug = $(ldebug) -debugtype:both
  !ENDIF
  
  # Set compiler warning level
--- 187,201 ----
  !IF ("$(AFSDEV_BUILDTYPE)" == "FREE")
  #    Apply full optimization; generate full debug info in obj.
  afscflags = $(afscflags) /Ox /Z7
! ldebug = $(ldebug)
  cdebug = $(cdebug:-Od=)  # avoid annoying override warning (D4025)
+ cvarsdll = $(cvarsdll:-MDd=-MD)
  
  !ELSEIF ("$(AFSDEV_BUILDTYPE)" == "CHECKED")
  #    Disable optimization; generate full debug info in obj.
  afscflags = $(afscflags) /Od /Z7
  ldebug = $(ldebug) -debugtype:both
+ cdebug = $(cdebug:-Z7=-Z7)  # avoid annoying override warning (D4025)
  !ENDIF
  
  # Set compiler warning level
***************
*** 215,227 ****
  # /FIXED:NO   generates a relocation section in the executable
  
  afslflags =\
! 	/FIXED:NO
  
  
  
  # For checked builds, define DEBUG (but not the MS control flag _DEBUG).
  
! !IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED")
  afscdefs = $(afscdefs) -DDEBUG
  !ENDIF
  
--- 220,232 ----
  # /FIXED:NO   generates a relocation section in the executable
  
  afslflags =\
! 	/FIXED:NO /VERBOSE:LIB
  
  
  
  # For checked builds, define DEBUG (but not the MS control flag _DEBUG).
  
! !IF (("$(AFSDEV_BUILDTYPE)" == "CHECKED") && ("$(AFSVER_CL)"=="60"))
  afscdefs = $(afscdefs) -DDEBUG
  !ENDIF
  
***************
*** 267,273 ****
  # Macros for creating/modifying binary targets
  
  # EXE link macro for console applications
! EXECONLINK = $(link) /OUT:$@ $(ldebug) $(conlflags) $(afslflags) $(conlibsdll) $**
  
  # EXE link macro for GUI applications
  EXEGUILINK = $(link) /OUT:$@ $(ldebug) $(guilflags) $(afslflags) $(guilibsdll) $**
--- 272,278 ----
  # Macros for creating/modifying binary targets
  
  # EXE link macro for console applications
! EXECONLINK = $(link) /OUT:$@ $(ldebug) $(conlflags) $(afslflags) $(conlibsdll) version.lib $**
  
  # EXE link macro for GUI applications
  EXEGUILINK = $(link) /OUT:$@ $(ldebug) $(guilflags) $(afslflags) $(guilibsdll) $**
***************
*** 279,288 ****
--- 284,305 ----
  DLLCONLINK = $(link) /OUT:$@ $(ldebug) $(dlllflags) $(afslflags) $(conlibsdll) $**
  
  # DLL link macro for GUI applications
+ !IF ("$(AFSDEV_BUILDTYPE)" == "CHECKED")
+ DLLGUILINK = $(link) /OUT:$@ /NODEFAULTLIB:LIBC $(ldebug) $(dlllflags) $(afslflags) $(guilibsdll)  $**
+ !ELSE
  DLLGUILINK = $(link) /OUT:$@ $(ldebug) $(dlllflags) $(afslflags) $(guilibsdll) $**
+ !ENDIF
  
  # DLL link macro for MFC applications
  DLLMFCLINK = $(link) /OUT:$@ $(ldebug) $(mfcdlllflags) $(afslflags) $(mfclibsdll) $**
+ 
+ #v6.0 doesn't work using msvcrtd.lib unless AFSDEV_CRTDEBUG is defined, v7.0 requires it
+ !IFNDEF AFSDEV_CRTDEBUG
+ !IF ("$(AFSVER_CL)"=="60")
+ EXEMFCLINK=$(EXEMFCLINK:/NODEFAULTLIB:msvcrtd.lib=)
+ DLLMFCLINK=$(DLLMFCLINK:/NODEFAULTLIB:msvcrtd.lib=)
+ !ENDIF
+ !ENDIF
  
  # DLL link macro for resource-only DLLs
  DLLRESLINK = $(link) /OUT:$@ $(dlllflags:-entry:_DllMainCRTStartup@12=-noentry) $(afslflags) $**
Index: openafs/src/config/NTMakefile.i386_win95
diff -c openafs/src/config/NTMakefile.i386_win95:1.3.2.3 openafs/src/config/NTMakefile.i386_win95:1.3.2.4
*** openafs/src/config/NTMakefile.i386_win95:1.3.2.3	Sun Jan 20 04:09:15 2002
--- openafs/src/config/NTMakefile.i386_win95	Wed Dec  4 09:20:50 2002
***************
*** 11,17 ****
  #     AFSDEV_BUILDTYPE = [ CHECKED | FREE ]
  #     AFSDEV_INCLUDE = <default include directories>
  #     AFSDEV_LIB = <default library directories>
- #     AFSDEV_BIN = <default build binary directories>
  #
  # Optional definitions:
  #     AFSDEV_DESTDIR = <top-level install directory>  (default is $(AFSROOT)\DEST)
--- 11,16 ----
***************
*** 93,112 ****
  !ERROR Failed setting environment variable LIB.
  !ENDIF
  LIB = $(AFSDEV_LIB)
- 
- 
- # Put default build binary directories at front of path.
- 
- !IFNDEF AFSDEV_BIN
- !ERROR Must define AFSDEV_BIN to be the default build binary directories.
- !ENDIF
- 
- !IF ((!DEFINED(PATH)) && ([set PATH=$(AFSDEV_BIN)] != 0))
- #    If env. var. PATH not defined then macro assignment won't set it.
- !ERROR Failed setting environment variable PATH.
- !ENDIF
- PATH = $(AFSDEV_BIN);$(PATH)
- 
  
  # Undefine WIN32.MAK NODEBUG macro.
  # Always generate full debug info, unless profiling or tuning (see below).
--- 92,97 ----
Index: openafs/src/config/NTMakefile.version-NOCML
diff -c openafs/src/config/NTMakefile.version-NOCML:1.2 openafs/src/config/NTMakefile.version-NOCML:1.2.8.1
*** openafs/src/config/NTMakefile.version-NOCML:1.2	Sat Nov  4 05:04:21 2000
--- openafs/src/config/NTMakefile.version-NOCML	Wed Dec  4 09:27:32 2002
***************
*** 14,24 ****
  !ENDIF
  
  $(VERSFILE).c:
! 	echo char $(CML_PREFIX)cml_version_number[]="@(#)CML not accessible: No version information"; >$(VERSFILE).c
! 	echo char* AFSVersion = "afs??";  >>$(VERSFILE).c
  
  $(VERSFILE).h:
! 	echo #define AFS_VERINFO_BUILD "CML not accessible: No version information" >$(VERSFILE).h
  
  $(VERSFILE).txt:
! 	echo CML not accessible: No version information >$(VERSFILE).txt
--- 14,24 ----
  !ENDIF
  
  $(VERSFILE).c:
! 	echo char $(CML_PREFIX)cml_version_number[]="@(#)OpenAFS$(AFSPRODUCT_VERSION)"; >$(VERSFILE).c
! 	echo char* AFSVersion = "OpenAFS$(AFSPRODUCT_VERSION)";  >>$(VERSFILE).c
  
  $(VERSFILE).h:
! 	echo #define AFS_VERINFO_BUILD "OpenAFS$(AFSPRODUCT_VERSION)" >$(VERSFILE).h
  
  $(VERSFILE).txt:
! 	echo OpenAFS$(AFSPRODUCT_VERSION)>$(VERSFILE).txt
Index: openafs/src/config/param.hp_ux110.h
diff -c openafs/src/config/param.hp_ux110.h:1.3 openafs/src/config/param.hp_ux110.h:1.3.4.1
*** openafs/src/config/param.hp_ux110.h:1.3	Thu Jul  5 11:20:18 2001
--- openafs/src/config/param.hp_ux110.h	Thu Nov 14 15:08:38 2002
***************
*** 80,85 ****
--- 80,89 ----
   * supress the warnings.
   */
  struct uio;
+ 
+ #define memset(A, B, S) bzero(A, S)
+ #define memcpy(B, A, S) bcopy(A, B, S)
+ #define memcmp(A, B, S) bcmp(A, B, S)
  #endif
  #endif /* KERNEL */
  #define	AFS_DIRENT	
Index: openafs/src/config/util_cr.c
diff -c openafs/src/config/util_cr.c:1.4 openafs/src/config/util_cr.c:1.4.2.2
*** openafs/src/config/util_cr.c:1.4	Sun Aug 19 10:44:47 2001
--- openafs/src/config/util_cr.c	Thu Dec  5 00:59:56 2002
***************
*** 16,21 ****
--- 16,23 ----
  #include "windows.h"
  #include "malloc.h"
  #include "time.h"
+ #include "stdlib.h"
+ #include <Winver.h>
  
  void usuage()
  {
***************
*** 29,39 ****
  	OR util_cr * \"-[register key value]\" ; aremove register key value\n\
  	OR util_cr @ file.ini \"[SectionKey]variable=value\" ; update ini-ipr-pwf file\n\
  	OR util_cr @ file.ini \"[SectionKey]variable=value*DatE*\" ; update ini-ipr-pwf file, insert date\n\
! 	OR util_cr ~  ;force error\n");
  	exit(0xc000);
  }
  
  
  void Addkey (const char *hkey,const char *subkey,const char *stag,const char *sval)
  {
  	DWORD disposition,result;
--- 31,180 ----
  	OR util_cr * \"-[register key value]\" ; aremove register key value\n\
  	OR util_cr @ file.ini \"[SectionKey]variable=value\" ; update ini-ipr-pwf file\n\
  	OR util_cr @ file.ini \"[SectionKey]variable=value*DatE*\" ; update ini-ipr-pwf file, insert date\n\
! 	OR util_cr ~  ;force error\n\
! 	OR util_cr _ [nt xp 98 9x w2] ;test for OS, return 1 if match else 0\n\
! 	OR util_cr _ [nt xp 98 9x w2] _[command] [true options] [false options] [paramters] \n\t test for OS; execute command with options\n");
  	exit(0xc000);
  }
  
+ struct TRANSLATION {
+ 		WORD langID;         // language ID
+ 		WORD charset;        // character set (code page)
+ };
  
+ int CheckProductVersion (int argc,char *argv[])
+ {
+ 	DWORD wHandle;
+ 	DWORD rc;
+ 	UINT len;
+ 	char query[1024];
+ 	BYTE *lpData;
+ 	struct TRANSLATION mTrans,* pTrans;
+ 	LPCTSTR pVal;
+ 	UINT iLenVal;
+ 	int ret;
+ 	lpData=NULL;
+ 	ret=0;
+ /*	printf("1=%s,2=%s\n",argv[2],argv[3]);*/
+ 	rc =GetFileVersionInfoSize(argv[2],&wHandle);
+ 	if (rc>0)
+ 	{
+ 		lpData=(BYTE *)malloc(rc*sizeof(BYTE));
+ 		if (GetFileVersionInfo(argv[2],wHandle,rc,lpData))
+ 		{
+ 			if (VerQueryValue(lpData,
+ 				"\\VarFileInfo\\Translation", (PVOID *)&pTrans, &len) && len >= 4) {
+ 				mTrans = *pTrans;
+ 			}
+ 			sprintf(query,"\\StringFileInfo\\%04x%04x\\%s",mTrans.langID,mTrans.charset,"ProductVersion");
+ 			if (VerQueryValue(lpData, (LPTSTR)(LPCTSTR)query,
+ 				(LPVOID*)&pVal, &iLenVal)) {
+ 				ret=(atoi(pVal)>=atoi(argv[3]))?1:0;
+ 			}
+ 		}
+ 		if (lpData)
+ 			free(lpData);
+ 	}
+ 	return ret;
+ }
+ 
+ int CheckVersion(int argc,char *argv[])
+ {
+ 	OSVERSIONINFO VersionInfo;
+ 	int i;
+ 	memset(&VersionInfo,0,sizeof(VersionInfo));
+ 	VersionInfo.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);
+ 	if (!GetVersionEx(&VersionInfo))
+ 	{
+ 		return 0XC000;
+ 	}
+ 	for (i=1;i<argc;i++)
+ 	{
+ 		if (stricmp(argv[i],"nt")==0)
+ 		{
+ 			if ((VersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT) 
+ 				&& (VersionInfo.dwMajorVersion==4)
+ 				&& (VersionInfo.dwMinorVersion==0))
+ 				return 1;
+ 		}
+ 		if (stricmp(argv[i],"xp")==0)
+ 		{
+ 			if ((VersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT) 
+ 				&& (VersionInfo.dwMajorVersion==5)
+ 				&& (VersionInfo.dwMinorVersion==1))
+ 				return 1;
+ 		}
+ 		if (stricmp(argv[i],"w2")==0)
+ 		{
+ 			if ((VersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT) 
+ 				&& (VersionInfo.dwMajorVersion==5)
+ 				&& (VersionInfo.dwMinorVersion==0))
+ 				return 1;
+ 		}
+ 		if (stricmp(argv[i],"98")==0)
+ 		{
+ 			if ((VersionInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) && (VersionInfo.dwMinorVersion==10))
+ 				return 1;
+ 		}
+ 		if (stricmp(argv[i],"95")==0)
+ 		{
+ 			if ((VersionInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) && (VersionInfo.dwMinorVersion==0))
+ 
+ 				return 1;
+ 		}
+ 		if (stricmp(argv[i],"9x")==0)
+ 		{
+ 			if (VersionInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
+ 				return 1;
+ 		}
+ 		if (stricmp(argv[i],"_")==0)
+ 			return 0;
+ 	}
+ 	return 0;
+ }
+ 
+ int DoCheckVersion(int argc,char *argv[])
+ {
+ 	//arg 1 nth versions
+ 	//arg nth _
+ 	//arg n+1 command
+ 	//arg n+2 option true
+ 	//arg n+3 option false
+ 	//arg n+4 ... command arguments
+ 	int x,i;
+ 	int ret;
+ 	char command[1024];
+ 	for (x=1;((x<argc) && (strcmp(argv[x],"_")!=0));x++);
+ 	if (strcmp(argv[x],"_")!=0)
+ 		return 0xc000;
+ 	ret=CheckVersion(argc-x,&argv[x]);
+ 	if (x+6>=argc)
+ 	{
+ 		return ret;
+ 	}
+ 	for (++x;((x<argc) && (strcmp(argv[x],"_")!=0));x++);
+ 	if (strcmp(argv[x],"_")!=0)
+ 		return 0xc000;
+ 	i=0;
+ 	GetSystemDirectory(command,sizeof(command));
+ 	sprintf(command,"%s\\cmd.exe",command);
+ 	argv[i++]=command;
+ 	argv[i++]="/c";
+ 	argv[i++]=argv[x+1];
+ 	if (ret) 
+ 		argv[i++]=argv[x+2];
+ 	else 
+ 		argv[i++]=argv[x+3];
+ 	for (x+=4;x<argc;x++) 
+ 		argv[i++]=argv[x];
+ 	argv[i]=NULL;
+ /*	for (i=0;argv[i];i++)
+ 		command=argv[i];
+ */
+ 	ret=_spawnv(_P_WAIT,argv[0],argv);
+ 	return 0;
+ }
+ 
  void Addkey (const char *hkey,const char *subkey,const char *stag,const char *sval)
  {
  	DWORD disposition,result;
***************
*** 104,112 ****
  	char **pvar,*ch;
  	long len;
  	typedef char * CHARP;
! 
! 	if (argc<3)
  		usuage();
   	if (strcmp(argv[1],"}")==0)
   	{
   		char v1[4],v2[4],v3[4],v4[4];
--- 245,260 ----
  	char **pvar,*ch;
  	long len;
  	typedef char * CHARP;
! 	 if (argc<3)
  		usuage();
+ 	if (strcmp(argv[1],"_")==0)
+  	{
+ 		return DoCheckVersion(argc,argv);
+ 	}
+ 	if (strcmp(argv[1],"__")==0)
+  	{
+ 		return CheckProductVersion(argc,argv);
+ 	}
   	if (strcmp(argv[1],"}")==0)
   	{
   		char v1[4],v2[4],v3[4],v4[4];
Index: openafs/src/des/read_pssword.c
diff -c openafs/src/des/read_pssword.c:1.12.2.2 openafs/src/des/read_pssword.c:1.12.2.3
*** openafs/src/des/read_pssword.c:1.12.2.2	Sat Oct 13 00:21:21 2001
--- openafs/src/des/read_pssword.c	Thu Nov 14 16:51:06 2002
***************
*** 14,20 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/des/read_pssword.c,v 1.12.2.2 2001/10/13 04:21:21 shadow Exp $");
  
  #include <mit-cpyright.h>
  #include <des.h>
--- 14,20 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/des/read_pssword.c,v 1.12.2.3 2002/11/14 21:51:06 zacheiss Exp $");
  
  #include <mit-cpyright.h>
  #include <des.h>
***************
*** 310,316 ****
      if (!ok)
  	memset(s, 0, maxa);
      printf("\n");
! #if defined(AFS_HPUX_ENV) || defined(AFS_XBSD_ENV)
      /*
       * Restore the terminal to its previous characteristics.
       * Restore the old signal handler for SIGINT.
--- 310,316 ----
      if (!ok)
  	memset(s, 0, maxa);
      printf("\n");
! #if defined(AFS_HPUX_ENV) || defined(AFS_XBSD_ENV) || defined(AFS_DARWIN_ENV)
      /*
       * Restore the terminal to its previous characteristics.
       * Restore the old signal handler for SIGINT.
Index: openafs/src/kauth/klogin.c
diff -c openafs/src/kauth/klogin.c:1.7.2.2 openafs/src/kauth/klogin.c:1.7.2.3
*** openafs/src/kauth/klogin.c:1.7.2.2	Sat Oct 13 00:21:33 2001
--- openafs/src/kauth/klogin.c	Thu Nov 14 16:40:37 2002
***************
*** 21,27 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/kauth/klogin.c,v 1.7.2.2 2001/10/13 04:21:33 shadow Exp $");
  
  #if !defined(AFS_SUN_ENV) && !defined(AFS_AIX_ENV) && !defined(AFS_HPUX_ENV) && !defined(AFS_SGI_ENV) && !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
  #include <sys/param.h>
--- 21,27 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/kauth/klogin.c,v 1.7.2.3 2002/11/14 21:40:37 zacheiss Exp $");
  
  #if !defined(AFS_SUN_ENV) && !defined(AFS_AIX_ENV) && !defined(AFS_HPUX_ENV) && !defined(AFS_SGI_ENV) && !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
  #include <sys/param.h>
***************
*** 461,467 ****
  static void getloginname(register struct utmp *up)
  {
  	register char *namep;
! 	char c;
  
  	while (up->ut_name[0] == '\0') {
  		namep = up->ut_name;
--- 461,467 ----
  static void getloginname(register struct utmp *up)
  {
  	register char *namep;
! 	int c;
  
  	while (up->ut_name[0] == '\0') {
  		namep = up->ut_name;
***************
*** 469,478 ****
  		while ((c = getchar()) != '\n') {
  			if (c == ' ')
  				c = '_';
! 			if (c == (char)EOF)
  				exit(0);
  			if (namep < up->ut_name+NMAX)
! 				*namep++ = c;
  		}
  	}
  	strncpy(lusername, up->ut_name, NMAX);
--- 469,478 ----
  		while ((c = getchar()) != '\n') {
  			if (c == ' ')
  				c = '_';
! 			if (c == EOF)
  				exit(0);
  			if (namep < up->ut_name+NMAX)
! 				*namep++ = (char) c;
  		}
  	}
  	strncpy(lusername, up->ut_name, NMAX);
Index: openafs/src/libafs/MakefileProto.HPUX.in
diff -c openafs/src/libafs/MakefileProto.HPUX.in:1.7.2.1 openafs/src/libafs/MakefileProto.HPUX.in:1.7.2.2
*** openafs/src/libafs/MakefileProto.HPUX.in:1.7.2.1	Sat Jun  8 00:47:42 2002
--- openafs/src/libafs/MakefileProto.HPUX.in	Thu Nov 14 15:08:41 2002
***************
*** 119,125 ****
  
  # Compile the clients.
  ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
! 	if false; then \
  	for b in $(BITS); do \
  	    for t in $(KOBJ); do \
  		dir=$$t.$$b; \
--- 119,125 ----
  
  # Compile the clients.
  ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
! 	if true; then \
  	for b in $(BITS); do \
  	    for t in $(KOBJ); do \
  		dir=$$t.$$b; \
Index: openafs/src/libafs/MakefileProto.LINUX.in
diff -c openafs/src/libafs/MakefileProto.LINUX.in:1.11.2.8 openafs/src/libafs/MakefileProto.LINUX.in:1.11.2.9
*** openafs/src/libafs/MakefileProto.LINUX.in:1.11.2.8	Sat Jun  8 00:47:42 2002
--- openafs/src/libafs/MakefileProto.LINUX.in	Thu Nov 14 17:18:04 2002
***************
*** 52,95 ****
  # System specific build commands and flags
  CC = gcc
  LD = ld
  # -Wall
  <i386_linux22 i386_linux24>
! CCFLAGS =  $(KDEBUG) -O2 $(FOMIT) \
! 	-fno-strength-reduce -pipe -march=i486 -malign-loops=2 -malign-jumps=2 \
! 	-malign-functions=2
  DEFINES = -D__KERNEL__  -DCPU=586 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} ${KDEFINES}
  <alpha_linux_22 alpha_linux_24>
! CCFLAGS = $(KDEBUG) -O2 $(FOMIT) -fno-strength-reduce -pipe -mno-fp-regs -ffixed-8
  DEFINES = -D__KERNEL__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <s390_linux22 s390_linux24>
! CCFLAGS =   -O $(FOMIT) -fno-strength-reduce \
! 	-fno-strict-aliasing -fsigned-char 
  DEFINES = -D__KERNEL__  -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <sparc_linux22 sparc_linux24>
  LD = ld -m elf32_sparc
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) \
! 	-fno-strength-reduce -pipe -mcpu=v8 -mno-fpu -fcall-used-g5 -fcall-used-g7
  DEFINES = -D__KERNEL__  -DCPU=sparc -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <sparc64_linux22 sparc64_linux24>
  CC = sparc64-linux-gcc
  LD = ld -m elf64_sparc
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) \
! 	-fno-strength-reduce -pipe -mcpu=ultrasparc -m64 -mno-fpu -mcmodel=medlow -ffixed-g4 -fcall-used-g5 -fcall-used-g7 -Wno-sign-compare
  DEFINES = -D__KERNEL__  -DCPU=sparc64 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <ppc_linux22 ppc_linux24>
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) -fno-strength-reduce \
! 	-fno-strict-aliasing -fsigned-char -msoft-float -pipe \
  	-fno-builtin -ffixed-r2
  DEFINES = -D__KERNEL__  -D__powerpc__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <parisc_linux24>
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) \
! 	-fno-strict-aliasing -fno-common -fno-strength-reduce \
!         -fno-strict-aliasing -fsigned-char -mno-space-regs -mfast-indirect-calls \
!         -mdisable-fpregs -ffunction-sections -march=1.1 -mschedule=7100
  DEFINES = -D__KERNEL__  -D__linux__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <ia64_linux24>
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) -fno-strict-aliasing -fno-common -pipe \
! 	-ffixed-r13 -mfixed-range=f10-f15,f32-f127 -falign-functions=32 -mb-step
  DEFINES = -D__KERNEL__ -DKERNEL -D_KERNEL ${SMP_DEF} -DMODULE
  <all>
  INCLUDES = -I. -I../ -I${TOP_SRCDIR}/config
--- 52,92 ----
  # System specific build commands and flags
  CC = gcc
  LD = ld
+ GCC_KOPTS=@LINUX_GCC_KOPTS@
  # -Wall
  <i386_linux22 i386_linux24>
! P5PLUS=@P5PLUS_KOPTS@
! CCFLAGS =  $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) -pipe $(P5PLUS)
  DEFINES = -D__KERNEL__  -DCPU=586 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} ${KDEFINES}
  <alpha_linux_22 alpha_linux_24>
! CCFLAGS = $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) -pipe -mno-fp-regs -ffixed-8
  DEFINES = -D__KERNEL__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <s390_linux22 s390_linux24>
! CCFLAGS =   -O $(FOMIT) $(GCC_KOPTS) -fsigned-char 
  DEFINES = -D__KERNEL__  -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <sparc_linux22 sparc_linux24>
  LD = ld -m elf32_sparc
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) \
! 	-pipe -mcpu=v8 -mno-fpu -fcall-used-g5 -fcall-used-g7
  DEFINES = -D__KERNEL__  -DCPU=sparc -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <sparc64_linux22 sparc64_linux24>
  CC = sparc64-linux-gcc
  LD = ld -m elf64_sparc
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) \
! 	-pipe -mcpu=ultrasparc -m64 -mno-fpu -mcmodel=medlow -ffixed-g4 -fcall-used-g5 -fcall-used-g7 -Wno-sign-compare
  DEFINES = -D__KERNEL__  -DCPU=sparc64 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <ppc_linux22 ppc_linux24>
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) -fsigned-char -msoft-float -pipe \
  	-fno-builtin -ffixed-r2
  DEFINES = -D__KERNEL__  -D__powerpc__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <parisc_linux24>
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) -fsigned-char -mno-space-regs \
! 	-mfast-indirect-calls -mdisable-fpregs -ffunction-sections \
! 	-march=1.1 -mschedule=7100
  DEFINES = -D__KERNEL__  -D__linux__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
  <ia64_linux24>
! CCFLAGS =   $(KDEBUG) -O2 $(FOMIT) $(GCC_KOPTS) -pipe -ffixed-r13 \
! 	 -mfixed-range=f10-f15,f32-f127 -falign-functions=32 -mb-step
  DEFINES = -D__KERNEL__ -DKERNEL -D_KERNEL ${SMP_DEF} -DMODULE
  <all>
  INCLUDES = -I. -I../ -I${TOP_SRCDIR}/config
Index: openafs/src/libafs/MakefileProto.SOLARIS.in
diff -c openafs/src/libafs/MakefileProto.SOLARIS.in:1.10.2.2 openafs/src/libafs/MakefileProto.SOLARIS.in:1.10.2.3
*** openafs/src/libafs/MakefileProto.SOLARIS.in:1.10.2.2	Sat Jun  8 00:47:42 2002
--- openafs/src/libafs/MakefileProto.SOLARIS.in	Thu Nov 14 16:34:02 2002
***************
*** 142,150 ****
  # Without this line, gmake tries to build libafs.o
  .PHONY: libafs
  
! libafs:	$(LIBAFSNONFS)
! install_libafs:	$(INST_LIBAFSNONFS)
! dest_libafs:	$(DEST_LIBAFSNONFS)
  
  
  $(INST_LIBAFS): $(LIBAFS)
--- 142,150 ----
  # Without this line, gmake tries to build libafs.o
  .PHONY: libafs
  
! libafs:	$(LIBAFSNONFS) $(LIBAFS)
! install_libafs:	$(INST_LIBAFSNONFS) $(INST_LIBAFS)
! dest_libafs:	$(DEST_LIBAFSNONFS) $(DEST_LIBAFS)
  
  
  $(INST_LIBAFS): $(LIBAFS)
***************
*** 170,182 ****
  
  <sun4x_57 sun4x_58 sun4x_59>
  
! libafs: ${LIBAFSNONFS}
  
! install_libafs: ${LIBAFSNONFS}
  	${INSTALL} -f ${LIBAFSNONFS} ${DESTDIR}${afskerneldir}/libafs${BITS}.nonfs.o
  
! dest_libafs: ${LIBAFSNONFS}
  	${INSTALL} -f ${LIBAFSNONFS} ${DEST}/root.client/usr/vice/etc/modload/libafs${BITS}.nonfs.o
  
  <all>
  
--- 170,184 ----
  
  <sun4x_57 sun4x_58 sun4x_59>
  
! libafs: ${LIBAFSNONFS} ${LIBAFS}
  
! install_libafs: ${LIBAFSNONFS} ${LIBAFS}
  	${INSTALL} -f ${LIBAFSNONFS} ${DESTDIR}${afskerneldir}/libafs${BITS}.nonfs.o
+ 	${INSTALL} -f ${LIBAFS} ${DESTDIR}${afskerneldir}/libafs${BITS}.o
  
! dest_libafs: ${LIBAFSNONFS} ${LIBAFS}
  	${INSTALL} -f ${LIBAFSNONFS} ${DEST}/root.client/usr/vice/etc/modload/libafs${BITS}.nonfs.o
+ 	${INSTALL} -f ${LIBAFS} ${DEST}/root.client/usr/vice/etc/modload/libafs${BITS}.o
  
  <all>
  
Index: openafs/src/libafsrpc/Makefile.in
diff -c openafs/src/libafsrpc/Makefile.in:1.5.2.2 openafs/src/libafsrpc/Makefile.in:1.5.2.7
*** openafs/src/libafsrpc/Makefile.in:1.5.2.2	Tue Aug 27 23:56:05 2002
--- openafs/src/libafsrpc/Makefile.in	Sun Nov 17 23:35:52 2002
***************
*** 31,37 ****
  include ../config/Makefile.${SYS_NAME}
  
  CC=${MT_CC}
! INCLUDES=-I${TOP_INCDIR} -I.. -I../rx
  CFLAGS = ${OPTMZ} ${DBG} ${INCLUDES} -DRXDEBUG ${MT_CFLAGS} -I${TOP_SRCDIR}/config
  SFLAGS=-P -I${TOP_INCDIR}
  RX = ../rx
--- 31,37 ----
  include ../config/Makefile.${SYS_NAME}
  
  CC=${MT_CC}
! INCLUDES=-I${TOP_INCDIR} -I.. -I../rx -I../rxkad
  CFLAGS = ${OPTMZ} ${DBG} ${INCLUDES} -DRXDEBUG ${MT_CFLAGS} -I${TOP_SRCDIR}/config
  SFLAGS=-P -I${TOP_INCDIR}
  RX = ../rx
***************
*** 63,68 ****
--- 63,70 ----
  	xdr_rx.o \
  	xdr_int64.o \
  	xdr_afsuuid.o \
+ 	xdr_update.o \
+ 	xdr_refernce.o \
  	AFS_component_version_number.o
  
  RXOBJS =\
***************
*** 98,103 ****
--- 100,107 ----
  	rxkad_server.o \
  	rxkad_common.o \
  	ticket.o \
+ 	ticket5.o \
+ 	crc.o \
  	fcrypt.o \
  	crypt_conn.o
  
***************
*** 197,202 ****
--- 201,212 ----
  ticket.o: ${RXKAD}/ticket.c
  	${CCRULE}
  
+ ticket5.o: ${RXKAD}/ticket5.c
+ 	${CCRULE}
+ 
+ crc.o: ${RXKAD}/crc.c
+ 	${CCRULE}
+ 
  fcrypt.o: ${RXKAD}/fcrypt.c
  	${CCRULE}
  
***************
*** 258,264 ****
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.5.2.2 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
--- 268,274 ----
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.5.2.7 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
Index: openafs/src/libafsrpc/NTMakefile
diff -c openafs/src/libafsrpc/NTMakefile:1.4.4.1 openafs/src/libafsrpc/NTMakefile:1.4.4.2
*** openafs/src/libafsrpc/NTMakefile:1.4.4.1	Sun Jan 20 04:09:23 2002
--- openafs/src/libafsrpc/NTMakefile	Wed Dec  4 09:20:51 2002
***************
*** 262,268 ****
  	$(DESTDIR)\lib\afspthread.lib \
  !ENDIF
  	$(DESTDIR)\lib\afs\afsutil.lib \
! 	$(DESTDIR)\lib\afs\afsreg.lib
  
  $(DESTDIR)\lib\afsrpc.dll: $(DLLOBJS) $(DLLLIBS)
  	$(DLLCONLINK) /DEF:afsrpc.def
--- 262,269 ----
  	$(DESTDIR)\lib\afspthread.lib \
  !ENDIF
  	$(DESTDIR)\lib\afs\afsutil.lib \
! 	$(DESTDIR)\lib\afs\afsreg.lib  \
! 	$(DESTDIR)\lib\afsrxkad.lib
  
  $(DESTDIR)\lib\afsrpc.dll: $(DLLOBJS) $(DLLLIBS)
  	$(DLLCONLINK) /DEF:afsrpc.def
Index: openafs/src/login/login.c
diff -c openafs/src/login/login.c:1.5 openafs/src/login/login.c:1.5.2.1
*** openafs/src/login/login.c:1.5	Tue Aug  7 20:03:51 2001
--- openafs/src/login/login.c	Thu Nov 14 16:40:39 2002
***************
*** 39,45 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/login/login.c,v 1.5 2001/08/08 00:03:51 shadow Exp $");
  
  #include <unistd.h>
  #include <stdlib.h>
--- 39,45 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/login/login.c,v 1.5.2.1 2002/11/14 21:40:39 zacheiss Exp $");
  
  #include <unistd.h>
  #include <stdlib.h>
***************
*** 1439,1445 ****
  				exit(0);
  			}
  			if (p < nbuf + UT_NAMESIZE)
! 				*p++ = ch;
  		}
  		if (p > nbuf) {
  			if (nbuf[0] == '-')
--- 1439,1445 ----
  				exit(0);
  			}
  			if (p < nbuf + UT_NAMESIZE)
! 				*p++ = (char) ch;
  		}
  		if (p > nbuf) {
  			if (nbuf[0] == '-')
Index: openafs/src/lwp/waitkey.c
diff -c openafs/src/lwp/waitkey.c:1.8.2.2 openafs/src/lwp/waitkey.c:1.8.2.3
*** openafs/src/lwp/waitkey.c:1.8.2.2	Sat Oct 13 00:21:42 2001
--- openafs/src/lwp/waitkey.c	Thu Nov 14 16:40:40 2002
***************
*** 22,28 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/lwp/waitkey.c,v 1.8.2.2 2001/10/13 04:21:42 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
--- 22,28 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/lwp/waitkey.c,v 1.8.2.3 2002/11/14 21:40:40 zacheiss Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
***************
*** 253,259 ****
  #ifdef AFS_NT40_ENV
    *key = getche(); /* get char and echo it to screen */
  #else
!   *key = getchar();
  #endif
  
    return rc;
--- 253,259 ----
  #ifdef AFS_NT40_ENV
    *key = getche(); /* get char and echo it to screen */
  #else
!   *key = (char ) getchar();
  #endif
  
    return rc;
Index: openafs/src/rx/Makefile.in
diff -c openafs/src/rx/Makefile.in:1.4.2.2 openafs/src/rx/Makefile.in:1.4.2.3
*** openafs/src/rx/Makefile.in:1.4.2.2	Thu Aug  1 22:45:14 2002
--- openafs/src/rx/Makefile.in	Thu Nov 14 15:02:01 2002
***************
*** 42,48 ****
  
  RXOBJS = rx_clock.o rx_event.o rx_user.o rx_lwp.o rx.o rx_null.o rx_globals.o \
  	rx_getaddr.o rx_misc.o rx_packet.o rx_rdwr.o  rx_trace.o rx_conncache.o \
! 	xdr_int64.o 
  
  MULTIOBJS = rx_multi.o
  
--- 42,48 ----
  
  RXOBJS = rx_clock.o rx_event.o rx_user.o rx_lwp.o rx.o rx_null.o rx_globals.o \
  	rx_getaddr.o rx_misc.o rx_packet.o rx_rdwr.o  rx_trace.o rx_conncache.o \
! 	xdr_int64.o xdr_update.o xdr_refernce.o
  
  MULTIOBJS = rx_multi.o
  
***************
*** 56,62 ****
  
  RXOBJS_djgpp = rx_clock.o rx_event.o rx_user.o rx_lwp.o rx.o rx_null.o rx_globals.o \
  		rx_getaddr.o rx_misc.o rx_packet.o rx_rdwr.o  rx_trace.o rx_conncache.o \
! 		xdr_int64.o rx_xmit_nt.o
  
  BASICINCLS=${TOP_INCDIR}/lwp.h ${TOP_INCDIR}/lock.h \
  	     rx_clock.h rx_queue.h rx_event.h
--- 56,62 ----
  
  RXOBJS_djgpp = rx_clock.o rx_event.o rx_user.o rx_lwp.o rx.o rx_null.o rx_globals.o \
  		rx_getaddr.o rx_misc.o rx_packet.o rx_rdwr.o  rx_trace.o rx_conncache.o \
! 		xdr_int64.o xdr_update.o xdr_refernce.o rx_xmit_nt.o
  
  BASICINCLS=${TOP_INCDIR}/lwp.h ${TOP_INCDIR}/lock.h \
  	     rx_clock.h rx_queue.h rx_event.h
Index: openafs/src/rx/rx.c
diff -c openafs/src/rx/rx.c:1.22.2.13 openafs/src/rx/rx.c:1.22.2.16
*** openafs/src/rx/rx.c:1.22.2.13	Tue Sep 10 18:33:54 2002
--- openafs/src/rx/rx.c	Thu Nov 14 17:19:50 2002
***************
*** 16,22 ****
  #include <afs/param.h>
  #endif
  
! RCSID("$Header: /data/cvs/openafs/src/rx/rx.c,v 1.22.2.13 2002/09/10 22:33:54 zacheiss Exp $");
  
  #ifdef KERNEL
  #include "../afs/sysincludes.h"
--- 16,22 ----
  #include <afs/param.h>
  #endif
  
! RCSID("$Header: /data/cvs/openafs/src/rx/rx.c,v 1.22.2.16 2002/11/14 22:19:50 zacheiss Exp $");
  
  #ifdef KERNEL
  #include "../afs/sysincludes.h"
***************
*** 1796,1801 ****
--- 1796,1811 ----
  	 || (call->mode == RX_MODE_RECEIVING && call->rnext == 1)) {
  	    (void) rxi_ReadProc(call, &dummy, 1);
  	}
+ 
+ 	/* If we had an outstanding delayed ack, be nice to the server
+ 	 * and force-send it now.
+ 	 */
+ 	if (call->delayedAckEvent) {
+ 	    rxevent_Cancel(call->delayedAckEvent, call, RX_CALL_REFCOUNT_DELAY);
+ 	    call->delayedAckEvent = NULL;
+ 	    rxi_SendDelayedAck(NULL, call, NULL);
+ 	}
+ 
  	/* We need to release the call lock since it's lower than the
  	 * conn_call_lock and we don't want to hold the conn_call_lock
  	 * over the rx_ReadProc call. The conn_call_lock needs to be held
***************
*** 2247,2253 ****
  {
      int hashindex, flag;
      register struct rx_connection *conn;
-     struct rx_peer *peer;
      hashindex = CONN_HASH(host, port, cid, epoch, type);
      MUTEX_ENTER(&rx_connHashTable_lock);
      rxLastConn ? (conn = rxLastConn, flag = 0) :
--- 2257,2262 ----
***************
*** 2264,2276 ****
  	    MUTEX_EXIT(&rx_connHashTable_lock);
  	    return (struct rx_connection *) 0;
  	}
! 	/* epoch's high order bits mean route for security reasons only on
! 	 * the cid, not the host and port fields.
! 	 */
! 	if (conn->epoch & 0x80000000) break;
! 	if (((type == RX_CLIENT_CONNECTION) 
! 	     || (pp->host == host)) && (pp->port == port))
! 	  break;
        }
        if ( !flag )
        {
--- 2273,2284 ----
  	    MUTEX_EXIT(&rx_connHashTable_lock);
  	    return (struct rx_connection *) 0;
  	}
! 	if (pp->host == host && pp->port == port)
! 	    break;
! 	if (type == RX_CLIENT_CONNECTION && pp->port == port)
! 	    break;
! 	if (type == RX_CLIENT_CONNECTION && (conn->epoch & 0x80000000))
! 	    break;
        }
        if ( !flag )
        {
***************
*** 2302,2308 ****
  	CV_INIT(&conn->conn_call_cv, "conn call cv", CV_DEFAULT, 0);
  	conn->next = rx_connHashTable[hashindex];
  	rx_connHashTable[hashindex] = conn;
! 	peer = conn->peer = rxi_FindPeer(host, port, 0, 1);
  	conn->type = RX_SERVER_CONNECTION;
  	conn->lastSendTime = clock_Sec();   /* don't GC immediately */
  	conn->epoch = epoch;
--- 2310,2316 ----
  	CV_INIT(&conn->conn_call_cv, "conn call cv", CV_DEFAULT, 0);
  	conn->next = rx_connHashTable[hashindex];
  	rx_connHashTable[hashindex] = conn;
! 	conn->peer = rxi_FindPeer(host, port, 0, 1);
  	conn->type = RX_SERVER_CONNECTION;
  	conn->lastSendTime = clock_Sec();   /* don't GC immediately */
  	conn->epoch = epoch;
***************
*** 2325,2351 ****
  	rx_stats.nServerConns++;
  	MUTEX_EXIT(&rx_stats_mutex);
      }
-     else
-     {
-     /* Ensure that the peer structure is set up in such a way that
-     ** replies in this connection go back to that remote interface
-     ** from which the last packet was sent out. In case, this packet's
-     ** source IP address does not match the peer struct for this conn,
-     ** then drop the refCount on conn->peer and get a new peer structure.
-     ** We can check the host,port field in the peer structure without the
-     ** rx_peerHashTable_lock because the peer structure has its refCount
-     ** incremented and the only time the host,port in the peer struct gets
-     ** updated is when the peer structure is created.
-     */
- 	if (conn->peer->host == host )
- 		peer = conn->peer; /* no change to the peer structure */
- 	else
-         	peer = rxi_FindPeer(host, port, conn->peer, 1);
-     }
  
      MUTEX_ENTER(&conn->conn_data_lock);
      conn->refCount++;
-     conn->peer = peer;
      MUTEX_EXIT(&conn->conn_data_lock);
  
      rxLastConn = conn;	/* store this connection as the last conn used */
--- 2333,2341 ----
***************
*** 2772,2779 ****
  	    /* Respond immediately to ack packets requesting acknowledgement
               * (ping packets) */
  	    if (np->header.flags & RX_REQUEST_ACK) {
! 		if (call->error) (void) rxi_SendCallAbort(call, 0, 1, 0);
! 		else (void) rxi_SendAck(call, 0, 0, 0, 0, RX_ACK_PING_RESPONSE, 1);
  	    }
  	    np = rxi_ReceiveAckPacket(call, np, 1);
  	    break;
--- 2762,2772 ----
  	    /* Respond immediately to ack packets requesting acknowledgement
               * (ping packets) */
  	    if (np->header.flags & RX_REQUEST_ACK) {
! 		if (call->error)
! 		    (void) rxi_SendCallAbort(call, 0, 1, 0);
! 		else
! 		    (void) rxi_SendAck(call, 0, 0, np->header.serial, 0,
! 				       RX_ACK_PING_RESPONSE, 1);
  	    }
  	    np = rxi_ReceiveAckPacket(call, np, 1);
  	    break;
***************
*** 3372,3377 ****
--- 3365,3391 ----
  	MUTEX_EXIT(&conn->conn_data_lock);
  }
  
+ /* rxi_ComputePeerNetStats
+  *
+  * Called exclusively by rxi_ReceiveAckPacket to compute network link
+  * estimates (like RTT and throughput) based on ack packets.  Caller
+  * must ensure that the packet in question is the right one (i.e.
+  * serial number matches).
+  */
+ static void
+ rxi_ComputePeerNetStats(struct rx_call *call, struct rx_packet *p,
+ 	struct rx_ackPacket *ap, struct rx_packet *np)
+ {
+     struct rx_peer *peer = call->conn->peer;
+ 
+     /* Use RTT if not delayed by client. */
+     if (ap->reason != RX_ACK_DELAY)
+ 	rxi_ComputeRoundTripTime(p, &p->timeSent, peer);
+ #ifdef ADAPT_WINDOW
+     rxi_ComputeRate(peer, call, p, np, ap->reason);
+ #endif
+ }
+ 
  /* The real smarts of the whole thing.  */
  struct rx_packet *rxi_ReceiveAckPacket(call, np, istack)
      register struct rx_call *call;
***************
*** 3439,3453 ****
      }
  #endif
  
-     /* if a server connection has been re-created, it doesn't remember what
- 	serial # it was up to.  An ack will tell us, since the serial field
- 	contains the largest serial received by the other side */
-     MUTEX_ENTER(&conn->conn_data_lock);
-     if ((conn->type == RX_SERVER_CONNECTION) && (conn->serial < serial)) {
- 	conn->serial = serial+1;
-     }
-     MUTEX_EXIT(&conn->conn_data_lock);
- 
      /* Update the outgoing packet skew value to the latest value of
       * the peer's incoming packet skew value.  The ack packet, of
       * course, could arrive out of order, but that won't affect things
--- 3453,3458 ----
***************
*** 3463,3484 ****
      for (queue_Scan(&call->tq, tp, nxp, rx_packet)) {
  	if (tp->header.seq >= first) break;
  	call->tfirst = tp->header.seq + 1;
! 	if (tp->header.serial == serial) {
! 	  /* Use RTT if not delayed by client. */
! 	  if (ap->reason != RX_ACK_DELAY)
! 	      rxi_ComputeRoundTripTime(tp, &tp->timeSent, peer);
! #ifdef ADAPT_WINDOW
! 	  rxi_ComputeRate(peer, call, tp, np, ap->reason);
! #endif
! 	}
! 	else if (tp->firstSerial == serial) {
! 	    /* Use RTT if not delayed by client. */
! 	    if (ap->reason != RX_ACK_DELAY)
! 		rxi_ComputeRoundTripTime(tp, &tp->firstSent, peer);
! #ifdef ADAPT_WINDOW
! 	  rxi_ComputeRate(peer, call, tp, np, ap->reason);
! #endif
! 	}
  #ifdef	AFS_GLOBAL_RXLOCK_KERNEL
      /* XXX Hack. Because we have to release the global rx lock when sending
       * packets (osi_NetSend) we drop all acks while we're traversing the tq
--- 3468,3476 ----
      for (queue_Scan(&call->tq, tp, nxp, rx_packet)) {
  	if (tp->header.seq >= first) break;
  	call->tfirst = tp->header.seq + 1;
! 	if (serial && (tp->header.serial == serial ||
! 		       tp->firstSerial == serial))
! 	    rxi_ComputePeerNetStats(call, tp, ap, np);
  #ifdef	AFS_GLOBAL_RXLOCK_KERNEL
      /* XXX Hack. Because we have to release the global rx lock when sending
       * packets (osi_NetSend) we drop all acks while we're traversing the tq
***************
*** 3530,3560 ****
  	/* Update round trip time if the ack was stimulated on receipt
           * of this packet */
  #ifdef AFS_GLOBAL_RXLOCK_KERNEL
- #ifdef RX_ENABLE_LOCKS
- 	if (tp->header.seq >= first) {
- #endif /* RX_ENABLE_LOCKS */
- #endif /* AFS_GLOBAL_RXLOCK_KERNEL */
- 	if (tp->header.serial == serial) {
- 	    /* Use RTT if not delayed by client. */
- 	    if (ap->reason != RX_ACK_DELAY)
- 		rxi_ComputeRoundTripTime(tp, &tp->timeSent, peer);
- #ifdef ADAPT_WINDOW
- 	  rxi_ComputeRate(peer, call, tp, np, ap->reason);
- #endif
- 	}
- 	else if ((tp->firstSerial == serial)) {
- 	    /* Use RTT if not delayed by client. */
- 	    if (ap->reason != RX_ACK_DELAY)
- 		rxi_ComputeRoundTripTime(tp, &tp->firstSent, peer);
- #ifdef ADAPT_WINDOW
- 	  rxi_ComputeRate(peer, call, tp, np, ap->reason);
- #endif
- 	}
- #ifdef AFS_GLOBAL_RXLOCK_KERNEL
  #ifdef RX_ENABLE_LOCKS
! 	}
  #endif /* RX_ENABLE_LOCKS */
  #endif /* AFS_GLOBAL_RXLOCK_KERNEL */
  
  	/* Set the acknowledge flag per packet based on the
           * information in the ack packet. An acknowlegded packet can
--- 3522,3534 ----
  	/* Update round trip time if the ack was stimulated on receipt
           * of this packet */
  #ifdef AFS_GLOBAL_RXLOCK_KERNEL
  #ifdef RX_ENABLE_LOCKS
! 	if (tp->header.seq >= first)
  #endif /* RX_ENABLE_LOCKS */
  #endif /* AFS_GLOBAL_RXLOCK_KERNEL */
+ 	    if (serial && (tp->header.serial == serial ||
+ 			   tp->firstSerial == serial))
+ 		rxi_ComputePeerNetStats(call, tp, ap, np);
  
  	/* Set the acknowledge flag per packet based on the
           * information in the ack packet. An acknowlegded packet can
***************
*** 4563,4569 ****
  
      /* The skew computation used to be bogus, I think it's better now. */
      /* We should start paying attention to skew.    XXX  */
!     ap->serial = htonl(call->conn->maxSerial);
      ap->maxSkew	= 0;	/* used to be peer->inPacketSkew */
  
      ap->firstPacket = htonl(call->rnext); /* First packet not yet forwarded to reader */
--- 4537,4543 ----
  
      /* The skew computation used to be bogus, I think it's better now. */
      /* We should start paying attention to skew.    XXX  */
!     ap->serial = htonl(serial);
      ap->maxSkew	= 0;	/* used to be peer->inPacketSkew */
  
      ap->firstPacket = htonl(call->rnext); /* First packet not yet forwarded to reader */
Index: openafs/src/rx/rx_kcommon.c
diff -c openafs/src/rx/rx_kcommon.c:1.9.2.9 openafs/src/rx/rx_kcommon.c:1.9.2.10
*** openafs/src/rx/rx_kcommon.c:1.9.2.9	Tue Sep 10 18:33:55 2002
--- openafs/src/rx/rx_kcommon.c	Thu Nov 14 15:08:23 2002
***************
*** 14,27 ****
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/rx/rx_kcommon.c,v 1.9.2.9 2002/09/10 22:33:55 zacheiss Exp $");
  
  #include "../rx/rx_kcommon.h"
  
  #ifdef AFS_HPUX110_ENV
  #include "../h/tihdr.h"
  #include <xti.h>
- #include "../afs/hpux_110.h"
  #endif
  #include "../afsint/afsint.h"
  
--- 14,26 ----
  #include <afsconfig.h>
  #include "../afs/param.h"
  
! RCSID("$Header: /data/cvs/openafs/src/rx/rx_kcommon.c,v 1.9.2.10 2002/11/14 20:08:23 zacheiss Exp $");
  
  #include "../rx/rx_kcommon.h"
  
  #ifdef AFS_HPUX110_ENV
  #include "../h/tihdr.h"
  #include <xti.h>
  #endif
  #include "../afsint/afsint.h"
  
Index: openafs/src/rx/rx_kcommon.h
diff -c openafs/src/rx/rx_kcommon.h:1.4.4.5 openafs/src/rx/rx_kcommon.h:1.4.4.6
*** openafs/src/rx/rx_kcommon.h:1.4.4.5	Tue Sep 10 18:33:55 2002
--- openafs/src/rx/rx_kcommon.h	Thu Nov 14 17:27:16 2002
***************
*** 37,43 ****
--- 37,45 ----
  #include "../h/protosw.h"
  #if !defined(AFS_SUN5_ENV) && !defined(AFS_XBSD_ENV)
  #include "../h/domain.h"
+ #if !defined(AFS_HPUX110_ENV)
  #include "../h/dir.h"
+ #endif
  #include "../h/buf.h"
  #include "../h/mbuf.h"
  #else
Index: openafs/src/rx/rx_kernel.h
diff -c openafs/src/rx/rx_kernel.h:1.3 openafs/src/rx/rx_kernel.h:1.3.6.2
*** openafs/src/rx/rx_kernel.h:1.3	Mon Feb 12 14:25:53 2001
--- openafs/src/rx/rx_kernel.h	Thu Nov 14 23:08:57 2002
***************
*** 30,36 ****
  
  extern osi_socket rxi_GetUDPSocket();
  
! #if (!defined(AFS_GLOBAL_SUNLOCK) && !defined(RX_ENABLE_LOCKS)) || (defined(AFS_HPUX_ENV) && !defined(RX_ENABLE_LOCKS))
  #define	osi_rxSleep(a)	afs_osi_Sleep(a)
  #define	osi_rxWakeup(a)	afs_osi_Wakeup(a)
  #endif
--- 30,36 ----
  
  extern osi_socket rxi_GetUDPSocket();
  
! #if (!defined(AFS_GLOBAL_SUNLOCK) && !defined(RX_ENABLE_LOCKS))
  #define	osi_rxSleep(a)	afs_osi_Sleep(a)
  #define	osi_rxWakeup(a)	afs_osi_Wakeup(a)
  #endif
Index: openafs/src/rx/xdr.h
diff -c openafs/src/rx/xdr.h:1.4.4.1 openafs/src/rx/xdr.h:1.4.4.2
*** openafs/src/rx/xdr.h:1.4.4.1	Sat Jun  8 00:47:43 2002
--- openafs/src/rx/xdr.h	Thu Nov 14 15:30:19 2002
***************
*** 171,184 ****
  typedef struct {
  	enum xdr_op	x_op;		/* operation; fast additional param */
  	struct xdr_ops {
! #if defined(AFS_SGI61_ENV) && defined(KERNEL) && (_MIPS_SZLONG != _MIPS_SZINT)
  /* NOTE: SGI 6.1 adds two routines to the xdr_ops if the size of a long is
   * 64 bits. I've only done this for the kernel, since other changes may
   * be necessary if we make a 64 bit user version of AFS.
   */
  		bool_t	(*x_getint64)(); /* get 32 bits into a long */
  		bool_t	(*x_putint64)(); /* send 32 bits of a long */
! #endif /* AFS_SGI61_ENV */
  #if !(defined(KERNEL) && defined(AFS_SUN57_ENV))
  		bool_t	(*x_getint32)();	/* get an afs_int32 from underlying stream */
  		bool_t	(*x_putint32)();	/* put an afs_int32 to " */
--- 171,184 ----
  typedef struct {
  	enum xdr_op	x_op;		/* operation; fast additional param */
  	struct xdr_ops {
! #if defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV))
  /* NOTE: SGI 6.1 adds two routines to the xdr_ops if the size of a long is
   * 64 bits. I've only done this for the kernel, since other changes may
   * be necessary if we make a 64 bit user version of AFS.
   */
  		bool_t	(*x_getint64)(); /* get 32 bits into a long */
  		bool_t	(*x_putint64)(); /* send 32 bits of a long */
! #endif /* defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV)) */
  #if !(defined(KERNEL) && defined(AFS_SUN57_ENV))
  		bool_t	(*x_getint32)();	/* get an afs_int32 from underlying stream */
  		bool_t	(*x_putint32)();	/* put an afs_int32 to " */
***************
*** 210,216 ****
   * u_int	 len;
   * u_int	 pos;
   */
! #if defined(AFS_SGI61_ENV) && defined(KERNEL) && (_MIPS_SZLONG != _MIPS_SZINT)
  #define XDR_GETINT64(xdrs, int64p)			\
  	(*(xdrs)->x_ops->x_getint64)(xdrs, int64p)
  #define xdr_getint64(xdrs, int64p)			\
--- 210,216 ----
   * u_int	 len;
   * u_int	 pos;
   */
! #if defined(AFS_SGI61_ENV) && defined(KERNEL) && (_MIPS_SZLONG != _MIPS_SZINT) || defined(AFS_HPUX_64BIT_ENV)
  #define XDR_GETINT64(xdrs, int64p)			\
  	(*(xdrs)->x_ops->x_getint64)(xdrs, int64p)
  #define xdr_getint64(xdrs, int64p)			\
***************
*** 220,226 ****
  	(*(xdrs)->x_ops->x_putint64)(xdrs, int64p)
  #define xdr_putint64(xdrs, int64p)			\
  	(*(xdrs)->x_ops->x_putint64)(xdrs, int64p)
! #endif /* defined(AFS_SGI61_ENV) && KERNEL && (_MIPS_SZLONG != _MIPS_SZINT) */
  
  #define XDR_GETINT32(xdrs, int32p)			\
  	(*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
--- 220,226 ----
  	(*(xdrs)->x_ops->x_putint64)(xdrs, int64p)
  #define xdr_putint64(xdrs, int64p)			\
  	(*(xdrs)->x_ops->x_putint64)(xdrs, int64p)
! #endif /* defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV)) */
  
  #define XDR_GETINT32(xdrs, int32p)			\
  	(*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
Index: openafs/src/rx/xdr_rx.c
diff -c openafs/src/rx/xdr_rx.c:1.4.4.1 openafs/src/rx/xdr_rx.c:1.4.4.2
*** openafs/src/rx/xdr_rx.c:1.4.4.1	Sat Jun  8 00:47:43 2002
--- openafs/src/rx/xdr_rx.c	Thu Nov 14 15:30:19 2002
***************
*** 18,24 ****
  #endif
  #include <afsconfig.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rx/xdr_rx.c,v 1.4.4.1 2002/06/08 04:47:43 shadow Exp $");
  
  #ifdef KERNEL
  #ifndef UKERNEL
--- 18,24 ----
  #endif
  #include <afsconfig.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rx/xdr_rx.c,v 1.4.4.2 2002/11/14 20:30:19 zacheiss Exp $");
  
  #ifdef KERNEL
  #ifndef UKERNEL
***************
*** 102,112 ****
   * Ops vector for stdio type XDR
   */
  static struct xdr_ops	xdrrx_ops = {
! #if (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV)
  	xdrrx_getint64,
  	xdrrx_putint64,
! #endif /* (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV) */
! #if !(defined(KERNEL) && defined(AFS_SUN57_ENV)) && !defined(AFS_HPUX_64BIT_ENV)
  	xdrrx_getint32,	/* deserialize an afs_int32 */
  	xdrrx_putint32,	/* serialize an afs_int32 */
  #endif
--- 102,112 ----
   * Ops vector for stdio type XDR
   */
  static struct xdr_ops	xdrrx_ops = {
! #if defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV))
  	xdrrx_getint64,
  	xdrrx_putint64,
! #endif /* defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV)) */
! #if !(defined(KERNEL) && defined(AFS_SUN57_ENV)) 
  	xdrrx_getint32,	/* deserialize an afs_int32 */
  	xdrrx_putint32,	/* serialize an afs_int32 */
  #endif
Index: openafs/src/rx/HPUX/rx_kmutex.h
diff -c openafs/src/rx/HPUX/rx_kmutex.h:1.3 openafs/src/rx/HPUX/rx_kmutex.h:1.3.4.4
*** openafs/src/rx/HPUX/rx_kmutex.h:1.3	Fri May 18 13:15:20 2001
--- openafs/src/rx/HPUX/rx_kmutex.h	Thu Nov 14 15:12:51 2002
***************
*** 1,35 ****
  #ifndef _RX_KMUTEX_H_
  #define _RX_KMUTEX_H_
  #include <sys/spinlock.h>
! #include <sys/sem_sync.h>
  
  #define RX_ENABLE_LOCKS         1
- extern lock_t*  rx_sleepLock;
  #define AFS_GLOBAL_RXLOCK_KERNEL
  
- #define CV_INIT(cv,a,b,c)
  #define CV_DESTROY(a)
  
! /* These 3, at least, need to do something */
! #define CV_WAIT(cv, lck) {                                                \
!                         }
  
! #define CV_SIGNAL(cv)    {                                                \
!                          }
  
! #define CV_BROADCAST(cv) {                                                \
!                          }
  
! typedef sync_t  afs_kmutex_t;
! typedef caddr_t afs_kcondvar_t;
  
! #define RXObtainWriteLock(a) 
  #define RXReleaseWriteLock(a)
  
  #define MUTEX_DESTROY(a)
  #define MUTEX_ENTER(a)
  #define MUTEX_TRYENTER(a) 1
  #define MUTEX_EXIT(a)  
  #define MUTEX_INIT(a,b,c,d) 
! /* #define MUTEX_ISMINE(a) */
! #endif
--- 1,137 ----
+ /*
+  * 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
+  */
+ 
+ /* rx_kmutex.h - mutex and condition variable macros for kernel environment.
+  *
+  * HPUX implementation.
+  */
+ 
  #ifndef _RX_KMUTEX_H_
  #define _RX_KMUTEX_H_
+ 
+ #if defined(AFS_HPUX110_ENV) && defined(KERNEL)
+ /* rx fine grain locking primitives */
+ 
+ #include <sys/ksleep.h>
  #include <sys/spinlock.h>
! #include <sys/sem_beta.h>
! #include <sys/errno.h>
! #include <net/netmp.h>
  
+ #include "../rx/rx_kernel.h" /* For osi_Panic() */
+ 
  #define RX_ENABLE_LOCKS         1
  #define AFS_GLOBAL_RXLOCK_KERNEL
+ 
+ extern lock_t*  rx_sleepLock;
+ 
+ /* We use beta semaphores instead of sync semaphores for Rx locks as
+  * recommended by HP labs. Sync semaphores are not supported by HP
+  * any more.
+  */
+ 
+ #define CV_INIT(cv,a,b,c) 
+ 
+ /* This is supposed to atomically drop the mutex and go to sleep
+  * and reacquire the mutex when it wakes up.
+  */
+ #define CV_WAIT(cv, lck) \
+     do { \
+         int code; \
+         ksleep_prepare(); \
+         MP_SPINLOCK(rx_sleepLock); \
+         if (!b_owns_sema(lck)) \
+             osi_Panic("mutex not held \n"); \
+         b_vsema(lck); \
+         code = ksleep_one(PCATCH | KERNEL_ADDRESS | KERN_SPINLOCK_OBJECT, \
+             (cv), rx_sleepLock, 0); \
+         if (code) { \
+             if (code == EINTR) { /* lock still held */ \
+                 MP_SPINUNLOCK(rx_sleepLock); \
+             } else if (code != -EINTR) { \
+                 osi_Panic("ksleep_one failed: code = %d \n", code); \
+             } \
+         } \
+         b_psema(lck); /* grab the mutex again */ \
+     } while(0)
+ 
+ /* Wakes up a thread waiting on this condition */
+ #define CV_SIGNAL(cv) \
+     do { \
+         int wo, code; \
+         MP_SPINLOCK(rx_sleepLock); \
+         if ((code = kwakeup_one(KERNEL_ADDRESS, (cv), WAKEUP_ONE, &wo)) < 0) \
+             osi_Panic("kwakeup_one failed: code = %d \n", code); \
+         MP_SPINUNLOCK(rx_sleepLock); \
+     } while (0)
+ 
+ /* Wakes up all threads waiting on this condition */
+ #define CV_BROADCAST(cv) \
+     do { \
+         int wo, code; \
+         MP_SPINLOCK(rx_sleepLock); \
+         if ((code = kwakeup_one(KERNEL_ADDRESS, (cv), WAKEUP_ALL, &wo)) < 0) \
+             osi_Panic("kwakeup_all failed: code = %d \n", code); \
+         MP_SPINUNLOCK(rx_sleepLock); \
+     } while (0)
  
  #define CV_DESTROY(a)
  
! /* We now use beta semaphores for mutexes */
! typedef b_sema_t afs_kmutex_t;
! typedef caddr_t afs_kcondvar_t;
  
! #else /* AFS_HPUX110_ENV */
  
! #if defined(AFS_HPUX102_ENV)
! #define CV_INIT(a,b,c,d)
! #define CV_DESTROY(a)
! #endif /* AFS_HPUX102_ENV */
! #endif /* else AFS_HPUX110_ENV */
  
! #ifdef AFS_HPUX102_ENV
  
! #define RXObtainWriteLock(a) AFS_ASSERT_RXGLOCK()
  #define RXReleaseWriteLock(a)
  
+ 
+ #if defined(AFS_HPUX110_ENV) 
+ #undef osirx_AssertMine
+ extern void osirx_AssertMine(afs_kmutex_t *lockaddr, char *msg);
+ 
+ #define AFS_RX_ORDER 30
+ 
+ #define MUTEX_INIT(a,b,c,d) b_initsema((a), 1, AFS_RX_ORDER, (b))
+ #define MUTEX_DESTROY(a)
+ 
+ #define MUTEX_TRYENTER(a) b_cpsema(a)
+ 
+ #define MUTEX_ENTER(a) \
+     ((b_owns_sema(a)) ? (osi_Panic("Already Held"), 0) : b_psema(a))
+ 
+ #define MUTEX_EXIT(a) \
+     ((b_owns_sema(a)) ? b_vsema(a) : (osi_Panic("mutex not held"), 0))
+ 
+ #undef MUTEX_ISMINE
+ #define MUTEX_ISMINE(a) b_owns_sema(a)
+ 
+ #else /* AFS_HPUX110_ENV */
+ 
+ #define osirx_AssertMine(addr, msg)
+ 
  #define MUTEX_DESTROY(a)
  #define MUTEX_ENTER(a)
  #define MUTEX_TRYENTER(a) 1
  #define MUTEX_EXIT(a)  
  #define MUTEX_INIT(a,b,c,d) 
! 
! #endif /* else AFS_HPUX110_ENV */
! #endif /* AFS_HPUX102_ENV */
! #endif /* _RX_KMUTEX_H_ */
! 
Index: openafs/src/rxkad/Makefile.in
diff -c openafs/src/rxkad/Makefile.in:1.4.2.1 openafs/src/rxkad/Makefile.in:1.4.2.5
*** openafs/src/rxkad/Makefile.in:1.4.2.1	Sun Apr 21 00:31:07 2002
--- openafs/src/rxkad/Makefile.in	Sun Nov 17 23:35:47 2002
***************
*** 33,44 ****
  UKERNELDIR = ../libuafs/
  COMPILE_ET=${TOP_SRCDIR}/comerr/compile_et
  
! CFLAGS=${OPTMZ} -I${TOP_SRCDIR}/config -I${TOP_INCDIR} ${XCFLAGS}
  INCLS=${TOP_INCDIR}/rx/rx.h ${TOP_INCDIR}/rx/xdr.h \
!        rxkad.h
  
  OBJS=rxkad_client.o rxkad_server.o rxkad_common.o ticket.o rxkad_errs.o \
! 	fcrypt.o crypt_conn.o
  
  fc_test_OBJS=fc_test.o
  
--- 33,44 ----
  UKERNELDIR = ../libuafs/
  COMPILE_ET=${TOP_SRCDIR}/comerr/compile_et
  
! CFLAGS=${OPTMZ} -I${TOP_SRCDIR}/config -I${TOP_INCDIR} -I. ${XCFLAGS}
  INCLS=${TOP_INCDIR}/rx/rx.h ${TOP_INCDIR}/rx/xdr.h \
!        rxkad.h v5gen.h
  
  OBJS=rxkad_client.o rxkad_server.o rxkad_common.o ticket.o rxkad_errs.o \
! 	fcrypt.o crypt_conn.o ticket.o ticket5.o crc.o
  
  fc_test_OBJS=fc_test.o
  
***************
*** 183,188 ****
--- 183,192 ----
  	${COMPILE_ET} rxkad_errs -h rxkad
  
  ticket.o: ticket.c lifetimes.h ${INCLS}
+ 
+ ticket5.o: ticket5.c v5gen.c v5der.c v5gen-rewrite.h ${INCLS}
+ 
+ crc.o: crc.c ${INCLS}
  
  fcrypt.o: fcrypt.c fcrypt.h sboxes.h rxkad.h
  	${CC} ${CFLAGS} -c fcrypt.c
Index: openafs/src/rxkad/NTMakefile
diff -c openafs/src/rxkad/NTMakefile:1.3 openafs/src/rxkad/NTMakefile:1.3.4.1
*** openafs/src/rxkad/NTMakefile:1.3	Mon Apr 30 03:04:24 2001
--- openafs/src/rxkad/NTMakefile	Wed Dec  4 09:20:51 2002
***************
*** 23,28 ****
--- 23,30 ----
  	rxkad_errs.obj \
  	AFS_component_version_number.obj \
  	fcrypt.obj \
+ 	crc.obj \
+ 	ticket5.obj \
  	crypt_conn.obj 
  
  # afsrxkad.lib
Index: openafs/src/rxkad/README.v5
diff -c /dev/null openafs/src/rxkad/README.v5:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/README.v5	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,90 ----
+ #
+ #  This code depends on heimdal's asn1_compile generated krb5 decoding
+ #  stuff. The code is orignally from rxkad that Björn Grönvall
+ #  <bg@sics.se> for kth-krb and was included in Arla.
+ # 
+ #  The first file, v5der.c are part for of support functions
+ #  that all generated files depends on.
+ # 
+ #  The second file (v5gen.h) is the headerfile that is generated for
+ #  the decoding functions.
+ # 
+ #  The third file (v5gen.c) is the subset of the genrated functions we
+ #  need to decode the authenticator.
+ # 
+ #  The forth file (v5gen-rewrite.h) is used to make sure we don't
+ #  polute the namespace.
+ # 
+ #  All files are modified to build within OpenAFS enviroment without
+ #  any external dependencies. Below is the shellscript that is used to
+ #  import the code into the four files.
+ # 
+ #  All internal symbols are rewritten to _rxkad_v5_.
+ #
+ 
+ # Make sure we don't export too much
+ # 
+ # : lha@nutcracker ; nm ticket5.o | grep T | grep -v _rxkad_v5 
+ # 00005748 T tkt_DecodeTicket5
+ #
+ 
+ 
+ htree=/home/lha/src/cvs/heimdal
+ hotree=/sources/obj/heimdal
+ otree=/sources/afs/openafs-rxkad5
+ 
+ export htree otree
+ 
+ (cd $htree/lib/asn1 ; \
+  echo '#include "asn1_err.h"'; 
+  echo '#include <errno.h>'; 
+  cat der_get.c \
+  der_put.c \
+  der_free.c \
+  der_length.c \
+  der_copy.c \
+  timegm.c \
+     )  \
+ | grep -v 'include "der_locl.h"' \
+ | grep -v 'include <version.h>' \
+ | sed 's!\(RCSID.*\)!/* \1 */!' \
+ | sed 's!$Id: !Heimdal: !' \
+ | cat > $otree/src/rxkad/v5der.c
+ 
+ grep -v 'struct units'  $hotree/lib/asn1/krb5_asn1.h \
+    > $otree/src/rxkad/v5gen.h
+ 
+ (cd $hotree/lib/asn1 ; \
+  cat asn1_Ticket.c \
+     asn1_EncryptedData.c \
+     asn1_PrincipalName.c \
+     asn1_HostAddresses.c \
+     asn1_HostAddress.c \
+     asn1_AuthorizationData.c \
+     asn1_EncTicketPart.c \
+     asn1_KerberosTime.c \
+     asn1_TransitedEncoding.c \
+     asn1_EncryptionKey.c \
+     asn1_TicketFlags.c \
+     asn1_Realm.c \
+     asn1_ENCTYPE.c \
+     asn1_NAME_TYPE.c \
+     ) \
+  | grep -v 'include <krb5_asn1.h>' \
+  | grep -v 'include <der.h>' \
+  | grep -v 'include <parse_units.h>' \
+  | perl \
+    -e '$f=0; while(<>){$f=1 if(/struct units/);print if($f eq 0);$f=0 if(/^};/);}' \
+  | cat > $otree/src/rxkad/v5gen.c
+ 
+ ( \
+  perl -p -e 's/^(encode_|decode_|free_|copy_|length_)([^(]*)\([^)]*\)\n$/#define $1$2 _rxkad_v5_$1$2\n/' $otree/src/rxkad/v5gen.c ; \
+   perl -p -e 's/^(der_|copy_|encode_|decode_|len_|length_|free_|fix_dce|time2generalizedtime)([^(]*).*/#define $1$2 _rxkad_v5_$1$2/' /sources/afs/openafs-krb5/src/rxkad/v5der.c ; \
+   echo '#define TicketFlags2int _rxkad_v5_TicketFlags2int' ; \
+   echo '#define int2TicketFlags _rxkad_v5_int2TicketFlags' ; \
+   : ) | \
+  (grep _rxkad_v5 ; \
+   echo '#ifndef HAVE_TIMEGM' ; \
+   echo '#define timegm	_rxkad_timegm' ; \
+   echo '#endif' ; \
+   :) > $otree/src/rxkad/v5gen-rewrite.h
Index: openafs/src/rxkad/asn1-common.h
diff -c /dev/null openafs/src/rxkad/asn1-common.h:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/asn1-common.h	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,21 ----
+ /* $Id: asn1-common.h,v 1.2.2.1 2002/11/14 22:44:38 zacheiss Exp $ */
+ 
+ #include <stddef.h>
+ #include <time.h>
+ 
+ #ifndef __asn1_common_definitions__
+ #define __asn1_common_definitions__
+ 
+ typedef struct octet_string {
+     size_t length;
+     void *data;
+ } octet_string;
+ 
+ typedef char *general_string;
+ 
+ typedef struct oid {
+     size_t length;
+     unsigned *components;
+ } oid;
+ 
+ #endif
Index: openafs/src/rxkad/asn1_err.h
diff -c /dev/null openafs/src/rxkad/asn1_err.h:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/asn1_err.h	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,23 ----
+ /* Generated from ../../../lib/asn1/asn1_err.et */
+ /* $Id: asn1_err.h,v 1.2.2.1 2002/11/14 22:44:38 zacheiss Exp $ */
+ 
+ #ifndef __asn1_err_h__
+ #define __asn1_err_h__
+ 
+ typedef enum asn1_error_number{
+ 	ERROR_TABLE_BASE_asn1 = 1859794432,
+ 	asn1_err_base = 1859794432,
+ 	ASN1_BAD_TIMEFORMAT = 1859794432,
+ 	ASN1_MISSING_FIELD = 1859794433,
+ 	ASN1_MISPLACED_FIELD = 1859794434,
+ 	ASN1_TYPE_MISMATCH = 1859794435,
+ 	ASN1_OVERFLOW = 1859794436,
+ 	ASN1_OVERRUN = 1859794437,
+ 	ASN1_BAD_ID = 1859794438,
+ 	ASN1_BAD_LENGTH = 1859794439,
+ 	ASN1_BAD_FORMAT = 1859794440,
+ 	ASN1_PARSE_ERROR = 1859794441,
+ 	asn1_num_errors = 10
+ } asn1_error_number;
+ 
+ #endif /* __asn1_err_h__ */
Index: openafs/src/rxkad/bg-fcrypt.c
diff -c /dev/null openafs/src/rxkad/bg-fcrypt.c:1.4.2.4
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/bg-fcrypt.c	Fri Nov 15 08:45:31 2002
***************
*** 0 ****
--- 1,815 ----
+ /*
+  * Copyright (c) 1995 - 2000 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>
+ #ifdef KERNEL
+ #include "../afs/param.h"
+ #else
+ #include <afs/param.h>
+ #endif
+ 
+ RCSID("$Header: /data/cvs/openafs/src/rxkad/bg-fcrypt.c,v 1.4.2.4 2002/11/15 13:45:31 shadow Exp $");
+ 
+ #define DEBUG 0
+ #ifdef KERNEL
+ #ifndef UKERNEL
+ #include "../afs/stds.h"
+ #include "../h/types.h"
+ #if !defined(AFS_LINUX20_ENV) && !defined(AFS_OBSD_ENV)
+ #include "../netinet/in.h"
+ #endif
+ #else /* UKERNEL */
+ #include "../afs/sysincludes.h"
+ #include "../afs/stds.h"
+ #endif /* UKERNEL */
+ #ifdef AFS_LINUX22_ENV
+ #include <asm/byteorder.h>
+ #endif
+ 
+ #include "../afs/longc_procs.h"
+ #include "../rx/rx.h"
+ #else /* KERNEL */
+ 
+ #include <afs/stds.h>
+ #include <sys/types.h>
+ #ifdef AFS_NT40_ENV
+ #include <winsock2.h>
+ #else
+ #include <netinet/in.h>
+ #endif
+ #include <rx/rx.h>
+ #endif /* KERNEL */
+ 
+ #include "fcrypt.h"
+ #include "rxkad.h"
+ #include "fcrypt.h"
+ #include "private_data.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%).
+  * The cost for this is rougly 4k bytes.
+  */
+ #define UNROLL_LOOPS 1
+ /*
+  * Inline assembler gives a boost only to fc_keysched.
+  * On the pentium expect ca 28%.
+  */
+ /*#define GNU_ASM 1 (now autoconfed) */
+ 
+ #if !defined(inline) && !defined(__GNUC__)
+ #define inline
+ #endif
+ 
+ /*
+  * There is usually no memcpy in kernels but gcc will inline all
+  * calls to memcpy in this code anyway.
+  */
+ #if defined(KERNEL) && !defined(__GNUC__)
+ #define memcpy(to, from, n) bcopy((from), (to), (n))
+ #endif
+ 
+ /* Rotate 32 bit word left */
+ #define ROT32L(x, n) ((((afs_uint32) x) << (n)) | (((afs_uint32) x) >> (32-(n))))
+ #define bswap32(x) (((ROT32L(x, 16) & 0x00ff00ff)<<8) | ((ROT32L(x, 16)>>8) & 0x00ff00ff))
+ 
+ #if WORDS_BIGENDIAN
+ #define NTOH(x) (x)
+ #else
+ #define NTOH(x) bswap32(x)
+ #endif
+ 
+ /*
+  * Try to use a good function for ntohl-ing.
+  *
+  * The choice is done by autoconf setting EFF_NTOHL to one of:
+  * CPU		function
+  * i386		ntohl
+  * i[4-9]86	bswap
+  * alpha	bswap32
+  * all else	ntohl
+  */
+ 
+ #define EFF_NTOHL(x) ntohl(x)
+ 
+ #if 0
+ #if defined(__GNUC__) && (defined(i386) || defined(__i386__))
+ static inline afs_uint32
+ bswap(afs_uint32 x)
+ {
+   asm("bswap %0" : "=r" (x) : "0" (x));
+   return x;
+ }
+ #endif
+ #endif
+ 
+ /*
+  * Sboxes for Feistel network derived from
+  * /afs/transarc.com/public/afsps/afs.rel31b.export-src/rxkad/sboxes.h
+  */
+ 
+ #undef Z
+ #define Z(x) NTOH(x << 3)
+ static const afs_uint32 sbox0[256] = {
+   Z(0xea), Z(0x7f), Z(0xb2), Z(0x64), Z(0x9d), Z(0xb0), Z(0xd9), Z(0x11), Z(0xcd), Z(0x86), Z(0x86),
+   Z(0x91), Z(0x0a), Z(0xb2), Z(0x93), Z(0x06), Z(0x0e), Z(0x06), Z(0xd2), Z(0x65), Z(0x73), Z(0xc5),
+   Z(0x28), Z(0x60), Z(0xf2), Z(0x20), Z(0xb5), Z(0x38), Z(0x7e), Z(0xda), Z(0x9f), Z(0xe3), Z(0xd2),
+   Z(0xcf), Z(0xc4), Z(0x3c), Z(0x61), Z(0xff), Z(0x4a), Z(0x4a), Z(0x35), Z(0xac), Z(0xaa), Z(0x5f),
+   Z(0x2b), Z(0xbb), Z(0xbc), Z(0x53), Z(0x4e), Z(0x9d), Z(0x78), Z(0xa3), Z(0xdc), Z(0x09), Z(0x32),
+   Z(0x10), Z(0xc6), Z(0x6f), Z(0x66), Z(0xd6), Z(0xab), Z(0xa9), Z(0xaf), Z(0xfd), Z(0x3b), Z(0x95),
+   Z(0xe8), Z(0x34), Z(0x9a), Z(0x81), Z(0x72), Z(0x80), Z(0x9c), Z(0xf3), Z(0xec), Z(0xda), Z(0x9f),
+   Z(0x26), Z(0x76), Z(0x15), Z(0x3e), Z(0x55), Z(0x4d), Z(0xde), Z(0x84), Z(0xee), Z(0xad), Z(0xc7),
+   Z(0xf1), Z(0x6b), Z(0x3d), Z(0xd3), Z(0x04), Z(0x49), Z(0xaa), Z(0x24), Z(0x0b), Z(0x8a), Z(0x83),
+   Z(0xba), Z(0xfa), Z(0x85), Z(0xa0), Z(0xa8), Z(0xb1), Z(0xd4), Z(0x01), Z(0xd8), Z(0x70), Z(0x64),
+   Z(0xf0), Z(0x51), Z(0xd2), Z(0xc3), Z(0xa7), Z(0x75), Z(0x8c), Z(0xa5), Z(0x64), Z(0xef), Z(0x10),
+   Z(0x4e), Z(0xb7), Z(0xc6), Z(0x61), Z(0x03), Z(0xeb), Z(0x44), Z(0x3d), Z(0xe5), Z(0xb3), Z(0x5b),
+   Z(0xae), Z(0xd5), Z(0xad), Z(0x1d), Z(0xfa), Z(0x5a), Z(0x1e), Z(0x33), Z(0xab), Z(0x93), Z(0xa2),
+   Z(0xb7), Z(0xe7), Z(0xa8), Z(0x45), Z(0xa4), Z(0xcd), Z(0x29), Z(0x63), Z(0x44), Z(0xb6), Z(0x69),
+   Z(0x7e), Z(0x2e), Z(0x62), Z(0x03), Z(0xc8), Z(0xe0), Z(0x17), Z(0xbb), Z(0xc7), Z(0xf3), Z(0x3f),
+   Z(0x36), Z(0xba), Z(0x71), Z(0x8e), Z(0x97), Z(0x65), Z(0x60), Z(0x69), Z(0xb6), Z(0xf6), Z(0xe6),
+   Z(0x6e), Z(0xe0), Z(0x81), Z(0x59), Z(0xe8), Z(0xaf), Z(0xdd), Z(0x95), Z(0x22), Z(0x99), Z(0xfd),
+   Z(0x63), Z(0x19), Z(0x74), Z(0x61), Z(0xb1), Z(0xb6), Z(0x5b), Z(0xae), Z(0x54), Z(0xb3), Z(0x70),
+   Z(0xff), Z(0xc6), Z(0x3b), Z(0x3e), Z(0xc1), Z(0xd7), Z(0xe1), Z(0x0e), Z(0x76), Z(0xe5), Z(0x36),
+   Z(0x4f), Z(0x59), Z(0xc7), Z(0x08), Z(0x6e), Z(0x82), Z(0xa6), Z(0x93), Z(0xc4), Z(0xaa), Z(0x26),
+   Z(0x49), Z(0xe0), Z(0x21), Z(0x64), Z(0x07), Z(0x9f), Z(0x64), Z(0x81), Z(0x9c), Z(0xbf), Z(0xf9),
+   Z(0xd1), Z(0x43), Z(0xf8), Z(0xb6), Z(0xb9), Z(0xf1), Z(0x24), Z(0x75), Z(0x03), Z(0xe4), Z(0xb0),
+   Z(0x99), Z(0x46), Z(0x3d), Z(0xf5), Z(0xd1), Z(0x39), Z(0x72), Z(0x12), Z(0xf6), Z(0xba), Z(0x0c),
+   Z(0x0d), Z(0x42), Z(0x2e)};
+ 
+ #undef Z
+ #define Z(x) NTOH((x << 27) | (x >> 5))
+ static const afs_uint32 sbox1[256] = {
+   Z(0x77), Z(0x14), Z(0xa6), Z(0xfe), Z(0xb2), Z(0x5e), Z(0x8c), Z(0x3e), Z(0x67), Z(0x6c), Z(0xa1),
+   Z(0x0d), Z(0xc2), Z(0xa2), Z(0xc1), Z(0x85), Z(0x6c), Z(0x7b), Z(0x67), Z(0xc6), Z(0x23), Z(0xe3),
+   Z(0xf2), Z(0x89), Z(0x50), Z(0x9c), Z(0x03), Z(0xb7), Z(0x73), Z(0xe6), Z(0xe1), Z(0x39), Z(0x31),
+   Z(0x2c), Z(0x27), Z(0x9f), Z(0xa5), Z(0x69), Z(0x44), Z(0xd6), Z(0x23), Z(0x83), Z(0x98), Z(0x7d),
+   Z(0x3c), Z(0xb4), Z(0x2d), Z(0x99), Z(0x1c), Z(0x1f), Z(0x8c), Z(0x20), Z(0x03), Z(0x7c), Z(0x5f),
+   Z(0xad), Z(0xf4), Z(0xfa), Z(0x95), Z(0xca), Z(0x76), Z(0x44), Z(0xcd), Z(0xb6), Z(0xb8), Z(0xa1),
+   Z(0xa1), Z(0xbe), Z(0x9e), Z(0x54), Z(0x8f), Z(0x0b), Z(0x16), Z(0x74), Z(0x31), Z(0x8a), Z(0x23),
+   Z(0x17), Z(0x04), Z(0xfa), Z(0x79), Z(0x84), Z(0xb1), Z(0xf5), Z(0x13), Z(0xab), Z(0xb5), Z(0x2e),
+   Z(0xaa), Z(0x0c), Z(0x60), Z(0x6b), Z(0x5b), Z(0xc4), Z(0x4b), Z(0xbc), Z(0xe2), Z(0xaf), Z(0x45),
+   Z(0x73), Z(0xfa), Z(0xc9), Z(0x49), Z(0xcd), Z(0x00), Z(0x92), Z(0x7d), Z(0x97), Z(0x7a), Z(0x18),
+   Z(0x60), Z(0x3d), Z(0xcf), Z(0x5b), Z(0xde), Z(0xc6), Z(0xe2), Z(0xe6), Z(0xbb), Z(0x8b), Z(0x06),
+   Z(0xda), Z(0x08), Z(0x15), Z(0x1b), Z(0x88), Z(0x6a), Z(0x17), Z(0x89), Z(0xd0), Z(0xa9), Z(0xc1),
+   Z(0xc9), Z(0x70), Z(0x6b), Z(0xe5), Z(0x43), Z(0xf4), Z(0x68), Z(0xc8), Z(0xd3), Z(0x84), Z(0x28),
+   Z(0x0a), Z(0x52), Z(0x66), Z(0xa3), Z(0xca), Z(0xf2), Z(0xe3), Z(0x7f), Z(0x7a), Z(0x31), Z(0xf7),
+   Z(0x88), Z(0x94), Z(0x5e), Z(0x9c), Z(0x63), Z(0xd5), Z(0x24), Z(0x66), Z(0xfc), Z(0xb3), Z(0x57),
+   Z(0x25), Z(0xbe), Z(0x89), Z(0x44), Z(0xc4), Z(0xe0), Z(0x8f), Z(0x23), Z(0x3c), Z(0x12), Z(0x52),
+   Z(0xf5), Z(0x1e), Z(0xf4), Z(0xcb), Z(0x18), Z(0x33), Z(0x1f), Z(0xf8), Z(0x69), Z(0x10), Z(0x9d),
+   Z(0xd3), Z(0xf7), Z(0x28), Z(0xf8), Z(0x30), Z(0x05), Z(0x5e), Z(0x32), Z(0xc0), Z(0xd5), Z(0x19),
+   Z(0xbd), Z(0x45), Z(0x8b), Z(0x5b), Z(0xfd), Z(0xbc), Z(0xe2), Z(0x5c), Z(0xa9), Z(0x96), Z(0xef),
+   Z(0x70), Z(0xcf), Z(0xc2), Z(0x2a), Z(0xb3), Z(0x61), Z(0xad), Z(0x80), Z(0x48), Z(0x81), Z(0xb7),
+   Z(0x1d), Z(0x43), Z(0xd9), Z(0xd7), Z(0x45), Z(0xf0), Z(0xd8), Z(0x8a), Z(0x59), Z(0x7c), Z(0x57),
+   Z(0xc1), Z(0x79), Z(0xc7), Z(0x34), Z(0xd6), Z(0x43), Z(0xdf), Z(0xe4), Z(0x78), Z(0x16), Z(0x06),
+   Z(0xda), Z(0x92), Z(0x76), Z(0x51), Z(0xe1), Z(0xd4), Z(0x70), Z(0x03), Z(0xe0), Z(0x2f), Z(0x96),
+   Z(0x91), Z(0x82), Z(0x80)};
+ 
+ #undef Z
+ #define Z(x) NTOH(x << 11)
+ static const afs_uint32 sbox2[256] = {
+   Z(0xf0), Z(0x37), Z(0x24), Z(0x53), Z(0x2a), Z(0x03), Z(0x83), Z(0x86), Z(0xd1), Z(0xec), Z(0x50),
+   Z(0xf0), Z(0x42), Z(0x78), Z(0x2f), Z(0x6d), Z(0xbf), Z(0x80), Z(0x87), Z(0x27), Z(0x95), Z(0xe2),
+   Z(0xc5), Z(0x5d), Z(0xf9), Z(0x6f), Z(0xdb), Z(0xb4), Z(0x65), Z(0x6e), Z(0xe7), Z(0x24), Z(0xc8),
+   Z(0x1a), Z(0xbb), Z(0x49), Z(0xb5), Z(0x0a), Z(0x7d), Z(0xb9), Z(0xe8), Z(0xdc), Z(0xb7), Z(0xd9),
+   Z(0x45), Z(0x20), Z(0x1b), Z(0xce), Z(0x59), Z(0x9d), Z(0x6b), Z(0xbd), Z(0x0e), Z(0x8f), Z(0xa3),
+   Z(0xa9), Z(0xbc), Z(0x74), Z(0xa6), Z(0xf6), Z(0x7f), Z(0x5f), Z(0xb1), Z(0x68), Z(0x84), Z(0xbc),
+   Z(0xa9), Z(0xfd), Z(0x55), Z(0x50), Z(0xe9), Z(0xb6), Z(0x13), Z(0x5e), Z(0x07), Z(0xb8), Z(0x95),
+   Z(0x02), Z(0xc0), Z(0xd0), Z(0x6a), Z(0x1a), Z(0x85), Z(0xbd), Z(0xb6), Z(0xfd), Z(0xfe), Z(0x17),
+   Z(0x3f), Z(0x09), Z(0xa3), Z(0x8d), Z(0xfb), Z(0xed), Z(0xda), Z(0x1d), Z(0x6d), Z(0x1c), Z(0x6c),
+   Z(0x01), Z(0x5a), Z(0xe5), Z(0x71), Z(0x3e), Z(0x8b), Z(0x6b), Z(0xbe), Z(0x29), Z(0xeb), Z(0x12),
+   Z(0x19), Z(0x34), Z(0xcd), Z(0xb3), Z(0xbd), Z(0x35), Z(0xea), Z(0x4b), Z(0xd5), Z(0xae), Z(0x2a),
+   Z(0x79), Z(0x5a), Z(0xa5), Z(0x32), Z(0x12), Z(0x7b), Z(0xdc), Z(0x2c), Z(0xd0), Z(0x22), Z(0x4b),
+   Z(0xb1), Z(0x85), Z(0x59), Z(0x80), Z(0xc0), Z(0x30), Z(0x9f), Z(0x73), Z(0xd3), Z(0x14), Z(0x48),
+   Z(0x40), Z(0x07), Z(0x2d), Z(0x8f), Z(0x80), Z(0x0f), Z(0xce), Z(0x0b), Z(0x5e), Z(0xb7), Z(0x5e),
+   Z(0xac), Z(0x24), Z(0x94), Z(0x4a), Z(0x18), Z(0x15), Z(0x05), Z(0xe8), Z(0x02), Z(0x77), Z(0xa9),
+   Z(0xc7), Z(0x40), Z(0x45), Z(0x89), Z(0xd1), Z(0xea), Z(0xde), Z(0x0c), Z(0x79), Z(0x2a), Z(0x99),
+   Z(0x6c), Z(0x3e), Z(0x95), Z(0xdd), Z(0x8c), Z(0x7d), Z(0xad), Z(0x6f), Z(0xdc), Z(0xff), Z(0xfd),
+   Z(0x62), Z(0x47), Z(0xb3), Z(0x21), Z(0x8a), Z(0xec), Z(0x8e), Z(0x19), Z(0x18), Z(0xb4), Z(0x6e),
+   Z(0x3d), Z(0xfd), Z(0x74), Z(0x54), Z(0x1e), Z(0x04), Z(0x85), Z(0xd8), Z(0xbc), Z(0x1f), Z(0x56),
+   Z(0xe7), Z(0x3a), Z(0x56), Z(0x67), Z(0xd6), Z(0xc8), Z(0xa5), Z(0xf3), Z(0x8e), Z(0xde), Z(0xae),
+   Z(0x37), Z(0x49), Z(0xb7), Z(0xfa), Z(0xc8), Z(0xf4), Z(0x1f), Z(0xe0), Z(0x2a), Z(0x9b), Z(0x15),
+   Z(0xd1), Z(0x34), Z(0x0e), Z(0xb5), Z(0xe0), Z(0x44), Z(0x78), Z(0x84), Z(0x59), Z(0x56), Z(0x68),
+   Z(0x77), Z(0xa5), Z(0x14), Z(0x06), Z(0xf5), Z(0x2f), Z(0x8c), Z(0x8a), Z(0x73), Z(0x80), Z(0x76),
+   Z(0xb4), Z(0x10), Z(0x86)};
+ 
+ #undef Z
+ #define Z(x) NTOH(x << 19)
+ static const afs_uint32 sbox3[256] = {
+   Z(0xa9), Z(0x2a), Z(0x48), Z(0x51), Z(0x84), Z(0x7e), Z(0x49), Z(0xe2), Z(0xb5), Z(0xb7), Z(0x42),
+   Z(0x33), Z(0x7d), Z(0x5d), Z(0xa6), Z(0x12), Z(0x44), Z(0x48), Z(0x6d), Z(0x28), Z(0xaa), Z(0x20),
+   Z(0x6d), Z(0x57), Z(0xd6), Z(0x6b), Z(0x5d), Z(0x72), Z(0xf0), Z(0x92), Z(0x5a), Z(0x1b), Z(0x53),
+   Z(0x80), Z(0x24), Z(0x70), Z(0x9a), Z(0xcc), Z(0xa7), Z(0x66), Z(0xa1), Z(0x01), Z(0xa5), Z(0x41),
+   Z(0x97), Z(0x41), Z(0x31), Z(0x82), Z(0xf1), Z(0x14), Z(0xcf), Z(0x53), Z(0x0d), Z(0xa0), Z(0x10),
+   Z(0xcc), Z(0x2a), Z(0x7d), Z(0xd2), Z(0xbf), Z(0x4b), Z(0x1a), Z(0xdb), Z(0x16), Z(0x47), Z(0xf6),
+   Z(0x51), Z(0x36), Z(0xed), Z(0xf3), Z(0xb9), Z(0x1a), Z(0xa7), Z(0xdf), Z(0x29), Z(0x43), Z(0x01),
+   Z(0x54), Z(0x70), Z(0xa4), Z(0xbf), Z(0xd4), Z(0x0b), Z(0x53), Z(0x44), Z(0x60), Z(0x9e), Z(0x23),
+   Z(0xa1), Z(0x18), Z(0x68), Z(0x4f), Z(0xf0), Z(0x2f), Z(0x82), Z(0xc2), Z(0x2a), Z(0x41), Z(0xb2),
+   Z(0x42), Z(0x0c), Z(0xed), Z(0x0c), Z(0x1d), Z(0x13), Z(0x3a), Z(0x3c), Z(0x6e), Z(0x35), Z(0xdc),
+   Z(0x60), Z(0x65), Z(0x85), Z(0xe9), Z(0x64), Z(0x02), Z(0x9a), Z(0x3f), Z(0x9f), Z(0x87), Z(0x96),
+   Z(0xdf), Z(0xbe), Z(0xf2), Z(0xcb), Z(0xe5), Z(0x6c), Z(0xd4), Z(0x5a), Z(0x83), Z(0xbf), Z(0x92),
+   Z(0x1b), Z(0x94), Z(0x00), Z(0x42), Z(0xcf), Z(0x4b), Z(0x00), Z(0x75), Z(0xba), Z(0x8f), Z(0x76),
+   Z(0x5f), Z(0x5d), Z(0x3a), Z(0x4d), Z(0x09), Z(0x12), Z(0x08), Z(0x38), Z(0x95), Z(0x17), Z(0xe4),
+   Z(0x01), Z(0x1d), Z(0x4c), Z(0xa9), Z(0xcc), Z(0x85), Z(0x82), Z(0x4c), Z(0x9d), Z(0x2f), Z(0x3b),
+   Z(0x66), Z(0xa1), Z(0x34), Z(0x10), Z(0xcd), Z(0x59), Z(0x89), Z(0xa5), Z(0x31), Z(0xcf), Z(0x05),
+   Z(0xc8), Z(0x84), Z(0xfa), Z(0xc7), Z(0xba), Z(0x4e), Z(0x8b), Z(0x1a), Z(0x19), Z(0xf1), Z(0xa1),
+   Z(0x3b), Z(0x18), Z(0x12), Z(0x17), Z(0xb0), Z(0x98), Z(0x8d), Z(0x0b), Z(0x23), Z(0xc3), Z(0x3a),
+   Z(0x2d), Z(0x20), Z(0xdf), Z(0x13), Z(0xa0), Z(0xa8), Z(0x4c), Z(0x0d), Z(0x6c), Z(0x2f), Z(0x47),
+   Z(0x13), Z(0x13), Z(0x52), Z(0x1f), Z(0x2d), Z(0xf5), Z(0x79), Z(0x3d), Z(0xa2), Z(0x54), Z(0xbd),
+   Z(0x69), Z(0xc8), Z(0x6b), Z(0xf3), Z(0x05), Z(0x28), Z(0xf1), Z(0x16), Z(0x46), Z(0x40), Z(0xb0),
+   Z(0x11), Z(0xd3), Z(0xb7), Z(0x95), Z(0x49), Z(0xcf), Z(0xc3), Z(0x1d), Z(0x8f), Z(0xd8), Z(0xe1),
+   Z(0x73), Z(0xdb), Z(0xad), Z(0xc8), Z(0xc9), Z(0xa9), Z(0xa1), Z(0xc2), Z(0xc5), Z(0xe3), Z(0xba),
+   Z(0xfc), Z(0x0e), Z(0x25)};
+ 
+ /*
+  * This is a 16 round Feistel network with permutation F_ENCRYPT
+  */
+ 
+ #define F_ENCRYPT(R, L, sched) { \
+  union lc4 { afs_uint32 l; unsigned char c[4]; } un; \
+  un.l = sched ^ R; \
+  L ^= sbox0[un.c[0]] ^ sbox1[un.c[1]] ^ sbox2[un.c[2]] ^ sbox3[un.c[3]]; }
+ 
+ #ifndef WORDS_BIGENDIAN
+ /* BEWARE: this code is endian dependent.
+  * This should really be inline assembler on the x86.
+  */
+ #undef F_ENCRYPT
+ #define FF(y, shiftN) (((y) >> shiftN) & 0xFF)
+ #define F_ENCRYPT(R, L, sched) { \
+  afs_uint32 un; \
+  un = sched ^ R; \
+  L ^= sbox0[FF(un, 0)] ^ sbox1[FF(un, 8)] ^ sbox2[FF(un, 16)] ^ sbox3[FF(un, 24)];}
+ #endif
+ 
+ static inline
+ void
+ fc_ecb_enc(afs_uint32 l,
+ 	   afs_uint32 r,
+ 	   afs_uint32 out[2],
+ 	   const afs_int32 sched[MAXROUNDS])
+ {
+ #if !defined(UNROLL_LOOPS)
+   {
+     int i;
+     for (i = 0; i < (MAXROUNDS/4); i++)
+       {
+ 	F_ENCRYPT(r, l, *sched++);
+ 	F_ENCRYPT(l, r, *sched++);
+ 	F_ENCRYPT(r, l, *sched++);
+ 	F_ENCRYPT(l, r, *sched++);
+       }
+   }
+ #else
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+   F_ENCRYPT(r, l, *sched++);
+   F_ENCRYPT(l, r, *sched++);
+ #endif /* UNROLL_LOOPS */
+ 
+   out[0] = l;
+   out[1] = r;
+ }
+ 
+ static inline
+ void
+ fc_ecb_dec(afs_uint32 l,
+ 	   afs_uint32 r,
+ 	   afs_uint32 out[2],
+ 	   const afs_int32 sched[MAXROUNDS])
+ {
+   sched = &sched[MAXROUNDS-1];
+ 
+ #if !defined(UNROLL_LOOPS)
+   {
+     int i;
+     for (i = 0; i < (MAXROUNDS/4); i++)
+       {
+ 	F_ENCRYPT(l, r, *sched--);
+ 	F_ENCRYPT(r, l, *sched--);
+ 	F_ENCRYPT(l, r, *sched--);
+ 	F_ENCRYPT(r, l, *sched--);
+       }
+   }
+ #else
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+   F_ENCRYPT(l, r, *sched--);
+   F_ENCRYPT(r, l, *sched--);
+ #endif /* UNROLL_LOOPS */
+ 
+   out[0] = l;
+   out[1] = r;
+ }
+ 
+ static inline
+ void
+ fc_cbc_enc(const afs_uint32 *in,
+ 	   afs_uint32 *out,
+ 	   afs_int32 length,
+ 	   const afs_int32 sched[MAXROUNDS],
+ 	   afs_uint32 *iv)
+ {
+   afs_int32 xor0 = iv[0], xor1 = iv[1];
+ 
+   for (; length > 0; length -= 8)
+     {
+       afs_uint32 b8[2];
+       /* If length < 8 we read to much, usally ok */
+       xor0 ^= in[0];
+       xor1 ^= in[1];
+       fc_ecb_enc(xor0, xor1, b8, sched);
+       xor0 = in[0] ^ b8[0];
+       xor1 = in[1] ^ b8[1];
+ 
+       /* Out is always a multiple of 8 */
+       memcpy(out, b8, 8);
+       out += 2;
+       in += 2;
+     }
+   iv[0] = xor0;
+   iv[1] = xor1;
+ }
+ 
+ static inline
+ void
+ fc_cbc_dec(const afs_uint32 *in,
+ 	   afs_uint32 *out,
+ 	   afs_int32 length,
+ 	   const afs_int32 sched[MAXROUNDS],
+ 	   afs_uint32 *iv)
+ {
+   afs_int32 xor0 = iv[0], xor1 = iv[1];
+ 
+   for (; length > 0; length -= 8)
+     {
+       afs_uint32 b8[2];
+       /* In is always a multiple of 8 */
+       fc_ecb_dec(in[0], in[1], b8, sched);
+       b8[0] ^= xor0;
+       b8[1] ^= xor1;
+       xor0 = in[0] ^ b8[0];
+       xor1 = in[1] ^ b8[1];
+ 
+ #if 0
+       if (length >= 8)
+ 	memcpy(out, b8, 8);
+       else
+ 	memcpy(out, b8, length); /* Don't write to much when length < 8 */
+ #else
+       /* If length < 8 we write to much, this is not always ok */
+       memcpy(out, b8, 8);
+ #endif
+       out += 2;
+       in += 2;
+     }
+   iv[0] = xor0;
+   iv[1] = xor1;
+ }
+ 
+ afs_int32
+ fc_ecb_encrypt(afs_uint32 *in, afs_uint32 *out,
+ 	       fc_KeySchedule sched,
+ 	       int encrypt)
+ {
+   LOCK_RXKAD_STATS
+   rxkad_stats.fc_encrypts[encrypt]++;
+   UNLOCK_RXKAD_STATS
+   if (encrypt) 
+     fc_ecb_enc(in[0], in[1], out, sched);
+   else
+     fc_ecb_dec(in[0], in[1], out, sched);
+   return 0;
+ }
+ 
+ afs_int32
+ fc_cbc_encrypt(afs_uint32 *in, afs_uint32 *out,
+ 	       afs_int32 length,
+ 	       fc_KeySchedule sched,
+ 	       afs_uint32 *iv,
+ 	       int encrypt)
+ {
+   if (encrypt)
+     fc_cbc_enc(in, out, length, sched, iv);
+   else
+     fc_cbc_dec(in, out, length, sched, iv);
+   return 0;
+ }
+ 
+ /* Rotate two 32 bit numbers as a 56 bit number */
+ #define ROT56R(hi, lo, n) { \
+   afs_uint32 t = lo & ((1<<n)-1); \
+   lo = (lo >> n) | ((hi & ((1<<n)-1)) << (32-n)); \
+   hi = (hi >> n) | (t << (24-n)); }
+ 
+ /* Rotate one 64 bit number as a 56 bit number */
+ #define ROT56R64(k, n) { \
+   k = (k >> n) | ((k & ((1<<n) - 1)) << (56-n)); }
+ 
+ /*
+  * Generate a key schedule from key, the least significant bit in each
+  * key byte is parity and shall be ignored. This leaves 56 significant
+  * bits in the key to scatter over the 16 key schedules. For each
+  * schedule extract the low order 32 bits and use as schedule, then
+  * rotate right by 11 bits.
+  *
+  * Note that this fc_keysched() generates a schedule in natural byte
+  * order, the Transarc function does not. Therefore it's *not*
+  * possible to mix fc_keysched, fc_ecb_encrypt and fc_cbc_encrypt
+  * from different implementations. Keep them in the same module!
+  */
+ int
+ fc_keysched(void *key_,
+ 	    fc_KeySchedule sched)
+ {
+   const unsigned char *key = key_;
+ 
+   /* Do we have 56 bit longs or even longer longs? */
+ #if ((1ul << 31) << 1) && defined(ULONG_MAX) && ((ULONG_MAX >> 55) != 0) && ((1ul << 55) != 0)
+   unsigned long k;		/* k holds all 56 non parity bits */
+ 
+   /* Compress out parity bits */
+   k = (*key++) >> 1;
+   k <<= 7;
+   k |= (*key++) >> 1;
+   k <<= 7;
+   k |= (*key++) >> 1;
+   k <<= 7;
+   k |= (*key++) >> 1;
+   k <<= 7;
+   k |= (*key++) >> 1;
+   k <<= 7;
+   k |= (*key++) >> 1;
+   k <<= 7;
+   k |= (*key++) >> 1;
+   k <<= 7;
+   k |= (*key) >> 1;
+ 
+   /* Use lower 32 bits for schedule, rotate by 11 each round (16 times) */
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+ 
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+ 
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+ 
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+   ROT56R64(k, 11);
+   *sched++ = EFF_NTOHL((afs_uint32)k);
+ #else
+   afs_uint32 hi, lo; /* hi is upper 24 bits and lo lower 32, total 56 */
+ 
+   /* Compress out parity bits */
+   lo = (*key++) >> 1;
+   lo <<= 7;
+   lo |= (*key++) >> 1;
+   lo <<= 7;
+   lo |= (*key++) >> 1;
+   lo <<= 7;
+   lo |= (*key++) >> 1;
+   hi = lo >> 4;
+   lo &= 0xf;
+   lo <<= 7;
+   lo |= (*key++) >> 1;
+   lo <<= 7;
+   lo |= (*key++) >> 1;
+   lo <<= 7;
+   lo |= (*key++) >> 1;
+   lo <<= 7;
+   lo |= (*key) >> 1;
+ 
+   /* Use lower 32 bits for schedule, rotate by 11 each round (16 times) */
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+ 
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+ 
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+ 
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+   ROT56R(hi, lo, 11);
+   *sched++ = EFF_NTOHL(lo);
+ #endif
+   LOCK_RXKAD_STATS
+   rxkad_stats.fc_key_scheds++;
+   UNLOCK_RXKAD_STATS
+   return 0;
+ }
+ 
+ /*
+  * Encryption/decryption of Rx packets is pretty straight forward. Run
+  * fc_cbc_encrypt over the packet fragments until len bytes have been
+  * processed. Skip the Rx packet header but not the security header.
+  */
+ afs_int32
+ rxkad_EncryptPacket(const struct rx_connection *rx_connection_not_used,
+ 		    const fc_KeySchedule *sched,
+ 		    const afs_uint32 *iv,
+ 		    int len,
+ 		    struct rx_packet *packet)
+ {
+   afs_uint32 ivec[2];
+   struct iovec *frag;
+   struct rx_securityClass *obj;
+   struct rxkad_cprivate *tp;          /* s & c have type at same offset */
+ 
+   obj = rx_SecurityObjectOf(rx_connection_not_used);
+   tp = (struct rxkad_cprivate *)obj->privateData;
+   LOCK_RXKAD_STATS
+   rxkad_stats.bytesEncrypted[rxkad_TypeIndex(tp->type)] += len;
+   UNLOCK_RXKAD_STATS
+ 
+   {
+     /* What is this good for?
+      * It turns out that the security header for auth_enc is of
+      * size 8 bytes and the last 4 bytes are defined to be 0!
+      */
+     afs_uint32 *t = (afs_uint32 *)packet->wirevec[1].iov_base;
+     t[1] = 0;
+   }
+ 
+   memcpy(ivec, iv, sizeof(ivec)); /* Must use copy of iv */
+   for (frag = &packet->wirevec[1]; len; frag++)
+     {
+       int      iov_len = frag->iov_len;
+       afs_uint32 *iov_bas = (afs_uint32 *) frag->iov_base;
+       if (iov_len == 0)
+ 	return RXKADDATALEN;	/* Length mismatch */
+       if (len < iov_len)
+ 	iov_len = len;		/* Don't process to much data */
+       fc_cbc_enc(iov_bas, iov_bas, iov_len, sched, ivec);
+       len -= iov_len;
+     }
+   return 0;
+ }
+ 
+ afs_int32
+ rxkad_DecryptPacket(const struct rx_connection *rx_connection_not_used,
+ 		    const fc_KeySchedule *sched,
+ 		    const afs_uint32 *iv,
+ 		    int len,
+ 		    struct rx_packet *packet)
+ {
+   afs_uint32 ivec[2];
+   struct iovec *frag;
+   struct rx_securityClass *obj;
+   struct rxkad_cprivate *tp;          /* s & c have type at same offset */
+ 
+   obj = rx_SecurityObjectOf(rx_connection_not_used);
+   tp = (struct rxkad_cprivate *)obj->privateData;
+   LOCK_RXKAD_STATS
+   rxkad_stats.bytesDecrypted[rxkad_TypeIndex(tp->type)] += len;
+   UNLOCK_RXKAD_STATS
+ 
+   memcpy(ivec, iv, sizeof(ivec)); /* Must use copy of iv */
+   for (frag = &packet->wirevec[1]; len > 0; frag++)
+     {
+       int      iov_len = frag->iov_len;
+       afs_uint32 *iov_bas = (afs_uint32 *) frag->iov_base;
+       if (iov_len == 0)
+ 	return RXKADDATALEN;	/* Length mismatch */
+       if (len < iov_len)
+ 	iov_len = len;		/* Don't process to much data */
+       fc_cbc_dec(iov_bas, iov_bas, iov_len, sched, ivec);
+       len -= iov_len;
+     }
+   return 0;
+ }
+ 
+ #if defined(TEST) || defined(TEST_KERNEL)
+ /*
+  * It is possible to link with the client kernel libafs.a to verify
+  * the test case. Use TEST_KERNEL to get the mangled names.
+  */
+ 
+ #include <stdio.h>
+ #include <string.h>
+ 
+ #include <time.h>
+ 
+ const char the_quick[] = "The quick brown fox jumps over the lazy dogs.\0\0";
+ 
+ const unsigned char key1[8]={0xf0,0xe1,0xd2,0xc3,0xb4,0xa5,0x96,0x87};
+ const char ciph1[] = {
+   0x00, 0xf0, 0xe,  0x11, 0x75, 0xe6, 0x23, 0x82, 0xee, 0xac, 0x98, 0x62,
+   0x44, 0x51, 0xe4, 0x84, 0xc3, 0x59, 0xd8, 0xaa, 0x64, 0x60, 0xae, 0xf7,
+   0xd2, 0xd9, 0x13, 0x79, 0x72, 0xa3, 0x45, 0x03, 0x23, 0xb5, 0x62, 0xd7,
+   0xc,  0xf5, 0x27, 0xd1, 0xf8, 0x91, 0x3c, 0xac, 0x44, 0x22, 0x92, 0xef };
+ 
+ const unsigned char key2[8]={0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};
+ const char ciph2[] = {
+   0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c, 0x01, 0x88, 0x7f, 0x3e,
+   0x31, 0x6e, 0x62, 0x9d, 0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
+   0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0, 0x19, 0x89, 0x09, 0x1c,
+   0x2a, 0x8e, 0x8c, 0x94, 0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f };
+ 
+ #ifdef TEST_KERNEL
+ #define fc_keysched    _afs_QTKrFdpoFL
+ #define fc_ecb_encrypt _afs_sDLThwNLok
+ #define fc_cbc_encrypt _afs_fkyCWTvfRS
+ #define rxkad_DecryptPacket _afs_SRWEeqTXrS
+ #define rxkad_EncryptPacket _afs_bpwQbdoghO
+ #endif
+ 
+ int rx_SlowPutInt32() { abort(); }
+ 
+ int
+ main()
+ {
+   afs_int32 sched[MAXROUNDS];
+   char ciph[100], clear[100], tmp[100];
+   afs_uint32 data[2];
+   afs_uint32 iv[2];
+   struct rx_packet packet;
+ 
+   if (sizeof(afs_int32) != 4)
+     fprintf(stderr, "error: sizeof(afs_int32) != 4\n");
+   if (sizeof(afs_uint32) != 4)
+     fprintf(stderr, "error: sizeof(afs_uint32) != 4\n");
+ 
+   /*
+    * Use key1 and key2 as iv */
+   fc_keysched(key1, sched);
+   memcpy(iv, key2, sizeof(iv));
+   fc_cbc_encrypt(the_quick, ciph, sizeof(the_quick), sched, iv, ENCRYPT);
+   if (memcmp(ciph1, ciph, sizeof(ciph1)) != 0)
+     fprintf(stderr, "encrypt FAILED\n");
+   memcpy(iv, key2, sizeof(iv));
+   fc_cbc_encrypt(ciph, clear, sizeof(the_quick), sched, iv, DECRYPT);
+   if (strcmp(the_quick, clear) != 0)
+     fprintf(stderr, "crypt decrypt FAILED\n");
+ 
+   /*
+    * Use key2 and key1 as iv
+    */
+   fc_keysched(key2, sched);
+   memcpy(iv, key1, sizeof(iv));
+   fc_cbc_encrypt(the_quick, ciph, sizeof(the_quick), sched, iv, ENCRYPT);
+   if (memcmp(ciph2, ciph, sizeof(ciph2)) != 0)
+     fprintf(stderr, "encrypt FAILED\n");
+   memcpy(iv, key1, sizeof(iv));
+   fc_cbc_encrypt(ciph, clear, sizeof(the_quick), sched, iv, DECRYPT);
+   if (strcmp(the_quick, clear) != 0)
+     fprintf(stderr, "crypt decrypt FAILED\n");
+ 
+   /*
+    * Test Encrypt- and Decrypt-Packet, use key1 and key2 as iv
+    */
+   fc_keysched(key1, sched);
+   memcpy(iv, key2, sizeof(iv));
+   strcpy(clear, the_quick);
+   packet.wirevec[1].iov_base = clear;
+   packet.wirevec[1].iov_len = sizeof(the_quick);
+   packet.wirevec[2].iov_len = 0;
+ 
+   /* For unknown reasons bytes 4-7 are zeroed in rxkad_EncryptPacket */
+   rxkad_EncryptPacket(tmp, sched, iv, sizeof(the_quick), &packet);
+   rxkad_DecryptPacket(tmp, sched, iv, sizeof(the_quick), &packet);
+   clear[4] ^= 'q';
+   clear[5] ^= 'u';
+   clear[6] ^= 'i';
+   clear[7] ^= 'c';
+   if (strcmp(the_quick, clear) != 0)
+     fprintf(stderr, "rxkad_EncryptPacket/rxkad_DecryptPacket FAILED\n");
+ 
+   {
+     struct timeval start, stop;
+     int i;
+     
+     fc_keysched(key1, sched);
+     gettimeofday(&start, 0);
+     for (i = 0; i < 1000000; i++)
+       fc_keysched(key1, sched);
+     gettimeofday(&stop, 0);
+     printf("fc_keysched    = %2.2f us\n",
+ 	   (stop.tv_sec - start.tv_sec
+ 	    + (stop.tv_usec - start.tv_usec)/1e6)*1);
+ 	   
+     fc_ecb_encrypt(data, data, sched, ENCRYPT);
+     gettimeofday(&start, 0);
+     for (i = 0; i < 1000000; i++)
+       fc_ecb_encrypt(data, data, sched, ENCRYPT);
+     gettimeofday(&stop, 0);
+     printf("fc_ecb_encrypt = %2.2f us\n",
+ 	   (stop.tv_sec - start.tv_sec
+ 	    + (stop.tv_usec - start.tv_usec)/1e6)*1);
+ 	   
+     fc_cbc_encrypt(the_quick, ciph, sizeof(the_quick), sched, iv, ENCRYPT);
+     gettimeofday(&start, 0);
+     for (i = 0; i < 100000; i++)
+       fc_cbc_encrypt(the_quick, ciph, sizeof(the_quick), sched, iv, ENCRYPT);
+     gettimeofday(&stop, 0);
+     printf("fc_cbc_encrypt = %2.2f us\n",
+ 	   (stop.tv_sec - start.tv_sec
+ 	    + (stop.tv_usec - start.tv_usec)/1e6)*10);
+ 	   
+   }
+ 
+   exit(0);
+ }
+ #endif /* TEST */
Index: openafs/src/rxkad/crc.c
diff -c /dev/null openafs/src/rxkad/crc.c:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/crc.c	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,109 ----
+ /*
+  * Copyright (c) 1997 - 2000 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. 
+  */
+ 
+ /* RCSID("$Heimdal: crc.c,v 1.9 2000/08/03 01:45:14 assar Exp $"); */
+ 
+ #include <afsconfig.h>
+ #if defined(UKERNEL)
+ #include "../afs/param.h"
+ #else
+ #include <afs/param.h>
+ #endif
+ 
+ RCSID("$Header: /data/cvs/openafs/src/rxkad/crc.c,v 1.2.2.1 2002/11/14 22:44:38 zacheiss Exp $");
+ 
+ #if defined(UKERNEL)
+ #include "../afs/sysincludes.h"
+ #include "../afs/afsincludes.h"
+ #include "../afs/stds.h"
+ #include "../rx/xdr.h"
+ #include "../rx/rx.h"
+ #include "../des/des.h"
+ #include "../afs/lifetimes.h"
+ #include "../afs/rxkad.h"
+ #else /* defined(UKERNEL) */
+ #include <afs/stds.h>
+ #include <sys/types.h>
+ #ifdef AFS_NT40_ENV
+ #include <winsock2.h>
+ #else
+ #include <netinet/in.h>
+ #endif
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+ #else
+ #ifdef HAVE_STRINGS_H
+ #include <strings.h>
+ #endif
+ #endif
+ #include <rx/xdr.h>
+ #include <rx/rx.h>
+ #include <des.h>
+ #include "lifetimes.h"
+ #include "rxkad.h"
+ #endif /* defined(UKERNEL) */
+ 
+ static u_long table[256];
+ 
+ #define CRC_GEN 0xEDB88320L
+ 
+ void
+ _rxkad_crc_init_table(void)
+ {
+     static int flag = 0;
+     unsigned long crc, poly;
+     int     i, j;
+     
+     if(flag) return;
+     poly = CRC_GEN;
+     for (i = 0; i < 256; i++) {
+ 	crc = i;
+ 	for (j = 8; j > 0; j--) {
+ 	    if (crc & 1) {
+ 		crc = (crc >> 1) ^ poly;
+ 	    } else {
+ 		crc >>= 1;
+ 	    }
+ 	}
+ 	table[i] = crc;
+     }
+     flag = 1;
+ }
+ 
+ afs_uint32
+ _rxkad_crc_update (const char *p, size_t len, afs_uint32 res)
+ {
+     while (len--)
+ 	res = table[(res ^ *p++) & 0xFF] ^ (res >> 8);
+     return res & 0xFFFFFFFF;
+ }
Index: openafs/src/rxkad/der.h
diff -c /dev/null openafs/src/rxkad/der.h:1.3.2.2
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/der.h	Thu Nov 14 17:46:51 2002
***************
*** 0 ****
--- 1,152 ----
+ /*
+  * Copyright (c) 1997 - 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: der.h,v 1.3.2.2 2002/11/14 22:46:51 zacheiss Exp $ */
+ 
+ #ifndef __DER_H__
+ #define __DER_H__
+ 
+ #include <time.h>
+ 
+ typedef enum {UNIV = 0, APPL = 1, Der_CONTEXT = 2 , PRIVATE = 3} Der_class;
+ 
+ typedef enum {PRIM = 0, CONS = 1} Der_type;
+ 
+ /* Universal tags */
+ 
+ enum {
+      UT_Boolean		= 1,
+      UT_Integer		= 2,
+      UT_BitString	= 3,
+      UT_OctetString	= 4,
+      UT_Null		= 5,
+      UT_OID		= 6,
+      UT_Enumerated	= 10,
+      UT_Sequence	= 16,
+      UT_Set		= 17,
+      UT_PrintableString	= 19,
+      UT_IA5String	= 22,
+      UT_UTCTime		= 23,
+      UT_GeneralizedTime	= 24,
+      UT_VisibleString	= 26,
+      UT_GeneralString	= 27
+ };
+ 
+ #define ASN1_INDEFINITE 0xdce0deed
+ 
+ #ifndef HAVE_TIMEGM
+ time_t timegm (struct tm *);
+ #endif
+ 
+ int time2generalizedtime (time_t t, octet_string *s);
+ 
+ int der_get_int (const unsigned char *p, size_t len, int *ret, size_t *size);
+ int der_get_length (const unsigned char *p, size_t len,
+ 		    size_t *val, size_t *size);
+ int der_get_general_string (const unsigned char *p, size_t len, 
+ 			    general_string *str, size_t *size);
+ int der_get_octet_string (const unsigned char *p, size_t len, 
+ 			  octet_string *data, size_t *size);
+ int der_get_oid (const unsigned char *p, size_t len,
+ 		 oid *data, size_t *size);
+ int der_get_tag (const unsigned char *p, size_t len, 
+ 		 Der_class *class, Der_type *type,
+ 		 int *tag, size_t *size);
+ 
+ int der_match_tag (const unsigned char *p, size_t len, 
+ 		   Der_class class, Der_type type,
+ 		   int tag, size_t *size);
+ int der_match_tag_and_length (const unsigned char *p, size_t len,
+ 			      Der_class class, Der_type type, int tag,
+ 			      size_t *length_ret, size_t *size);
+ 
+ int decode_integer (const unsigned char*, size_t, int*, size_t*);
+ int decode_unsigned (const unsigned char*, size_t, unsigned*, size_t*);
+ int decode_enumerated (const unsigned char*, size_t, unsigned*, size_t*);
+ int decode_general_string (const unsigned char*, size_t,
+ 			   general_string*, size_t*);
+ int decode_oid (const unsigned char *p, size_t len, 
+ 		oid *k, size_t *size);
+ int decode_octet_string (const unsigned char*, size_t, octet_string*, size_t*);
+ int decode_generalized_time (const unsigned char*, size_t, time_t*, size_t*);
+ 
+ int der_put_int (unsigned char *p, size_t len, int val, size_t*);
+ int der_put_length (unsigned char *p, size_t len, size_t val, size_t*);
+ int der_put_general_string (unsigned char *p, size_t len,
+ 			    const general_string *str, size_t*);
+ int der_put_octet_string (unsigned char *p, size_t len,
+ 			  const octet_string *data, size_t*);
+ int der_put_oid (unsigned char *p, size_t len,
+ 		 const oid *data, size_t *size);
+ int der_put_tag (unsigned char *p, size_t len, Der_class class, Der_type type,
+ 		 int tag, size_t*);
+ int der_put_length_and_tag (unsigned char*, size_t, size_t, 
+ 			    Der_class, Der_type, int, size_t*);
+ 
+ int encode_integer (unsigned char *p, size_t len,
+ 		    const int *data, size_t*);
+ int encode_unsigned (unsigned char *p, size_t len,
+ 		     const unsigned *data, size_t*);
+ int encode_enumerated (unsigned char *p, size_t len,
+ 		       const unsigned *data, size_t*);
+ int encode_general_string (unsigned char *p, size_t len, 
+ 			   const general_string *data, size_t*);
+ int encode_octet_string (unsigned char *p, size_t len,
+ 			 const octet_string *k, size_t*);
+ int encode_oid (unsigned char *p, size_t len,
+ 		const oid *k, size_t*);
+ int encode_generalized_time (unsigned char *p, size_t len,
+ 			     const time_t *t, size_t*);
+ 
+ void free_integer (int *num);
+ void free_general_string (general_string *str);
+ void free_octet_string (octet_string *k);
+ void free_oid (oid *k);
+ void free_generalized_time (time_t *t);
+ 
+ size_t length_len (size_t len);
+ size_t length_integer (const int *data);
+ size_t length_unsigned (const unsigned *data);
+ size_t length_enumerated (const unsigned *data);
+ size_t length_general_string (const general_string *data);
+ size_t length_octet_string (const octet_string *k);
+ size_t length_oid (const oid *k);
+ size_t length_generalized_time (const time_t *t);
+ 
+ int copy_general_string (const general_string *from, general_string *to);
+ int copy_octet_string (const octet_string *from, octet_string *to);
+ int copy_oid (const oid *from, oid *to);
+ 
+ int fix_dce(size_t reallen, size_t *len);
+ 
+ #endif /* __DER_H__ */
Index: openafs/src/rxkad/rxkad.p.h
diff -c openafs/src/rxkad/rxkad.p.h:1.2.8.1 openafs/src/rxkad/rxkad.p.h:1.2.8.2
*** openafs/src/rxkad/rxkad.p.h:1.2.8.1	Wed Nov 14 22:38:52 2001
--- openafs/src/rxkad/rxkad.p.h	Thu Nov 14 17:44:38 2002
***************
*** 36,41 ****
--- 36,44 ----
   * passed to/from ktc_[SG]etToken.
   */
  #define RXKAD_TKT_TYPE_KERBEROS_V5		256
+ #define RXKAD_TKT_TYPE_KERBEROS_V5_ENCPART_ONLY	213
+ 
+ #define MAXKRB5TICKETLEN			1024
  
  /*
   * The AFS/DFS translator may also make use of additional ticket types in
Index: openafs/src/rxkad/rxkad_server.c
diff -c openafs/src/rxkad/rxkad_server.c:1.7.2.2 openafs/src/rxkad/rxkad_server.c:1.7.2.3
*** openafs/src/rxkad/rxkad_server.c:1.7.2.2	Sat Oct 13 00:21:56 2001
--- openafs/src/rxkad/rxkad_server.c	Thu Nov 14 17:44:38 2002
***************
*** 14,20 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/rxkad_server.c,v 1.7.2.2 2001/10/13 04:21:56 shadow Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
--- 14,20 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/rxkad_server.c,v 1.7.2.3 2002/11/14 22:44:38 zacheiss Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
***************
*** 303,308 ****
--- 303,325 ----
      /*
       * If the alternate decoder is not present, or returns -1, then
       * assume the ticket is of the default style.
+      */
+     if (code == -1 && 
+ 	(kvno == RXKAD_TKT_TYPE_KERBEROS_V5) ||
+ 	(kvno == RXKAD_TKT_TYPE_KERBEROS_V5_ENCPART_ONLY)) 
+     {
+ 	code = tkt_DecodeTicket5 (tix, tlen, 
+ 				  tsp->get_key,
+ 				  tsp->get_key_rock,
+ 				  kvno,
+ 				  client.name, client.instance, client.cell,
+ 				  &sessionkey, &host, &start, &end);
+ 	if (code) return RXKADBADTICKET;
+     }
+ 
+     /*
+      * If the alternate decoder/kerberos 5 decoder is not present, or
+      * returns -1, then assume the ticket is of the default style.
       */
      if (code == -1) {
  	/* get ticket's key */
Index: openafs/src/rxkad/ticket5.c
diff -c /dev/null openafs/src/rxkad/ticket5.c:1.2.2.2
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/ticket5.c	Fri Nov 15 00:04:56 2002
***************
*** 0 ****
--- 1,323 ----
+ /*
+  * Copyright (c) 1995, 1996, 1997, 2002 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>
+ #if defined(UKERNEL)
+ #include "../afs/param.h"
+ #else
+ #include <afs/param.h>
+ #endif
+ 
+ RCSID("$Header: /data/cvs/openafs/src/rxkad/ticket5.c,v 1.2.2.2 2002/11/15 05:04:56 shadow Exp $");
+ 
+ #if defined(UKERNEL)
+ #include "../afs/sysincludes.h"
+ #include "../afs/afsincludes.h"
+ #include "../afs/stds.h"
+ #include "../rx/xdr.h"
+ #include "../rx/rx.h"
+ #include "../des/des.h"
+ #include "../afs/lifetimes.h"
+ #include "../afs/rxkad.h"
+ #else /* defined(UKERNEL) */
+ #include <afs/stds.h>
+ #include <sys/types.h>
+ #ifdef AFS_NT40_ENV
+ #include <winsock2.h>
+ #else
+ #include <netinet/in.h>
+ #endif
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+ #else
+ #ifdef HAVE_STRINGS_H
+ #include <strings.h>
+ #endif
+ #endif
+ #include <rx/xdr.h>
+ #include <rx/rx.h>
+ #include <des.h>
+ #include "lifetimes.h"
+ #include "rxkad.h"
+ #endif /* defined(UKERNEL) */
+ 
+ #include "v5gen-rewrite.h"
+ #include "asn1-common.h"
+ #include "der.h"
+ #include "v5gen.h"
+ #include "v5der.c"
+ #include "v5gen.c"
+ 
+ static int
+ krb5_des_decrypt(struct ktc_encryptionKey *, 
+ 		 int, void *, size_t, void *, size_t *);
+ 
+ 
+ 
+ 
+ int tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, 
+ 		      int (*get_key)(char *, int, struct ktc_encryptionKey *),
+ 		      char *get_key_rock,
+ 		      int serv_kvno,
+ 		      char *name, 
+ 		      char *inst, 
+ 		      char *cell, 
+ 		      char *session_key, 
+ 		      afs_int32 *host, 
+ 		      afs_int32 *start, 
+ 		      afs_int32 *end)
+ {
+     char plain[MAXKRB5TICKETLEN];
+     struct ktc_encryptionKey serv_key;
+     Ticket t5;	/* Must free */
+     EncTicketPart decr_part;	/* Must free */
+     int code;
+     size_t siz, plainsiz;
+     int v5_serv_kvno;
+ 
+     memset(&t5, 0, sizeof(t5));
+     memset(&decr_part, 0, sizeof(decr_part));
+ 
+     *host = 0;
+ 
+     if (ticket_len == 0)
+ 	return RXKADBADTICKET; /* no ticket */
+ 
+     if (serv_kvno == RXKAD_TKT_TYPE_KERBEROS_V5) {
+ 	code = decode_Ticket(ticket, ticket_len, &t5, &siz);
+ 	if (code != 0)
+ 	    goto cleanup;
+ 
+ 	if (t5.tkt_vno != 5)
+ 	    goto bad_ticket;
+     } else {
+ 	code = decode_EncryptedData(ticket, ticket_len, &t5.enc_part, &siz);
+ 	if (code != 0)
+ 	    goto cleanup;
+     }
+ 
+     /* Find the real service key version number */
+     if (t5.enc_part.kvno == NULL)
+ 	goto bad_ticket;
+     v5_serv_kvno = *t5.enc_part.kvno;
+     
+ 
+     code = (*get_key)(get_key_rock, v5_serv_kvno, &serv_key);
+     if (code)
+ 	goto unknown_key;
+ 
+     /* Check that the key type really fit into 8 bytes */
+     switch (t5.enc_part.etype) {
+     case ETYPE_DES_CBC_CRC:
+     case ETYPE_DES_CBC_MD4:
+     case ETYPE_DES_CBC_MD5:
+ 	break;
+     default:
+ 	goto unknown_key;
+     }
+ 
+     /* check ticket */
+     if (t5.enc_part.cipher.length > sizeof(plain) ||
+ 	t5.enc_part.cipher.length % 8 != 0)
+ 	goto bad_ticket;
+ 
+     /* Decrypt data here, save in plain, assume it will shrink */
+     code = krb5_des_decrypt(&serv_key,
+ 			    t5.enc_part.etype,
+ 			    t5.enc_part.cipher.data,
+ 			    t5.enc_part.cipher.length,
+ 			    plain,
+ 			    &plainsiz);
+     if (code != 0)
+ 	goto bad_ticket;
+ 
+     /* Decode ticket */
+     code = decode_EncTicketPart(plain, plainsiz, &decr_part, &siz);
+     if (code != 0)
+ 	goto bad_ticket;
+     
+     /* Extract realm and principal */  
+     strncpy(cell, decr_part.crealm, MAXKTCNAMELEN);
+     cell[MAXKTCNAMELEN - 1] = '\0';
+     inst[0] = '\0';
+     switch (decr_part.cname.name_string.len) {
+     case 2:
+ 	strncpy(inst, decr_part.cname.name_string.val[1], MAXKTCNAMELEN);
+ 	inst[MAXKTCNAMELEN - 1] = '\0';
+     case 1:
+ 	strncpy(name, decr_part.cname.name_string.val[0], MAXKTCNAMELEN);
+ 	name[MAXKTCNAMELEN - 1] = '\0';
+ 	break;
+     default:
+ 	goto bad_ticket;
+     }
+     
+     /* 
+      * If the first part of the name_string contains a dot, punt since
+      * then we can't see the diffrence between the kerberos 5
+      * principals foo.root and foo/root later in the fileserver.
+      */
+      if (strchr(decr_part.cname.name_string.val[0], '.') != NULL) 
+ 	 goto bad_ticket;
+ 
+     /* Verify that decr_part.key is of right type */
+     switch (decr_part.key.keytype) {
+     case ETYPE_DES_CBC_CRC:
+     case ETYPE_DES_CBC_MD4:
+     case ETYPE_DES_CBC_MD5:
+ 	break;
+     default:
+ 	goto bad_ticket;
+     }
+ 
+     if (decr_part.key.keyvalue.length != 8)
+ 	goto bad_ticket;
+ 
+     /* Extract session key */
+     memcpy(session_key, decr_part.key.keyvalue.data, 8);
+     
+     /* Check lifetimes and host addresses, flags etc */
+     {
+ 	time_t now = time(0);	/* Use fast time package instead??? */
+ 	*start = decr_part.authtime;
+ 	if (decr_part.starttime)
+ 	    *start = *decr_part.starttime;
+ #if 0
+ 	if (*start - now > CLOCK_SKEW || decr_part.flags.invalid)
+ 	    goto no_auth;
+ #else
+ 	if (decr_part.flags.invalid)
+ 	    goto no_auth;
+ #endif
+ 	if (now > decr_part.endtime)
+ 	    goto tkt_expired;
+ 	*end = decr_part.endtime;
+     }
+ 
+  cleanup:
+     if (serv_kvno == RXKAD_TKT_TYPE_KERBEROS_V5)
+ 	free_Ticket(&t5);
+     else
+ 	free_EncryptedData(&t5.enc_part);
+     free_EncTicketPart(&decr_part);
+     memset(&serv_key, 0, sizeof(serv_key));
+     return code;
+ 
+  unknown_key:
+     code = RXKADUNKNOWNKEY;
+     goto cleanup;
+  no_auth:
+     code = RXKADNOAUTH;
+     goto cleanup;
+  tkt_expired:
+     code = RXKADEXPIRED;
+     goto cleanup;
+  bad_ticket:
+     code = RXKADBADTICKET;
+     goto cleanup;
+ 
+ }
+ 
+ static int
+ verify_checksum_crc(void *data, size_t len,
+ 		    void *cksum, size_t cksumsz, 
+ 		    struct ktc_encryptionKey *key)
+ {
+     afs_uint32 crc;
+     char r[4];
+ 
+     _rxkad_crc_init_table ();
+     crc = _rxkad_crc_update (data, len, 0);
+     r[0] = crc & 0xff;
+     r[1] = (crc >> 8)  & 0xff;
+     r[2] = (crc >> 16) & 0xff;
+     r[3] = (crc >> 24) & 0xff;
+     
+     if (memcmp(cksum, r, 4) != 0)
+ 	return 1;
+     return 0;
+ }
+ 
+ 
+ static int
+ krb5_des_decrypt(struct ktc_encryptionKey *key,
+ 		 int etype,
+ 		 void *in, size_t insz,
+ 		 void *out, size_t *outsz)
+ {
+     int (*cksum_func)(void *,size_t,void *,size_t,struct ktc_encryptionKey *);
+     des_cblock ivec;
+     des_key_schedule s;
+     char cksum[24];
+     size_t cksumsz;
+     int ret;
+ 
+     cksum_func = NULL;
+ 
+     des_key_sched(key, &s);
+ 
+ #define CONFOUNDERSZ 8
+ 
+     switch (etype) {
+     case ETYPE_DES_CBC_CRC:
+ 	memcpy(&ivec, key, sizeof(ivec));
+ 	cksumsz = 4;
+ 	cksum_func = verify_checksum_crc;
+ 	break;
+     case ETYPE_DES_CBC_MD4:
+ 	memset(&ivec, 0, sizeof(ivec));
+ 	cksumsz = 16;
+ 	/* FIXME: cksum_func = verify_checksum_md4 */;
+ 	break;
+     case ETYPE_DES_CBC_MD5:
+ 	memset(&ivec, 0, sizeof(ivec));
+ 	cksumsz = 16;
+ 	/* FIXME: cksum_func = verify_checksum_md5 */;
+ 	break;
+     default:
+ 	abort();
+     }
+ 
+     des_cbc_encrypt(in, out, insz, s, &ivec, 0);
+ 
+     memcpy(cksum, (char *)out + CONFOUNDERSZ, cksumsz);
+     memset((char *)out + CONFOUNDERSZ, 0, cksumsz);
+ 
+     if (cksum_func)
+ 	ret = (*cksum_func)(out, insz, cksum, cksumsz, key);
+ 
+     *outsz = insz - CONFOUNDERSZ - cksumsz;
+     memmove(out, (char *)out + CONFOUNDERSZ + cksumsz, *outsz);
+ 
+     return ret;
+ }
Index: openafs/src/rxkad/v5der.c
diff -c /dev/null openafs/src/rxkad/v5der.c:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/v5der.c	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,1243 ----
+ #include "asn1_err.h"
+ #include <errno.h>
+ /*
+  * Copyright (c) 1997 - 2002 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. 
+  */
+ 
+ 
+ /* RCSID("Heimdal: der_get.c,v 1.33 2002/09/03 16:21:49 nectar Exp $"); */
+ 
+ 
+ /* 
+  * All decoding functions take a pointer `p' to first position in
+  * which to read, from the left, `len' which means the maximum number
+  * of characters we are able to read, `ret' were the value will be
+  * returned and `size' where the number of used bytes is stored.
+  * Either 0 or an error code is returned.
+  */
+ 
+ static int
+ der_get_unsigned (const unsigned char *p, size_t len,
+ 		  unsigned *ret, size_t *size)
+ {
+     unsigned val = 0;
+     size_t oldlen = len;
+ 
+     while (len--)
+ 	val = val * 256 + *p++;
+     *ret = val;
+     if(size) *size = oldlen;
+     return 0;
+ }
+ 
+ int
+ der_get_int (const unsigned char *p, size_t len,
+ 	     int *ret, size_t *size)
+ {
+     int val = 0;
+     size_t oldlen = len;
+ 
+     if (len > 0) {
+ 	val = (signed char)*p++;
+ 	while (--len)
+ 	    val = val * 256 + *p++;
+     }
+     *ret = val;
+     if(size) *size = oldlen;
+     return 0;
+ }
+ 
+ int
+ der_get_length (const unsigned char *p, size_t len,
+ 		size_t *val, size_t *size)
+ {
+     size_t v;
+ 
+     if (len <= 0)
+ 	return ASN1_OVERRUN;
+     --len;
+     v = *p++;
+     if (v < 128) {
+ 	*val = v;
+ 	if(size) *size = 1;
+     } else {
+ 	int e;
+ 	size_t l;
+ 	unsigned tmp;
+ 
+ 	if(v == 0x80){
+ 	    *val = ASN1_INDEFINITE;
+ 	    if(size) *size = 1;
+ 	    return 0;
+ 	}
+ 	v &= 0x7F;
+ 	if (len < v)
+ 	    return ASN1_OVERRUN;
+ 	e = der_get_unsigned (p, v, &tmp, &l);
+ 	if(e) return e;
+ 	*val = tmp;
+ 	if(size) *size = l + 1;
+     }
+     return 0;
+ }
+ 
+ int
+ der_get_general_string (const unsigned char *p, size_t len, 
+ 			general_string *str, size_t *size)
+ {
+     char *s;
+ 
+     s = malloc (len + 1);
+     if (s == NULL)
+ 	return ENOMEM;
+     memcpy (s, p, len);
+     s[len] = '\0';
+     *str = s;
+     if(size) *size = len;
+     return 0;
+ }
+ 
+ int
+ der_get_octet_string (const unsigned char *p, size_t len, 
+ 		      octet_string *data, size_t *size)
+ {
+     data->length = len;
+     data->data = malloc(len);
+     if (data->data == NULL && data->length != 0)
+ 	return ENOMEM;
+     memcpy (data->data, p, len);
+     if(size) *size = len;
+     return 0;
+ }
+ 
+ int
+ der_get_oid (const unsigned char *p, size_t len,
+ 	     oid *data, size_t *size)
+ {
+     int n;
+     size_t oldlen = len;
+ 
+     if (len < 1)
+ 	return ASN1_OVERRUN;
+ 
+     data->components = malloc(len * sizeof(*data->components));
+     if (data->components == NULL && len != 0)
+ 	return ENOMEM;
+     data->components[0] = (*p) / 40;
+     data->components[1] = (*p) % 40;
+     --len;
+     ++p;
+     for (n = 2; len > 0; ++n) {
+ 	unsigned u = 0;
+ 
+ 	do {
+ 	    --len;
+ 	    u = u * 128 + (*p++ % 128);
+ 	} while (len > 0 && p[-1] & 0x80);
+ 	data->components[n] = u;
+     }
+     if (p[-1] & 0x80) {
+ 	free_oid (data);
+ 	return ASN1_OVERRUN;
+     }
+     data->length = n;
+     if (size)
+ 	*size = oldlen;
+     return 0;
+ }
+ 
+ int
+ der_get_tag (const unsigned char *p, size_t len,
+ 	     Der_class *class, Der_type *type,
+ 	     int *tag, size_t *size)
+ {
+     if (len < 1)
+ 	return ASN1_OVERRUN;
+     *class = (Der_class)(((*p) >> 6) & 0x03);
+     *type = (Der_type)(((*p) >> 5) & 0x01);
+     *tag = (*p) & 0x1F;
+     if(size) *size = 1;
+     return 0;
+ }
+ 
+ int
+ der_match_tag (const unsigned char *p, size_t len,
+ 	       Der_class class, Der_type type,
+ 	       int tag, size_t *size)
+ {
+     size_t l;
+     Der_class thisclass;
+     Der_type thistype;
+     int thistag;
+     int e;
+ 
+     e = der_get_tag (p, len, &thisclass, &thistype, &thistag, &l);
+     if (e) return e;
+     if (class != thisclass || type != thistype)
+ 	return ASN1_BAD_ID;
+     if(tag > thistag)
+ 	return ASN1_MISPLACED_FIELD;
+     if(tag < thistag)
+ 	return ASN1_MISSING_FIELD;
+     if(size) *size = l;
+     return 0;
+ }
+ 
+ int
+ der_match_tag_and_length (const unsigned char *p, size_t len,
+ 			  Der_class class, Der_type type, int tag,
+ 			  size_t *length_ret, size_t *size)
+ {
+     size_t l, ret = 0;
+     int e;
+ 
+     e = der_match_tag (p, len, class, type, tag, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     e = der_get_length (p, len, length_ret, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ int
+ decode_integer (const unsigned char *p, size_t len,
+ 		int *num, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l, reallen;
+     int e;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_Integer, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     e = der_get_length (p, len, &reallen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if (reallen > len)
+ 	return ASN1_OVERRUN;
+     e = der_get_int (p, reallen, num, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ int
+ decode_unsigned (const unsigned char *p, size_t len,
+ 		 unsigned *num, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l, reallen;
+     int e;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_Integer, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     e = der_get_length (p, len, &reallen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if (reallen > len)
+ 	return ASN1_OVERRUN;
+     e = der_get_unsigned (p, reallen, num, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ int
+ decode_enumerated (const unsigned char *p, size_t len,
+ 		   unsigned *num, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l, reallen;
+     int e;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_Enumerated, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     e = der_get_length (p, len, &reallen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     e = der_get_int (p, reallen, num, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ int
+ decode_general_string (const unsigned char *p, size_t len, 
+ 		       general_string *str, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+     size_t slen;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralString, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+ 
+     e = der_get_length (p, len, &slen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if (len < slen)
+ 	return ASN1_OVERRUN;
+ 
+     e = der_get_general_string (p, slen, str, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ int
+ decode_octet_string (const unsigned char *p, size_t len, 
+ 		     octet_string *k, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+     size_t slen;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_OctetString, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+ 
+     e = der_get_length (p, len, &slen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if (len < slen)
+ 	return ASN1_OVERRUN;
+ 
+     e = der_get_octet_string (p, slen, k, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ int
+ decode_oid (const unsigned char *p, size_t len, 
+ 	    oid *k, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+     size_t slen;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_OID, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+ 
+     e = der_get_length (p, len, &slen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if (len < slen)
+ 	return ASN1_OVERRUN;
+ 
+     e = der_get_oid (p, slen, k, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ static void
+ generalizedtime2time (const char *s, time_t *t)
+ {
+     struct tm tm;
+ 
+     memset(&tm, 0, sizeof(tm));
+     sscanf (s, "%04d%02d%02d%02d%02d%02dZ",
+ 	    &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour,
+ 	    &tm.tm_min, &tm.tm_sec);
+     tm.tm_year -= 1900;
+     tm.tm_mon -= 1;
+     *t = timegm (&tm);
+ }
+ 
+ int
+ decode_generalized_time (const unsigned char *p, size_t len,
+ 			 time_t *t, size_t *size)
+ {
+     octet_string k;
+     char *times;
+     size_t ret = 0;
+     size_t l;
+     int e;
+     size_t slen;
+ 
+     e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralizedTime, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+ 
+     e = der_get_length (p, len, &slen, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     if (len < slen)
+ 	return ASN1_OVERRUN;
+     e = der_get_octet_string (p, slen, &k, &l);
+     if (e) return e;
+     p += l;
+     len -= l;
+     ret += l;
+     times = realloc(k.data, k.length + 1);
+     if (times == NULL){
+ 	free(k.data);
+ 	return ENOMEM;
+     }
+     times[k.length] = 0;
+     generalizedtime2time (times, t);
+     free (times);
+     if(size) *size = ret;
+     return 0;
+ }
+ 
+ 
+ int
+ fix_dce(size_t reallen, size_t *len)
+ {
+     if(reallen == ASN1_INDEFINITE)
+ 	return 1;
+     if(*len < reallen)
+ 	return -1;
+     *len = reallen;
+     return 0;
+ }
+ /*
+  * Copyright (c) 1997 - 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. 
+  */
+ 
+ 
+ /* RCSID("Heimdal: der_put.c,v 1.27 2001/09/25 23:37:25 assar Exp $"); */
+ 
+ /*
+  * All encoding functions take a pointer `p' to first position in
+  * which to write, from the right, `len' which means the maximum
+  * number of characters we are able to write.  The function returns
+  * the number of characters written in `size' (if non-NULL).
+  * The return value is 0 or an error.
+  */
+ 
+ static int
+ der_put_unsigned (unsigned char *p, size_t len, unsigned val, size_t *size)
+ {
+     unsigned char *base = p;
+ 
+     if (val) {
+ 	while (len > 0 && val) {
+ 	    *p-- = val % 256;
+ 	    val /= 256;
+ 	    --len;
+ 	}
+ 	if (val != 0)
+ 	    return ASN1_OVERFLOW;
+ 	else {
+ 	    *size = base - p;
+ 	    return 0;
+ 	}
+     } else if (len < 1)
+ 	return ASN1_OVERFLOW;
+     else {
+ 	*p    = 0;
+ 	*size = 1;
+ 	return 0;
+     }
+ }
+ 
+ int
+ der_put_int (unsigned char *p, size_t len, int val, size_t *size)
+ {
+     unsigned char *base = p;
+ 
+     if(val >= 0) {
+ 	do {
+ 	    if(len < 1)
+ 		return ASN1_OVERFLOW;
+ 	    *p-- = val % 256;
+ 	    len--;
+ 	    val /= 256;
+ 	} while(val);
+ 	if(p[1] >= 128) {
+ 	    if(len < 1)
+ 		return ASN1_OVERFLOW;
+ 	    *p-- = 0;
+ 	    len--;
+ 	}
+     } else {
+ 	val = ~val;
+ 	do {
+ 	    if(len < 1)
+ 		return ASN1_OVERFLOW;
+ 	    *p-- = ~(val % 256);
+ 	    len--;
+ 	    val /= 256;
+ 	} while(val);
+ 	if(p[1] < 128) {
+ 	    if(len < 1)
+ 		return ASN1_OVERFLOW;
+ 	    *p-- = 0xff;
+ 	    len--;
+ 	}
+     }
+     *size = base - p;
+     return 0;
+ }
+ 
+ 
+ int
+ der_put_length (unsigned char *p, size_t len, size_t val, size_t *size)
+ {
+     if (len < 1)
+ 	return ASN1_OVERFLOW;
+     if (val < 128) {
+ 	*p = val;
+ 	*size = 1;
+ 	return 0;
+     } else {
+ 	size_t l;
+ 	int e;
+ 
+ 	e = der_put_unsigned (p, len - 1, val, &l);
+ 	if (e)
+ 	    return e;
+ 	p -= l;
+ 	*p = 0x80 | l;
+ 	*size = l + 1;
+ 	return 0;
+     }
+ }
+ 
+ int
+ der_put_general_string (unsigned char *p, size_t len, 
+ 			const general_string *str, size_t *size)
+ {
+     size_t slen = strlen(*str);
+ 
+     if (len < slen)
+ 	return ASN1_OVERFLOW;
+     p -= slen;
+     len -= slen;
+     memcpy (p+1, *str, slen);
+     *size = slen;
+     return 0;
+ }
+ 
+ int
+ der_put_octet_string (unsigned char *p, size_t len, 
+ 		      const octet_string *data, size_t *size)
+ {
+     if (len < data->length)
+ 	return ASN1_OVERFLOW;
+     p -= data->length;
+     len -= data->length;
+     memcpy (p+1, data->data, data->length);
+     *size = data->length;
+     return 0;
+ }
+ 
+ int
+ der_put_oid (unsigned char *p, size_t len,
+ 	     const oid *data, size_t *size)
+ {
+     unsigned char *base = p;
+     int n;
+ 
+     for (n = data->length - 1; n >= 2; --n) {
+ 	unsigned u = data->components[n];
+ 
+ 	if (len < 1)
+ 	    return ASN1_OVERFLOW;
+ 	*p-- = u % 128;
+ 	u /= 128;
+ 	--len;
+ 	while (u > 0) {
+ 	    if (len < 1)
+ 		return ASN1_OVERFLOW;
+ 	    *p-- = 128 + u % 128;
+ 	    u /= 128;
+ 	    --len;
+ 	}
+     }
+     if (len < 1)
+ 	return ASN1_OVERFLOW;
+     *p-- = 40 * data->components[0] + data->components[1];
+     *size = base - p;
+     return 0;
+ }
+ 
+ int
+ der_put_tag (unsigned char *p, size_t len, Der_class class, Der_type type,
+ 	     int tag, size_t *size)
+ {
+     if (len < 1)
+ 	return ASN1_OVERFLOW;
+     *p = (class << 6) | (type << 5) | tag; /* XXX */
+     *size = 1;
+     return 0;
+ }
+ 
+ int
+ der_put_length_and_tag (unsigned char *p, size_t len, size_t len_val,
+ 			Der_class class, Der_type type, int tag, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+ 
+     e = der_put_length (p, len, len_val, &l);
+     if(e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_tag (p, len, class, type, tag, &l);
+     if(e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ encode_integer (unsigned char *p, size_t len, const int *data, size_t *size)
+ {
+     int num = *data;
+     size_t ret = 0;
+     size_t l;
+     int e;
+     
+     e = der_put_int (p, len, num, &l);
+     if(e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_Integer, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ encode_unsigned (unsigned char *p, size_t len, const unsigned *data,
+ 		 size_t *size)
+ {
+     unsigned num = *data;
+     size_t ret = 0;
+     size_t l;
+     int e;
+     
+     e = der_put_unsigned (p, len, num, &l);
+     if(e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_Integer, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ encode_enumerated (unsigned char *p, size_t len, const unsigned *data,
+ 		   size_t *size)
+ {
+     unsigned num = *data;
+     size_t ret = 0;
+     size_t l;
+     int e;
+     
+     e = der_put_int (p, len, num, &l);
+     if(e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_Enumerated, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ encode_general_string (unsigned char *p, size_t len, 
+ 		       const general_string *data, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+ 
+     e = der_put_general_string (p, len, data, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_GeneralString, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ encode_octet_string (unsigned char *p, size_t len, 
+ 		     const octet_string *k, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+ 
+     e = der_put_octet_string (p, len, k, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_OctetString, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ encode_oid(unsigned char *p, size_t len,
+ 	   const oid *k, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     int e;
+ 
+     e = der_put_oid (p, len, k, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_OID, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ 
+ int
+ time2generalizedtime (time_t t, octet_string *s)
+ {
+      struct tm *tm;
+ 
+      s->data = malloc(16);
+      if (s->data == NULL)
+ 	 return ENOMEM;
+      s->length = 15;
+      tm = gmtime (&t);
+      sprintf (s->data, "%04d%02d%02d%02d%02d%02dZ", tm->tm_year + 1900,
+ 	      tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min,
+ 	      tm->tm_sec);
+      return 0;
+ }
+ 
+ int
+ encode_generalized_time (unsigned char *p, size_t len,
+ 			 const time_t *t, size_t *size)
+ {
+     size_t ret = 0;
+     size_t l;
+     octet_string k;
+     int e;
+ 
+     e = time2generalizedtime (*t, &k);
+     if (e)
+ 	return e;
+     e = der_put_octet_string (p, len, &k, &l);
+     free (k.data);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     e = der_put_length_and_tag (p, len, k.length, UNIV, PRIM, 
+ 				UT_GeneralizedTime, &l);
+     if (e)
+ 	return e;
+     p -= l;
+     len -= l;
+     ret += l;
+     *size = ret;
+     return 0;
+ }
+ /*
+  * Copyright (c) 1997 - 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. 
+  */
+ 
+ 
+ /* RCSID("Heimdal: der_free.c,v 1.8 2001/09/25 13:39:26 assar Exp $"); */
+ 
+ void
+ free_general_string (general_string *str)
+ {
+     free(*str);
+ }
+ 
+ void
+ free_octet_string (octet_string *k)
+ {
+     free(k->data);
+ }
+ 
+ void
+ free_oid (oid *k)
+ {
+     free(k->components);
+ }
+ /*
+  * Copyright (c) 1997 - 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. 
+  */
+ 
+ 
+ /* RCSID("Heimdal: der_length.c,v 1.12 2001/09/25 13:39:26 assar Exp $"); */
+ 
+ static size_t
+ len_unsigned (unsigned val)
+ {
+   size_t ret = 0;
+ 
+   do {
+     ++ret;
+     val /= 256;
+   } while (val);
+   return ret;
+ }
+ 
+ static size_t
+ len_int (int val)
+ {
+   size_t ret = 0;
+ 
+   if (val == 0)
+     return 1;
+   while (val > 255 || val < -255) {
+     ++ret;
+     val /= 256;
+   }
+   if (val != 0) {
+     ++ret;
+     if ((signed char)val != val)
+       ++ret;
+     val /= 256;
+   }
+   return ret;
+ }
+ 
+ static size_t
+ len_oid (const oid *oid)
+ {
+     size_t ret = 1;
+     int n;
+ 
+     for (n = 2; n < oid->length; ++n) {
+ 	unsigned u = oid->components[n];
+ 
+ 	++ret;
+ 	u /= 128;
+ 	while (u > 0) {
+ 	    ++ret;
+ 	    u /= 128;
+ 	}
+     }
+     return ret;
+ }
+ 
+ size_t
+ length_len (size_t len)
+ {
+   if (len < 128)
+     return 1;
+   else
+     return len_unsigned (len) + 1;
+ }
+ 
+ size_t
+ length_integer (const int *data)
+ {
+   size_t len = len_int (*data);
+ 
+   return 1 + length_len(len) + len;
+ }
+ 
+ size_t
+ length_unsigned (const unsigned *data)
+ {
+   size_t len = len_unsigned (*data);
+ 
+   return 1 + length_len(len) + len;
+ }
+ 
+ size_t
+ length_enumerated (const unsigned *data)
+ {
+   size_t len = len_int (*data);
+ 
+   return 1 + length_len(len) + len;
+ }
+ 
+ size_t
+ length_general_string (const general_string *data)
+ {
+   char *str = *data;
+   size_t len = strlen(str);
+   return 1 + length_len(len) + len;
+ }
+ 
+ size_t
+ length_octet_string (const octet_string *k)
+ {
+   return 1 + length_len(k->length) + k->length;
+ }
+ 
+ size_t
+ length_oid (const oid *k)
+ {
+   size_t len = len_oid (k);
+ 
+   return 1 + length_len(len) + len;
+ }
+ 
+ size_t
+ length_generalized_time (const time_t *t)
+ {
+   octet_string k;
+   size_t ret;
+ 
+   time2generalizedtime (*t, &k);
+   ret = 1 + length_len(k.length) + k.length;
+   free (k.data);
+   return ret;
+ }
+ /*
+  * Copyright (c) 1997 - 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. 
+  */
+ 
+ 
+ /* RCSID("Heimdal: der_copy.c,v 1.9 2001/09/25 13:39:25 assar Exp $"); */
+ 
+ int
+ copy_general_string (const general_string *from, general_string *to)
+ {
+     *to = malloc(strlen(*from) + 1);
+     if(*to == NULL)
+ 	return ENOMEM;
+     strcpy(*to, *from);
+     return 0;
+ }
+ 
+ int
+ copy_octet_string (const octet_string *from, octet_string *to)
+ {
+     to->length = from->length;
+     to->data   = malloc(to->length);
+     if(to->length != 0 && to->data == NULL)
+ 	return ENOMEM;
+     memcpy(to->data, from->data, to->length);
+     return 0;
+ }
+ 
+ int
+ copy_oid (const oid *from, oid *to)
+ {
+     to->length     = from->length;
+     to->components = malloc(to->length * sizeof(*to->components));
+     if (to->length != 0 && to->components == NULL)
+ 	return ENOMEM;
+     memcpy(to->components, from->components, to->length);
+     return 0;
+ }
+ /*
+  * Copyright (c) 1997 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. 
+  */
+ 
+ 
+ /* RCSID("Heimdal: timegm.c,v 1.7 1999/12/02 17:05:02 joda Exp $"); */
+ 
+ #ifndef HAVE_TIMEGM
+ 
+ static int
+ is_leap(unsigned y)
+ {
+     y += 1900;
+     return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
+ }
+ 
+ time_t
+ timegm (struct tm *tm)
+ {
+   static const unsigned ndays[2][12] ={
+     {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
+     {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
+   time_t res = 0;
+   unsigned i;
+ 
+   for (i = 70; i < tm->tm_year; ++i)
+     res += is_leap(i) ? 366 : 365;
+ 
+   for (i = 0; i < tm->tm_mon; ++i)
+     res += ndays[is_leap(tm->tm_year)][i];
+   res += tm->tm_mday - 1;
+   res *= 24;
+   res += tm->tm_hour;
+   res *= 60;
+   res += tm->tm_min;
+   res *= 60;
+   res += tm->tm_sec;
+   return res;
+ }
+ 
+ #endif /* HAVE_TIMEGM */
Index: openafs/src/rxkad/v5gen-rewrite.h
diff -c /dev/null openafs/src/rxkad/v5gen-rewrite.h:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/v5gen-rewrite.h	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,125 ----
+ #define encode_Ticket _rxkad_v5_encode_Ticket
+ #define decode_Ticket _rxkad_v5_decode_Ticket
+ #define free_Ticket _rxkad_v5_free_Ticket
+ #define length_Ticket _rxkad_v5_length_Ticket
+ #define copy_Ticket _rxkad_v5_copy_Ticket
+ #define encode_EncryptedData _rxkad_v5_encode_EncryptedData
+ #define decode_EncryptedData _rxkad_v5_decode_EncryptedData
+ #define free_EncryptedData _rxkad_v5_free_EncryptedData
+ #define length_EncryptedData _rxkad_v5_length_EncryptedData
+ #define copy_EncryptedData _rxkad_v5_copy_EncryptedData
+ #define encode_PrincipalName _rxkad_v5_encode_PrincipalName
+ #define decode_PrincipalName _rxkad_v5_decode_PrincipalName
+ #define free_PrincipalName _rxkad_v5_free_PrincipalName
+ #define length_PrincipalName _rxkad_v5_length_PrincipalName
+ #define copy_PrincipalName _rxkad_v5_copy_PrincipalName
+ #define encode_HostAddresses _rxkad_v5_encode_HostAddresses
+ #define decode_HostAddresses _rxkad_v5_decode_HostAddresses
+ #define free_HostAddresses _rxkad_v5_free_HostAddresses
+ #define length_HostAddresses _rxkad_v5_length_HostAddresses
+ #define copy_HostAddresses _rxkad_v5_copy_HostAddresses
+ #define encode_HostAddress _rxkad_v5_encode_HostAddress
+ #define decode_HostAddress _rxkad_v5_decode_HostAddress
+ #define free_HostAddress _rxkad_v5_free_HostAddress
+ #define length_HostAddress _rxkad_v5_length_HostAddress
+ #define copy_HostAddress _rxkad_v5_copy_HostAddress
+ #define encode_AuthorizationData _rxkad_v5_encode_AuthorizationData
+ #define decode_AuthorizationData _rxkad_v5_decode_AuthorizationData
+ #define free_AuthorizationData _rxkad_v5_free_AuthorizationData
+ #define length_AuthorizationData _rxkad_v5_length_AuthorizationData
+ #define copy_AuthorizationData _rxkad_v5_copy_AuthorizationData
+ #define encode_EncTicketPart _rxkad_v5_encode_EncTicketPart
+ #define decode_EncTicketPart _rxkad_v5_decode_EncTicketPart
+ #define free_EncTicketPart _rxkad_v5_free_EncTicketPart
+ #define length_EncTicketPart _rxkad_v5_length_EncTicketPart
+ #define copy_EncTicketPart _rxkad_v5_copy_EncTicketPart
+ #define encode_KerberosTime _rxkad_v5_encode_KerberosTime
+ #define decode_KerberosTime _rxkad_v5_decode_KerberosTime
+ #define free_KerberosTime _rxkad_v5_free_KerberosTime
+ #define length_KerberosTime _rxkad_v5_length_KerberosTime
+ #define copy_KerberosTime _rxkad_v5_copy_KerberosTime
+ #define encode_TransitedEncoding _rxkad_v5_encode_TransitedEncoding
+ #define decode_TransitedEncoding _rxkad_v5_decode_TransitedEncoding
+ #define free_TransitedEncoding _rxkad_v5_free_TransitedEncoding
+ #define length_TransitedEncoding _rxkad_v5_length_TransitedEncoding
+ #define copy_TransitedEncoding _rxkad_v5_copy_TransitedEncoding
+ #define encode_EncryptionKey _rxkad_v5_encode_EncryptionKey
+ #define decode_EncryptionKey _rxkad_v5_decode_EncryptionKey
+ #define free_EncryptionKey _rxkad_v5_free_EncryptionKey
+ #define length_EncryptionKey _rxkad_v5_length_EncryptionKey
+ #define copy_EncryptionKey _rxkad_v5_copy_EncryptionKey
+ #define encode_TicketFlags _rxkad_v5_encode_TicketFlags
+ #define decode_TicketFlags _rxkad_v5_decode_TicketFlags
+ #define free_TicketFlags _rxkad_v5_free_TicketFlags
+ #define length_TicketFlags _rxkad_v5_length_TicketFlags
+ #define copy_TicketFlags _rxkad_v5_copy_TicketFlags
+ #define encode_Realm _rxkad_v5_encode_Realm
+ #define decode_Realm _rxkad_v5_decode_Realm
+ #define free_Realm _rxkad_v5_free_Realm
+ #define length_Realm _rxkad_v5_length_Realm
+ #define copy_Realm _rxkad_v5_copy_Realm
+ #define encode_ENCTYPE _rxkad_v5_encode_ENCTYPE
+ #define decode_ENCTYPE _rxkad_v5_decode_ENCTYPE
+ #define free_ENCTYPE _rxkad_v5_free_ENCTYPE
+ #define length_ENCTYPE _rxkad_v5_length_ENCTYPE
+ #define copy_ENCTYPE _rxkad_v5_copy_ENCTYPE
+ #define encode_NAME_TYPE _rxkad_v5_encode_NAME_TYPE
+ #define decode_NAME_TYPE _rxkad_v5_decode_NAME_TYPE
+ #define free_NAME_TYPE _rxkad_v5_free_NAME_TYPE
+ #define length_NAME_TYPE _rxkad_v5_length_NAME_TYPE
+ #define copy_NAME_TYPE _rxkad_v5_copy_NAME_TYPE
+ #define der_get_unsigned  _rxkad_v5_der_get_unsigned 
+ #define der_get_int  _rxkad_v5_der_get_int 
+ #define der_get_length  _rxkad_v5_der_get_length 
+ #define der_get_general_string  _rxkad_v5_der_get_general_string 
+ #define der_get_octet_string  _rxkad_v5_der_get_octet_string 
+ #define der_get_oid  _rxkad_v5_der_get_oid 
+ #define der_get_tag  _rxkad_v5_der_get_tag 
+ #define der_match_tag  _rxkad_v5_der_match_tag 
+ #define der_match_tag_and_length  _rxkad_v5_der_match_tag_and_length 
+ #define decode_integer  _rxkad_v5_decode_integer 
+ #define decode_unsigned  _rxkad_v5_decode_unsigned 
+ #define decode_enumerated  _rxkad_v5_decode_enumerated 
+ #define decode_general_string  _rxkad_v5_decode_general_string 
+ #define decode_octet_string  _rxkad_v5_decode_octet_string 
+ #define decode_oid  _rxkad_v5_decode_oid 
+ #define decode_generalized_time  _rxkad_v5_decode_generalized_time 
+ #define fix_dce _rxkad_v5_fix_dce
+ #define der_put_unsigned  _rxkad_v5_der_put_unsigned 
+ #define der_put_int  _rxkad_v5_der_put_int 
+ #define der_put_length  _rxkad_v5_der_put_length 
+ #define der_put_general_string  _rxkad_v5_der_put_general_string 
+ #define der_put_octet_string  _rxkad_v5_der_put_octet_string 
+ #define der_put_oid  _rxkad_v5_der_put_oid 
+ #define der_put_tag  _rxkad_v5_der_put_tag 
+ #define der_put_length_and_tag  _rxkad_v5_der_put_length_and_tag 
+ #define encode_integer  _rxkad_v5_encode_integer 
+ #define encode_unsigned  _rxkad_v5_encode_unsigned 
+ #define encode_enumerated  _rxkad_v5_encode_enumerated 
+ #define encode_general_string  _rxkad_v5_encode_general_string 
+ #define encode_octet_string  _rxkad_v5_encode_octet_string 
+ #define encode_oid _rxkad_v5_encode_oid
+ #define time2generalizedtime  _rxkad_v5_time2generalizedtime 
+ #define encode_generalized_time  _rxkad_v5_encode_generalized_time 
+ #define free_general_string  _rxkad_v5_free_general_string 
+ #define free_octet_string  _rxkad_v5_free_octet_string 
+ #define free_oid  _rxkad_v5_free_oid 
+ #define len_unsigned  _rxkad_v5_len_unsigned 
+ #define len_int  _rxkad_v5_len_int 
+ #define len_oid  _rxkad_v5_len_oid 
+ #define length_len  _rxkad_v5_length_len 
+ #define length_integer  _rxkad_v5_length_integer 
+ #define length_unsigned  _rxkad_v5_length_unsigned 
+ #define length_enumerated  _rxkad_v5_length_enumerated 
+ #define length_general_string  _rxkad_v5_length_general_string 
+ #define length_octet_string  _rxkad_v5_length_octet_string 
+ #define length_oid  _rxkad_v5_length_oid 
+ #define length_generalized_time  _rxkad_v5_length_generalized_time 
+ #define copy_general_string  _rxkad_v5_copy_general_string 
+ #define copy_octet_string  _rxkad_v5_copy_octet_string 
+ #define copy_oid  _rxkad_v5_copy_oid 
+ #define TicketFlags2int _rxkad_v5_TicketFlags2int
+ #define int2TicketFlags _rxkad_v5_int2TicketFlags
+ #ifndef HAVE_TIMEGM
+ #define timegm	_rxkad_timegm
+ #endif
Index: openafs/src/rxkad/v5gen.c
diff -c /dev/null openafs/src/rxkad/v5gen.c:1.3.2.2
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/v5gen.c	Thu Nov 14 17:46:51 2002
***************
*** 0 ****
--- 1,2490 ----
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_Ticket(unsigned char *p, size_t len, const Ticket *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_EncryptedData(p, len, &(data)->enc_part, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 3, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_PrincipalName(p, len, &(data)->sname, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 2, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_Realm(p, len, &(data)->realm, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_integer(p, len, &(data)->tkt_vno, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, APPL, CONS, 1, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_Ticket(const unsigned char *p, size_t len, Ticket *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, APPL, CONS, 1, &reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_integer(p, len, &(data)->tkt_vno, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_Realm(p, len, &(data)->realm, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 2, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_PrincipalName(p, len, &(data)->sname, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 3, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_EncryptedData(p, len, &(data)->enc_part, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_Ticket(data);
+ return e;
+ }
+ 
+ void
+ free_Ticket(Ticket *data)
+ {
+ free_Realm(&(data)->realm);
+ free_PrincipalName(&(data)->sname);
+ free_EncryptedData(&(data)->enc_part);
+ }
+ 
+ size_t
+ length_Ticket(const Ticket *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_integer(&(data)->tkt_vno);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_Realm(&(data)->realm);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_PrincipalName(&(data)->sname);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_EncryptedData(&(data)->enc_part);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ ret += 1 + length_len (ret);
+ return ret;
+ }
+ 
+ int
+ copy_Ticket(const Ticket *from, Ticket *to)
+ {
+ *(&(to)->tkt_vno) = *(&(from)->tkt_vno);
+ if(copy_Realm(&(from)->realm, &(to)->realm)) return ENOMEM;
+ if(copy_PrincipalName(&(from)->sname, &(to)->sname)) return ENOMEM;
+ if(copy_EncryptedData(&(from)->enc_part, &(to)->enc_part)) return ENOMEM;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_EncryptedData(unsigned char *p, size_t len, const EncryptedData *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_octet_string(p, len, &(data)->cipher, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 2, &l);
+ BACK;
+ ret += oldret;
+ }
+ if((data)->kvno)
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_integer(p, len, (data)->kvno, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_ENCTYPE(p, len, &(data)->etype, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_EncryptedData(const unsigned char *p, size_t len, EncryptedData *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_ENCTYPE(p, len, &(data)->etype, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ (data)->kvno = NULL;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ (data)->kvno = malloc(sizeof(*(data)->kvno));
+ if((data)->kvno == NULL) return ENOMEM;
+ e = decode_integer(p, len, (data)->kvno, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 2, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_octet_string(p, len, &(data)->cipher, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_EncryptedData(data);
+ return e;
+ }
+ 
+ void
+ free_EncryptedData(EncryptedData *data)
+ {
+ free_ENCTYPE(&(data)->etype);
+ if((data)->kvno) {
+ free((data)->kvno);
+ }
+ free_octet_string(&(data)->cipher);
+ }
+ 
+ size_t
+ length_EncryptedData(const EncryptedData *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_ENCTYPE(&(data)->etype);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ if((data)->kvno){
+ int oldret = ret;
+ ret = 0;
+ ret += length_integer((data)->kvno);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_octet_string(&(data)->cipher);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ return ret;
+ }
+ 
+ int
+ copy_EncryptedData(const EncryptedData *from, EncryptedData *to)
+ {
+ if(copy_ENCTYPE(&(from)->etype, &(to)->etype)) return ENOMEM;
+ if((from)->kvno) {
+ (to)->kvno = malloc(sizeof(*(to)->kvno));
+ if((to)->kvno == NULL) return ENOMEM;
+ *((to)->kvno) = *((from)->kvno);
+ }else
+ (to)->kvno = NULL;
+ if(copy_octet_string(&(from)->cipher, &(to)->cipher)) return ENOMEM;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_PrincipalName(unsigned char *p, size_t len, const PrincipalName *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ for(i = (&(data)->name_string)->len - 1; i >= 0; --i) {
+ int oldret = ret;
+ ret = 0;
+ e = encode_general_string(p, len, &(&(data)->name_string)->val[i], &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_NAME_TYPE(p, len, &(data)->name_type, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_PrincipalName(const unsigned char *p, size_t len, PrincipalName *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_NAME_TYPE(p, len, &(data)->name_type, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ if(len < reallen)
+ return ASN1_OVERRUN;
+ len = reallen;
+ {
+ size_t origlen = len;
+ int oldret = ret;
+ ret = 0;
+ (&(data)->name_string)->len = 0;
+ (&(data)->name_string)->val = NULL;
+ while(ret < origlen) {
+ (&(data)->name_string)->len++;
+ (&(data)->name_string)->val = realloc((&(data)->name_string)->val, sizeof(*((&(data)->name_string)->val)) * (&(data)->name_string)->len);
+ e = decode_general_string(p, len, &(&(data)->name_string)->val[(&(data)->name_string)->len-1], &l);
+ FORW;
+ len = origlen - ret;
+ }
+ ret += oldret;
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_PrincipalName(data);
+ return e;
+ }
+ 
+ void
+ free_PrincipalName(PrincipalName *data)
+ {
+ free_NAME_TYPE(&(data)->name_type);
+ while((&(data)->name_string)->len){
+ free_general_string(&(&(data)->name_string)->val[(&(data)->name_string)->len-1]);
+ (&(data)->name_string)->len--;
+ }
+ free((&(data)->name_string)->val);
+ }
+ 
+ size_t
+ length_PrincipalName(const PrincipalName *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_NAME_TYPE(&(data)->name_type);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ {
+ int oldret = ret;
+ int i;
+ ret = 0;
+ for(i = (&(data)->name_string)->len - 1; i >= 0; --i){
+ ret += length_general_string(&(&(data)->name_string)->val[i]);
+ }
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ return ret;
+ }
+ 
+ int
+ copy_PrincipalName(const PrincipalName *from, PrincipalName *to)
+ {
+ if(copy_NAME_TYPE(&(from)->name_type, &(to)->name_type)) return ENOMEM;
+ if(((&(to)->name_string)->val = malloc((&(from)->name_string)->len * sizeof(*(&(to)->name_string)->val))) == NULL && (&(from)->name_string)->len != 0)
+ return ENOMEM;
+ for((&(to)->name_string)->len = 0; (&(to)->name_string)->len < (&(from)->name_string)->len; (&(to)->name_string)->len++){
+ if(copy_general_string(&(&(from)->name_string)->val[(&(to)->name_string)->len], &(&(to)->name_string)->val[(&(to)->name_string)->len])) return ENOMEM;
+ }
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_HostAddresses(unsigned char *p, size_t len, const HostAddresses *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ for(i = (data)->len - 1; i >= 0; --i) {
+ int oldret = ret;
+ ret = 0;
+ e = encode_HostAddress(p, len, &(data)->val[i], &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_HostAddresses(const unsigned char *p, size_t len, HostAddresses *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ if(len < reallen)
+ return ASN1_OVERRUN;
+ len = reallen;
+ {
+ size_t origlen = len;
+ int oldret = ret;
+ ret = 0;
+ (data)->len = 0;
+ (data)->val = NULL;
+ while(ret < origlen) {
+ (data)->len++;
+ (data)->val = realloc((data)->val, sizeof(*((data)->val)) * (data)->len);
+ e = decode_HostAddress(p, len, &(data)->val[(data)->len-1], &l);
+ FORW;
+ len = origlen - ret;
+ }
+ ret += oldret;
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_HostAddresses(data);
+ return e;
+ }
+ 
+ void
+ free_HostAddresses(HostAddresses *data)
+ {
+ while((data)->len){
+ free_HostAddress(&(data)->val[(data)->len-1]);
+ (data)->len--;
+ }
+ free((data)->val);
+ }
+ 
+ size_t
+ length_HostAddresses(const HostAddresses *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ int i;
+ ret = 0;
+ for(i = (data)->len - 1; i >= 0; --i){
+ ret += length_HostAddress(&(data)->val[i]);
+ }
+ ret += 1 + length_len(ret) + oldret;
+ }
+ return ret;
+ }
+ 
+ int
+ copy_HostAddresses(const HostAddresses *from, HostAddresses *to)
+ {
+ if(((to)->val = malloc((from)->len * sizeof(*(to)->val))) == NULL && (from)->len != 0)
+ return ENOMEM;
+ for((to)->len = 0; (to)->len < (from)->len; (to)->len++){
+ if(copy_HostAddress(&(from)->val[(to)->len], &(to)->val[(to)->len])) return ENOMEM;
+ }
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_HostAddress(unsigned char *p, size_t len, const HostAddress *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_octet_string(p, len, &(data)->address, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_integer(p, len, &(data)->addr_type, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_HostAddress(const unsigned char *p, size_t len, HostAddress *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_integer(p, len, &(data)->addr_type, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_octet_string(p, len, &(data)->address, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_HostAddress(data);
+ return e;
+ }
+ 
+ void
+ free_HostAddress(HostAddress *data)
+ {
+ free_octet_string(&(data)->address);
+ }
+ 
+ size_t
+ length_HostAddress(const HostAddress *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_integer(&(data)->addr_type);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_octet_string(&(data)->address);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ return ret;
+ }
+ 
+ int
+ copy_HostAddress(const HostAddress *from, HostAddress *to)
+ {
+ *(&(to)->addr_type) = *(&(from)->addr_type);
+ if(copy_octet_string(&(from)->address, &(to)->address)) return ENOMEM;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_AuthorizationData(unsigned char *p, size_t len, const AuthorizationData *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ for(i = (data)->len - 1; i >= 0; --i) {
+ int oldret = ret;
+ ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_octet_string(p, len, &(&(data)->val[i])->ad_data, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_integer(p, len, &(&(data)->val[i])->ad_type, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_AuthorizationData(const unsigned char *p, size_t len, AuthorizationData *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ if(len < reallen)
+ return ASN1_OVERRUN;
+ len = reallen;
+ {
+ size_t origlen = len;
+ int oldret = ret;
+ ret = 0;
+ (data)->len = 0;
+ (data)->val = NULL;
+ while(ret < origlen) {
+ (data)->len++;
+ (data)->val = realloc((data)->val, sizeof(*((data)->val)) * (data)->len);
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_integer(p, len, &(&(data)->val[(data)->len-1])->ad_type, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_octet_string(p, len, &(&(data)->val[(data)->len-1])->ad_data, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ len = origlen - ret;
+ }
+ ret += oldret;
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_AuthorizationData(data);
+ return e;
+ }
+ 
+ void
+ free_AuthorizationData(AuthorizationData *data)
+ {
+ while((data)->len){
+ free_octet_string(&(&(data)->val[(data)->len-1])->ad_data);
+ (data)->len--;
+ }
+ free((data)->val);
+ }
+ 
+ size_t
+ length_AuthorizationData(const AuthorizationData *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ int i;
+ ret = 0;
+ for(i = (data)->len - 1; i >= 0; --i){
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_integer(&(&(data)->val[i])->ad_type);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_octet_string(&(&(data)->val[i])->ad_data);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ }
+ ret += 1 + length_len(ret) + oldret;
+ }
+ return ret;
+ }
+ 
+ int
+ copy_AuthorizationData(const AuthorizationData *from, AuthorizationData *to)
+ {
+ if(((to)->val = malloc((from)->len * sizeof(*(to)->val))) == NULL && (from)->len != 0)
+ return ENOMEM;
+ for((to)->len = 0; (to)->len < (from)->len; (to)->len++){
+ *(&(&(to)->val[(to)->len])->ad_type) = *(&(&(from)->val[(to)->len])->ad_type);
+ if(copy_octet_string(&(&(from)->val[(to)->len])->ad_data, &(&(to)->val[(to)->len])->ad_data)) return ENOMEM;
+ }
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_EncTicketPart(unsigned char *p, size_t len, const EncTicketPart *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ if((data)->authorization_data)
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_AuthorizationData(p, len, (data)->authorization_data, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 10, &l);
+ BACK;
+ ret += oldret;
+ }
+ if((data)->caddr)
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_HostAddresses(p, len, (data)->caddr, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 9, &l);
+ BACK;
+ ret += oldret;
+ }
+ if((data)->renew_till)
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_KerberosTime(p, len, (data)->renew_till, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 8, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_KerberosTime(p, len, &(data)->endtime, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 7, &l);
+ BACK;
+ ret += oldret;
+ }
+ if((data)->starttime)
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_KerberosTime(p, len, (data)->starttime, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 6, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_KerberosTime(p, len, &(data)->authtime, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 5, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_TransitedEncoding(p, len, &(data)->transited, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 4, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_PrincipalName(p, len, &(data)->cname, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 3, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_Realm(p, len, &(data)->crealm, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 2, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_EncryptionKey(p, len, &(data)->key, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_TicketFlags(p, len, &(data)->flags, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, APPL, CONS, 3, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_EncTicketPart(const unsigned char *p, size_t len, EncTicketPart *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, APPL, CONS, 3, &reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_TicketFlags(p, len, &(data)->flags, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_EncryptionKey(p, len, &(data)->key, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 2, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_Realm(p, len, &(data)->crealm, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 3, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_PrincipalName(p, len, &(data)->cname, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 4, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_TransitedEncoding(p, len, &(data)->transited, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 5, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_KerberosTime(p, len, &(data)->authtime, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 6, &l);
+ if (e)
+ (data)->starttime = NULL;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ (data)->starttime = malloc(sizeof(*(data)->starttime));
+ if((data)->starttime == NULL) return ENOMEM;
+ e = decode_KerberosTime(p, len, (data)->starttime, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 7, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_KerberosTime(p, len, &(data)->endtime, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 8, &l);
+ if (e)
+ (data)->renew_till = NULL;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ (data)->renew_till = malloc(sizeof(*(data)->renew_till));
+ if((data)->renew_till == NULL) return ENOMEM;
+ e = decode_KerberosTime(p, len, (data)->renew_till, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 9, &l);
+ if (e)
+ (data)->caddr = NULL;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ (data)->caddr = malloc(sizeof(*(data)->caddr));
+ if((data)->caddr == NULL) return ENOMEM;
+ e = decode_HostAddresses(p, len, (data)->caddr, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 10, &l);
+ if (e)
+ (data)->authorization_data = NULL;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ (data)->authorization_data = malloc(sizeof(*(data)->authorization_data));
+ if((data)->authorization_data == NULL) return ENOMEM;
+ e = decode_AuthorizationData(p, len, (data)->authorization_data, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_EncTicketPart(data);
+ return e;
+ }
+ 
+ void
+ free_EncTicketPart(EncTicketPart *data)
+ {
+ free_TicketFlags(&(data)->flags);
+ free_EncryptionKey(&(data)->key);
+ free_Realm(&(data)->crealm);
+ free_PrincipalName(&(data)->cname);
+ free_TransitedEncoding(&(data)->transited);
+ free_KerberosTime(&(data)->authtime);
+ if((data)->starttime) {
+ free_KerberosTime((data)->starttime);
+ free((data)->starttime);
+ }
+ free_KerberosTime(&(data)->endtime);
+ if((data)->renew_till) {
+ free_KerberosTime((data)->renew_till);
+ free((data)->renew_till);
+ }
+ if((data)->caddr) {
+ free_HostAddresses((data)->caddr);
+ free((data)->caddr);
+ }
+ if((data)->authorization_data) {
+ free_AuthorizationData((data)->authorization_data);
+ free((data)->authorization_data);
+ }
+ }
+ 
+ size_t
+ length_EncTicketPart(const EncTicketPart *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_TicketFlags(&(data)->flags);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_EncryptionKey(&(data)->key);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_Realm(&(data)->crealm);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_PrincipalName(&(data)->cname);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_TransitedEncoding(&(data)->transited);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_KerberosTime(&(data)->authtime);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ if((data)->starttime){
+ int oldret = ret;
+ ret = 0;
+ ret += length_KerberosTime((data)->starttime);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_KerberosTime(&(data)->endtime);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ if((data)->renew_till){
+ int oldret = ret;
+ ret = 0;
+ ret += length_KerberosTime((data)->renew_till);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ if((data)->caddr){
+ int oldret = ret;
+ ret = 0;
+ ret += length_HostAddresses((data)->caddr);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ if((data)->authorization_data){
+ int oldret = ret;
+ ret = 0;
+ ret += length_AuthorizationData((data)->authorization_data);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ ret += 1 + length_len (ret);
+ return ret;
+ }
+ 
+ int
+ copy_EncTicketPart(const EncTicketPart *from, EncTicketPart *to)
+ {
+ if(copy_TicketFlags(&(from)->flags, &(to)->flags)) return ENOMEM;
+ if(copy_EncryptionKey(&(from)->key, &(to)->key)) return ENOMEM;
+ if(copy_Realm(&(from)->crealm, &(to)->crealm)) return ENOMEM;
+ if(copy_PrincipalName(&(from)->cname, &(to)->cname)) return ENOMEM;
+ if(copy_TransitedEncoding(&(from)->transited, &(to)->transited)) return ENOMEM;
+ if(copy_KerberosTime(&(from)->authtime, &(to)->authtime)) return ENOMEM;
+ if((from)->starttime) {
+ (to)->starttime = malloc(sizeof(*(to)->starttime));
+ if((to)->starttime == NULL) return ENOMEM;
+ if(copy_KerberosTime((from)->starttime, (to)->starttime)) return ENOMEM;
+ }else
+ (to)->starttime = NULL;
+ if(copy_KerberosTime(&(from)->endtime, &(to)->endtime)) return ENOMEM;
+ if((from)->renew_till) {
+ (to)->renew_till = malloc(sizeof(*(to)->renew_till));
+ if((to)->renew_till == NULL) return ENOMEM;
+ if(copy_KerberosTime((from)->renew_till, (to)->renew_till)) return ENOMEM;
+ }else
+ (to)->renew_till = NULL;
+ if((from)->caddr) {
+ (to)->caddr = malloc(sizeof(*(to)->caddr));
+ if((to)->caddr == NULL) return ENOMEM;
+ if(copy_HostAddresses((from)->caddr, (to)->caddr)) return ENOMEM;
+ }else
+ (to)->caddr = NULL;
+ if((from)->authorization_data) {
+ (to)->authorization_data = malloc(sizeof(*(to)->authorization_data));
+ if((to)->authorization_data == NULL) return ENOMEM;
+ if(copy_AuthorizationData((from)->authorization_data, (to)->authorization_data)) return ENOMEM;
+ }else
+ (to)->authorization_data = NULL;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_KerberosTime(unsigned char *p, size_t len, const KerberosTime *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ e = encode_generalized_time(p, len, data, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_KerberosTime(const unsigned char *p, size_t len, KerberosTime *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = decode_generalized_time(p, len, data, &l);
+ FORW;
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_KerberosTime(data);
+ return e;
+ }
+ 
+ void
+ free_KerberosTime(KerberosTime *data)
+ {
+ }
+ 
+ size_t
+ length_KerberosTime(const KerberosTime *data)
+ {
+ size_t ret = 0;
+ ret += length_generalized_time(data);
+ return ret;
+ }
+ 
+ int
+ copy_KerberosTime(const KerberosTime *from, KerberosTime *to)
+ {
+ *(to) = *(from);
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_TransitedEncoding(unsigned char *p, size_t len, const TransitedEncoding *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_octet_string(p, len, &(data)->contents, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_integer(p, len, &(data)->tr_type, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_TransitedEncoding(const unsigned char *p, size_t len, TransitedEncoding *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_integer(p, len, &(data)->tr_type, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_octet_string(p, len, &(data)->contents, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_TransitedEncoding(data);
+ return e;
+ }
+ 
+ void
+ free_TransitedEncoding(TransitedEncoding *data)
+ {
+ free_octet_string(&(data)->contents);
+ }
+ 
+ size_t
+ length_TransitedEncoding(const TransitedEncoding *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_integer(&(data)->tr_type);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_octet_string(&(data)->contents);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ return ret;
+ }
+ 
+ int
+ copy_TransitedEncoding(const TransitedEncoding *from, TransitedEncoding *to)
+ {
+ *(&(to)->tr_type) = *(&(from)->tr_type);
+ if(copy_octet_string(&(from)->contents, &(to)->contents)) return ENOMEM;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_EncryptionKey(unsigned char *p, size_t len, const EncryptionKey *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_octet_string(p, len, &(data)->keyvalue, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 1, &l);
+ BACK;
+ ret += oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ e = encode_integer(p, len, &(data)->keytype, &l);
+ BACK;
+ e = der_put_length_and_tag (p, len, ret, Der_CONTEXT, CONS, 0, &l);
+ BACK;
+ ret += oldret;
+ }
+ e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_EncryptionKey(const unsigned char *p, size_t len, EncryptionKey *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
+ FORW;
+ {
+ int dce_fix;
+ if((dce_fix = fix_dce(reallen, &len)) < 0)
+ return ASN1_BAD_FORMAT;
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 0, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_integer(p, len, &(data)->keytype, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ {
+ size_t newlen, oldlen;
+ 
+ e = der_match_tag (p, len, Der_CONTEXT, CONS, 1, &l);
+ if (e)
+ return e;
+ else {
+ p += l;
+ len -= l;
+ ret += l;
+ e = der_get_length (p, len, &newlen, &l);
+ FORW;
+ {
+ int dce_fix;
+ oldlen = len;
+ if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
+ e = decode_octet_string(p, len, &(data)->keyvalue, &l);
+ FORW;
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }else 
+ len = oldlen - newlen;
+ }
+ }
+ }
+ if(dce_fix){
+ e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
+ FORW;
+ }
+ }
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_EncryptionKey(data);
+ return e;
+ }
+ 
+ void
+ free_EncryptionKey(EncryptionKey *data)
+ {
+ free_octet_string(&(data)->keyvalue);
+ }
+ 
+ size_t
+ length_EncryptionKey(const EncryptionKey *data)
+ {
+ size_t ret = 0;
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_integer(&(data)->keytype);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ {
+ int oldret = ret;
+ ret = 0;
+ ret += length_octet_string(&(data)->keyvalue);
+ ret += 1 + length_len(ret) + oldret;
+ }
+ ret += 1 + length_len(ret);
+ return ret;
+ }
+ 
+ int
+ copy_EncryptionKey(const EncryptionKey *from, EncryptionKey *to)
+ {
+ *(&(to)->keytype) = *(&(from)->keytype);
+ if(copy_octet_string(&(from)->keyvalue, &(to)->keyvalue)) return ENOMEM;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_TicketFlags(unsigned char *p, size_t len, const TicketFlags *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ {
+ unsigned char c = 0;
+ *p-- = c; len--; ret++;
+ c = 0;
+ *p-- = c; len--; ret++;
+ c = 0;
+ if(data->anonymous) c |= 1<<1;
+ if(data->ok_as_delegate) c |= 1<<2;
+ if(data->transited_policy_checked) c |= 1<<3;
+ if(data->hw_authent) c |= 1<<4;
+ if(data->pre_authent) c |= 1<<5;
+ if(data->initial) c |= 1<<6;
+ if(data->renewable) c |= 1<<7;
+ *p-- = c; len--; ret++;
+ c = 0;
+ if(data->invalid) c |= 1<<0;
+ if(data->postdated) c |= 1<<1;
+ if(data->may_postdate) c |= 1<<2;
+ if(data->proxy) c |= 1<<3;
+ if(data->proxiable) c |= 1<<4;
+ if(data->forwarded) c |= 1<<5;
+ if(data->forwardable) c |= 1<<6;
+ if(data->reserved) c |= 1<<7;
+ *p-- = c;
+ *p-- = 0;
+ len -= 2;
+ ret += 2;
+ }
+ 
+ e = der_put_length_and_tag (p, len, ret, UNIV, PRIM,UT_BitString, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_TicketFlags(const unsigned char *p, size_t len, TicketFlags *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = der_match_tag_and_length (p, len, UNIV, PRIM, UT_BitString,&reallen, &l);
+ FORW;
+ if(len < reallen)
+ return ASN1_OVERRUN;
+ p++;
+ len--;
+ reallen--;
+ ret++;
+ data->reserved = (*p >> 7) & 1;
+ data->forwardable = (*p >> 6) & 1;
+ data->forwarded = (*p >> 5) & 1;
+ data->proxiable = (*p >> 4) & 1;
+ data->proxy = (*p >> 3) & 1;
+ data->may_postdate = (*p >> 2) & 1;
+ data->postdated = (*p >> 1) & 1;
+ data->invalid = (*p >> 0) & 1;
+ p++; len--; reallen--; ret++;
+ data->renewable = (*p >> 7) & 1;
+ data->initial = (*p >> 6) & 1;
+ data->pre_authent = (*p >> 5) & 1;
+ data->hw_authent = (*p >> 4) & 1;
+ data->transited_policy_checked = (*p >> 3) & 1;
+ data->ok_as_delegate = (*p >> 2) & 1;
+ data->anonymous = (*p >> 1) & 1;
+ p += reallen; len -= reallen; ret += reallen;
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_TicketFlags(data);
+ return e;
+ }
+ 
+ void
+ free_TicketFlags(TicketFlags *data)
+ {
+ }
+ 
+ size_t
+ length_TicketFlags(const TicketFlags *data)
+ {
+ size_t ret = 0;
+ ret += 7;
+ return ret;
+ }
+ 
+ int
+ copy_TicketFlags(const TicketFlags *from, TicketFlags *to)
+ {
+ *(to) = *(from);
+ return 0;
+ }
+ 
+ unsigned TicketFlags2int(TicketFlags f)
+ {
+ unsigned r = 0;
+ if(f.reserved) r |= (1U << 0);
+ if(f.forwardable) r |= (1U << 1);
+ if(f.forwarded) r |= (1U << 2);
+ if(f.proxiable) r |= (1U << 3);
+ if(f.proxy) r |= (1U << 4);
+ if(f.may_postdate) r |= (1U << 5);
+ if(f.postdated) r |= (1U << 6);
+ if(f.invalid) r |= (1U << 7);
+ if(f.renewable) r |= (1U << 8);
+ if(f.initial) r |= (1U << 9);
+ if(f.pre_authent) r |= (1U << 10);
+ if(f.hw_authent) r |= (1U << 11);
+ if(f.transited_policy_checked) r |= (1U << 12);
+ if(f.ok_as_delegate) r |= (1U << 13);
+ if(f.anonymous) r |= (1U << 14);
+ return r;
+ }
+ 
+ TicketFlags int2TicketFlags(unsigned n)
+ {
+ 	TicketFlags flags;
+ 
+ 	flags.reserved = (n >> 0) & 1;
+ 	flags.forwardable = (n >> 1) & 1;
+ 	flags.forwarded = (n >> 2) & 1;
+ 	flags.proxiable = (n >> 3) & 1;
+ 	flags.proxy = (n >> 4) & 1;
+ 	flags.may_postdate = (n >> 5) & 1;
+ 	flags.postdated = (n >> 6) & 1;
+ 	flags.invalid = (n >> 7) & 1;
+ 	flags.renewable = (n >> 8) & 1;
+ 	flags.initial = (n >> 9) & 1;
+ 	flags.pre_authent = (n >> 10) & 1;
+ 	flags.hw_authent = (n >> 11) & 1;
+ 	flags.transited_policy_checked = (n >> 12) & 1;
+ 	flags.ok_as_delegate = (n >> 13) & 1;
+ 	flags.anonymous = (n >> 14) & 1;
+ 	return flags;
+ }
+ 
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_Realm(unsigned char *p, size_t len, const Realm *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ e = encode_general_string(p, len, data, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_Realm(const unsigned char *p, size_t len, Realm *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = decode_general_string(p, len, data, &l);
+ FORW;
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_Realm(data);
+ return e;
+ }
+ 
+ void
+ free_Realm(Realm *data)
+ {
+ free_general_string(data);
+ }
+ 
+ size_t
+ length_Realm(const Realm *data)
+ {
+ size_t ret = 0;
+ ret += length_general_string(data);
+ return ret;
+ }
+ 
+ int
+ copy_Realm(const Realm *from, Realm *to)
+ {
+ if(copy_general_string(from, to)) return ENOMEM;
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_ENCTYPE(unsigned char *p, size_t len, const ENCTYPE *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ e = encode_integer(p, len, (const int*)data, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_ENCTYPE(const unsigned char *p, size_t len, ENCTYPE *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = decode_integer(p, len, (int*)data, &l);
+ FORW;
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_ENCTYPE(data);
+ return e;
+ }
+ 
+ void
+ free_ENCTYPE(ENCTYPE *data)
+ {
+ }
+ 
+ size_t
+ length_ENCTYPE(const ENCTYPE *data)
+ {
+ size_t ret = 0;
+ ret += length_integer((const int*)data);
+ return ret;
+ }
+ 
+ int
+ copy_ENCTYPE(const ENCTYPE *from, ENCTYPE *to)
+ {
+ *(to) = *(from);
+ return 0;
+ }
+ 
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <asn1_err.h>
+ 
+ #define BACK if (e) return e; p -= l; len -= l; ret += l
+ 
+ int
+ encode_NAME_TYPE(unsigned char *p, size_t len, const NAME_TYPE *data, size_t *size)
+ {
+ size_t ret = 0;
+ size_t l;
+ int i, e;
+ 
+ i = 0;
+ e = encode_integer(p, len, (const int*)data, &l);
+ BACK;
+ *size = ret;
+ return 0;
+ }
+ 
+ #define FORW if(e) goto fail; p += l; len -= l; ret += l
+ 
+ int
+ decode_NAME_TYPE(const unsigned char *p, size_t len, NAME_TYPE *data, size_t *size)
+ {
+ size_t ret = 0, reallen;
+ size_t l;
+ int e;
+ 
+ memset(data, 0, sizeof(*data));
+ reallen = 0;
+ e = decode_integer(p, len, (int*)data, &l);
+ FORW;
+ if(size) *size = ret;
+ return 0;
+ fail:
+ free_NAME_TYPE(data);
+ return e;
+ }
+ 
+ void
+ free_NAME_TYPE(NAME_TYPE *data)
+ {
+ }
+ 
+ size_t
+ length_NAME_TYPE(const NAME_TYPE *data)
+ {
+ size_t ret = 0;
+ ret += length_integer((const int*)data);
+ return ret;
+ }
+ 
+ int
+ copy_NAME_TYPE(const NAME_TYPE *from, NAME_TYPE *to)
+ {
+ *(to) = *(from);
+ return 0;
+ }
+ 
Index: openafs/src/rxkad/v5gen.h
diff -c /dev/null openafs/src/rxkad/v5gen.h:1.2.2.1
*** /dev/null	Tue Dec 10 18:46:54 2002
--- openafs/src/rxkad/v5gen.h	Thu Nov 14 17:44:38 2002
***************
*** 0 ****
--- 1,1272 ----
+ /* Generated from /home/lha/src/cvs/heimdal/lib/asn1/k5.asn1 */
+ /* Do not edit */
+ 
+ #ifndef __krb5_asn1_h__
+ #define __krb5_asn1_h__
+ 
+ #include <stddef.h>
+ #include <time.h>
+ 
+ #ifndef __asn1_common_definitions__
+ #define __asn1_common_definitions__
+ 
+ typedef struct octet_string {
+   size_t length;
+   void *data;
+ } octet_string;
+ 
+ typedef char *general_string;
+ 
+ typedef struct oid {
+   size_t length;
+   unsigned *components;
+ } oid;
+ 
+ #define ASN1_MALLOC_ENCODE(T, B, BL, S, L, R)                  \
+   do {                                                         \
+     (BL) = length_##T((S));                                    \
+     (B) = malloc((BL));                                        \
+     if((B) == NULL) {                                          \
+       (R) = ENOMEM;                                            \
+     } else {                                                   \
+       (R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \
+                        (S), (L));                              \
+       if((R) != 0) {                                           \
+         free((B));                                             \
+         (B) = NULL;                                            \
+       }                                                        \
+     }                                                          \
+   } while (0)
+ 
+ #endif
+ 
+ /*
+ NAME-TYPE ::= INTEGER
+ */
+ 
+ typedef enum NAME_TYPE {
+   KRB5_NT_UNKNOWN = 0,
+   KRB5_NT_PRINCIPAL = 1,
+   KRB5_NT_SRV_INST = 2,
+   KRB5_NT_SRV_HST = 3,
+   KRB5_NT_SRV_XHST = 4,
+   KRB5_NT_UID = 5,
+   KRB5_NT_X500_PRINCIPAL = 6
+ } NAME_TYPE;
+ 
+ int    encode_NAME_TYPE(unsigned char *, size_t, const NAME_TYPE *, size_t *);
+ int    decode_NAME_TYPE(const unsigned char *, size_t, NAME_TYPE *, size_t *);
+ void   free_NAME_TYPE  (NAME_TYPE *);
+ size_t length_NAME_TYPE(const NAME_TYPE *);
+ int    copy_NAME_TYPE  (const NAME_TYPE *, NAME_TYPE *);
+ 
+ 
+ /*
+ MESSAGE-TYPE ::= INTEGER
+ */
+ 
+ typedef enum MESSAGE_TYPE {
+   krb_as_req = 10,
+   krb_as_rep = 11,
+   krb_tgs_req = 12,
+   krb_tgs_rep = 13,
+   krb_ap_req = 14,
+   krb_ap_rep = 15,
+   krb_safe = 20,
+   krb_priv = 21,
+   krb_cred = 22,
+   krb_error = 30
+ } MESSAGE_TYPE;
+ 
+ int    encode_MESSAGE_TYPE(unsigned char *, size_t, const MESSAGE_TYPE *, size_t *);
+ int    decode_MESSAGE_TYPE(const unsigned char *, size_t, MESSAGE_TYPE *, size_t *);
+ void   free_MESSAGE_TYPE  (MESSAGE_TYPE *);
+ size_t length_MESSAGE_TYPE(const MESSAGE_TYPE *);
+ int    copy_MESSAGE_TYPE  (const MESSAGE_TYPE *, MESSAGE_TYPE *);
+ 
+ 
+ /*
+ PADATA-TYPE ::= INTEGER
+ */
+ 
+ typedef enum PADATA_TYPE {
+   KRB5_PADATA_NONE = 0,
+   KRB5_PADATA_TGS_REQ = 1,
+   KRB5_PADATA_AP_REQ = 1,
+   KRB5_PADATA_ENC_TIMESTAMP = 2,
+   KRB5_PADATA_PW_SALT = 3,
+   KRB5_PADATA_ENC_UNIX_TIME = 5,
+   KRB5_PADATA_SANDIA_SECUREID = 6,
+   KRB5_PADATA_SESAME = 7,
+   KRB5_PADATA_OSF_DCE = 8,
+   KRB5_PADATA_CYBERSAFE_SECUREID = 9,
+   KRB5_PADATA_AFS3_SALT = 10,
+   KRB5_PADATA_ETYPE_INFO = 11,
+   KRB5_PADATA_SAM_CHALLENGE = 12,
+   KRB5_PADATA_SAM_RESPONSE = 13,
+   KRB5_PADATA_PK_AS_REQ = 14,
+   KRB5_PADATA_PK_AS_REP = 15,
+   KRB5_PADATA_PK_AS_SIGN = 16,
+   KRB5_PADATA_PK_KEY_REQ = 17,
+   KRB5_PADATA_PK_KEY_REP = 18,
+   KRB5_PADATA_USE_SPECIFIED_KVNO = 20,
+   KRB5_PADATA_SAM_REDIRECT = 21,
+   KRB5_PADATA_GET_FROM_TYPED_DATA = 22,
+   KRB5_PADATA_SAM_ETYPE_INFO = 23
+ } PADATA_TYPE;
+ 
+ int    encode_PADATA_TYPE(unsigned char *, size_t, const PADATA_TYPE *, size_t *);
+ int    decode_PADATA_TYPE(const unsigned char *, size_t, PADATA_TYPE *, size_t *);
+ void   free_PADATA_TYPE  (PADATA_TYPE *);
+ size_t length_PADATA_TYPE(const PADATA_TYPE *);
+ int    copy_PADATA_TYPE  (const PADATA_TYPE *, PADATA_TYPE *);
+ 
+ 
+ /*
+ CKSUMTYPE ::= INTEGER
+ */
+ 
+ typedef enum CKSUMTYPE {
+   CKSUMTYPE_NONE = 0,
+   CKSUMTYPE_CRC32 = 1,
+   CKSUMTYPE_RSA_MD4 = 2,
+   CKSUMTYPE_RSA_MD4_DES = 3,
+   CKSUMTYPE_DES_MAC = 4,
+   CKSUMTYPE_DES_MAC_K = 5,
+   CKSUMTYPE_RSA_MD4_DES_K = 6,
+   CKSUMTYPE_RSA_MD5 = 7,
+   CKSUMTYPE_RSA_MD5_DES = 8,
+   CKSUMTYPE_RSA_MD5_DES3 = 9,
+   CKSUMTYPE_HMAC_SHA1_DES3 = 12,
+   CKSUMTYPE_SHA1 = 1000,
+   CKSUMTYPE_GSSAPI = 32771,
+   CKSUMTYPE_HMAC_MD5 = -138,
+   CKSUMTYPE_HMAC_MD5_ENC = -1138
+ } CKSUMTYPE;
+ 
+ int    encode_CKSUMTYPE(unsigned char *, size_t, const CKSUMTYPE *, size_t *);
+ int    decode_CKSUMTYPE(const unsigned char *, size_t, CKSUMTYPE *, size_t *);
+ void   free_CKSUMTYPE  (CKSUMTYPE *);
+ size_t length_CKSUMTYPE(const CKSUMTYPE *);
+ int    copy_CKSUMTYPE  (const CKSUMTYPE *, CKSUMTYPE *);
+ 
+ 
+ /*
+ ENCTYPE ::= INTEGER
+ */
+ 
+ typedef enum ENCTYPE {
+   ETYPE_NULL = 0,
+   ETYPE_DES_CBC_CRC = 1,
+   ETYPE_DES_CBC_MD4 = 2,
+   ETYPE_DES_CBC_MD5 = 3,
+   ETYPE_DES3_CBC_MD5 = 5,
+   ETYPE_OLD_DES3_CBC_SHA1 = 7,
+   ETYPE_SIGN_DSA_GENERATE = 8,
+   ETYPE_ENCRYPT_RSA_PRIV = 9,
+   ETYPE_ENCRYPT_RSA_PUB = 10,
+   ETYPE_DES3_CBC_SHA1 = 16,
+   ETYPE_ARCFOUR_HMAC_MD5 = 23,
+   ETYPE_ARCFOUR_HMAC_MD5_56 = 24,
+   ETYPE_ENCTYPE_PK_CROSS = 48,
+   ETYPE_DES_CBC_NONE = -4096,
+   ETYPE_DES3_CBC_NONE = -4097,
+   ETYPE_DES_CFB64_NONE = -4098,
+   ETYPE_DES_PCBC_NONE = -4099
+ } ENCTYPE;
+ 
+ int    encode_ENCTYPE(unsigned char *, size_t, const ENCTYPE *, size_t *);
+ int    decode_ENCTYPE(const unsigned char *, size_t, ENCTYPE *, size_t *);
+ void   free_ENCTYPE  (ENCTYPE *);
+ size_t length_ENCTYPE(const ENCTYPE *);
+ int    copy_ENCTYPE  (const ENCTYPE *, ENCTYPE *);
+ 
+ 
+ /*
+ UNSIGNED ::= UNSIGNED INTEGER
+ */
+ 
+ typedef unsigned int UNSIGNED;
+ 
+ int    encode_UNSIGNED(unsigned char *, size_t, const UNSIGNED *, size_t *);
+ int    decode_UNSIGNED(const unsigned char *, size_t, UNSIGNED *, size_t *);
+ void   free_UNSIGNED  (UNSIGNED *);
+ size_t length_UNSIGNED(const UNSIGNED *);
+ int    copy_UNSIGNED  (const UNSIGNED *, UNSIGNED *);
+ 
+ 
+ /*
+ Realm ::= GeneralString
+ */
+ 
+ typedef general_string Realm;
+ 
+ int    encode_Realm(unsigned char *, size_t, const Realm *, size_t *);
+ int    decode_Realm(const unsigned char *, size_t, Realm *, size_t *);
+ void   free_Realm  (Realm *);
+ size_t length_Realm(const Realm *);
+ int    copy_Realm  (const Realm *, Realm *);
+ 
+ 
+ /*
+ PrincipalName ::= SEQUENCE {
+   name-type[0]    NAME-TYPE,
+   name-string[1]  SEQUENCE OF GeneralString
+ }
+ */
+ 
+ typedef struct PrincipalName {
+   NAME_TYPE name_type;
+   struct  {
+     unsigned int len;
+     general_string *val;
+   } name_string;
+ } PrincipalName;
+ 
+ int    encode_PrincipalName(unsigned char *, size_t, const PrincipalName *, size_t *);
+ int    decode_PrincipalName(const unsigned char *, size_t, PrincipalName *, size_t *);
+ void   free_PrincipalName  (PrincipalName *);
+ size_t length_PrincipalName(const PrincipalName *);
+ int    copy_PrincipalName  (const PrincipalName *, PrincipalName *);
+ 
+ 
+ /*
+ Principal ::= SEQUENCE {
+   name[0]         PrincipalName,
+   realm[1]        Realm
+ }
+ */
+ 
+ typedef struct Principal {
+   PrincipalName name;
+   Realm realm;
+ } Principal;
+ 
+ int    encode_Principal(unsigned char *, size_t, const Principal *, size_t *);
+ int    decode_Principal(const unsigned char *, size_t, Principal *, size_t *);
+ void   free_Principal  (Principal *);
+ size_t length_Principal(const Principal *);
+ int    copy_Principal  (const Principal *, Principal *);
+ 
+ 
+ /*
+ HostAddress ::= SEQUENCE {
+   addr-type[0]    INTEGER,
+   address[1]      OCTET STRING
+ }
+ */
+ 
+ typedef struct HostAddress {
+   int addr_type;
+   octet_string address;
+ } HostAddress;
+ 
+ int    encode_HostAddress(unsigned char *, size_t, const HostAddress *, size_t *);
+ int    decode_HostAddress(const unsigned char *, size_t, HostAddress *, size_t *);
+ void   free_HostAddress  (HostAddress *);
+ size_t length_HostAddress(const HostAddress *);
+ int    copy_HostAddress  (const HostAddress *, HostAddress *);
+ 
+ 
+ /*
+ HostAddresses ::= SEQUENCE OF HostAddress
+ */
+ 
+ typedef struct HostAddresses {
+   unsigned int len;
+   HostAddress *val;
+ } HostAddresses;
+ 
+ int    encode_HostAddresses(unsigned char *, size_t, const HostAddresses *, size_t *);
+ int    decode_HostAddresses(const unsigned char *, size_t, HostAddresses *, size_t *);
+ void   free_HostAddresses  (HostAddresses *);
+ size_t length_HostAddresses(const HostAddresses *);
+ int    copy_HostAddresses  (const HostAddresses *, HostAddresses *);
+ 
+ 
+ /*
+ KerberosTime ::= GeneralizedTime
+ */
+ 
+ typedef time_t KerberosTime;
+ 
+ int    encode_KerberosTime(unsigned char *, size_t, const KerberosTime *, size_t *);
+ int    decode_KerberosTime(const unsigned char *, size_t, KerberosTime *, size_t *);
+ void   free_KerberosTime  (KerberosTime *);
+ size_t length_KerberosTime(const KerberosTime *);
+ int    copy_KerberosTime  (const KerberosTime *, KerberosTime *);
+ 
+ 
+ /*
+ AuthorizationData ::= SEQUENCE OF SEQUENCE {
+   ad-type[0]      INTEGER,
+   ad-data[1]      OCTET STRING
+ }
+ */
+ 
+ typedef struct AuthorizationData {
+   unsigned int len;
+   struct  {
+     int ad_type;
+     octet_string ad_data;
+   } *val;
+ } AuthorizationData;
+ 
+ int    encode_AuthorizationData(unsigned char *, size_t, const AuthorizationData *, size_t *);
+ int    decode_AuthorizationData(const unsigned char *, size_t, AuthorizationData *, size_t *);
+ void   free_AuthorizationData  (AuthorizationData *);
+ size_t length_AuthorizationData(const AuthorizationData *);
+ int    copy_AuthorizationData  (const AuthorizationData *, AuthorizationData *);
+ 
+ 
+ /*
+ APOptions ::= BIT STRING {
+   reserved(0),
+   use-session-key(1),
+   mutual-required(2)
+ }
+ */
+ 
+ typedef struct APOptions {
+   unsigned int reserved:1;
+   unsigned int use_session_key:1;
+   unsigned int mutual_required:1;
+ } APOptions;
+ 
+ 
+ int    encode_APOptions(unsigned char *, size_t, const APOptions *, size_t *);
+ int    decode_APOptions(const unsigned char *, size_t, APOptions *, size_t *);
+ void   free_APOptions  (APOptions *);
+ size_t length_APOptions(const APOptions *);
+ int    copy_APOptions  (const APOptions *, APOptions *);
+ unsigned APOptions2int(APOptions);
+ APOptions int2APOptions(unsigned);
+ 
+ /*
+ TicketFlags ::= BIT STRING {
+   reserved(0),
+   forwardable(1),
+   forwarded(2),
+   proxiable(3),
+   proxy(4),
+   may-postdate(5),
+   postdated(6),
+   invalid(7),
+   renewable(8),
+   initial(9),
+   pre-authent(10),
+   hw-authent(11),
+   transited-policy-checked(12),
+   ok-as-delegate(13),
+   anonymous(14)
+ }
+ */
+ 
+ typedef struct TicketFlags {
+   unsigned int reserved:1;
+   unsigned int forwardable:1;
+   unsigned int forwarded:1;
+   unsigned int proxiable:1;
+   unsigned int proxy:1;
+   unsigned int may_postdate:1;
+   unsigned int postdated:1;
+   unsigned int invalid:1;
+   unsigned int renewable:1;
+   unsigned int initial:1;
+   unsigned int pre_authent:1;
+   unsigned int hw_authent:1;
+   unsigned int transited_policy_checked:1;
+   unsigned int ok_as_delegate:1;
+   unsigned int anonymous:1;
+ } TicketFlags;
+ 
+ 
+ int    encode_TicketFlags(unsigned char *, size_t, const TicketFlags *, size_t *);
+ int    decode_TicketFlags(const unsigned char *, size_t, TicketFlags *, size_t *);
+ void   free_TicketFlags  (TicketFlags *);
+ size_t length_TicketFlags(const TicketFlags *);
+ int    copy_TicketFlags  (const TicketFlags *, TicketFlags *);
+ unsigned TicketFlags2int(TicketFlags);
+ TicketFlags int2TicketFlags(unsigned);
+ 
+ /*
+ KDCOptions ::= BIT STRING {
+   reserved(0),
+   forwardable(1),
+   forwarded(2),
+   proxiable(3),
+   proxy(4),
+   allow-postdate(5),
+   postdated(6),
+   unused7(7),
+   renewable(8),
+   unused9(9),
+   unused10(10),
+   unused11(11),
+   request-anonymous(14),
+   canonicalize(15),
+   disable-transited-check(26),
+   renewable-ok(27),
+   enc-tkt-in-skey(28),
+   renew(30),
+   validate(31)
+ }
+ */
+ 
+ typedef struct KDCOptions {
+   unsigned int reserved:1;
+   unsigned int forwardable:1;
+   unsigned int forwarded:1;
+   unsigned int proxiable:1;
+   unsigned int proxy:1;
+   unsigned int allow_postdate:1;
+   unsigned int postdated:1;
+   unsigned int unused7:1;
+   unsigned int renewable:1;
+   unsigned int unused9:1;
+   unsigned int unused10:1;
+   unsigned int unused11:1;
+   unsigned int request_anonymous:1;
+   unsigned int canonicalize:1;
+   unsigned int disable_transited_check:1;
+   unsigned int renewable_ok:1;
+   unsigned int enc_tkt_in_skey:1;
+   unsigned int renew:1;
+   unsigned int validate:1;
+ } KDCOptions;
+ 
+ 
+ int    encode_KDCOptions(unsigned char *, size_t, const KDCOptions *, size_t *);
+ int    decode_KDCOptions(const unsigned char *, size_t, KDCOptions *, size_t *);
+ void   free_KDCOptions  (KDCOptions *);
+ size_t length_KDCOptions(const KDCOptions *);
+ int    copy_KDCOptions  (const KDCOptions *, KDCOptions *);
+ unsigned KDCOptions2int(KDCOptions);
+ KDCOptions int2KDCOptions(unsigned);
+ 
+ /*
+ LR-TYPE ::= INTEGER
+ */
+ 
+ typedef enum LR_TYPE {
+   LR_NONE = 0,
+   LR_INITIAL_TGT = 1,
+   LR_INITIAL = 2,
+   LR_ISSUE_USE_TGT = 3,
+   LR_RENEWAL = 4,
+   LR_REQUEST = 5,
+   LR_PW_EXPTIME = 6,
+   LR_ACCT_EXPTIME = 7
+ } LR_TYPE;
+ 
+ int    encode_LR_TYPE(unsigned char *, size_t, const LR_TYPE *, size_t *);
+ int    decode_LR_TYPE(const unsigned char *, size_t, LR_TYPE *, size_t *);
+ void   free_LR_TYPE  (LR_TYPE *);
+ size_t length_LR_TYPE(const LR_TYPE *);
+ int    copy_LR_TYPE  (const LR_TYPE *, LR_TYPE *);
+ 
+ 
+ /*
+ LastReq ::= SEQUENCE OF SEQUENCE {
+   lr-type[0]      LR-TYPE,
+   lr-value[1]     KerberosTime
+ }
+ */
+ 
+ typedef struct LastReq {
+   unsigned int len;
+   struct  {
+     LR_TYPE lr_type;
+     KerberosTime lr_value;
+   } *val;
+ } LastReq;
+ 
+ int    encode_LastReq(unsigned char *, size_t, const LastReq *, size_t *);
+ int    decode_LastReq(const unsigned char *, size_t, LastReq *, size_t *);
+ void   free_LastReq  (LastReq *);
+ size_t length_LastReq(const LastReq *);
+ int    copy_LastReq  (const LastReq *, LastReq *);
+ 
+ 
+ /*
+ EncryptedData ::= SEQUENCE {
+   etype[0]        ENCTYPE,
+   kvno[1]         INTEGER OPTIONAL,
+   cipher[2]       OCTET STRING
+ }
+ */
+ 
+ typedef struct EncryptedData {
+   ENCTYPE etype;
+   int *kvno;
+   octet_string cipher;
+ } EncryptedData;
+ 
+ int    encode_EncryptedData(unsigned char *, size_t, const EncryptedData *, size_t *);
+ int    decode_EncryptedData(const unsigned char *, size_t, EncryptedData *, size_t *);
+ void   free_EncryptedData  (EncryptedData *);
+ size_t length_EncryptedData(const EncryptedData *);
+ int    copy_EncryptedData  (const EncryptedData *, EncryptedData *);
+ 
+ 
+ /*
+ EncryptionKey ::= SEQUENCE {
+   keytype[0]      INTEGER,
+   keyvalue[1]     OCTET STRING
+ }
+ */
+ 
+ typedef struct EncryptionKey {
+   int keytype;
+   octet_string keyvalue;
+ } EncryptionKey;
+ 
+ int    encode_EncryptionKey(unsigned char *, size_t, const EncryptionKey *, size_t *);
+ int    decode_EncryptionKey(const unsigned char *, size_t, EncryptionKey *, size_t *);
+ void   free_EncryptionKey  (EncryptionKey *);
+ size_t length_EncryptionKey(const EncryptionKey *);
+ int    copy_EncryptionKey  (const EncryptionKey *, EncryptionKey *);
+ 
+ 
+ /*
+ TransitedEncoding ::= SEQUENCE {
+   tr-type[0]      INTEGER,
+   contents[1]     OCTET STRING
+ }
+ */
+ 
+ typedef struct TransitedEncoding {
+   int tr_type;
+   octet_string contents;
+ } TransitedEncoding;
+ 
+ int    encode_TransitedEncoding(unsigned char *, size_t, const TransitedEncoding *, size_t *);
+ int    decode_TransitedEncoding(const unsigned char *, size_t, TransitedEncoding *, size_t *);
+ void   free_TransitedEncoding  (TransitedEncoding *);
+ size_t length_TransitedEncoding(const TransitedEncoding *);
+ int    copy_TransitedEncoding  (const TransitedEncoding *, TransitedEncoding *);
+ 
+ 
+ /*
+ Ticket ::= [APPLICATION 1] SEQUENCE {
+   tkt-vno[0]      INTEGER,
+   realm[1]        Realm,
+   sname[2]        PrincipalName,
+   enc-part[3]     EncryptedData
+ }
+ */
+ 
+ typedef struct  {
+   int tkt_vno;
+   Realm realm;
+   PrincipalName sname;
+   EncryptedData enc_part;
+ } Ticket;
+ 
+ int    encode_Ticket(unsigned char *, size_t, const Ticket *, size_t *);
+ int    decode_Ticket(const unsigned char *, size_t, Ticket *, size_t *);
+ void   free_Ticket  (Ticket *);
+ size_t length_Ticket(const Ticket *);
+ int    copy_Ticket  (const Ticket *, Ticket *);
+ 
+ 
+ /*
+ EncTicketPart ::= [APPLICATION 3] SEQUENCE {
+   flags[0]                TicketFlags,
+   key[1]                  EncryptionKey,
+   crealm[2]               Realm,
+   cname[3]                PrincipalName,
+   transited[4]            TransitedEncoding,
+   authtime[5]             KerberosTime,
+   starttime[6]            KerberosTime OPTIONAL,
+   endtime[7]              KerberosTime,
+   renew-till[8]           KerberosTime OPTIONAL,
+   caddr[9]                HostAddresses OPTIONAL,
+   authorization-data[10]  AuthorizationData OPTIONAL
+ }
+ */
+ 
+ typedef struct  {
+   TicketFlags flags;
+   EncryptionKey key;
+   Realm crealm;
+   PrincipalName cname;
+   TransitedEncoding transited;
+   KerberosTime authtime;
+   KerberosTime *starttime;
+   KerberosTime endtime;
+   KerberosTime *renew_till;
+   HostAddresses *caddr;
+   AuthorizationData *authorization_data;
+ } EncTicketPart;
+ 
+ int    encode_EncTicketPart(unsigned char *, size_t, const EncTicketPart *, size_t *);
+ int    decode_EncTicketPart(const unsigned char *, size_t, EncTicketPart *, size_t *);
+ void   free_EncTicketPart  (EncTicketPart *);
+ size_t length_EncTicketPart(const EncTicketPart *);
+ int    copy_EncTicketPart  (const EncTicketPart *, EncTicketPart *);
+ 
+ 
+ /*
+ Checksum ::= SEQUENCE {
+   cksumtype[0]    CKSUMTYPE,
+   checksum[1]     OCTET STRING
+ }
+ */
+ 
+ typedef struct Checksum {
+   CKSUMTYPE cksumtype;
+   octet_string checksum;
+ } Checksum;
+ 
+ int    encode_Checksum(unsigned char *, size_t, const Checksum *, size_t *);
+ int    decode_Checksum(const unsigned char *, size_t, Checksum *, size_t *);
+ void   free_Checksum  (Checksum *);
+ size_t length_Checksum(const Checksum *);
+ int    copy_Checksum  (const Checksum *, Checksum *);
+ 
+ 
+ /*
+ Authenticator ::= [APPLICATION 2] SEQUENCE {
+   authenticator-vno[0]   INTEGER,
+   crealm[1]              Realm,
+   cname[2]               PrincipalName,
+   cksum[3]               Checksum OPTIONAL,
+   cusec[4]               INTEGER,
+   ctime[5]               KerberosTime,
+   subkey[6]              EncryptionKey OPTIONAL,
+   seq-number[7]          UNSIGNED OPTIONAL,
+   authorization-data[8]  AuthorizationData OPTIONAL
+ }
+ */
+ 
+ typedef struct  {
+   int authenticator_vno;
+   Realm crealm;
+   PrincipalName cname;
+   Checksum *cksum;
+   int cusec;
+   KerberosTime ctime;
+   EncryptionKey *subkey;
+   UNSIGNED *seq_number;
+   AuthorizationData *authorization_data;
+ } Authenticator;
+ 
+ int    encode_Authenticator(unsigned char *, size_t, const Authenticator *, size_t *);
+ int    decode_Authenticator(const unsigned char *, size_t, Authenticator *, size_t *);
+ void   free_Authenticator  (Authenticator *);
+ size_t length_Authenticator(const Authenticator *);
+ int    copy_Authenticator  (const Authenticator *, Authenticator *);
+ 
+ 
+ /*
+ PA-DATA ::= SEQUENCE {
+   padata-type[1]   PADATA-TYPE,
+   padata-value[2]  OCTET STRING
+ }
+ */
+ 
+ typedef struct PA_DATA {
+   PADATA_TYPE padata_type;
+   octet_string padata_value;
+ } PA_DATA;
+ 
+ int    encode_PA_DATA(unsigned char *, size_t, const PA_DATA *, size_t *);
+ int    decode_PA_DATA(const unsigned char *, size_t, PA_DATA *, size_t *);
+ void   free_PA_DATA  (PA_DATA *);
+ size_t length_PA_DATA(const PA_DATA *);
+ int    copy_PA_DATA  (const PA_DATA *, PA_DATA *);
+ 
+ 
+ /*
+ ETYPE-INFO-ENTRY ::= SEQUENCE {
+   etype[0]        ENCTYPE,
+   salt[1]         OCTET STRING OPTIONAL,
+   salttype[2]     INTEGER OPTIONAL
+ }
+ */
+ 
+ typedef struct ETYPE_INFO_ENTRY {
+   ENCTYPE etype;
+   octet_string *salt;
+   int *salttype;
+ } ETYPE_INFO_ENTRY;
+ 
+ int    encode_ETYPE_INFO_ENTRY(unsigned char *, size_t, const ETYPE_INFO_ENTRY *, size_t *);
+ int    decode_ETYPE_INFO_ENTRY(const unsigned char *, size_t, ETYPE_INFO_ENTRY *, size_t *);
+ void   free_ETYPE_INFO_ENTRY  (ETYPE_INFO_ENTRY *);
+ size_t length_ETYPE_INFO_ENTRY(const ETYPE_INFO_ENTRY *);
+ int    copy_ETYPE_INFO_ENTRY  (const ETYPE_INFO_ENTRY *, ETYPE_INFO_ENTRY *);
+ 
+ 
+ /*
+ ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
+ */
+ 
+ typedef struct ETYPE_INFO {
+   unsigned int len;
+   ETYPE_INFO_ENTRY *val;
+ } ETYPE_INFO;
+ 
+ int    encode_ETYPE_INFO(unsigned char *, size_t, const ETYPE_INFO *, size_t *);
+ int    decode_ETYPE_INFO(const unsigned char *, size_t, ETYPE_INFO *, size_t *);
+ void   free_ETYPE_INFO  (ETYPE_INFO *);
+ size_t length_ETYPE_INFO(const ETYPE_INFO *);
+ int    copy_ETYPE_INFO  (const ETYPE_INFO *, ETYPE_INFO *);
+ 
+ 
+ /*
+ METHOD-DATA ::= SEQUENCE OF PA-DATA
+ */
+ 
+ typedef struct METHOD_DATA {
+   unsigned int len;
+   PA_DATA *val;
+ } METHOD_DATA;
+ 
+ int    encode_METHOD_DATA(unsigned char *, size_t, const METHOD_DATA *, size_t *);
+ int    decode_METHOD_DATA(const unsigned char *, size_t, METHOD_DATA *, size_t *);
+ void   free_METHOD_DATA  (METHOD_DATA *);
+ size_t length_METHOD_DATA(const METHOD_DATA *);
+ int    copy_METHOD_DATA  (const METHOD_DATA *, METHOD_DATA *);
+ 
+ 
+ /*
+ KDC-REQ-BODY ::= SEQUENCE {
+   kdc-options[0]              KDCOptions,
+   cname[1]                    PrincipalName OPTIONAL,
+   realm[2]                    Realm,
+   sname[3]                    PrincipalName OPTIONAL,
+   from[4]                     KerberosTime OPTIONAL,
+   till[5]                     KerberosTime OPTIONAL,
+   rtime[6]                    KerberosTime OPTIONAL,
+   nonce[7]                    INTEGER,
+   etype[8]                    SEQUENCE OF ENCTYPE,
+   addresses[9]                HostAddresses OPTIONAL,
+   enc-authorization-data[10]  EncryptedData OPTIONAL,
+   additional-tickets[11]      SEQUENCE OF Ticket OPTIONAL
+ }
+ */
+ 
+ typedef struct KDC_REQ_BODY {
+   KDCOptions kdc_options;
+   PrincipalName *cname;
+   Realm realm;
+   PrincipalName *sname;
+   KerberosTime *from;
+   KerberosTime *till;
+   KerberosTime *rtime;
+   int nonce;
+   struct  {
+     unsigned int len;
+     ENCTYPE *val;
+   } etype;
+   HostAddresses *addresses;
+   EncryptedData *enc_authorization_data;
+   struct  {
+     unsigned int len;
+     Ticket *val;
+   } *additional_tickets;
+ } KDC_REQ_BODY;
+ 
+ int    encode_KDC_REQ_BODY(unsigned char *, size_t, const KDC_REQ_BODY *, size_t *);
+ int    decode_KDC_REQ_BODY(const unsigned char *, size_t, KDC_REQ_BODY *, size_t *);
+ void   free_KDC_REQ_BODY  (KDC_REQ_BODY *);
+ size_t length_KDC_REQ_BODY(const KDC_REQ_BODY *);
+ int    copy_KDC_REQ_BODY  (const KDC_REQ_BODY *, KDC_REQ_BODY *);
+ 
+ 
+ /*
+ KDC-REQ ::= SEQUENCE {
+   pvno[1]         INTEGER,
+   msg-type[2]     MESSAGE-TYPE,
+   padata[3]       METHOD-DATA OPTIONAL,
+   req-body[4]     KDC-REQ-BODY
+ }
+ */
+ 
+ typedef struct KDC_REQ {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   METHOD_DATA *padata;
+   KDC_REQ_BODY req_body;
+ } KDC_REQ;
+ 
+ int    encode_KDC_REQ(unsigned char *, size_t, const KDC_REQ *, size_t *);
+ int    decode_KDC_REQ(const unsigned char *, size_t, KDC_REQ *, size_t *);
+ void   free_KDC_REQ  (KDC_REQ *);
+ size_t length_KDC_REQ(const KDC_REQ *);
+ int    copy_KDC_REQ  (const KDC_REQ *, KDC_REQ *);
+ 
+ 
+ /*
+ AS-REQ ::= [APPLICATION 10] KDC-REQ
+ */
+ 
+ typedef KDC_REQ AS_REQ;
+ 
+ int    encode_AS_REQ(unsigned char *, size_t, const AS_REQ *, size_t *);
+ int    decode_AS_REQ(const unsigned char *, size_t, AS_REQ *, size_t *);
+ void   free_AS_REQ  (AS_REQ *);
+ size_t length_AS_REQ(const AS_REQ *);
+ int    copy_AS_REQ  (const AS_REQ *, AS_REQ *);
+ 
+ 
+ /*
+ TGS-REQ ::= [APPLICATION 12] KDC-REQ
+ */
+ 
+ typedef KDC_REQ TGS_REQ;
+ 
+ int    encode_TGS_REQ(unsigned char *, size_t, const TGS_REQ *, size_t *);
+ int    decode_TGS_REQ(const unsigned char *, size_t, TGS_REQ *, size_t *);
+ void   free_TGS_REQ  (TGS_REQ *);
+ size_t length_TGS_REQ(const TGS_REQ *);
+ int    copy_TGS_REQ  (const TGS_REQ *, TGS_REQ *);
+ 
+ 
+ /*
+ PA-ENC-TS-ENC ::= SEQUENCE {
+   patimestamp[0]  KerberosTime,
+   pausec[1]       INTEGER OPTIONAL
+ }
+ */
+ 
+ typedef struct PA_ENC_TS_ENC {
+   KerberosTime patimestamp;
+   int *pausec;
+ } PA_ENC_TS_ENC;
+ 
+ int    encode_PA_ENC_TS_ENC(unsigned char *, size_t, const PA_ENC_TS_ENC *, size_t *);
+ int    decode_PA_ENC_TS_ENC(const unsigned char *, size_t, PA_ENC_TS_ENC *, size_t *);
+ void   free_PA_ENC_TS_ENC  (PA_ENC_TS_ENC *);
+ size_t length_PA_ENC_TS_ENC(const PA_ENC_TS_ENC *);
+ int    copy_PA_ENC_TS_ENC  (const PA_ENC_TS_ENC *, PA_ENC_TS_ENC *);
+ 
+ 
+ /*
+ KDC-REP ::= SEQUENCE {
+   pvno[0]         INTEGER,
+   msg-type[1]     MESSAGE-TYPE,
+   padata[2]       METHOD-DATA OPTIONAL,
+   crealm[3]       Realm,
+   cname[4]        PrincipalName,
+   ticket[5]       Ticket,
+   enc-part[6]     EncryptedData
+ }
+ */
+ 
+ typedef struct KDC_REP {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   METHOD_DATA *padata;
+   Realm crealm;
+   PrincipalName cname;
+   Ticket ticket;
+   EncryptedData enc_part;
+ } KDC_REP;
+ 
+ int    encode_KDC_REP(unsigned char *, size_t, const KDC_REP *, size_t *);
+ int    decode_KDC_REP(const unsigned char *, size_t, KDC_REP *, size_t *);
+ void   free_KDC_REP  (KDC_REP *);
+ size_t length_KDC_REP(const KDC_REP *);
+ int    copy_KDC_REP  (const KDC_REP *, KDC_REP *);
+ 
+ 
+ /*
+ AS-REP ::= [APPLICATION 11] KDC-REP
+ */
+ 
+ typedef KDC_REP AS_REP;
+ 
+ int    encode_AS_REP(unsigned char *, size_t, const AS_REP *, size_t *);
+ int    decode_AS_REP(const unsigned char *, size_t, AS_REP *, size_t *);
+ void   free_AS_REP  (AS_REP *);
+ size_t length_AS_REP(const AS_REP *);
+ int    copy_AS_REP  (const AS_REP *, AS_REP *);
+ 
+ 
+ /*
+ TGS-REP ::= [APPLICATION 13] KDC-REP
+ */
+ 
+ typedef KDC_REP TGS_REP;
+ 
+ int    encode_TGS_REP(unsigned char *, size_t, const TGS_REP *, size_t *);
+ int    decode_TGS_REP(const unsigned char *, size_t, TGS_REP *, size_t *);
+ void   free_TGS_REP  (TGS_REP *);
+ size_t length_TGS_REP(const TGS_REP *);
+ int    copy_TGS_REP  (const TGS_REP *, TGS_REP *);
+ 
+ 
+ /*
+ EncKDCRepPart ::= SEQUENCE {
+   key[0]             EncryptionKey,
+   last-req[1]        LastReq,
+   nonce[2]           INTEGER,
+   key-expiration[3]  KerberosTime OPTIONAL,
+   flags[4]           TicketFlags,
+   authtime[5]        KerberosTime,
+   starttime[6]       KerberosTime OPTIONAL,
+   endtime[7]         KerberosTime,
+   renew-till[8]      KerberosTime OPTIONAL,
+   srealm[9]          Realm,
+   sname[10]          PrincipalName,
+   caddr[11]          HostAddresses OPTIONAL
+ }
+ */
+ 
+ typedef struct EncKDCRepPart {
+   EncryptionKey key;
+   LastReq last_req;
+   int nonce;
+   KerberosTime *key_expiration;
+   TicketFlags flags;
+   KerberosTime authtime;
+   KerberosTime *starttime;
+   KerberosTime endtime;
+   KerberosTime *renew_till;
+   Realm srealm;
+   PrincipalName sname;
+   HostAddresses *caddr;
+ } EncKDCRepPart;
+ 
+ int    encode_EncKDCRepPart(unsigned char *, size_t, const EncKDCRepPart *, size_t *);
+ int    decode_EncKDCRepPart(const unsigned char *, size_t, EncKDCRepPart *, size_t *);
+ void   free_EncKDCRepPart  (EncKDCRepPart *);
+ size_t length_EncKDCRepPart(const EncKDCRepPart *);
+ int    copy_EncKDCRepPart  (const EncKDCRepPart *, EncKDCRepPart *);
+ 
+ 
+ /*
+ EncASRepPart ::= [APPLICATION 25] EncKDCRepPart
+ */
+ 
+ typedef EncKDCRepPart EncASRepPart;
+ 
+ int    encode_EncASRepPart(unsigned char *, size_t, const EncASRepPart *, size_t *);
+ int    decode_EncASRepPart(const unsigned char *, size_t, EncASRepPart *, size_t *);
+ void   free_EncASRepPart  (EncASRepPart *);
+ size_t length_EncASRepPart(const EncASRepPart *);
+ int    copy_EncASRepPart  (const EncASRepPart *, EncASRepPart *);
+ 
+ 
+ /*
+ EncTGSRepPart ::= [APPLICATION 26] EncKDCRepPart
+ */
+ 
+ typedef EncKDCRepPart EncTGSRepPart;
+ 
+ int    encode_EncTGSRepPart(unsigned char *, size_t, const EncTGSRepPart *, size_t *);
+ int    decode_EncTGSRepPart(const unsigned char *, size_t, EncTGSRepPart *, size_t *);
+ void   free_EncTGSRepPart  (EncTGSRepPart *);
+ size_t length_EncTGSRepPart(const EncTGSRepPart *);
+ int    copy_EncTGSRepPart  (const EncTGSRepPart *, EncTGSRepPart *);
+ 
+ 
+ /*
+ AP-REQ ::= [APPLICATION 14] SEQUENCE {
+   pvno[0]           INTEGER,
+   msg-type[1]       MESSAGE-TYPE,
+   ap-options[2]     APOptions,
+   ticket[3]         Ticket,
+   authenticator[4]  EncryptedData
+ }
+ */
+ 
+ typedef struct  {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   APOptions ap_options;
+   Ticket ticket;
+   EncryptedData authenticator;
+ } AP_REQ;
+ 
+ int    encode_AP_REQ(unsigned char *, size_t, const AP_REQ *, size_t *);
+ int    decode_AP_REQ(const unsigned char *, size_t, AP_REQ *, size_t *);
+ void   free_AP_REQ  (AP_REQ *);
+ size_t length_AP_REQ(const AP_REQ *);
+ int    copy_AP_REQ  (const AP_REQ *, AP_REQ *);
+ 
+ 
+ /*
+ AP-REP ::= [APPLICATION 15] SEQUENCE {
+   pvno[0]         INTEGER,
+   msg-type[1]     MESSAGE-TYPE,
+   enc-part[2]     EncryptedData
+ }
+ */
+ 
+ typedef struct  {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   EncryptedData enc_part;
+ } AP_REP;
+ 
+ int    encode_AP_REP(unsigned char *, size_t, const AP_REP *, size_t *);
+ int    decode_AP_REP(const unsigned char *, size_t, AP_REP *, size_t *);
+ void   free_AP_REP  (AP_REP *);
+ size_t length_AP_REP(const AP_REP *);
+ int    copy_AP_REP  (const AP_REP *, AP_REP *);
+ 
+ 
+ /*
+ EncAPRepPart ::= [APPLICATION 27] SEQUENCE {
+   ctime[0]        KerberosTime,
+   cusec[1]        INTEGER,
+   subkey[2]       EncryptionKey OPTIONAL,
+   seq-number[3]   UNSIGNED OPTIONAL
+ }
+ */
+ 
+ typedef struct  {
+   KerberosTime ctime;
+   int cusec;
+   EncryptionKey *subkey;
+   UNSIGNED *seq_number;
+ } EncAPRepPart;
+ 
+ int    encode_EncAPRepPart(unsigned char *, size_t, const EncAPRepPart *, size_t *);
+ int    decode_EncAPRepPart(const unsigned char *, size_t, EncAPRepPart *, size_t *);
+ void   free_EncAPRepPart  (EncAPRepPart *);
+ size_t length_EncAPRepPart(const EncAPRepPart *);
+ int    copy_EncAPRepPart  (const EncAPRepPart *, EncAPRepPart *);
+ 
+ 
+ /*
+ KRB-SAFE-BODY ::= SEQUENCE {
+   user-data[0]    OCTET STRING,
+   timestamp[1]    KerberosTime OPTIONAL,
+   usec[2]         INTEGER OPTIONAL,
+   seq-number[3]   UNSIGNED OPTIONAL,
+   s-address[4]    HostAddress OPTIONAL,
+   r-address[5]    HostAddress OPTIONAL
+ }
+ */
+ 
+ typedef struct KRB_SAFE_BODY {
+   octet_string user_data;
+   KerberosTime *timestamp;
+   int *usec;
+   UNSIGNED *seq_number;
+   HostAddress *s_address;
+   HostAddress *r_address;
+ } KRB_SAFE_BODY;
+ 
+ int    encode_KRB_SAFE_BODY(unsigned char *, size_t, const KRB_SAFE_BODY *, size_t *);
+ int    decode_KRB_SAFE_BODY(const unsigned char *, size_t, KRB_SAFE_BODY *, size_t *);
+ void   free_KRB_SAFE_BODY  (KRB_SAFE_BODY *);
+ size_t length_KRB_SAFE_BODY(const KRB_SAFE_BODY *);
+ int    copy_KRB_SAFE_BODY  (const KRB_SAFE_BODY *, KRB_SAFE_BODY *);
+ 
+ 
+ /*
+ KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
+   pvno[0]         INTEGER,
+   msg-type[1]     MESSAGE-TYPE,
+   safe-body[2]    KRB-SAFE-BODY,
+   cksum[3]        Checksum
+ }
+ */
+ 
+ typedef struct  {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   KRB_SAFE_BODY safe_body;
+   Checksum cksum;
+ } KRB_SAFE;
+ 
+ int    encode_KRB_SAFE(unsigned char *, size_t, const KRB_SAFE *, size_t *);
+ int    decode_KRB_SAFE(const unsigned char *, size_t, KRB_SAFE *, size_t *);
+ void   free_KRB_SAFE  (KRB_SAFE *);
+ size_t length_KRB_SAFE(const KRB_SAFE *);
+ int    copy_KRB_SAFE  (const KRB_SAFE *, KRB_SAFE *);
+ 
+ 
+ /*
+ KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
+   pvno[0]         INTEGER,
+   msg-type[1]     MESSAGE-TYPE,
+   enc-part[3]     EncryptedData
+ }
+ */
+ 
+ typedef struct  {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   EncryptedData enc_part;
+ } KRB_PRIV;
+ 
+ int    encode_KRB_PRIV(unsigned char *, size_t, const KRB_PRIV *, size_t *);
+ int    decode_KRB_PRIV(const unsigned char *, size_t, KRB_PRIV *, size_t *);
+ void   free_KRB_PRIV  (KRB_PRIV *);
+ size_t length_KRB_PRIV(const KRB_PRIV *);
+ int    copy_KRB_PRIV  (const KRB_PRIV *, KRB_PRIV *);
+ 
+ 
+ /*
+ EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
+   user-data[0]    OCTET STRING,
+   timestamp[1]    KerberosTime OPTIONAL,
+   usec[2]         INTEGER OPTIONAL,
+   seq-number[3]   UNSIGNED OPTIONAL,
+   s-address[4]    HostAddress OPTIONAL,
+   r-address[5]    HostAddress OPTIONAL
+ }
+ */
+ 
+ typedef struct  {
+   octet_string user_data;
+   KerberosTime *timestamp;
+   int *usec;
+   UNSIGNED *seq_number;
+   HostAddress *s_address;
+   HostAddress *r_address;
+ } EncKrbPrivPart;
+ 
+ int    encode_EncKrbPrivPart(unsigned char *, size_t, const EncKrbPrivPart *, size_t *);
+ int    decode_EncKrbPrivPart(const unsigned char *, size_t, EncKrbPrivPart *, size_t *);
+ void   free_EncKrbPrivPart  (EncKrbPrivPart *);
+ size_t length_EncKrbPrivPart(const EncKrbPrivPart *);
+ int    copy_EncKrbPrivPart  (const EncKrbPrivPart *, EncKrbPrivPart *);
+ 
+ 
+ /*
+ KRB-CRED ::= [APPLICATION 22] SEQUENCE {
+   pvno[0]         INTEGER,
+   msg-type[1]     MESSAGE-TYPE,
+   tickets[2]      SEQUENCE OF Ticket,
+   enc-part[3]     EncryptedData
+ }
+ */
+ 
+ typedef struct  {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   struct  {
+     unsigned int len;
+     Ticket *val;
+   } tickets;
+   EncryptedData enc_part;
+ } KRB_CRED;
+ 
+ int    encode_KRB_CRED(unsigned char *, size_t, const KRB_CRED *, size_t *);
+ int    decode_KRB_CRED(const unsigned char *, size_t, KRB_CRED *, size_t *);
+ void   free_KRB_CRED  (KRB_CRED *);
+ size_t length_KRB_CRED(const KRB_CRED *);
+ int    copy_KRB_CRED  (const KRB_CRED *, KRB_CRED *);
+ 
+ 
+ /*
+ KrbCredInfo ::= SEQUENCE {
+   key[0]          EncryptionKey,
+   prealm[1]       Realm OPTIONAL,
+   pname[2]        PrincipalName OPTIONAL,
+   flags[3]        TicketFlags OPTIONAL,
+   authtime[4]     KerberosTime OPTIONAL,
+   starttime[5]    KerberosTime OPTIONAL,
+   endtime[6]      KerberosTime OPTIONAL,
+   renew-till[7]   KerberosTime OPTIONAL,
+   srealm[8]       Realm OPTIONAL,
+   sname[9]        PrincipalName OPTIONAL,
+   caddr[10]       HostAddresses OPTIONAL
+ }
+ */
+ 
+ typedef struct KrbCredInfo {
+   EncryptionKey key;
+   Realm *prealm;
+   PrincipalName *pname;
+   TicketFlags *flags;
+   KerberosTime *authtime;
+   KerberosTime *starttime;
+   KerberosTime *endtime;
+   KerberosTime *renew_till;
+   Realm *srealm;
+   PrincipalName *sname;
+   HostAddresses *caddr;
+ } KrbCredInfo;
+ 
+ int    encode_KrbCredInfo(unsigned char *, size_t, const KrbCredInfo *, size_t *);
+ int    decode_KrbCredInfo(const unsigned char *, size_t, KrbCredInfo *, size_t *);
+ void   free_KrbCredInfo  (KrbCredInfo *);
+ size_t length_KrbCredInfo(const KrbCredInfo *);
+ int    copy_KrbCredInfo  (const KrbCredInfo *, KrbCredInfo *);
+ 
+ 
+ /*
+ EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
+   ticket-info[0]  SEQUENCE OF KrbCredInfo,
+   nonce[1]        INTEGER OPTIONAL,
+   timestamp[2]    KerberosTime OPTIONAL,
+   usec[3]         INTEGER OPTIONAL,
+   s-address[4]    HostAddress OPTIONAL,
+   r-address[5]    HostAddress OPTIONAL
+ }
+ */
+ 
+ typedef struct  {
+   struct  {
+     unsigned int len;
+     KrbCredInfo *val;
+   } ticket_info;
+   int *nonce;
+   KerberosTime *timestamp;
+   int *usec;
+   HostAddress *s_address;
+   HostAddress *r_address;
+ } EncKrbCredPart;
+ 
+ int    encode_EncKrbCredPart(unsigned char *, size_t, const EncKrbCredPart *, size_t *);
+ int    decode_EncKrbCredPart(const unsigned char *, size_t, EncKrbCredPart *, size_t *);
+ void   free_EncKrbCredPart  (EncKrbCredPart *);
+ size_t length_EncKrbCredPart(const EncKrbCredPart *);
+ int    copy_EncKrbCredPart  (const EncKrbCredPart *, EncKrbCredPart *);
+ 
+ 
+ /*
+ KRB-ERROR ::= [APPLICATION 30] SEQUENCE {
+   pvno[0]         INTEGER,
+   msg-type[1]     MESSAGE-TYPE,
+   ctime[2]        KerberosTime OPTIONAL,
+   cusec[3]        INTEGER OPTIONAL,
+   stime[4]        KerberosTime,
+   susec[5]        INTEGER,
+   error-code[6]   INTEGER,
+   crealm[7]       Realm OPTIONAL,
+   cname[8]        PrincipalName OPTIONAL,
+   realm[9]        Realm,
+   sname[10]       PrincipalName,
+   e-text[11]      GeneralString OPTIONAL,
+   e-data[12]      OCTET STRING OPTIONAL
+ }
+ */
+ 
+ typedef struct  {
+   int pvno;
+   MESSAGE_TYPE msg_type;
+   KerberosTime *ctime;
+   int *cusec;
+   KerberosTime stime;
+   int susec;
+   int error_code;
+   Realm *crealm;
+   PrincipalName *cname;
+   Realm realm;
+   PrincipalName sname;
+   general_string *e_text;
+   octet_string *e_data;
+ } KRB_ERROR;
+ 
+ int    encode_KRB_ERROR(unsigned char *, size_t, const KRB_ERROR *, size_t *);
+ int    decode_KRB_ERROR(const unsigned char *, size_t, KRB_ERROR *, size_t *);
+ void   free_KRB_ERROR  (KRB_ERROR *);
+ size_t length_KRB_ERROR(const KRB_ERROR *);
+ int    copy_KRB_ERROR  (const KRB_ERROR *, KRB_ERROR *);
+ 
+ 
+ enum { pvno = 5 };
+ 
+ enum { DOMAIN_X500_COMPRESS = 1 };
+ 
+ #endif /* __krb5_asn1_h__ */
Index: openafs/src/rxkad/test/Makefile.in
diff -c openafs/src/rxkad/test/Makefile.in:1.4.2.1 openafs/src/rxkad/test/Makefile.in:1.4.2.3
*** openafs/src/rxkad/test/Makefile.in:1.4.2.1	Sun Jan 20 04:03:51 2002
--- openafs/src/rxkad/test/Makefile.in	Sat Nov 16 14:28:36 2002
***************
*** 5,25 ****
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
! DESTDIR=@DESTDIR@
! SRCDIR=@SRCDIR@
  TOP_SRCDIR=@TOP_SRCDIR@
  SYS_NAME=@AFS_SYSNAME@
  
  include ../../config/Makefile.${SYS_NAME}
  
  OPTIMIZE=-g
  
! CFLAGS=-g -I. -I${srcdir} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS}
  
  HEADERS = ../rxkad.h stress.h stress_internal.h stress_errs.h
  
! LIBS=${TOP_LIBDIR}/librx.a \
  	${TOP_LIBDIR}/liblwp.a \
  	${TOP_LIBDIR}/libcmd.a \
  	${TOP_LIBDIR}/librxkad.a \
  	${TOP_LIBDIR}/libdes.a \
--- 5,46 ----
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
! DEST=@DEST@
! TOP_INCDIR=@TOP_INCDIR@
! TOP_LIBDIR=@TOP_LIBDIR@
! prefix=@prefix@
! exec_prefix=@exec_prefix@
! bindir=@bindir@
! sbindir=@sbindir@
! libexecdir=@libexecdir@
! libdir=@libdir@
! includedir=@includedir@
! mandir=@mandir@
! afssrvbindir=@afssrvbindir@
! afssrvsbindir=@afssrvsbindir@
! afssrvlibexecdir=@afssrvlibexecdir@
! RXGEN=${TOP_SRCDIR}/rxgen/rxgen
  TOP_SRCDIR=@TOP_SRCDIR@
  SYS_NAME=@AFS_SYSNAME@
  
+ SHELL = /bin/sh
+ 
  include ../../config/Makefile.${SYS_NAME}
  
+ KERNELDIR = ../libafs/
+ UKERNELDIR = ../libuafs/
+ COMPILE_ET=${TOP_SRCDIR}/comerr/compile_et
+ 
  OPTIMIZE=-g
  
! CFLAGS=-g -I. -I${TOP_SRCDIR} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS}
  
  HEADERS = ../rxkad.h stress.h stress_internal.h stress_errs.h
  
! LIBS=${TOP_LIBDIR}/libauth.a \
! 	${TOP_LIBDIR}/librx.a \
  	${TOP_LIBDIR}/liblwp.a \
+ 	${TOP_LIBDIR}/libsys.a \
  	${TOP_LIBDIR}/libcmd.a \
  	${TOP_LIBDIR}/librxkad.a \
  	${TOP_LIBDIR}/libdes.a \
***************
*** 50,56 ****
  
  th_stress.cs.o: stress.cs.c
  	${THRULE} -o th_stress.cs.o
! 	
  th_stress.xdr.o: stress.xdr.c stress.h
  	${THRULE} -o th_stress.xdr.o
  
--- 71,77 ----
  
  th_stress.cs.o: stress.cs.c
  	${THRULE} -o th_stress.cs.o
! 
  th_stress.xdr.o: stress.xdr.c stress.h
  	${THRULE} -o th_stress.xdr.o
  
Index: openafs/src/rxkad/test/stress.c
diff -c openafs/src/rxkad/test/stress.c:1.5.2.2 openafs/src/rxkad/test/stress.c:1.5.2.3
*** openafs/src/rxkad/test/stress.c:1.5.2.2	Sat Oct 13 00:21:56 2001
--- openafs/src/rxkad/test/stress.c	Thu Nov 14 17:44:53 2002
***************
*** 12,18 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/test/stress.c,v 1.5.2.2 2001/10/13 04:21:56 shadow Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
--- 12,18 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/test/stress.c,v 1.5.2.3 2002/11/14 22:44:53 zacheiss Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
***************
*** 89,94 ****
--- 89,97 ----
  #define aRECLAIM     21
  #define a2DCHOICE     22
  #define aMAXSKEW	23
+ #define aUSETOKENS 24
+ #define aCELL 25
+ #define aKEYFILE 26
  
  static int CommandProc (as, arock)
    char *arock;
***************
*** 122,127 ****
--- 125,131 ----
      cParms->callTest = (as->parms[aCALLTEST].items != 0);
      cParms->hijackTest = (as->parms[aHIJACKTEST].items != 0);
      cParms->stopServer = (as->parms[aSTOPSERVER].items != 0);
+     cParms->useTokens = (as->parms[aUSETOKENS].items != 0);
  
      if (as->parms[aMELT1b].items) 
  	meltdown_1pkt = 0; 
***************
*** 151,156 ****
--- 155,162 ----
  	if (as->parms[aMINSERVERAUTH].items)
  	    sParms->authentication =
  		StringToAuth (as->parms[aMINSERVERAUTH].items->data);
+         if (as->parms[aKEYFILE].items)
+             sParms->keyfile = as->parms[aKEYFILE].items->data;
  
  #ifdef AFS_PTHREAD_ENV
  	{
***************
*** 231,236 ****
--- 237,245 ----
  	if (as->parms[aAUTHENTICATION].items)
  	    cParms->authentication =
  		StringToAuth (as->parms[aAUTHENTICATION].items->data);
+         cParms->cell = RXKST_CLIENT_CELL;
+         if (as->parms[aCELL].items)
+             cParms->cell = as->parms[aCELL].items->data;
  
  	code = rxkst_StartClient (cParms);
  	if (code) {
***************
*** 268,273 ****
--- 277,283 ----
      initialize_RXK_error_table();
      initialize_RKS_error_table();
      initialize_CMD_error_table();
+     initialize_KTC_error_table();
  
      code = rx_Init (0);
      rx_SetRxDeadTime(120);
***************
*** 308,313 ****
--- 318,326 ----
      cmd_AddParm (ts, "-noreclaim", CMD_FLAG, CMD_OPTIONAL, "dont aggressively reclaim packets");
      cmd_AddParm (ts, "-no2dchoice", CMD_FLAG, CMD_OPTIONAL, "disable rx_getcall 2d choice code");
      cmd_AddParm (ts, "-maxskew", CMD_SINGLE, CMD_OPTIONAL, "max client server skew in seconds");
+     cmd_AddParm (ts, "-usetokens", CMD_FLAG, CMD_OPTIONAL, "use ktc tokens");
+     cmd_AddParm (ts, "-cell", CMD_SINGLE, CMD_OPTIONAL, "name of test cell");
+     cmd_AddParm (ts, "-keyfile", CMD_SINGLE, CMD_OPTIONAL, "read server key from file");
  
      code = cmd_Dispatch (argc, argv);
      exit (code!=0);
Index: openafs/src/rxkad/test/stress_c.c
diff -c openafs/src/rxkad/test/stress_c.c:1.6 openafs/src/rxkad/test/stress_c.c:1.6.2.1
*** openafs/src/rxkad/test/stress_c.c:1.6	Tue Aug  7 20:04:08 2001
--- openafs/src/rxkad/test/stress_c.c	Thu Nov 14 17:44:53 2002
***************
*** 12,18 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/test/stress_c.c,v 1.6 2001/08/08 00:04:08 shadow Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
--- 12,18 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/test/stress_c.c,v 1.6.2.1 2002/11/14 22:44:53 zacheiss Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
***************
*** 26,31 ****
--- 26,32 ----
  #include <afs/com_err.h>
  #include <afs/afsutil.h>
  #include <rx/rxkad.h>
+ #include <afs/auth.h>
  #include "stress.h"
  #include "stress_internal.h"
  #ifdef AFS_PTHREAD_ENV
***************
*** 52,65 ****
      return addr;
  }
  
! static long GetTicket (versionP, session, ticketLenP, ticket)
    OUT long *versionP;
    OUT struct ktc_encryptionKey *session;
    OUT int *ticketLenP;
    OUT char *ticket;
  {
      long code;
  
      /* create random session key, using key for seed to good random */
      des_init_random_number_generator (&serviceKey);
      code = des_random_key (session);
--- 53,89 ----
      return addr;
  }
  
! static long GetToken (versionP, session, ticketLenP, ticket, cell)
    OUT long *versionP;
    OUT struct ktc_encryptionKey *session;
    OUT int *ticketLenP;
    OUT char *ticket;
  {
+   struct ktc_principal sname;
+   struct ktc_token ttoken;
      long code;
  
+   strcpy(sname.cell, cell);
+   sname.instance[0] = 0;
+   strcpy(sname.name, "afs");
+   code = ktc_GetToken(&sname, &ttoken, sizeof(ttoken), NULL);
+   if (code) return code;
+ 
+   *versionP = ttoken.kvno;
+   *ticketLenP = ttoken.ticketLen;
+   memcpy(ticket, ttoken.ticket, ttoken.ticketLen);
+   memcpy(session, &ttoken.sessionKey, sizeof(struct ktc_encryptionKey));
+   return 0;
+ }
+ 
+ static long GetTicket (versionP, session, ticketLenP, ticket, cell)
+   OUT long *versionP;
+   OUT struct ktc_encryptionKey *session;
+   OUT int *ticketLenP;
+   OUT char *ticket;
+ {
+     long code;
+ 
      /* create random session key, using key for seed to good random */
      des_init_random_number_generator (&serviceKey);
      code = des_random_key (session);
***************
*** 68,74 ****
      /* now create the actual ticket */
      *ticketLenP = 0;
      code = tkt_MakeTicket(ticket, ticketLenP, &serviceKey,
! 			  RXKST_CLIENT_NAME, RXKST_CLIENT_INST, "",
  			  /*start,end*/0, 0xffffffff, session, /*host*/0,
  			  RXKST_SERVER_NAME, RXKST_SERVER_NAME);
      /* parms were buffer, ticketlen, key to seal ticket with, principal name,
--- 92,98 ----
      /* now create the actual ticket */
      *ticketLenP = 0;
      code = tkt_MakeTicket(ticket, ticketLenP, &serviceKey,
! 			  RXKST_CLIENT_NAME, RXKST_CLIENT_INST, cell,
  			  /*start,end*/0, 0xffffffff, session, /*host*/0,
  			  RXKST_SERVER_NAME, RXKST_SERVER_NAME);
      /* parms were buffer, ticketlen, key to seal ticket with, principal name,
***************
*** 1142,1148 ****
  	int ticketLen;
  	struct ktc_encryptionKey Ksession;
  
! 	code = GetTicket (&kvno, &Ksession, &ticketLen, ticket);
  	if (code) return code;
  
  	/* next, we have ticket, kvno and session key, authenticate the conn */
--- 1166,1175 ----
  	int ticketLen;
  	struct ktc_encryptionKey Ksession;
  
! 	if (parms->useTokens)
! 	    code = GetToken (&kvno, &Ksession, &ticketLen, ticket, parms->cell);
! 	else
! 	    code = GetTicket (&kvno, &Ksession, &ticketLen, ticket, parms->cell);
  	if (code) return code;
  
  	/* next, we have ticket, kvno and session key, authenticate the conn */
Index: openafs/src/rxkad/test/stress_internal.h
diff -c openafs/src/rxkad/test/stress_internal.h:1.2 openafs/src/rxkad/test/stress_internal.h:1.2.8.1
*** openafs/src/rxkad/test/stress_internal.h:1.2	Sat Nov  4 05:05:46 2000
--- openafs/src/rxkad/test/stress_internal.h	Thu Nov 14 17:44:53 2002
***************
*** 19,24 ****
--- 19,25 ----
  #define RXKST_SERVER_INST ""
  #define RXKST_CLIENT_NAME "rxkad_stress_test_client"
  #define RXKST_CLIENT_INST ""
+ #define RXKST_CLIENT_CELL "rxtest.openafs.org"
  
  extern int errno;
  
***************
*** 26,31 ****
--- 27,33 ----
      char *whoami;
      u_int threads;
      int authentication;			/* minimum level  of auth to permit */
+     char *keyfile;
  };
  
  struct clientParms {
***************
*** 44,60 ****
      int hijackTest;			/* check hijack prevention measures */
      int stopServer;			/* send stop server RPC */
      int authentication;			/* type of authentication to use */
      u_long repeatInterval;		/* secs between load test activity */
      u_long repeatCount;			/* times load test activity repeated */
  };
  
  long rxkst_StartClient(INOUT struct clientParms *parms);
  long rxkst_StartServer(INOUT struct serverParms *parms);
- 
- long RXKST_Fast();
- long RXKST_Slow();
- long RXKST_Copious();
- long RXKST_Kill();
  
  /* For backward compatibility with AFS3.0 release. */
  
--- 46,59 ----
      int hijackTest;			/* check hijack prevention measures */
      int stopServer;			/* send stop server RPC */
      int authentication;			/* type of authentication to use */
+     int useTokens;			/* use user's existing tokens */
+     char *cell;                         /* test cell name */
      u_long repeatInterval;		/* secs between load test activity */
      u_long repeatCount;			/* times load test activity repeated */
  };
  
  long rxkst_StartClient(INOUT struct clientParms *parms);
  long rxkst_StartServer(INOUT struct serverParms *parms);
  
  /* For backward compatibility with AFS3.0 release. */
  
Index: openafs/src/rxkad/test/stress_s.c
diff -c openafs/src/rxkad/test/stress_s.c:1.5 openafs/src/rxkad/test/stress_s.c:1.5.2.1
*** openafs/src/rxkad/test/stress_s.c:1.5	Tue Aug  7 20:04:08 2001
--- openafs/src/rxkad/test/stress_s.c	Thu Nov 14 17:44:53 2002
***************
*** 12,21 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/test/stress_s.c,v 1.5 2001/08/08 00:04:08 shadow Exp $");
  
  #include <afs/stds.h>
  #include <stdio.h>
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
  #include <winsock2.h>
--- 12,22 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/rxkad/test/stress_s.c,v 1.5.2.1 2002/11/14 22:44:53 zacheiss Exp $");
  
  #include <afs/stds.h>
  #include <stdio.h>
+ #include <fcntl.h>
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
  #include <winsock2.h>
***************
*** 26,31 ****
--- 27,35 ----
  
  #include <rx/rxkad.h>
  
+ #include <afs/keys.h>
+ #include <afs/cellconfig.h>
+ 
  #include "stress.h"
  #include "stress_internal.h"
  
***************
*** 41,48 ****
    IN long  kvno;
    OUT struct ktc_encryptionKey *key;
  {
!     memcpy(key, &serviceKey, sizeof(*key));
!     return 0;
  }
  
  static int minAuth;
--- 45,82 ----
    IN long  kvno;
    OUT struct ktc_encryptionKey *key;
  {
!     struct serverParms *parms = (struct serverParms *)rock;
!     struct afsconf_keys tstr;
!     afs_int32 code;
!     int fd;
! 
!     fprintf(stderr, "GetKey called for kvno %d\n", kvno);
!     if (!parms->keyfile) {
!         memcpy(key, &serviceKey, sizeof(*key));
!         return 0;
!     }
! 
!     /* the rest of this function borrows heavily from auth/cellconfig.c */
!     fd = open(parms->keyfile, O_RDONLY);
!     if (fd < 0) {
!         return AFSCONF_FAILURE;
!     }
!     code = read(fd, &tstr, sizeof(struct afsconf_keys));
!     close(fd);
!     if (code < sizeof(afs_int32)) {
!         return AFSCONF_FAILURE;
!     }
! 
!     /* convert key structure to host order */
!     tstr.nkeys = ntohl(tstr.nkeys);
!     for(fd = 0; fd < tstr.nkeys; fd++) {
!         if (kvno == ntohl(tstr.key[fd].kvno)) {
!             memcpy(key, tstr.key[fd].key, sizeof(*key));
!             return 0;
!         }
!     }
! 
!     return AFSCONF_NOTFOUND;
  }
  
  static int minAuth;
***************
*** 61,67 ****
  
      sc[0] = rxnull_NewServerSecurityObject();
      sc[1] = 0;				/* no rxvab anymore */
!     sc[2] = rxkad_NewServerSecurityObject (minLevel, 0, GetKey, 0);
      tservice = rx_NewService(htons(RXKST_SERVICEPORT), RXKST_SERVICEID,
  			     "stress test", sc, 3, RXKST_ExecuteRequest);
      if (tservice == (struct rx_service *)0) {
--- 95,101 ----
  
      sc[0] = rxnull_NewServerSecurityObject();
      sc[1] = 0;				/* no rxvab anymore */
!     sc[2] = rxkad_NewServerSecurityObject (minLevel, (void *)parms, GetKey, 0);
      tservice = rx_NewService(htons(RXKST_SERVICEPORT), RXKST_SERVICEID,
  			     "stress test", sc, 3, RXKST_ExecuteRequest);
      if (tservice == (struct rx_service *)0) {
***************
*** 77,82 ****
--- 111,120 ----
      return 0;
  }
  
+ static char test_client_name[MAXKTCNAMELEN];
+ static char test_client_inst[MAXKTCNAMELEN];
+ static char test_client_cell[MAXKTCREALMLEN];
+ static int got_client_id = 0;
  static long CheckAuth (call)
    IN struct rx_call *call;
  {
***************
*** 105,120 ****
  				name, inst, cell, &kvno);
      if (code) return code;
      if (minAuth > level) return -1;
!     if (kvno != serviceKeyVersion) return RXKST_BADKVNO;
!     if (strcmp (name, RXKST_CLIENT_NAME) ||
! 	strcmp (inst, RXKST_CLIENT_INST) ||
! 	cell[0]) return RXKST_BADCLIENT;
      return 0;
  }
  
  /* Stop the server.  There isn't a graceful way to do this so just exit. */
  
! long SRXKST_Kill (call)
    IN struct rx_call *call;
  {
      long code;
--- 143,165 ----
  				name, inst, cell, &kvno);
      if (code) return code;
      if (minAuth > level) return -1;
!     fprintf(stderr, "Test client is %s.%s@%s\n", name, inst, cell);
!     if (got_client_id) {
!         if (strcmp(name, test_client_name)) return RXKST_BADCLIENT;
!         if (strcmp(inst, test_client_inst)) return RXKST_BADCLIENT;
!         if (strcmp(cell, test_client_cell)) return RXKST_BADCLIENT;
!     } else {
!         strcpy(test_client_name, name);
!         strcpy(test_client_inst, inst);
!         strcpy(test_client_cell, cell);
!         got_client_id = 1;
!     }
      return 0;
  }
  
  /* Stop the server.  There isn't a graceful way to do this so just exit. */
  
! afs_int32 SRXKST_Kill (call)
    IN struct rx_call *call;
  {
      long code;
***************
*** 131,137 ****
      return 0;    
  }
  
! long SRXKST_Fast (call, n, inc_nP)
    IN struct rx_call *call;
    IN u_long n;
    OUT u_long *inc_nP;
--- 176,182 ----
      return 0;    
  }
  
! afs_int32 SRXKST_Fast (call, n, inc_nP)
    IN struct rx_call *call;
    IN u_long n;
    OUT u_long *inc_nP;
***************
*** 140,146 ****
      return 0;
  }
  
! long SRXKST_Slow (call, tag, nowP)
    IN struct rx_call *call;
    IN u_long tag;
    OUT u_long *nowP;
--- 185,191 ----
      return 0;
  }
  
! afs_int32 SRXKST_Slow (call, tag, nowP)
    IN struct rx_call *call;
    IN u_long tag;
    OUT u_long *nowP;
***************
*** 184,190 ****
      buflist = bl;
  }
  
! long SRXKST_Copious (call, inlen, insum, outlen, outsum)
    IN struct rx_call *call;
    IN u_long inlen;
    IN u_long insum;
--- 229,235 ----
      buflist = bl;
  }
  
! afs_int32 SRXKST_Copious (call, inlen, insum, outlen, outsum)
    IN struct rx_call *call;
    IN u_long inlen;
    IN u_long insum;
Index: openafs/src/shlibafsauthent/mapfile
diff -c openafs/src/shlibafsauthent/mapfile:1.1.2.1 openafs/src/shlibafsauthent/mapfile:1.1.2.2
*** openafs/src/shlibafsauthent/mapfile:1.1.2.1	Tue Sep 10 01:03:45 2002
--- openafs/src/shlibafsauthent/mapfile	Sat Nov  2 12:25:48 2002
***************
*** 77,82 ****
--- 77,85 ----
  	afs_krb_get_lrealm;
  	pr_NameToId;
  	pr_IdToName;
+ 	pr_SNameToId;
+ 	afs_get_pag_from_groups;
+ 	setpag;
  
      local:
  	*;
Index: openafs/src/shlibafsrpc/Makefile.in
diff -c openafs/src/shlibafsrpc/Makefile.in:1.7.2.5 openafs/src/shlibafsrpc/Makefile.in:1.7.2.8
*** openafs/src/shlibafsrpc/Makefile.in:1.7.2.5	Tue Sep 10 01:34:23 2002
--- openafs/src/shlibafsrpc/Makefile.in	Sun Nov 17 23:35:54 2002
***************
*** 102,107 ****
--- 102,109 ----
  	rxkad_server.o \
  	rxkad_common.o \
  	ticket.o \
+ 	ticket5.o \
+ 	crc.o \
  	fcrypt.o \
  	crypt_conn.o
  
***************
*** 207,212 ****
--- 209,220 ----
  ticket.o: ${RXKAD}/ticket.c
  	${CCRULE}
  
+ ticket5.o: ${RXKAD}/ticket5.c
+ 	${CCRULE}
+ 
+ crc.o: ${RXKAD}/crc.c
+ 	${CCRULE}
+ 
  fcrypt.o: ${RXKAD}/fcrypt.c
  	${CCRULE}
  
***************
*** 268,274 ****
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.7.2.5 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
--- 276,282 ----
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.7.2.8 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
Index: openafs/src/util/afs_lhash.c
diff -c openafs/src/util/afs_lhash.c:1.4 openafs/src/util/afs_lhash.c:1.4.4.1
*** openafs/src/util/afs_lhash.c:1.4	Thu Jul 12 15:59:23 2001
--- openafs/src/util/afs_lhash.c	Thu Nov 14 17:27:15 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/util/afs_lhash.c,v 1.4 2001/07/12 19:59:23 shadow Exp $");
  
  #ifdef KERNEL
  #include "../afs/afs_atomlist.h"
--- 10,16 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/util/afs_lhash.c,v 1.4.4.1 2002/11/14 22:27:15 zacheiss Exp $");
  
  #ifdef KERNEL
  #include "../afs/afs_atomlist.h"
***************
*** 22,27 ****
--- 22,31 ----
  #include <assert.h>
  #define CHECK_INVARIANTS
  #endif /* KERNEL */
+ 
+ #ifndef NULL
+ #define NULL 0
+ #endif
  
  /* max hash table load factor */
  enum { LOAD_FACTOR = 5 };
Index: openafs/src/viced/afsfileprocs.c
diff -c openafs/src/viced/afsfileprocs.c:1.10.2.6 openafs/src/viced/afsfileprocs.c:1.10.2.8
*** openafs/src/viced/afsfileprocs.c:1.10.2.6	Wed Aug 21 11:54:34 2002
--- openafs/src/viced/afsfileprocs.c	Thu Nov 14 16:37:26 2002
***************
*** 28,34 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/viced/afsfileprocs.c,v 1.10.2.6 2002/08/21 15:54:34 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
--- 28,34 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/viced/afsfileprocs.c,v 1.10.2.8 2002/11/14 21:37:26 zacheiss Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 5014,5020 ****
      struct iovec tiov[RX_MAXIOVECS];
      int tnio;
  #endif /* AFS_NT40_ENV */
!     int tlen;
      afs_int32 optSize;
      struct stat tstat;
  #ifdef	AFS_AIX_ENV
--- 5014,5020 ----
      struct iovec tiov[RX_MAXIOVECS];
      int tnio;
  #endif /* AFS_NT40_ENV */
!     afs_int32 tlen;
      afs_int32 optSize;
      struct stat tstat;
  #ifdef	AFS_AIX_ENV
***************
*** 5212,5223 ****
      afs_int32 optSize;			/* optimal transfer size */
      int DataLength;			/* size of inode */
      afs_int32 TruncatedLength;		/* size after ftruncate */
!     afs_int32 NewLength;			/* size after this store completes */
!     afs_int32 adjustSize;			/* bytes to call VAdjust... with */
      int linkCount;			/* link count on inode */
      int code;
      FdHandle_t *fdP;
!     struct in_addr logHostAddr;             /* host ip holder for inet_ntoa */
  
  #if FS_STATS_DETAILED
      /*
--- 5212,5223 ----
      afs_int32 optSize;			/* optimal transfer size */
      int DataLength;			/* size of inode */
      afs_int32 TruncatedLength;		/* size after ftruncate */
!     afs_uint32 NewLength;		/* size after this store completes */
!     afs_int32 adjustSize;		/* bytes to call VAdjust... with */
      int linkCount;			/* link count on inode */
      int code;
      FdHandle_t *fdP;
!     struct in_addr logHostAddr;		/* host ip holder for inet_ntoa */
  
  #if FS_STATS_DETAILED
      /*
***************
*** 5259,5265 ****
  	}
  	
  	if (linkCount != 1) {
! 	    int size;
  	    ViceLog(25, ("StoreData_RXStyle : inode %s has more than onelink\n",
  			 PrintInode(NULL, VN_GET_INO(targetptr))));
  	    /* other volumes share this data, better copy it first */
--- 5259,5265 ----
  	}
  	
  	if (linkCount != 1) {
! 	    afs_uint32 size;
  	    ViceLog(25, ("StoreData_RXStyle : inode %s has more than onelink\n",
  			 PrintInode(NULL, VN_GET_INO(targetptr))));
  	    /* other volumes share this data, better copy it first */
***************
*** 5843,5849 ****
  #endif /* FS_STATS_DETAILED */
  
  {
!     int	newlength;	    /* Holds new directory length */
      int errorCode;
  #if FS_STATS_DETAILED
      Date currDate;		/*Current date*/
--- 5843,5849 ----
  #endif /* FS_STATS_DETAILED */
  
  {
!     afs_uint32 newlength;	/* Holds new directory length */
      int errorCode;
  #if FS_STATS_DETAILED
      Date currDate;		/*Current date*/
***************
*** 6606,6612 ****
  		    ViceLog(0,("CopyOnWrite failed: volume %u in partition %s  (tried reading %u, read %u, wrote %u, errno %u) volume needs salvage\n",
  			       V_id(volptr), volptr->partition->name, length,
  			       rdlen, wrlen, errno));
! 		    assert(0);
                      /* Decrement this inode so salvager doesn't find it. */
  		    FDH_REALLYCLOSE(newFdP);
  		    IH_RELEASE(newH);
--- 6606,6616 ----
  		    ViceLog(0,("CopyOnWrite failed: volume %u in partition %s  (tried reading %u, read %u, wrote %u, errno %u) volume needs salvage\n",
  			       V_id(volptr), volptr->partition->name, length,
  			       rdlen, wrlen, errno));
! #ifdef FAST_RESTART /* if running in no-salvage, don't core the server */
! 		    ViceLog(0,("CopyOnWrite failed: taking volume offline\n"));
! #else /* Avoid further corruption and try to get a core. */
! 		    assert(0); 
! #endif
                      /* Decrement this inode so salvager doesn't find it. */
  		    FDH_REALLYCLOSE(newFdP);
  		    IH_RELEASE(newH);
Index: openafs/src/viced/callback.c
diff -c openafs/src/viced/callback.c:1.6.2.3 openafs/src/viced/callback.c:1.6.2.5
*** openafs/src/viced/callback.c:1.6.2.3	Wed Aug 21 17:01:55 2002
--- openafs/src/viced/callback.c	Thu Nov 14 23:07:58 2002
***************
*** 82,88 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/viced/callback.c,v 1.6.2.3 2002/08/21 21:01:55 shadow Exp $");
  
  #include <stdio.h> 
  #include <stdlib.h>      /* for malloc() */
--- 82,88 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/viced/callback.c,v 1.6.2.5 2002/11/15 04:07:58 zacheiss Exp $");
  
  #include <stdio.h> 
  #include <stdlib.h>      /* for malloc() */
***************
*** 1791,1799 ****
  struct AFSCBFids*	afidp;
  {
  	int i,j;
! 	struct rx_connection*	conns[AFS_MAX_INTERFACE_ADDR];
  	struct rx_connection*   connSuccess = 0;
! 	afs_int32			addr[AFS_MAX_INTERFACE_ADDR];
  	static struct rx_securityClass *sc = 0;
  	static struct AFSCBs tc = {0,0};
  
--- 1791,1799 ----
  struct AFSCBFids*	afidp;
  {
  	int i,j;
! 	struct rx_connection**	conns;
  	struct rx_connection*   connSuccess = 0;
! 	afs_int32		*addr;
  	static struct rx_securityClass *sc = 0;
  	static struct AFSCBs tc = {0,0};
  
***************
*** 1810,1815 ****
--- 1810,1819 ----
  	if ( !sc )
  	    sc = (struct rx_securityClass *) rxnull_NewClientSecurityObject();
  
+ 	i = host->interface->numberOfInterfaces;
+ 	addr = malloc(i * sizeof(afs_int32));
+ 	conns = malloc(i * sizeof(struct rx_connection *));
+ 
  	/* initialize alternate rx connections */
  	for ( i=0,j=0; i < host->interface->numberOfInterfaces; i++)
  	{
***************
*** 1856,1861 ****
--- 1860,1868 ----
  		if ( conns[i] != connSuccess )
  			rx_DestroyConnection(conns[i] );
  
+ 	free(addr);
+ 	free(conns);
+ 
  	if ( connSuccess ) return 0;	/* success */
  		else return 1;		/* failure */
  }
***************
*** 1870,1878 ****
  struct host*		host;
  {
  	int i,j;
! 	struct rx_connection*	conns[AFS_MAX_INTERFACE_ADDR];
  	struct rx_connection*   connSuccess = 0;
! 	afs_int32			addr[AFS_MAX_INTERFACE_ADDR];
  	static struct rx_securityClass *sc = 0;
  
  	/* nothing more can be done */
--- 1877,1885 ----
  struct host*		host;
  {
  	int i,j;
! 	struct rx_connection**	conns;
  	struct rx_connection*   connSuccess = 0;
! 	afs_int32		*addr;
  	static struct rx_securityClass *sc = 0;
  
  	/* nothing more can be done */
***************
*** 1888,1893 ****
--- 1895,1904 ----
  	if ( !sc )
  	    sc = (struct rx_securityClass *) rxnull_NewClientSecurityObject();
  
+ 	i = host->interface->numberOfInterfaces;
+ 	addr = malloc(i * sizeof(afs_int32));
+ 	conns = malloc(i * sizeof(struct rx_connection *));
+ 
  	/* initialize alternate rx connections */
  	for ( i=0,j=0; i < host->interface->numberOfInterfaces; i++)
  	{
***************
*** 1933,1938 ****
--- 1944,1952 ----
  	for ( i=0; i < j; i++)
  		if ( conns[i] != connSuccess )
  			rx_DestroyConnection(conns[i] );
+ 
+ 	free(addr);
+ 	free(conns);
  
  	if ( connSuccess ) return 0;	/* success */
  		else return 1;		/* failure */
Index: openafs/src/viced/host.c
diff -c openafs/src/viced/host.c:1.7.2.7 openafs/src/viced/host.c:1.7.2.8
*** openafs/src/viced/host.c:1.7.2.7	Wed Aug 21 17:01:55 2002
--- openafs/src/viced/host.c	Thu Nov 14 16:56:57 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/viced/host.c,v 1.7.2.7 2002/08/21 21:01:55 shadow Exp $");
  
  #include <stdio.h>
  #include <errno.h>
--- 10,16 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/viced/host.c,v 1.7.2.8 2002/11/14 21:56:57 zacheiss Exp $");
  
  #include <stdio.h>
  #include <errno.h>
***************
*** 956,962 ****
      int held;
      struct interfaceAddr interf;
      int interfValid = 0;
-     afs_int32	buffer[AFS_MAX_INTERFACE_ADDR];
      struct Identity *identP = NULL;
      afs_int32 haddr;
      afs_int32 hport;
--- 956,961 ----
***************
*** 1934,1940 ****
  
  {
      register struct client *client;
-     struct interfaceAddr interf;
      int code;
  
      /* Host is held by h_Enumerate */
--- 1933,1938 ----
***************
*** 2070,2080 ****
  		host->host, interf->numberOfInterfaces));
  
  	number = interf->numberOfInterfaces;
! 	myPort   = host->port;
! 	myHost   = host->host; /* current interface address */
  
  	/* validation checks */
! 	if ( number < 0 )
          {
  		ViceLog(0,("Number of alternate addresses returned is %d\n",
  			 number));
--- 2068,2078 ----
  		host->host, interf->numberOfInterfaces));
  
  	number = interf->numberOfInterfaces;
! 	myPort = host->port;
! 	myHost = host->host; /* current interface address */
  
  	/* validation checks */
! 	if ( number < 0 || number > AFS_MAX_INTERFACE_ADDR )
          {
  		ViceLog(0,("Number of alternate addresses returned is %d\n",
  			 number));
Index: openafs/src/vol/fssync.c
diff -c openafs/src/vol/fssync.c:1.5.2.2 openafs/src/vol/fssync.c:1.5.2.4
*** openafs/src/vol/fssync.c:1.5.2.2	Tue Sep 10 18:34:05 2002
--- openafs/src/vol/fssync.c	Fri Nov 15 08:17:21 2002
***************
*** 38,44 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/vol/fssync.c,v 1.5.2.2 2002/09/10 22:34:05 zacheiss Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
--- 38,44 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/vol/fssync.c,v 1.5.2.4 2002/11/15 13:17:21 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
Index: openafs/src/vol/ihandle.c
diff -c openafs/src/vol/ihandle.c:1.4.4.3 openafs/src/vol/ihandle.c:1.4.4.4
*** openafs/src/vol/ihandle.c:1.4.4.3	Fri Jun  7 20:15:35 2002
--- openafs/src/vol/ihandle.c	Thu Nov 14 15:41:44 2002
***************
*** 14,20 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/vol/ihandle.c,v 1.4.4.3 2002/06/08 00:15:35 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
--- 14,20 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/vol/ihandle.c,v 1.4.4.4 2002/11/14 20:41:44 zacheiss Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
***************
*** 256,261 ****
--- 256,264 ----
      FdHandle_t *fdP;
      FD_t fd;
      FD_t closeFd;
+ 
+     if (!ihP) /* XXX should log here in the fileserver */
+ 	return NULL;
  
      IH_LOCK
  
Index: openafs/src/vol/volume.c
diff -c openafs/src/vol/volume.c:1.12.2.3 openafs/src/vol/volume.c:1.12.2.4
*** openafs/src/vol/volume.c:1.12.2.3	Wed Aug 21 15:25:08 2002
--- openafs/src/vol/volume.c	Thu Nov 14 15:41:44 2002
***************
*** 19,25 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/vol/volume.c,v 1.12.2.3 2002/08/21 19:25:08 shadow Exp $");
  
  #include <rx/xdr.h>
  #include <afs/afsint.h>
--- 19,25 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/vol/volume.c,v 1.12.2.4 2002/11/14 20:41:44 zacheiss Exp $");
  
  #include <rx/xdr.h>
  #include <afs/afsint.h>
***************
*** 388,393 ****
--- 388,398 ----
      FdHandle_t *fdP;
  
      *ec = 0;
+     if (h == NULL) {
+ 	*ec = VSALVAGE;
+ 	return;
+     }
+ 
      fdP = IH_OPEN(h);
      if (fdP == NULL) {
  	*ec = VSALVAGE;
Index: openafs/src/volser/vos.c
diff -c openafs/src/volser/vos.c:1.8.2.5 openafs/src/volser/vos.c:1.8.2.6
*** openafs/src/volser/vos.c:1.8.2.5	Mon Aug  5 18:08:02 2002
--- openafs/src/volser/vos.c	Thu Nov 14 16:40:43 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/volser/vos.c,v 1.8.2.5 2002/08/05 22:08:02 shadow Exp $");
  
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
--- 10,16 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/volser/vos.c,v 1.8.2.6 2002/11/14 21:40:43 zacheiss Exp $");
  
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
***************
*** 2076,2082 ****
  	else {                    /* volume exists - do we do a full incremental or abort */
  	    int Oserver, Opart, Otype, vol_elsewhere = 0;
  	    struct nvldbentry Oentry;
! 	    char   c, dc;
  
  	    if(avolid == 0) {
  		avolid = entry.volumeId[voltype];
--- 2076,2082 ----
  	else {                    /* volume exists - do we do a full incremental or abort */
  	    int Oserver, Opart, Otype, vol_elsewhere = 0;
  	    struct nvldbentry Oentry;
! 	    int   c, dc;
  
  	    if(avolid == 0) {
  		avolid = entry.volumeId[voltype];
Index: openafs/src/volser/vsprocs.c
diff -c openafs/src/volser/vsprocs.c:1.6.2.5 openafs/src/volser/vsprocs.c:1.6.2.6
*** openafs/src/volser/vsprocs.c:1.6.2.5	Thu Aug 22 13:54:46 2002
--- openafs/src/volser/vsprocs.c	Thu Nov 14 16:40:43 2002
***************
*** 10,16 ****
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/volser/vsprocs.c,v 1.6.2.5 2002/08/22 17:54:46 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
--- 10,16 ----
  #include <afsconfig.h>
  #include <afs/param.h>
  
! RCSID("$Header: /data/cvs/openafs/src/volser/vsprocs.c,v 1.6.2.6 2002/11/14 21:40:43 zacheiss Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
***************
*** 97,103 ****
  yesprompt(str)
  char *str;
  {
!     char response, c;
      int code;
  
      fprintf(STDERR, "Do you want to %s? [yn](n): ", str);
--- 97,103 ----
  yesprompt(str)
  char *str;
  {
!     int response, c;
      int code;
  
      fprintf(STDERR, "Do you want to %s? [yn](n): ", str);
