Index: openafs/src/NTMake9x diff -c openafs/src/NTMake9x:1.7 openafs/src/NTMake9x:removed *** openafs/src/NTMake9x:1.7 Tue Jan 8 15:44:31 2002 --- openafs/src/NTMake9x Mon Jan 15 23:45:27 2007 *************** *** 1,332 **** - # 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 - - # Top level nmake NTMakefile driver for building AFS. - # - # This file simply imposes a reasonable total ordering on the set of - # directories to build; this ordering is of course more strict than the - # partial ordering established by the actual directory dependencies. - # - # When porting a new directory, simply add the directory into the - # dependence chain at the earliest point possible, updating its successor - # appropriately; if the new directory is the last in the chain, then - # update the 'finale' dependency to be the new directory. - - - CD = cd - NTMAKE = nmake /nologo /f ntmakefile install9x - NTMAKELANG = nmake /nologo /f ntmakefile en_install - NTMAKE_HEADERS = nmake /nologo /f ntmakefile install_headers - NTMAKE_LIBUTILS = nmake /nologo /f ntmakefile install_libutils - NTMAKE_OBJS = nmake /nologo /f ntmakefile install_objs - MKDIR = mkdir - OBJ = src - - # Standard install directory. - !IFDEF AFSDEV_DESTDIR - DESTDIR = $(AFSDEV_DESTDIR) - !ELSE - DESTDIR = $(AFSROOT)\DEST - !ENDIF - - - start: - ! IF (!EXIST(src)) - ! ERROR Execute nmake from directory above src, e.g., afs\3.5. - ! ENDIF - ! IF (!EXIST($(DESTDIR))) - $(MKDIR) $(DESTDIR) - ! ENDIF - - config: start - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - procmgmt_headers: config - echo ***** $@ - $(CD) $(OBJ)\procmgmt - $(NTMAKE_HEADERS) - $(CD) ..\.. - - afsreg_headers: config - echo ***** $@ - $(CD) $(OBJ)\WINNT\afsreg - $(NTMAKE_HEADERS) - $(CD) ..\..\.. - - util: procmgmt_headers afsreg_headers - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - comerr: util - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - cmd: comerr - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - afsreg: cmd - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - eventlog: afsreg - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - lwp: eventlog - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - rxgen: lwp - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - des: rxgen - echo ***** $@ - ! IF (EXIST($(OBJ)\des\NTMakefile)) - $(CD) $(OBJ)\des - $(NTMAKE) - $(CD) ..\.. - ! ELSE - $(CD) $(OBJ)\des_stub - $(NTMAKE) - $(CD) ..\.. - ! ENDIF - - rx: des - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - rxstat: rx - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - rxkad: rxstat - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - pthread: rxkad - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - procmgmt: pthread - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - fsint: procmgmt - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - audit: fsint - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - osi_headers: audit - echo ***** $@ - $(CD) $(OBJ)\WINNT\client_osi - $(NTMAKE_HEADERS) - $(CD) ..\..\.. - - libacl_headers: osi_headers - echo ***** $@ - $(CD) $(OBJ)\libacl - $(NTMAKE_HEADERS) - $(CD) ..\.. - - cm_headers: libacl_headers - echo ***** $@ - $(CD) $(OBJ)\WINNT\afsd - $(NTMAKE_HEADERS) - $(CD) ..\..\.. - - sys: cm_headers - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - afsdobjs: sys - echo ***** $@ - $(CD) $(OBJ)\WINNT\afsd - $(NTMAKE_OBJS) - $(CD) ..\..\.. - - auth: afsdobjs - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - ubik: auth - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - ptserver: ubik - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE_LIBUTILS) - $(CD) ..\.. - - libacl: ptserver - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - kauth: libacl - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - vlserver: kauth - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE_LIBUTILS) - $(CD) ..\.. - - usd: vlserver - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - libafsrpc: usd - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - libafsauthent: libafsrpc - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - libadmin: libafsauthent - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - - client_talocale: libadmin - echo ***** $@ - $(CD) $(OBJ)\WINNT\talocale - $(NTMAKE) - $(CD) ..\..\.. - - client_osi: client_talocale - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - afsd: client_osi - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE_LIBUTILS) - $(CD) ..\..\.. - - client_cpa: afsd - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - client_config: client_cpa - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - client_exp: client_config - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - - #Leave last echo in - it helps the build reconize the last $(CD) - win9xpanel : - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - echo ***** End of Build - - install: start client_exp win9xpanel - - install9x: install - - # InstallShield dependencies - - #Leave last echo in - it helps the build reconize the last $(CD) - Win9x:: - echo ***** afs_setup_utils - $(CD) $(OBJ)\WINNT\afs_setup_utils - nmake -f ntmakefile install - $(CD) ..\..\.. - echo ***** Win9x - $(CD) $(OBJ)\WINNT\install\Win9x - nmake /nologo /f NTMakefile isinstall - $(CD) ..\..\..\.. - echo **** End of Install Scripts - - media: Win9x - - # Clean target for obj tree - # Fake the version copy so clean will go through the complete cycle with undefines - clean: start - if not exist .\src\config\NTMakefile.version copy .\src\config\NTMakefile.version-NOCML .\src\config\NTMakefile.version - nmake /nologo /f ntmake9x "NTMAKE = nmake /nologo /f ntmakefile clean" "NTMAKE_HEADERS = nmake /nologo /f ntmakefile clean" "NTMAKE_LIBUTILS = nmake /nologo /f ntmakefile clean" "NTMAKE_OBJS = nmake /nologo /f ntmakefile clean" install - $(CD) $(OBJ)\WINNT\install\Win9x - nmake /nologo /f NTMakefile clean - $(CD) ..\..\..\.. - $(DESTDIR)\BIN\rmbat $(DESTDIR)\include\*.* $(DESTDIR)\include\afs\*.* $(DESTDIR)\include\WINNT\*.* $(DESTDIR)\include\rx\*.* - $(DESTDIR)\BIN\rmbat $(DESTDIR)\LIB\*.LIB $(DESTDIR)\LIB\*.DLL $(DESTDIR)\LIB\AFS\*.LIB - $(DESTDIR)\BIN\rmbat $(DESTDIR)\root.client\usr\vice\etc\*.* - $(CD) $(OBJ)\config - nmake /nologo /f ntmakefile clean_version - $(CD) ..\.. - echo **** End of Clean - - # Language-only build target - lang: - nmake /nologo /f ntmakefile "NTMAKE = nmake /nologo /f ntmakefile lang" "NTMAKE_HEADERS = nmake /nologo /f ntmakefile lang" install --- 0 ---- Index: openafs/src/TechNotes-WIN9X diff -c openafs/src/TechNotes-WIN9X:1.1 openafs/src/TechNotes-WIN9X:removed *** openafs/src/TechNotes-WIN9X:1.1 Mon Apr 30 02:47:14 2001 --- openafs/src/TechNotes-WIN9X Mon Jan 15 23:45:27 2007 *************** *** 1,154 **** - Win9x AFS Client: Technical Notes - --------------------------------- - - This file gives a technical overview of the Win9x AFS client and describes - the main differences from the NT client. - - - Overview - -------- - - The Windows 9x client is based on the Windows NT/2000 client. Like the - NT client, it exports AFS through an SMB interface. Programs access AFS - files by mounting AFS submounts as SMB shares and using the built-in - Windows SMB client to communicate with the AFS client. The AFS client - acts as an SMB server. It runs entirely at user level. - - DOS box implementation and VXD's - -------------------------------- - - The main program of the Win9x client, afsd.exe, is implemented as a - 32-bit DOS program. It is compiled using the DJGPP compiler and runs in - a Windows 9x DOS virtual machine. This approach was necessary to avoid - a well-known deadlock problem in Windows 9x when the kernel calls up - to a user-level Win32 daemon: the original requesting program grabs the - Win16Mutex before entering the kernel. The request is then passed up to - the daemon, who attempts to service it using network or file I/O calls. - These calls also attempt to obtain the Win16Mutex, which is still being - held by the original requester, so there is a deadlock. - - To avoid this problem, the daemon runs in a DOS box. I/O calls from - a DOS program do not attempt to obtain the Win16Mutex, so the deadlock - is avoided. This approach was discovered by the Coda team at Carnegie - Mellon University and used to implement a Win9x version of their client. - The Win9x AFS client uses the same approach. It also uses the Coda team's - SOCK.VXD which was written to provide network functions to a DOS program. - Sockets functions which call SOCK.VXD were added to the DJGPP library. - - For more information about the Coda team's approach to this problem, see - their paper from Usenix 1999: - http://www.cs.cmu.edu/afs/cs/project/coda/Web/docdir/freenix99.pdf - - Note that the AFS client also requires the Coda team's MMAP.VXD. We are - not actually calling this VXD, but afsd crashes if it is built without - it (i.e., by building with dos-gcc -bw95 instead of -bmmap). Solutions to - this problem welcomed.. - - Netbios functions - ----------------- - - The Windows AFS clients communicate with user applications using the - SMB protocol, as described above. SMB communication is done using the - Netbios interface. In Win32, there is a built-in function Netbios() - which accomplishes this. In a DOS program, however, this function is - unavailable. However, Netbios functionality is available in the BIOS - by calling interrupt 0x5c. The NCB (Netbios Control Block) and data - buffer must be in conventional DOS memory, i.e., below 1 MB. This memory - can only be accessed in DJGPP by using the DOS memory access functions: - dosmemget(), dosmemput(), _farpeekX() and _farpokeX(). The Win9x client - uses a separately-allocated DOS memory buffer and copies data to and from - DOS memory for network communication. - - Functions were also added to LWP's iomgr.c to check for the completion - of Netbios requests. The IOMGR now checks for NCB completion in addition - to checking for timer expiration, signal delivery, and performing select() - on file descriptors. - - See the new files: netbios95.c, dosutils95.c, and the various changes - (marked by "#ifdef DJGPP") to smb.c in WINNT/afsd. Also see lwp/iomgr.c. - - Thread functions - ---------------- - - Unlike the NT client which uses Win32 thread and locking functions, - the Win9x client uses the LWP package from the AFS source distribution. - An interface layer was added to allow NT and Win9x to make the same calls. - For example, thrd_Create() is now used to create a thread. In NT, this - is just a macro to the Win32 function CreateThread(). In Win9x, it is a - function which calls the LWP function LWP_CreateProcess(). See the new - files osithrd95.c, osithrd95.h, and osithrdnt.h in WINNT/client_osi. - - Configuration parameters - ------------------------ - - In DJGPP, it is not feasible to access the system registry, which is - where the NT client stores its configuration info. For the Win9x client, - the Unix approach is followed instead: the local cell is in a file called - "ThisCell", cache configuration is in a file called "cache.info", and - the cell database is stored in "CellServDB" instead of "afsdcell.ini". - Many parameters are passed via the command line to afsd.exe and are - processed just like the Unix clients. - - See the new files afsd_init95.c and afsd95.c in WINNT/afsd. - - Authentication - -------------- - - In the functions SetToken() and GetToken(), the NT client sends and - receives the session key using a separate RPC which should use encryption, - rather than including the session key in the pioctl packet. The Win9x - version avoids this RPC and puts the session key back into the pioctl. - This should not be a security issue on Win9x since it is a single-user - machine. (The pioctl packet will not be visible externally.) See files - WINNT/afsd/cm_ioctl.c and auth/ktc_nt.c. - - Persistent (disk) caching - ------------------------- - - Disk caching support was added for the 9x client. This has barely been - tested and is still very experimental! In addition, there are numerous - performance issues. It relies on the fact that LWP is a non-preemptive - threads package, so no locking is done to protect shared data structures. - In addition, it uses synchronous I/O to read and write disk files. Since - LWP is a user-level threads package, any calls to normal I/O system calls - like read() or write() will block the entire process. One better approach - would be to add support for local disk file descriptors to the select() - call used by IOMGR, and then to use IOMGR_Select to enqueue I/O requests - to the disk. Currently, the select() function supports only sockets. - - It should be fairly easy to adapt this code for the NT client. See the - implementation in WINNT/afsd/cm_diskcache95.c. To enable this code, - define DISKCACHE95 in WINNT/afsd/Makefile.djgpp. - - Utility programs - ---------------- - - The utility programs, such as klog.exe and fs.exe, are Win32 programs and - are built using the Microsoft compiler. Changes to the code for these - files are marked by "#ifdef AFS_WIN95_ENV". - - GUI interface - ------------- - - The Win9x client does not use the NT configuration GUI programs in - client_creds and client_cpa (Control Panel Applet.) It uses a separate - GUI program called WinAfsLoad.exe in WINNT/win9xpanel. This program can - start afsd.exe and keep track of submounts and token expiration. - - The Explorer shell extension, which allows right clicking on a file - in Windows Explorer to get an AFS submenu, is supported in Win9x. - See WINNT/client_exp. - - Integrated logon - ---------------- - - Integrated logon is not supported in the 9x client. - - Known issues - ------------ - - 1) The Microsoft linker LINK386.exe causes a deadlock when attempting to - create an executable on an AFS filesystem. Somehow, the linker appears - to be preempting the entire machine so afsd.exe cannot run to service - requests. Solutions to this problem eagerly sought! (This problem does - not seem to occur with the Win9x Coda client.) --- 0 ---- Index: openafs/src/WINNT/afsd/afsd_init.c diff -c openafs/src/WINNT/afsd/afsd_init.c:1.79.2.8 openafs/src/WINNT/afsd/afsd_init.c:1.79.2.9 *** openafs/src/WINNT/afsd/afsd_init.c:1.79.2.8 Sat Oct 21 16:47:48 2006 --- openafs/src/WINNT/afsd/afsd_init.c Fri Jan 5 12:14:52 2007 *************** *** 39,44 **** --- 39,45 ---- extern afs_int32 cryptall; extern int cm_enableServerLocks; + extern int cm_deleteReadOnly; osi_log_t *afsd_logp; *************** *** 1069,1074 **** --- 1070,1084 ---- afsi_log("EnableServerLocks: server requested"); break; } + + dummyLen = sizeof(DWORD); + code = RegQueryValueEx(parmKey, "DeleteReadOnly", NULL, NULL, + (BYTE *) &dwValue, &dummyLen); + if (code == ERROR_SUCCESS) { + cm_deleteReadOnly = (unsigned short) dwValue; + } + afsi_log("CM DeleteReadOnly is %u", cm_deleteReadOnly); + RegCloseKey (parmKey); /* Call lanahelper to get Netbios name, lan adapter number and gateway flag */ Index: openafs/src/WINNT/afsd/cm.h diff -c openafs/src/WINNT/afsd/cm.h:1.17.2.1 openafs/src/WINNT/afsd/cm.h:1.17.2.2 *** openafs/src/WINNT/afsd/cm.h:1.17.2.1 Sat Jun 24 16:41:54 2006 --- openafs/src/WINNT/afsd/cm.h Mon Jan 15 14:52:19 2007 *************** *** 299,302 **** --- 299,303 ---- #define CM_ERROR_ALLDOWN (CM_ERROR_BASE+49) #define CM_ERROR_TOOFEWBUFS (CM_ERROR_BASE+50) #define CM_ERROR_TOOMANYBUFS (CM_ERROR_BASE+51) + #define CM_ERROR_BAD_LEVEL (CM_ERROR_BASE+52) #endif /* __CM_H_ENV__ */ Index: openafs/src/WINNT/afsd/cm_access.c diff -c openafs/src/WINNT/afsd/cm_access.c:1.7.2.7 openafs/src/WINNT/afsd/cm_access.c:1.7.2.9 *** openafs/src/WINNT/afsd/cm_access.c:1.7.2.7 Fri Oct 6 01:15:22 2006 --- openafs/src/WINNT/afsd/cm_access.c Fri Jan 5 12:14:52 2007 *************** *** 24,29 **** --- 24,31 ---- #include "afsd.h" + int cm_deleteReadOnly = 0; + /* called with scp write-locked, check to see if we have the ACL info we need * and can get it w/o blocking for any locks. * *************** *** 93,100 **** /* check mode bits */ if (!(scp->unixModeBits & 0400)) *outRightsp &= ~PRSFS_READ; ! if (!(scp->unixModeBits & 0200)) *outRightsp &= ~PRSFS_WRITE; code = 1; /* fall through */ --- 95,108 ---- /* check mode bits */ if (!(scp->unixModeBits & 0400)) *outRightsp &= ~PRSFS_READ; ! if (!(scp->unixModeBits & 0200) && !(rights == (PRSFS_WRITE | PRSFS_LOCK))) *outRightsp &= ~PRSFS_WRITE; + if (!(scp->unixModeBits & 0200) && !cm_deleteReadOnly) + *outRightsp &= ~PRSFS_DELETE; + + /* if the user can obtain a write-lock, read-locks are implied */ + if (*outRightsp & PRSFS_WRITE) + *outRightsp |= PRSFS_LOCK; code = 1; /* fall through */ Index: openafs/src/WINNT/afsd/cm_vnodeops.c diff -c openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.19 openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.21 *** openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.19 Sun Dec 17 16:07:23 2006 --- openafs/src/WINNT/afsd/cm_vnodeops.c Mon Jan 15 14:52:19 2007 *************** *** 187,193 **** int vnode = ntohl(pfid->vnode); char *lastDot; int validExtension = 0; ! char tc, *temp, *name; /* Unparse the file's vnode number to get a "uniquifier" */ do { --- 187,194 ---- int vnode = ntohl(pfid->vnode); char *lastDot; int validExtension = 0; ! char tc, *temp; ! const char *name; /* Unparse the file's vnode number to get a "uniquifier" */ do { *************** *** 258,265 **** long code; rights = 0; ! if (openMode != 1) rights |= PRSFS_READ; ! if (openMode == 1 || openMode == 2 || trunc) rights |= PRSFS_WRITE; lock_ObtainMutex(&scp->mx); --- 259,268 ---- long code; rights = 0; ! if (openMode != 1) ! rights |= PRSFS_READ; ! if (openMode == 1 || openMode == 2 || trunc) ! rights |= PRSFS_WRITE; lock_ObtainMutex(&scp->mx); *************** *** 348,354 **** rights = 0; if (desiredAccess & AFS_ACCESS_READ) ! rights |= PRSFS_READ; if ((desiredAccess & AFS_ACCESS_WRITE) || createDisp == 4) --- 351,357 ---- rights = 0; if (desiredAccess & AFS_ACCESS_READ) ! rights |= (scp->fileType == CM_SCACHETYPE_DIRECTORY ? PRSFS_LOOKUP : PRSFS_READ); if ((desiredAccess & AFS_ACCESS_WRITE) || createDisp == 4) *************** *** 3572,3578 **** if (lock_type == LockRead) rights |= PRSFS_LOCK; else if (lock_type == LockWrite) ! rights |= PRSFS_WRITE; else { /* hmmkay */ osi_assert(FALSE); --- 3575,3581 ---- if (lock_type == LockRead) rights |= PRSFS_LOCK; else if (lock_type == LockWrite) ! rights |= PRSFS_WRITE | PRSFS_LOCK; else { /* hmmkay */ osi_assert(FALSE); Index: openafs/src/WINNT/afsd/smb.c diff -c openafs/src/WINNT/afsd/smb.c:1.118.2.28 openafs/src/WINNT/afsd/smb.c:1.118.2.30 *** openafs/src/WINNT/afsd/smb.c:1.118.2.28 Sun Dec 17 16:07:24 2006 --- openafs/src/WINNT/afsd/smb.c Mon Jan 15 14:52:19 2007 *************** *** 1570,1576 **** lock_ObtainMutex(&scp->mx); scp->flags &= ~CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(afsd_logp,"smb_ReleaseFID fidp 0x%p scp 0x%p", fidp, scp); fidp->scp = NULL; } userp = fidp->userp; --- 1570,1576 ---- lock_ObtainMutex(&scp->mx); scp->flags &= ~CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(smb_logp,"smb_ReleaseFID fidp 0x%p scp 0x%p", fidp, scp); fidp->scp = NULL; } userp = fidp->userp; *************** *** 2006,2012 **** { lock_ObtainWrite(&smb_globalLock); lock_ObtainMutex(&dsp->mx); ! osi_Log3(afsd_logp,"smb_DeleteDirSearch cookie %d dsp 0x%p scp 0x%p", dsp->cookie, dsp, dsp->scp); dsp->flags |= SMB_DIRSEARCH_DELETE; if (dsp->scp != NULL) { --- 2006,2012 ---- { lock_ObtainWrite(&smb_globalLock); lock_ObtainMutex(&dsp->mx); ! osi_Log3(smb_logp,"smb_DeleteDirSearch cookie %d dsp 0x%p scp 0x%p", dsp->cookie, dsp, dsp->scp); dsp->flags |= SMB_DIRSEARCH_DELETE; if (dsp->scp != NULL) { *************** *** 2036,2042 **** lock_ReleaseMutex(&dsp->mx); lock_FinalizeMutex(&dsp->mx); scp = dsp->scp; ! osi_Log3(afsd_logp,"smb_ReleaseDirSearch cookie %d dsp 0x%p scp 0x%p", dsp->cookie, dsp, scp); free(dsp); } else { --- 2036,2042 ---- lock_ReleaseMutex(&dsp->mx); lock_FinalizeMutex(&dsp->mx); scp = dsp->scp; ! osi_Log3(smb_logp,"smb_ReleaseDirSearch cookie %d dsp 0x%p scp 0x%p", dsp->cookie, dsp, scp); free(dsp); } else { *************** *** 2171,2177 **** if (!smb_lastDirSearchp) smb_lastDirSearchp = (smb_dirSearch_t *) &dsp->q; ! osi_Log2(afsd_logp,"smb_NewDirSearch cookie %d dsp 0x%p", dsp->cookie, dsp); break; } --- 2171,2177 ---- if (!smb_lastDirSearchp) smb_lastDirSearchp = (smb_dirSearch_t *) &dsp->q; ! osi_Log2(smb_logp,"smb_NewDirSearch cookie %d dsp 0x%p", dsp->cookie, dsp); break; } *************** *** 2844,2849 **** --- 2844,2852 ---- #endif else if (code == RXKADUNKNOWNKEY) { NTStatus = 0xC0000322L; /* Bad Kerberos key */ + } + else if (code == CM_ERROR_BAD_LEVEL) { + NTStatus = 0xC0000148L; /* Invalid Level */ } else { NTStatus = 0xC0982001L; /* SMB non-specific error */ } *************** *** 3662,3668 **** wlRequest); scp = wlRequest->scp; ! osi_Log2(afsd_logp,"smb_WaitingLocksDaemon wlRequest 0x%p scp 0x%p", wlRequest, scp); cm_InitReq(&req); --- 3665,3671 ---- wlRequest); scp = wlRequest->scp; ! osi_Log2(smb_logp,"smb_WaitingLocksDaemon wlRequest 0x%p scp 0x%p", wlRequest, scp); cm_InitReq(&req); *************** *** 4199,4205 **** lock_ObtainMutex(&dsp->mx); if (dsp->scp) { scp = dsp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveCoreSearchDir (1) dsp 0x%p scp 0x%p", dsp, scp); cm_HoldSCache(scp); code = 0; } else { --- 4202,4208 ---- lock_ObtainMutex(&dsp->mx); if (dsp->scp) { scp = dsp->scp; ! osi_Log2(smb_logp,"smb_ReceiveCoreSearchDir (1) dsp 0x%p scp 0x%p", dsp, scp); cm_HoldSCache(scp); code = 0; } else { *************** *** 4231,4237 **** #endif /* DFS_SUPPORT */ dsp->scp = scp; ! osi_Log2(afsd_logp,"smb_ReceiveCoreSearchDir (2) dsp 0x%p scp 0x%p", dsp, scp); /* we need one hold for the entry we just stored into, * and one for our own processing. When we're done with this * function, we'll drop the one for our own processing. --- 4234,4240 ---- #endif /* DFS_SUPPORT */ dsp->scp = scp; ! osi_Log2(smb_logp,"smb_ReceiveCoreSearchDir (2) dsp 0x%p scp 0x%p", dsp, scp); /* we need one hold for the entry we just stored into, * and one for our own processing. When we're done with this * function, we'll drop the one for our own processing. *************** *** 5097,5103 **** /* save a pointer to the vnode */ fidp->scp = scp; ! osi_Log2(afsd_logp,"smb_ReceiveCoreOpen fidp 0x%p scp 0x%p", fidp, scp); lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); --- 5100,5106 ---- /* save a pointer to the vnode */ fidp->scp = scp; ! osi_Log2(smb_logp,"smb_ReceiveCoreOpen fidp 0x%p scp 0x%p", fidp, scp); lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); *************** *** 5108,5118 **** lock_ObtainMutex(&fidp->mx); if ((share & 0xf) == 0) ! fidp->flags |= SMB_FID_OPENREAD; else if ((share & 0xf) == 1) fidp->flags |= SMB_FID_OPENWRITE; else ! fidp->flags |= (SMB_FID_OPENREAD | SMB_FID_OPENWRITE); lock_ReleaseMutex(&fidp->mx); lock_ObtainMutex(&scp->mx); --- 5111,5121 ---- lock_ObtainMutex(&fidp->mx); if ((share & 0xf) == 0) ! fidp->flags |= SMB_FID_OPENREAD_LISTDIR; else if ((share & 0xf) == 1) fidp->flags |= SMB_FID_OPENWRITE; else ! fidp->flags |= (SMB_FID_OPENREAD_LISTDIR | SMB_FID_OPENWRITE); lock_ReleaseMutex(&fidp->mx); lock_ObtainMutex(&scp->mx); *************** *** 5455,5461 **** code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp); if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) { osi_Log2(smb_logp, " lookup returns %ld for [%s]", code, ! osi_LogSaveString(afsd_logp, newLastNamep)); /* Check if the old and the new names differ only in case. If so return * success, else return CM_ERROR_EXISTS --- 5458,5464 ---- code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp); if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) { osi_Log2(smb_logp, " lookup returns %ld for [%s]", code, ! osi_LogSaveString(smb_logp, newLastNamep)); /* Check if the old and the new names differ only in case. If so return * success, else return CM_ERROR_EXISTS *************** *** 5644,5650 **** code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp); if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) { osi_Log2(smb_logp, " lookup returns %ld for [%s]", code, ! osi_LogSaveString(afsd_logp, newLastNamep)); /* if the existing link is to the same file, then we return success */ if (!code) { --- 5647,5653 ---- code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp); if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) { osi_Log2(smb_logp, " lookup returns %ld for [%s]", code, ! osi_LogSaveString(smb_logp, newLastNamep)); /* if the existing link is to the same file, then we return success */ if (!code) { *************** *** 7369,7381 **** lock_ObtainMutex(&fidp->mx); /* always create it open for read/write */ ! fidp->flags |= (SMB_FID_OPENREAD | SMB_FID_OPENWRITE); /* remember that the file was newly created */ if (created) fidp->flags |= SMB_FID_CREATED; ! osi_Log2(afsd_logp,"smb_ReceiveCoreCreate fidp 0x%p scp 0x%p", fidp, scp); /* save a pointer to the vnode */ fidp->scp = scp; --- 7372,7384 ---- lock_ObtainMutex(&fidp->mx); /* always create it open for read/write */ ! fidp->flags |= (SMB_FID_OPENREAD_LISTDIR | SMB_FID_OPENWRITE); /* remember that the file was newly created */ if (created) fidp->flags |= SMB_FID_CREATED; ! osi_Log2(smb_logp,"smb_ReceiveCoreCreate fidp 0x%p scp 0x%p", fidp, scp); /* save a pointer to the vnode */ fidp->scp = scp; *************** *** 9358,9364 **** lock_ObtainMutex(&scp->mx); scp->flags &= ~CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(afsd_logp,"smb_Shutdown fidp 0x%p scp 0x%p", fidp, scp); cm_ReleaseSCache(scp); } lock_ReleaseMutex(&fidp->mx); --- 9361,9367 ---- lock_ObtainMutex(&scp->mx); scp->flags &= ~CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(smb_logp,"smb_Shutdown fidp 0x%p scp 0x%p", fidp, scp); cm_ReleaseSCache(scp); } lock_ReleaseMutex(&fidp->mx); Index: openafs/src/WINNT/afsd/smb.h diff -c openafs/src/WINNT/afsd/smb.h:1.41.2.11 openafs/src/WINNT/afsd/smb.h:1.41.2.12 *** openafs/src/WINNT/afsd/smb.h:1.41.2.11 Mon Dec 11 23:01:26 2006 --- openafs/src/WINNT/afsd/smb.h Mon Jan 15 14:52:19 2007 *************** *** 383,389 **** afs_uint32 delete; /* ok to del: locked by smb_rctLock */ } smb_fid_t; ! #define SMB_FID_OPENREAD 1 /* open for reading */ #define SMB_FID_OPENWRITE 2 /* open for writing */ #define SMB_FID_CREATED 4 /* a new file */ #define SMB_FID_IOCTL 8 /* a file descriptor for the --- 383,389 ---- afs_uint32 delete; /* ok to del: locked by smb_rctLock */ } smb_fid_t; ! #define SMB_FID_OPENREAD_LISTDIR 1 /* open for reading / listing directory */ #define SMB_FID_OPENWRITE 2 /* open for writing */ #define SMB_FID_CREATED 4 /* a new file */ #define SMB_FID_IOCTL 8 /* a file descriptor for the Index: openafs/src/WINNT/afsd/smb3.c diff -c openafs/src/WINNT/afsd/smb3.c:1.95.2.26 openafs/src/WINNT/afsd/smb3.c:1.95.2.28 *** openafs/src/WINNT/afsd/smb3.c:1.95.2.26 Tue Dec 26 15:18:30 2006 --- openafs/src/WINNT/afsd/smb3.c Mon Jan 15 14:52:19 2007 *************** *** 2364,2370 **** cm_HoldUser(userp); lock_ObtainMutex(&fidp->mx); /* save a pointer to the vnode */ ! osi_Log2(afsd_logp,"smb_ReceiveTran2Open fidp 0x%p scp 0x%p", fidp, scp); fidp->scp = scp; lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; --- 2364,2370 ---- cm_HoldUser(userp); lock_ObtainMutex(&fidp->mx); /* save a pointer to the vnode */ ! osi_Log2(smb_logp,"smb_ReceiveTran2Open fidp 0x%p scp 0x%p", fidp, scp); fidp->scp = scp; lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; *************** *** 2375,2381 **** /* compute open mode */ if (openMode != 1) ! fidp->flags |= SMB_FID_OPENREAD; if (openMode == 1 || openMode == 2) fidp->flags |= SMB_FID_OPENWRITE; --- 2375,2381 ---- /* compute open mode */ if (openMode != 1) ! fidp->flags |= SMB_FID_OPENREAD_LISTDIR; if (openMode == 1 || openMode == 2) fidp->flags |= SMB_FID_OPENWRITE; *************** *** 2436,2442 **** fid = p->parmsp[1]; osi_Log2(smb_logp, "T2 QFSInfoFid InfoLevel 0x%x fid 0x%x - NOT_SUPPORTED", infolevel, fid); ! return CM_ERROR_BADOP; } long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) --- 2436,2442 ---- fid = p->parmsp[1]; osi_Log2(smb_logp, "T2 QFSInfoFid InfoLevel 0x%x fid 0x%x - NOT_SUPPORTED", infolevel, fid); ! return CM_ERROR_BAD_LEVEL; } long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) *************** *** 2675,2681 **** else { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP); return 0; } --- 2675,2681 ---- else { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BAD_LEVEL); return 0; } *************** *** 2957,2963 **** infoLevel != SMB_INFO_QUERY_ALL_EAS) { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_INVAL); return 0; } --- 2957,2963 ---- infoLevel != SMB_INFO_QUERY_ALL_EAS) { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BAD_LEVEL); return 0; } *************** *** 3190,3196 **** else { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP); smb_ReleaseFID(fidp); return 0; } --- 3190,3196 ---- else { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BAD_LEVEL); smb_ReleaseFID(fidp); return 0; } *************** *** 3214,3220 **** lock_ObtainMutex(&fidp->mx); delonclose = fidp->flags & SMB_FID_DELONCLOSE; scp = fidp->scp; ! osi_Log2(afsd_logp,"smb_ReleaseTran2QFileInfo fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); lock_ObtainMutex(&scp->mx); --- 3214,3220 ---- lock_ObtainMutex(&fidp->mx); delonclose = fidp->flags & SMB_FID_DELONCLOSE; scp = fidp->scp; ! osi_Log2(smb_logp,"smb_ReleaseTran2QFileInfo fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); lock_ObtainMutex(&scp->mx); *************** *** 3311,3317 **** if (infoLevel > SMB_SET_FILE_END_OF_FILE_INFO || infoLevel < SMB_SET_FILE_BASIC_INFO) { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BADOP); smb_ReleaseFID(fidp); return 0; } --- 3311,3317 ---- if (infoLevel > SMB_SET_FILE_END_OF_FILE_INFO || infoLevel < SMB_SET_FILE_BASIC_INFO) { osi_Log2(smb_logp, "Bad Tran2 op 0x%x infolevel 0x%x", p->opcode, infoLevel); ! smb_SendTran2Error(vcp, p, opx, CM_ERROR_BAD_LEVEL); smb_ReleaseFID(fidp); return 0; } *************** *** 3333,3339 **** } scp = fidp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveTran2SetFileInfo fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); --- 3333,3339 ---- } scp = fidp->scp; ! osi_Log2(smb_logp,"smb_ReceiveTran2SetFileInfo fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); *************** *** 4314,4320 **** return 0; } #endif /* DFS_SUPPORT */ ! osi_Log1(afsd_logp,"smb_ReceiveTran2SearchDir scp 0x%p", scp); lock_ObtainMutex(&scp->mx); if ((scp->flags & CM_SCACHEFLAG_BULKSTATTING) == 0 && LargeIntegerGreaterOrEqualToZero(scp->bulkStatProgress)) { --- 4314,4320 ---- return 0; } #endif /* DFS_SUPPORT */ ! osi_Log1(smb_logp,"smb_ReceiveTran2SearchDir scp 0x%p", scp); lock_ObtainMutex(&scp->mx); if ((scp->flags & CM_SCACHEFLAG_BULKSTATTING) == 0 && LargeIntegerGreaterOrEqualToZero(scp->bulkStatProgress)) { *************** *** 4323,4334 **** lock_ReleaseMutex(&scp->mx); /* now do a single case sensitive lookup for the file in question */ ! code = cm_Lookup(scp, maskp, 0, userp, &req, &targetscp); /* if a case sensitive match failed, we try a case insensitive one next. */ if (code == CM_ERROR_NOSUCHFILE) { ! code = cm_Lookup(scp, maskp, CM_FLAG_CASEFOLD, userp, &req, &targetscp); } if (code == 0 && targetscp->fid.vnode == 0) { --- 4323,4334 ---- lock_ReleaseMutex(&scp->mx); /* now do a single case sensitive lookup for the file in question */ ! code = cm_Lookup(scp, maskp, CM_FLAG_NOMOUNTCHASE, userp, &req, &targetscp); /* if a case sensitive match failed, we try a case insensitive one next. */ if (code == CM_ERROR_NOSUCHFILE) { ! code = cm_Lookup(scp, maskp, CM_FLAG_NOMOUNTCHASE | CM_FLAG_CASEFOLD, userp, &req, &targetscp); } if (code == 0 && targetscp->fid.vnode == 0) { *************** *** 4375,4380 **** --- 4375,4386 ---- NeedShortName = 0; } + osi_Log4(smb_logp, "T2SDSingle dir vn %u uniq %u name %s (%s)", + htonl(targetscp->fid.vnode), + htonl(targetscp->fid.unique), + osi_LogSaveString(smb_logp, pathp), + NeedShortName ? osi_LogSaveString(smb_logp, shortName) : ""); + /* Eliminate entries that don't match requested attributes */ if (smb_hideDotFiles && !(attribute & SMB_ATTR_HIDDEN) && smb_IsDotFile(maskp)) { *************** *** 4743,4749 **** lock_ObtainMutex(&dsp->mx); if (dsp->scp) { scp = dsp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveTran2SearchDir dsp 0x%p scp 0x%p", dsp, scp); cm_HoldSCache(scp); code = 0; } else { --- 4749,4755 ---- lock_ObtainMutex(&dsp->mx); if (dsp->scp) { scp = dsp->scp; ! osi_Log2(smb_logp,"smb_ReceiveTran2SearchDir dsp 0x%p scp 0x%p", dsp, scp); cm_HoldSCache(scp); code = 0; } else { *************** *** 4782,4788 **** } #endif /* DFS_SUPPORT */ dsp->scp = scp; ! osi_Log2(afsd_logp,"smb_ReceiveTran2SearchDir dsp 0x%p scp 0x%p", dsp, scp); /* we need one hold for the entry we just stored into, * and one for our own processing. When we're done * with this function, we'll drop the one for our own --- 4788,4794 ---- } #endif /* DFS_SUPPORT */ dsp->scp = scp; ! osi_Log2(smb_logp,"smb_ReceiveTran2SearchDir dsp 0x%p scp 0x%p", dsp, scp); /* we need one hold for the entry we just stored into, * and one for our own processing. When we're done * with this function, we'll drop the one for our own *************** *** 5202,5208 **** * re-running the query. */ if (returnedNames == 0 && !starPattern && foundInexact) { ! osi_Log0(afsd_logp,"T2 Search: No exact matches. Re-running for inexact matches"); starPattern = 1; goto startsearch; } --- 5208,5214 ---- * re-running the query. */ if (returnedNames == 0 && !starPattern && foundInexact) { ! osi_Log0(smb_logp,"T2 Search: No exact matches. Re-running for inexact matches"); starPattern = 1; goto startsearch; } *************** *** 5570,5582 **** lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(afsd_logp,"smb_ReceiveV3OpenX fidp 0x%p scp 0x%p", fidp, scp); /* also the user */ fidp->userp = userp; /* compute open mode */ if (openMode != 1) ! fidp->flags |= SMB_FID_OPENREAD; if (openMode == 1 || openMode == 2) fidp->flags |= SMB_FID_OPENWRITE; --- 5576,5588 ---- lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(smb_logp,"smb_ReceiveV3OpenX fidp 0x%p scp 0x%p", fidp, scp); /* also the user */ fidp->userp = userp; /* compute open mode */ if (openMode != 1) ! fidp->flags |= SMB_FID_OPENREAD_LISTDIR; if (openMode == 1 || openMode == 2) fidp->flags |= SMB_FID_OPENWRITE; *************** *** 5686,5692 **** return CM_ERROR_BADFD; } scp = fidp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveV3LockingX fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); --- 5692,5698 ---- return CM_ERROR_BADFD; } scp = fidp->scp; ! osi_Log2(smb_logp,"smb_ReceiveV3LockingX fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); *************** *** 5768,5774 **** wlRequest->vcp = vcp; smb_HoldVC(vcp); wlRequest->scp = scp; ! osi_Log2(afsd_logp,"smb_ReceiveV3LockingX wlRequest 0x%p scp 0x%p", wlRequest, scp); cm_HoldSCache(scp); wlRequest->inp = smb_CopyPacket(inp); wlRequest->outp = smb_CopyPacket(outp); --- 5774,5780 ---- wlRequest->vcp = vcp; smb_HoldVC(vcp); wlRequest->scp = scp; ! osi_Log2(smb_logp,"smb_ReceiveV3LockingX wlRequest 0x%p scp 0x%p", wlRequest, scp); cm_HoldSCache(scp); wlRequest->inp = smb_CopyPacket(inp); wlRequest->outp = smb_CopyPacket(outp); *************** *** 5927,5933 **** return CM_ERROR_BADFD; } scp = fidp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveV3GetAttributes fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); --- 5933,5939 ---- return CM_ERROR_BADFD; } scp = fidp->scp; ! osi_Log2(smb_logp,"smb_ReceiveV3GetAttributes fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); *************** *** 6004,6010 **** return CM_ERROR_BADFD; } scp = fidp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveV3SetAttributes fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); --- 6010,6016 ---- return CM_ERROR_BADFD; } scp = fidp->scp; ! osi_Log2(smb_logp,"smb_ReceiveV3SetAttributes fidp 0x%p scp 0x%p", fidp, scp); cm_HoldSCache(scp); lock_ReleaseMutex(&fidp->mx); *************** *** 6520,6526 **** if (desiredAccess & DELETE) fidflags |= SMB_FID_OPENDELETE; if (desiredAccess & AFS_ACCESS_READ) ! fidflags |= SMB_FID_OPENREAD; if (desiredAccess & AFS_ACCESS_WRITE) fidflags |= SMB_FID_OPENWRITE; if (createOptions & FILE_DELETE_ON_CLOSE) --- 6526,6532 ---- if (desiredAccess & DELETE) fidflags |= SMB_FID_OPENDELETE; if (desiredAccess & AFS_ACCESS_READ) ! fidflags |= SMB_FID_OPENREAD_LISTDIR; if (desiredAccess & AFS_ACCESS_WRITE) fidflags |= SMB_FID_OPENWRITE; if (createOptions & FILE_DELETE_ON_CLOSE) *************** *** 7051,7057 **** lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(afsd_logp,"smb_ReceiveNTCreateX fidp 0x%p scp 0x%p", fidp, scp); fidp->flags = fidflags; --- 7057,7063 ---- lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(smb_logp,"smb_ReceiveNTCreateX fidp 0x%p scp 0x%p", fidp, scp); fidp->flags = fidflags; *************** *** 7061,7067 **** /* save parent dir and pathname for delete or change notification */ if (fidflags & (SMB_FID_OPENDELETE | SMB_FID_OPENWRITE)) { ! osi_Log2(afsd_logp,"smb_ReceiveNTCreateX fidp 0x%p dscp 0x%p", fidp, dscp); fidp->flags |= SMB_FID_NTOPEN; fidp->NTopen_dscp = dscp; dscp = NULL; --- 7067,7073 ---- /* save parent dir and pathname for delete or change notification */ if (fidflags & (SMB_FID_OPENDELETE | SMB_FID_OPENWRITE)) { ! osi_Log2(smb_logp,"smb_ReceiveNTCreateX fidp 0x%p dscp 0x%p", fidp, dscp); fidp->flags |= SMB_FID_NTOPEN; fidp->NTopen_dscp = dscp; dscp = NULL; *************** *** 7297,7303 **** if (desiredAccess & DELETE) fidflags |= SMB_FID_OPENDELETE; if (desiredAccess & AFS_ACCESS_READ) ! fidflags |= SMB_FID_OPENREAD; if (desiredAccess & AFS_ACCESS_WRITE) fidflags |= SMB_FID_OPENWRITE; if (createOptions & FILE_DELETE_ON_CLOSE) --- 7303,7309 ---- if (desiredAccess & DELETE) fidflags |= SMB_FID_OPENDELETE; if (desiredAccess & AFS_ACCESS_READ) ! fidflags |= SMB_FID_OPENREAD_LISTDIR; if (desiredAccess & AFS_ACCESS_WRITE) fidflags |= SMB_FID_OPENWRITE; if (createOptions & FILE_DELETE_ON_CLOSE) *************** *** 7692,7698 **** lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(afsd_logp,"smb_ReceiveNTTranCreate fidp 0x%p scp 0x%p", fidp, scp); fidp->flags = fidflags; --- 7698,7704 ---- lock_ObtainMutex(&scp->mx); scp->flags |= CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); ! osi_Log2(smb_logp,"smb_ReceiveNTTranCreate fidp 0x%p scp 0x%p", fidp, scp); fidp->flags = fidflags; *************** *** 7704,7710 **** if (fidflags & (SMB_FID_OPENDELETE | SMB_FID_OPENWRITE)) { fidp->flags |= SMB_FID_NTOPEN; fidp->NTopen_dscp = dscp; ! osi_Log2(afsd_logp,"smb_ReceiveNTTranCreate fidp 0x%p dscp 0x%p", fidp, dscp); dscp = NULL; fidp->NTopen_pathp = strdup(lastNamep); } --- 7710,7716 ---- if (fidflags & (SMB_FID_OPENDELETE | SMB_FID_OPENWRITE)) { fidp->flags |= SMB_FID_NTOPEN; fidp->NTopen_dscp = dscp; ! osi_Log2(smb_logp,"smb_ReceiveNTTranCreate fidp 0x%p dscp 0x%p", fidp, dscp); dscp = NULL; fidp->NTopen_pathp = strdup(lastNamep); } *************** *** 7872,7878 **** lock_ReleaseMutex(&smb_Dir_Watch_Lock); scp = fidp->scp; ! osi_Log3(afsd_logp,"smb_ReceiveNTTranNotifyChange fidp 0x%p scp 0x%p file \"%s\"", fidp, scp, osi_LogSaveString(smb_logp, fidp->NTopen_wholepathp)); osi_Log3(smb_logp, "Request for NotifyChange filter 0x%x fid %d wtree %d", filter, fid, watchtree); --- 7878,7884 ---- lock_ReleaseMutex(&smb_Dir_Watch_Lock); scp = fidp->scp; ! osi_Log3(smb_logp,"smb_ReceiveNTTranNotifyChange fidp 0x%p scp 0x%p file \"%s\"", fidp, scp, osi_LogSaveString(smb_logp, fidp->NTopen_wholepathp)); osi_Log3(smb_logp, "Request for NotifyChange filter 0x%x fid %d wtree %d", filter, fid, watchtree); *************** *** 8291,8297 **** osi_LogSaveString(smb_logp, (fidp)?fidp->NTopen_wholepathp:"")); scp = fidp->scp; ! osi_Log2(afsd_logp,"smb_ReceiveNTCancel fidp 0x%p scp 0x%p", fidp, scp); lock_ObtainMutex(&scp->mx); if (watchtree) scp->flags &= ~CM_SCACHEFLAG_WATCHEDSUBTREE; --- 8297,8303 ---- osi_LogSaveString(smb_logp, (fidp)?fidp->NTopen_wholepathp:"")); scp = fidp->scp; ! osi_Log2(smb_logp,"smb_ReceiveNTCancel fidp 0x%p scp 0x%p", fidp, scp); lock_ObtainMutex(&scp->mx); if (watchtree) scp->flags &= ~CM_SCACHEFLAG_WATCHEDSUBTREE; *************** *** 8346,8352 **** rename_type = smb_GetSMBParm(inp, 1); if (rename_type != RENAME_FLAG_RENAME && rename_type != RENAME_FLAG_HARD_LINK) { ! osi_Log1(smb_logp, "NTRename invalid infolevel [%x]", rename_type); return CM_ERROR_NOACCESS; } --- 8352,8358 ---- rename_type = smb_GetSMBParm(inp, 1); if (rename_type != RENAME_FLAG_RENAME && rename_type != RENAME_FLAG_HARD_LINK) { ! osi_Log1(smb_logp, "NTRename invalid rename_type [%x]", rename_type); return CM_ERROR_NOACCESS; } Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.7 openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.8 *** openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.7 Tue Dec 12 23:28:01 2006 --- openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm Mon Jan 15 15:03:13 2007 *************** *** 198,204 ****
OpenAFS for Windows 1.5.13
Release Notes
The Andrew File System (AFS) is a location-independent --- 583,589 ----
OpenAFS for Windows 1.5.14
Release Notes
The Andrew File System (AFS) is a location-independent
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.6 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.7
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.6 Mon Dec 18 18:20:57 2006
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm Mon Jan 15 15:03:17 2007
***************
*** 10,16 ****