case MSG_SERVICE_RUNNING:
case MSG_SERVICE_STOPPING:
case MSG_SERVICE_ERROR_STOP:
+ case MSG_CRYPT_OFF:
+ case MSG_CRYPT_ON:
break;
case MSG_FLUSH_BAD_SHARE_NAME:
case MSG_FLUSH_OPEN_ENUM_ERROR:
case MSG_FLUSH_FAILED:
case MSG_RX_HARD_DEAD_TIME_EXCEEDED:
case MSG_SERVICE_ERROR_STOP_WITH_MSG:
+ case MSG_SMB_SEND_PACKET_FAILURE:
+ case MSG_UNEXPECTED_SMB_SESSION_CLOSE:
wNumArgs = 1;
lpArgs[0] = va_arg(listArgs, LPTSTR);
break;
.
+MessageId=
+Severity=Warning
+Facility=System
+SymbolicName=MSG_SMB_SEND_PACKET_FAILURE
+Language=English
+Unable to Send SMB Packet: %1.
+.
+
+
+MessageId=
+Severity=Warning
+Facility=System
+SymbolicName=MSG_UNEXPECTED_SMB_SESSION_CLOSE
+Language=English
+Unexpected SMB Session Close: %1.
+.
+
+
;#endif /* __AFSD_EVENTMESSAGES_H_ 1 */
{
memset((char *)reqp, 0, sizeof(cm_req_t));
#ifndef DJGPP
- reqp->startTime = GetCurrentTime();
+ reqp->startTime = GetTickCount();
#else
gettimeofday(&reqp->startTime, NULL);
#endif
/* timeleft - get if from reqp the same way as cmXonnByMServers does */
#ifndef DJGPP
- timeUsed = (GetCurrentTime() - reqp->startTime) / 1000;
+ timeUsed = (GetTickCount() - reqp->startTime) / 1000;
#else
gettimeofday(&now, NULL);
timeUsed = sub_time(now, reqp->startTime) / 1000;
*connpp = NULL;
#ifndef DJGPP
- timeUsed = (GetCurrentTime() - reqp->startTime) / 1000;
+ timeUsed = (GetTickCount() - reqp->startTime) / 1000;
#else
gettimeofday(&now, NULL);
timeUsed = sub_time(now, reqp->startTime) / 1000;
fileLock->lastUpdate = (code == 0) ? time(NULL) : 0;
- osi_QAddT(&scp->fileLocksH, &scp->fileLocksT, &fileLock->fileq);
-
lock_ObtainWrite(&cm_scacheLock);
+ osi_QAddT(&scp->fileLocksH, &scp->fileLocksT, &fileLock->fileq);
cm_HoldSCacheNoLock(scp);
fileLock->scp = scp;
osi_QAdd(&cm_allFileLocks, &fileLock->q);
return 0;
}
+ lock_ReleaseRead(&cm_scacheLock);
+
/* discard lock record */
+ lock_ObtainWrite(&cm_scacheLock);
if (scp->fileLocksT == q)
scp->fileLocksT = osi_QPrev(q);
osi_QRemove(&scp->fileLocksH, q);
- lock_ReleaseRead(&cm_scacheLock);
-
/*
* Don't delete it here; let the daemon delete it, to simplify
* the daemon's traversal of the list.
*/
- lock_ObtainWrite(&cm_scacheLock);
-
if (IS_LOCK_ACCEPTED(fileLock)) {
if (fileLock->lockType == LockRead)
scp->sharedLocks--;
handleCode:
if (code != 0 && code != CM_ERROR_WOULDBLOCK) {
+ lock_ObtainWrite(&cm_scacheLock);
if (scp->fileLocksT == &oldFileLock->fileq)
scp->fileLocksT = osi_QPrev(&oldFileLock->fileq);
osi_QRemove(&scp->fileLocksH, &oldFileLock->fileq);
+ lock_ReleaseWrite(&cm_scacheLock);
} else if (code == 0 && IS_LOCK_WAITLOCK(oldFileLock)) {
scp->serverLock = newLock;
}
vcp = malloc(sizeof(*vcp));
memset(vcp, 0, sizeof(*vcp));
vcp->vcID = numVCs++;
- vcp->refCount = 1;
+ vcp->refCount = 2; /* smb_allVCsp and caller */
vcp->tidCounter = 1;
vcp->fidCounter = 1;
- vcp->uidCounter = 1; /* UID 0 is reserved for blank user */
+ vcp->uidCounter = 1; /* UID 0 is reserved for blank user */
vcp->nextp = smb_allVCsp;
smb_allVCsp = vcp;
lock_InitializeMutex(&vcp->mx, "vc_t mutex");
return 0;
}
-void smb_ReleaseVCNoLock(smb_vc_t *vcp)
+void smb_ReleaseVCInternal(smb_vc_t *vcp)
{
- osi_Log2(smb_logp,"smb_ReleaseVCNoLock vcp %x ref %d",vcp, vcp->refCount);
#ifdef DEBUG
osi_assert(vcp->refCount-- != 0);
#else
vcp->refCount--;
#endif
+
+ if (vcp->refCount == 0) {
+ memset(vcp,0,sizeof(smb_vc_t));
+ free(vcp);
+ }
+}
+
+void smb_ReleaseVCNoLock(smb_vc_t *vcp)
+{
+ osi_Log2(smb_logp,"smb_ReleaseVCNoLock vcp %x ref %d",vcp, vcp->refCount);
+ smb_ReleaseVCInternal(vcp);
}
void smb_ReleaseVC(smb_vc_t *vcp)
{
lock_ObtainWrite(&smb_rctLock);
osi_Log2(smb_logp,"smb_ReleaseVC vcp %x ref %d",vcp, vcp->refCount);
-#ifdef DEBUG
- osi_assert(vcp->refCount-- != 0);
-#else
- vcp->refCount--;
-#endif
+ smb_ReleaseVCInternal(vcp);
lock_ReleaseWrite(&smb_rctLock);
}
smb_user_t *userpNext;
smb_user_t *userp;
unsigned short uid;
+ smb_vc_t **vcpp;
osi_Log1(smb_logp, "Cleaning up dead vcp 0x%x", vcp);
lock_ObtainRead(&smb_rctLock);
}
+ /* remove VCP from smb_allVCsp */
+ for (vcpp = &smb_allVCsp; *vcpp; vcpp = &((*vcpp)->nextp)) {
+ if (*vcpp == vcp) {
+ *vcpp = vcp->nextp;
+ smb_ReleaseVCNoLock(vcp);
+ break;
+ }
+ }
lock_ReleaseRead(&smb_rctLock);
-
osi_Log0(smb_logp, "Done cleaning up dead vcp");
}
uidp = malloc(sizeof(*uidp));
memset(uidp, 0, sizeof(*uidp));
uidp->nextp = vcp->usersp;
- uidp->refCount = 1;
+ uidp->refCount = 2; /* one for the vcp and one for the caller */
uidp->vcp = vcp;
smb_HoldVCNoLock(vcp);
vcp->usersp = uidp;
lock_ObtainWrite(&smb_rctLock);
osi_assert(uidp->refCount-- > 0);
- if (uidp->refCount == 0 && (uidp->flags & SMB_USERFLAG_DELETE)) {
+ if (uidp->refCount == 0) {
lupp = &uidp->vcp->usersp;
for(up = *lupp; up; lupp = &up->nextp, up = *lupp) {
if (up == uidp)
cm_user_t *smb_GetUser(smb_vc_t *vcp, smb_packet_t *inp)
{
smb_user_t *uidp;
- cm_user_t *up;
+ cm_user_t *up = NULL;
smb_t *smbp;
smbp = (smb_t *) inp;
uidp = smb_FindUID(vcp, smbp->uid, 0);
- if ((!uidp) || (!uidp->unp))
- return NULL;
-
+ if (!uidp)
+ return NULL;
+
lock_ObtainMutex(&uidp->mx);
- up = uidp->unp->userp;
- cm_HoldUser(up);
+ if (uidp->unp) {
+ up = uidp->unp->userp;
+ cm_HoldUser(up);
+ }
lock_ReleaseMutex(&uidp->mx);
smb_ReleaseUID(uidp);
-
return up;
}
if (code != 0) {
const char * s = ncb_error_string(code);
osi_Log2(smb_logp, "SendPacket failure code %d \"%s\"", code, s);
+#ifndef DJGPP
+ LogEvent(EVENTLOG_WARNING_TYPE, MSG_SMB_SEND_PACKET_FAILURE, s);
+#endif /* !DJGPP */
+
+ osi_Log2(smb_logp, "setting dead_vcp 0x%x, user struct 0x%x",
+ vcp, vcp->usersp);
+ smb_HoldVC(vcp);
+ if (dead_vcp) {
+ osi_Log1(smb_logp,"Previous dead_vcp %x", dead_vcp);
+ smb_CleanupDeadVC(dead_vcp);
+ smb_ReleaseVC(dead_vcp);
+ }
+ dead_vcp = vcp;
+ vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
}
if (localNCB)
ongoingOps - 1);
if (!isGateway) {
if (active_vcp) {
- DWORD now = GetCurrentTime();
- if (now - last_msg_time >= 30000
- && now - last_msg_time <= 90000) {
- osi_Log1(smb_logp,
- "Setting dead_vcp %x", active_vcp);
- if (dead_vcp) {
+ DWORD now = GetTickCount();
+ if (now - last_msg_time >= 30000) {
+ smb_vc_t *avcp = active_vcp;
+ active_vcp = NULL;
+ osi_Log1(smb_logp,"Setting dead_vcp %x", avcp);
+ if (dead_vcp) {
+ osi_Log1(smb_logp,"Previous dead_vcp %x", dead_vcp);
+ smb_CleanupDeadVC(dead_vcp);
smb_ReleaseVC(dead_vcp);
- osi_Log1(smb_logp,
- "Previous dead_vcp %x", dead_vcp);
}
- smb_HoldVC(active_vcp);
- dead_vcp = active_vcp;
+ smb_HoldVC(avcp);
+ dead_vcp = avcp;
dead_vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
+ smb_ReleaseVC(avcp);
}
}
}
LargeIntegerGreaterThanOrEqualTo(thyper,
scp->bulkStatProgress)) {
/* Don't bulk stat if risking timeout */
- int now = GetCurrentTime();
+ int now = GetTickCount();
if (now - req.startTime > 5000) {
scp->bulkStatProgress = thyper;
scp->flags &= ~CM_SCACHEFLAG_BULKSTATTING;
/* Remember session generation number and time */
oldGen = sessionGen;
- oldTime = GetCurrentTime();
+ oldTime = GetTickCount();
while (inp->inCom != 0xff) {
dp = &smb_dispatchTable[inp->inCom];
}
if (oldGen != sessionGen) {
- newTime = GetCurrentTime();
+ newTime = GetTickCount();
#ifndef DJGPP
LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_WRONG_SESSION,
newTime - oldTime, ncbp->ncb_length);
if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
if (active_vcp != vcp) {
if (active_vcp) {
- smb_ReleaseVC(active_vcp);
osi_Log2(smb_logp,
"Replacing active_vcp %x with %x", active_vcp, vcp);
+ smb_ReleaseVC(active_vcp);
}
smb_HoldVC(vcp);
active_vcp = vcp;
}
- last_msg_time = GetCurrentTime();
- } else if (active_vcp == vcp) {
+ last_msg_time = GetTickCount();
+ } else if (active_vcp == vcp) { /* the vcp is dead */
smb_ReleaseVC(active_vcp);
active_vcp = NULL;
}
-
return;
}
osi_Log2(smb_logp, "NCBRECV pending lsn %d session %d", ncbp->ncb_lsn, idx_session);
continue;
- case NRC_SCLOSED:
case NRC_SNUMOUT:
case NRC_SABORT:
+#ifndef DJGPP
+ LogEvent(EVENTLOG_WARNING_TYPE, MSG_UNEXPECTED_SMB_SESSION_CLOSE, ncb_error_string(rc));
+ /* fallthrough */
+#endif /* !DJGPP */
+ case NRC_SCLOSED:
/* Client closed session */
- dead_sessions[idx_session] = TRUE;
+ dead_sessions[idx_session] = TRUE;
if (vcp)
smb_ReleaseVC(vcp);
vcp = smb_FindVC(ncbp->ncb_lsn, 0, lanas[idx_session]);
- /* Should also release vcp. [done] 2004-05-11 jaltman
- * Also, should do
- * sanity check that all TID's are gone.
- *
- * TODO: check if we could use LSNs[idx_session] instead,
- * also cleanup after dead vcp
- */
if (vcp) {
- if (dead_vcp == vcp)
+ if (dead_vcp == vcp)
osi_Log1(smb_logp, "dead_vcp already set, 0x%x", dead_vcp);
else if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
osi_Log2(smb_logp, "setting dead_vcp 0x%x, user struct 0x%x",
vcp, vcp->usersp);
- smb_HoldVC(vcp);
+ smb_HoldVC(vcp);
if (dead_vcp) {
+ osi_Log1(smb_logp,"Previous dead_vcp %x", dead_vcp);
+ smb_CleanupDeadVC(dead_vcp);
smb_ReleaseVC(dead_vcp);
- osi_Log1(smb_logp,
- "Previous dead_vcp %x", dead_vcp);
}
dead_vcp = vcp;
vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
}
- smb_CleanupDeadVC(vcp);
-
if (vcp->justLoggedOut) {
loggedOut = 1;
loggedOutTime = vcp->logoffTime;
extern smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana);
+extern void smb_CleanupDeadVC(smb_vc_t *vcp);
+
extern void smb_ReleaseVC(smb_vc_t *vcp);
extern void smb_ReleaseVCNoLock(smb_vc_t *vcp);
cm_user_t *up = NULL;
uidp = smb_FindUID(vcp, inp->uid, 0);
- if (!uidp) return NULL;
+ if (!uidp)
+ return NULL;
lock_ObtainMutex(&uidp->mx);
if (uidp->unp) {
/* find the tree and free it */
uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
- /* TODO: smb_ReleaseUID() ? */
if (uidp) {
char *s1 = NULL, *s2 = NULL;
* because the vcp points to it
*/
lock_ReleaseMutex(&uidp->mx);
+ smb_ReleaseUID(uidp);
}
else
osi_Log0(smb_logp, "SMB3 user logoffX");
tp = malloc(sizeof(*tp));
memset(tp, 0, sizeof(*tp));
- tp->vcp = NULL;
+ smb_HoldVC(vcp);
+ tp->vcp = vcp;
tp->curData = tp->curParms = 0;
tp->totalData = totalData;
tp->totalParms = totalParms;
if ((dsp->flags & SMB_DIRSEARCH_BULKST) &&
LargeIntegerGreaterThanOrEqualTo(thyper, scp->bulkStatProgress)) {
/* Don't bulk stat if risking timeout */
- int now = GetCurrentTime();
+ int now = GetTickCount();
if (now - req.startTime > 5000) {
scp->bulkStatProgress = thyper;
scp->flags &= ~CM_SCACHEFLAG_BULKSTATTING;
savedPacketp = smb_CopyPacket(inp);
smb_HoldVC(vcp);
+ if (savedPacketp->vcp)
+ smb_ReleaseVC(savedPacketp->vcp);
savedPacketp->vcp = vcp;
lock_ObtainMutex(&smb_Dir_Watch_Lock);
savedPacketp->nextp = smb_Directory_Watches;
BOOL twoEntries = FALSE;
ULONG otherNameLen, oldParmCount = 0;
DWORD otherAction;
- smb_vc_t *vcp;
smb_fid_t *fidp;
/* Get ready for rename within directory */
wtree = smb_GetSMBParm(watch, 22) & 0xffff; /* TODO: should this be 0xff ? */
maxLen = smb_GetSMBOffsetParm(watch, 5, 1)
| (smb_GetSMBOffsetParm(watch, 6, 1) << 16);
- vcp = watch->vcp;
/*
* Strange hack - bug in NT Client and NT Server that we
if (filter == 3 && wtree)
filter = 0x17;
- fidp = smb_FindFID(vcp, fid, 0);
+ fidp = smb_FindFID(watch->vcp, fid, 0);
if (!fidp) {
osi_Log1(smb_logp," no fidp for fid[%d]",fid);
lastWatch = watch;
((smb_t *) watch)->flg2 |= SMB_FLAGS2_32BIT_STATUS;
}
- smb_SendPacket(vcp, watch);
+ smb_SendPacket(watch->vcp, watch);
smb_FreePacket(watch);
watch = nextWatch;
}
/* called from V3 read to handle IOCTL descriptor reads */
long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
{
- smb_ioctl_t *iop;
+ smb_ioctl_t *iop;
long count;
long code;
long leftToCopy;
iop = fidp->ioctlp;
count = smb_GetSMBParm(inp, 5);
- userp = smb_GetUser(vcp, inp);
- osi_assert(userp != 0);
+ userp = smb_GetUser(vcp, inp);
+ osi_assert(userp != 0);
uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
iop->uidp = uidp;
- if (uidp && uidp->unp)
+ if (uidp && uidp->unp) {
osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
uidp->userID, userp,
osi_LogSaveString(afsd_logp, uidp->unp->name));
- else {
+ } else {
if (uidp)
- osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
- uidp->userID, userp);
+ osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
+ uidp->userID, userp);
else
- osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
- userp);
+ osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
+ userp);
}
- code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
- if(code) {
- smb_ReleaseUID(uidp);
+ code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
+ if (code) {
+ if (uidp)
+ smb_ReleaseUID(uidp);
cm_ReleaseUser(userp);
smb_ReleaseFID(fidp);
return CM_ERROR_NOSUCHPATH;
}
- code = smb_IoctlPrepareRead(fidp, iop, userp);
+ code = smb_IoctlPrepareRead(fidp, iop, userp);
if (uidp) {
iop->uidp = 0;
smb_ReleaseUID(uidp);
}
if (code) {
- cm_ReleaseUser(userp);
+ cm_ReleaseUser(userp);
smb_ReleaseFID(fidp);
- return code;
+ return code;
}
- leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
+ leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
if (count > leftToCopy) count = leftToCopy;
- /* 0 and 1 are reserved for request chaining, were setup by our caller,
- * and will be further filled in after we return.
- */
- smb_SetSMBParm(outp, 2, 0); /* remaining bytes, for pipes */
- smb_SetSMBParm(outp, 3, 0); /* resvd */
- smb_SetSMBParm(outp, 4, 0); /* resvd */
- smb_SetSMBParm(outp, 5, count); /* # of bytes we're going to read */
- /* fill in #6 when we have all the parameters' space reserved */
- smb_SetSMBParm(outp, 7, 0); /* resv'd */
- smb_SetSMBParm(outp, 8, 0); /* resv'd */
- smb_SetSMBParm(outp, 9, 0); /* resv'd */
- smb_SetSMBParm(outp, 10, 0); /* resv'd */
- smb_SetSMBParm(outp, 11, 0); /* reserved */
-
- /* get op ptr after putting in the last parm, since otherwise we don't
- * know where the data really is.
- */
- op = smb_GetSMBData(outp, NULL);
+ /* 0 and 1 are reserved for request chaining, were setup by our caller,
+ * and will be further filled in after we return.
+ */
+ smb_SetSMBParm(outp, 2, 0); /* remaining bytes, for pipes */
+ smb_SetSMBParm(outp, 3, 0); /* resvd */
+ smb_SetSMBParm(outp, 4, 0); /* resvd */
+ smb_SetSMBParm(outp, 5, count); /* # of bytes we're going to read */
+ /* fill in #6 when we have all the parameters' space reserved */
+ smb_SetSMBParm(outp, 7, 0); /* resv'd */
+ smb_SetSMBParm(outp, 8, 0); /* resv'd */
+ smb_SetSMBParm(outp, 9, 0); /* resv'd */
+ smb_SetSMBParm(outp, 10, 0); /* resv'd */
+ smb_SetSMBParm(outp, 11, 0); /* reserved */
+
+ /* get op ptr after putting in the last parm, since otherwise we don't
+ * know where the data really is.
+ */
+ op = smb_GetSMBData(outp, NULL);
- /* now fill in offset from start of SMB header to first data byte (to op) */
- smb_SetSMBParm(outp, 6, ((int) (op - outp->data)));
+ /* now fill in offset from start of SMB header to first data byte (to op) */
+ smb_SetSMBParm(outp, 6, ((int) (op - outp->data)));
- /* set the packet data length the count of the # of bytes */
- smb_SetSMBDataLength(outp, count);
+ /* set the packet data length the count of the # of bytes */
+ smb_SetSMBDataLength(outp, count);
- /* now copy the data into the response packet */
- memcpy(op, iop->outCopied + iop->outAllocp, count);
+ /* now copy the data into the response packet */
+ memcpy(op, iop->outCopied + iop->outAllocp, count);
- /* and adjust the counters */
- iop->outCopied += count;
-
- /* and cleanup things */
- cm_ReleaseUser(userp);
- smb_ReleaseFID(fidp);
+ /* and adjust the counters */
+ iop->outCopied += count;
- return 0;
-}
+ /* and cleanup things */
+ cm_ReleaseUser(userp);
+ smb_ReleaseFID(fidp);
+
+ return 0;
+}
/* called from Read Raw to handle IOCTL descriptor reads */
long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
- smb_packet_t *outp
+ smb_packet_t *outp
#ifdef DJGPP
-, dos_ptr rawBuf
+ , dos_ptr rawBuf
#endif /* DJGPP */
-)
+ )
{
- smb_ioctl_t *iop;
- long leftToCopy;
- NCB *ncbp;
- long code;
- cm_user_t *userp;
+ smb_ioctl_t *iop;
+ long leftToCopy;
+ NCB *ncbp;
+ long code;
+ cm_user_t *userp;
#ifdef DJGPP
- dos_ptr dos_ncb;
+ dos_ptr dos_ncb;
- if (rawBuf == 0)
- {
- osi_Log0(afsd_logp, "Failed to get raw buf for smb_IoctlReadRaw");
- return -1;
- }
+ if (rawBuf == 0)
+ {
+ osi_Log0(afsd_logp, "Failed to get raw buf for smb_IoctlReadRaw");
+ return -1;
+ }
#endif /* DJGPP */
- iop = fidp->ioctlp;
-
- userp = smb_GetUser(vcp, inp);
-
- {
- smb_user_t *uidp;
-
- uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
- if (uidp && uidp->unp)
- osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
- uidp->userID, userp,
- osi_LogSaveString(afsd_logp, uidp->unp->name));
- else if (uidp)
- osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
- uidp->userID, userp);
- else
- osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
- userp);
- if (uidp) smb_ReleaseUID(uidp);
+ iop = fidp->ioctlp;
+
+ userp = smb_GetUser(vcp, inp);
+
+ /* Log the user */
+ {
+ smb_user_t *uidp;
+
+ uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
+ if (uidp && uidp->unp) {
+ osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
+ uidp->userID, userp,
+ osi_LogSaveString(afsd_logp, uidp->unp->name));
+ } else if (uidp) {
+ osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
+ uidp->userID, userp);
+ } else {
+ osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
+ userp);
}
+ if (uidp)
+ smb_ReleaseUID(uidp);
+ }
code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
- if(code) {
+ if (code) {
cm_ReleaseUser(userp);
smb_ReleaseFID(fidp);
return CM_ERROR_NOSUCHPATH;
}
- code = smb_IoctlPrepareRead(fidp, iop, userp);
- if (code) {
- cm_ReleaseUser(userp);
- smb_ReleaseFID(fidp);
- return code;
- }
+ code = smb_IoctlPrepareRead(fidp, iop, userp);
+ if (code) {
+ cm_ReleaseUser(userp);
+ smb_ReleaseFID(fidp);
+ return code;
+ }
- leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
+ leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
- ncbp = outp->ncbp;
- memset((char *)ncbp, 0, sizeof(NCB));
+ ncbp = outp->ncbp;
+ memset((char *)ncbp, 0, sizeof(NCB));
- ncbp->ncb_length = (unsigned short) leftToCopy;
- ncbp->ncb_lsn = (unsigned char) vcp->lsn;
- ncbp->ncb_command = NCBSEND;
+ ncbp->ncb_length = (unsigned short) leftToCopy;
+ ncbp->ncb_lsn = (unsigned char) vcp->lsn;
+ ncbp->ncb_command = NCBSEND;
/*ncbp->ncb_lana_num = smb_LANadapter;*/
- ncbp->ncb_lana_num = vcp->lana;
+ ncbp->ncb_lana_num = vcp->lana;
#ifndef DJGPP
- ncbp->ncb_buffer = iop->outCopied + iop->outAllocp;
- code = Netbios(ncbp);
+ ncbp->ncb_buffer = iop->outCopied + iop->outAllocp;
+ code = Netbios(ncbp);
#else /* DJGPP */
- dosmemput(iop->outCopied + iop->outAllocp, ncbp->ncb_length, rawBuf);
- ncbp->ncb_buffer = rawBuf;
- dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- code = Netbios(ncbp, dos_ncb);
+ dosmemput(iop->outCopied + iop->outAllocp, ncbp->ncb_length, rawBuf);
+ ncbp->ncb_buffer = rawBuf;
+ dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
+ code = Netbios(ncbp, dos_ncb);
#endif /* !DJGPP */
- if (code != 0)
- osi_Log1(afsd_logp, "ReadRaw send failure code %d", code);
+ if (code != 0)
+ osi_Log1(afsd_logp, "ReadRaw send failure code %d", code);
- cm_ReleaseUser(userp);
- smb_ReleaseFID(fidp);
+ cm_ReleaseUser(userp);
+ smb_ReleaseFID(fidp);
- return 0;
+ return 0;
}