DEVEL15-windows-smb-mods-20060524

Prevent smb_FindVCP from returning dead virtual circuits

Treat "*." as an alias for "all"


(cherry picked from commit b753ef7265b1970d1e38f3c65532af929102e1d6)
This commit is contained in:
Jeffrey Altman 2006-06-01 16:39:40 +00:00 committed by Derrick Brashear
parent 92595f88bf
commit 4b6e5b7e69
2 changed files with 10 additions and 8 deletions

View File

@ -860,7 +860,8 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana)
osi_panic("afsd: invalid smb_vc_t detected in smb_allVCsp",
__FILE__, __LINE__);
if (lsn == vcp->lsn && lana == vcp->lana) {
if (lsn == vcp->lsn && lana == vcp->lana &&
!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
smb_HoldVCNoLock(vcp);
break;
}
@ -1095,10 +1096,6 @@ void smb_CleanupDeadVC(smb_vc_t *vcp)
uidpNext = vcp->usersp;
}
lock_ObtainMutex(&vcp->mx);
vcp->flags &= ~SMB_VCFLAG_CLEAN_IN_PROGRESS;
lock_ReleaseMutex(&vcp->mx);
/* The vcp is now on the deadVCsp list. We intentionally drop the
* reference so that the refcount can reach 0 and we can delete it */
smb_ReleaseVCNoLock(vcp);
@ -7731,6 +7728,8 @@ void smb_Server(VOID *parmp)
* then we are in big trouble. This means either :
* a) we have the wrong NCB.
* b) Netbios screwed up the call.
* c) The VC was already marked dead before we were able to
* process the call
* Obviously this implies that
* ( LSNs[idx_session] != ncbp->ncb_lsn ||
* lanas[idx_session] != ncbp->ncb_lana_num )
@ -7745,7 +7744,7 @@ void smb_Server(VOID *parmp)
ncbp->ncb_lana_num);
/* Also log in the trace log. */
osi_Log4(smb_logp, "Server: BAD VCP!"
osi_Log4(smb_logp, "Server: VCP does not exist!"
"LSNs[idx_session]=[%d],"
"lanas[idx_session]=[%d],"
"ncbp->ncb_lsn=[%d],"

View File

@ -1027,6 +1027,8 @@ long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *o
tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE);
if (!ipc) {
if (!strcmp(shareName, "*."))
strcpy(shareName, "all");
shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath);
if (!shareFound) {
smb_ReleaseUID(uidp);
@ -1669,7 +1671,7 @@ long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_pack
outp = smb_GetTran2ResponsePacket(vcp, p, op, totalParam, totalData);
if(!stricmp(shareName,"all")) {
if(!stricmp(shareName,"all") || !strcmp(shareName,"*.")) {
rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, 0,
KEY_QUERY_VALUE, &hkParam);
if (rv == ERROR_SUCCESS) {
@ -3228,7 +3230,8 @@ smb_ReceiveTran2GetDFSReferral(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
requestFileName[0] == '\\' &&
!_strnicmp(cm_NetbiosName,&requestFileName[1],nbnLen) &&
requestFileName[nbnLen+1] == '\\' &&
!_strnicmp("all",&requestFileName[nbnLen+2],3))
(!_strnicmp("all",&requestFileName[nbnLen+2],3) ||
!_strnicmp("*.",&requestFileName[nbnLen+2],2)))
{
USHORT * sp;
struct smb_v2_referral * v2ref;