int smb_useV3; /* try to negotiate V3 */
#ifndef DJGPP
+static showErrors = 1;
/* MessageBox or something like it */
-int (WINAPI *smb_MBfunc)(HWND, LPCTSTR, LPCTSTR, UINT) = NULL;
+int (_stdcall *smb_MBfunc)(HWND, LPCTSTR, LPCTSTR, UINT) = NULL;
+extern HANDLE WaitToTerminate;
#endif /* DJGPP */
/* GMT time info:
smb_LargeSearchTimeFromUnixTime(&ft, unixTime);
if (!FileTimeToDosDateTime(&ft, &wDate, &wTime))
- osi_Log1(afsd_logp, "Failed to convert filetime to dos datetime: %d", GetLastError());
+ osi_Log1(smb_logp, "Failed to convert filetime to dos datetime: %d", GetLastError());
else {
int day, month, year, sec, min, hour;
char msg[256];
hour = ExtractBits(wTime, 11, 5);
sprintf(msg, "%s = %02d-%02d-%04d %02d:%02d:%02d", FuncName, month, day, year, hour, min, sec);
- osi_Log1(afsd_logp, "%s", osi_LogSaveString(afsd_logp, msg));
+ osi_Log1(smb_logp, "%s", osi_LogSaveString(smb_logp, msg));
}
}
#endif /* DJGPP */
sprintf(s, "Bad SMB param %d out of %d, ncb len %d",
parm, parmCount, smbp->ncb_length);
- osi_Log0(afsd_logp, s);
+ osi_Log0(smb_logp, s);
#endif /* !DJGPP */
osi_panic(s, __FILE__, __LINE__);
}
sprintf(s, "Bad SMB param %d offset %d out of %d, "
"ncb len %d",
parm, offset, parmCount, smbp->ncb_length);
- osi_Log0(afsd_logp, s);
+ osi_Log0(smb_logp, s);
#endif /* !DJGPP */
osi_panic(s, __FILE__, __LINE__);
#endif /* !DJGPP */
if (code != 0)
- osi_Log1(afsd_logp, "SendPacket failure code %d", code);
+ osi_Log1(smb_logp, "SendPacket failure code %d", code);
if (localNCB)
FreeNCB(ncbp);
}
*NTStatusp = NTStatus;
- osi_Log2(afsd_logp, "SMB SEND code %x as NT %x", code, NTStatus);
+ osi_Log2(smb_logp, "SMB SEND code %x as NT %x", code, NTStatus);
}
void smb_MapCoreError(long code, smb_vc_t *vcp, unsigned short *scodep,
*scodep = error;
*classp = class;
- osi_Log3(afsd_logp, "SMB SEND code %x as SMB %d: %d", code, class, error);
+ osi_Log3(smb_logp, "SMB SEND code %x as SMB %d: %d", code, class, error);
}
long smb_SendCoreBadOp(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
offset.HighPart = 0; /* too bad */
offset.LowPart = smb_GetSMBParm(inp, 1) | (smb_GetSMBParm(inp, 2) << 16);
- osi_Log3(afsd_logp, "smb_ReceieveCoreReadRaw fd %d, off 0x%x, size 0x%x",
+ osi_Log3(smb_logp, "smb_ReceieveCoreReadRaw fd %d, off 0x%x, size 0x%x",
fd, offset.LowPart, count);
fidp = smb_FindFID(vcp, fd, 0);
code = Netbios(ncbp, dos_ncb);
#endif /* !DJGPP */
if (code != 0)
- osi_Log1(afsd_logp, "ReadRaw send failure code %d", code);
+ osi_Log1(smb_logp, "ReadRaw send failure code %d", code);
if (rawBuf) {
/* Give back raw buffer */
char protocol_array[10][1024]; /* protocol signature of the client */
- osi_Log1(afsd_logp, "SMB receive negotiate; %d + 1 ongoing ops",
+ osi_Log1(smb_logp, "SMB receive negotiate; %d + 1 ongoing ops",
ongoingOps - 1);
if (!isGateway) {
if (active_vcp) {
DWORD now = GetCurrentTime();
if (now - last_msg_time >= 30000
&& now - last_msg_time <= 90000) {
- osi_Log1(afsd_logp,
+ osi_Log1(smb_logp,
"Setting dead_vcp %x", active_vcp);
dead_vcp = active_vcp;
dead_vcp->flags |= SMB_VCFLAG_ALREADYDEAD;
v3ProtoIndex = -1;
NTProtoIndex = -1;
while(namex < dbytes) {
- osi_Log1(afsd_logp, "Protocol %s",
- osi_LogSaveString(afsd_logp, namep+1));
+ osi_Log1(smb_logp, "Protocol %s",
+ osi_LogSaveString(smb_logp, namep+1));
strcpy(protocol_array[tcounter], namep+1);
/* namep points at the first protocol, or really, a 0x02
(strcmp("LANMAN2.1", protocol_array[4]) == 0) &&
(strcmp("NT LM 0.12", protocol_array[5]) == 0)) {
isWindows2000 = TRUE;
- osi_Log0(afsd_logp, "Looks like a Windows 2000 client");
+ osi_Log0(smb_logp, "Looks like a Windows 2000 client");
/*
* HACK: for now - just negotiate a lower protocol till we
* figure out which flag/flag2 or some other field
/* Things to try (after looking at tcpdump output could be
* setting flags and flags2 to 0x98 and 0xc853 like this
* op->reb = 0x98; op->flg2 = 0xc853;
- * osi_Log2(afsd_logp, "Flags:0x%x Flags2:0x%x", ip->reb, ip->flg2);
+ * osi_Log2(smb_logp, "Flags:0x%x Flags2:0x%x", ip->reb, ip->flg2);
*/
}
}
long smb_ReceiveCoreGetDiskAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
{
- osi_Log0(afsd_logp, "SMB receive get disk attributes");
+ osi_Log0(smb_logp, "SMB receive get disk attributes");
smb_SetSMBParm(outp, 0, 32000);
smb_SetSMBParm(outp, 1, 64);
char *passwordp;
cm_user_t *userp;
- osi_Log0(afsd_logp, "SMB receive tree connect");
+ osi_Log0(smb_logp, "SMB receive tree connect");
/* parse input parameters */
tp = smb_GetSMBData(inp, NULL);
smb_SetSMBParm(rsp, 1, newTid);
smb_SetSMBDataLength(rsp, 0);
- osi_Log1(afsd_logp, "SMB tree connect created ID %d", newTid);
+ osi_Log1(smb_logp, "SMB tree connect created ID %d", newTid);
return 0;
}
unsigned char initStatBlock[21];
int statLen;
- osi_Log0(afsd_logp, "SMB receive search volume");
+ osi_Log0(smb_logp, "SMB receive search volume");
/* pull pathname and stat block out of request */
tp = smb_GetSMBData(inp, NULL);
if (attribute & 0x8)
return smb_ReceiveCoreSearchVolume(vcp, inp, outp);
- osi_Log2(afsd_logp, "SMB receive search dir count %d [%s]",
- maxCount, osi_LogSaveString(afsd_logp, pathp));
+ osi_Log2(smb_logp, "SMB receive search dir count %d [%s]",
+ maxCount, osi_LogSaveString(smb_logp, pathp));
if (*pathp == 0) { /* null pathp, treat as root dir */
if (!(attribute & SMB_ATTR_DIRECTORY)) /* exclude dirs */
starPattern = 1;
}
- osi_Log3(afsd_logp, "SMB dir search cookie 0x%x, connection %d, attr 0x%x",
+ osi_Log3(smb_logp, "SMB dir search cookie 0x%x, connection %d, attr 0x%x",
nextCookie, dsp->cookie, attribute);
userp = smb_GetUser(vcp, inp);
fid.vnode = ntohl(dep->fid.vnode);
fid.unique = ntohl(dep->fid.unique);
fileType = cm_FindFileType(&fid);
- osi_Log2(afsd_logp, "smb_ReceiveCoreSearchDir: file %s "
+ osi_Log2(smb_logp, "smb_ReceiveCoreSearchDir: file %s "
"has filetype %d", dep->name,
fileType);
if (fileType == CM_SCACHETYPE_DIRECTORY)
if (code == 0 && dataLength < 21 && returnedNames == 0)
code = CM_ERROR_NOFILES;
- osi_Log2(afsd_logp, "SMB search dir done, %d names, code %d",
+ osi_Log2(smb_logp, "SMB search dir done, %d names, code %d",
returnedNames, code);
if (code != 0) {
pathp = smb_GetSMBData(inp, NULL);
pathp = smb_ParseASCIIBlock(pathp, NULL);
- osi_Log1(afsd_logp, "SMB receive check path %s",
- osi_LogSaveString(afsd_logp, pathp));
+ osi_Log1(smb_logp, "SMB receive check path %s",
+ osi_LogSaveString(smb_logp, pathp));
if (!pathp) {
return CM_ERROR_BADFD;
return CM_ERROR_BADSMB;
}
- osi_Log2(afsd_logp, "SMB receive setfile attributes time %d, attr 0x%x",
+ osi_Log2(smb_logp, "SMB receive setfile attributes time %d, attr 0x%x",
dosTime, attribute);
rootScp = cm_rootSCachep;
if (*pathp == 0) /* null path */
pathp = "\\";
- osi_Log1(afsd_logp, "SMB receive getfile attributes path %s",
- osi_LogSaveString(afsd_logp, pathp));
+ osi_Log1(smb_logp, "SMB receive getfile attributes path %s",
+ osi_LogSaveString(smb_logp, pathp));
rootScp = cm_rootSCachep;
{
smb_tid_t *tidp;
- osi_Log0(afsd_logp, "SMB receive tree disconnect");
+ osi_Log0(smb_logp, "SMB receive tree disconnect");
/* find the tree and free it */
tidp = smb_FindTID(vcp, ((smb_t *)inp)->tid, 0);
pathp = smb_GetSMBData(inp, NULL);
pathp = smb_ParseASCIIBlock(pathp, NULL);
- osi_Log1(afsd_logp, "SMB receive open file [%s]", osi_LogSaveString(afsd_logp, pathp));
+ osi_Log1(smb_logp, "SMB receive open file [%s]", osi_LogSaveString(smb_logp, pathp));
#ifdef DEBUG_VERBOSE
{
int match;
char shortName[13];
- rockp = vrockp;
+ rockp = (smb_renameRock_t *) vrockp;
if (rockp->vcp->flags & SMB_VCFLAG_USEV3)
caseFold = CM_FLAG_CASEFOLD;
oldPathp = smb_ParseASCIIBlock(tp, &tp);
newPathp = smb_ParseASCIIBlock(tp, &tp);
- osi_Log2(afsd_logp, "smb rename %s to %s",
- osi_LogSaveString(afsd_logp, oldPathp),
- osi_LogSaveString(afsd_logp, newPathp));
+ osi_Log2(smb_logp, "smb rename %s to %s",
+ osi_LogSaveString(smb_logp, oldPathp),
+ osi_LogSaveString(smb_logp, newPathp));
spacep = inp->spacep;
smb_StripLastComponent(spacep->data, &oldLastNamep, oldPathp);
/* Check if the file already exists; 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
- */
+ cm_ReleaseSCache(newDscp);
+ cm_ReleaseSCache(oldDscp);
+ cm_ReleaseUser(userp);
+ if (!code)
+ cm_ReleaseSCache(tmpscp);
+ /* Check if the old and the new names differ only in case. If so return
+ * success, else return CM_ERROR_EXISTS
+ */
+ if(oldDscp == newDscp && !stricmp(oldLastNamep, newLastNamep)) {
+ osi_Log0(afsd_logp, "Rename: Old and new names are the same");
+ code = 0;
+ } else {
+ /* file exist, do not rename, also fixes move */
+ osi_Log0(afsd_logp, "Can't rename. Target already exists");
+ code = CM_ERROR_EXISTS;
+ }
+ return code;
}
/* Now search the directory for the pattern, and do the appropriate rename when found */
}
cm_ReleaseUser(userp);
-
cm_ReleaseSCache(oldDscp);
cm_ReleaseSCache(newDscp);
-
return code;
}
fid = smb_GetSMBParm(inp, 0);
- osi_Log1(afsd_logp, "SMB flush fid %d", fid);
+ osi_Log1(smb_logp, "SMB flush fid %d", fid);
fid = smb_ChainFID(fid, inp);
fidp = smb_FindFID(vcp, fid, 0);
fid = smb_GetSMBParm(inp, 0);
dosTime = smb_GetSMBParm(inp, 1) | (smb_GetSMBParm(inp, 2) << 16);
- osi_Log1(afsd_logp, "SMB close fid %d", fid);
+ osi_Log1(smb_logp, "SMB close fid %d", fid);
fid = smb_ChainFID(fid, inp);
fidp = smb_FindFID(vcp, fid, 0);
op = smb_GetSMBData(inp, NULL);
op = smb_ParseDataBlock(op, NULL, &inDataBlockCount);
- osi_Log3(afsd_logp, "smb_ReceiveCoreWrite fd %d, off 0x%x, size 0x%x",
+ osi_Log3(smb_logp, "smb_ReceiveCoreWrite fd %d, off 0x%x, size 0x%x",
fd, offset.LowPart, count);
fd = smb_ChainFID(fd, inp);
fd = smb_GetSMBParm(inp, 0);
fidp = smb_FindFID(vcp, fd, 0);
- osi_Log2(afsd_logp, "Completing Raw Write offset %x count %x",
+ osi_Log2(smb_logp, "Completing Raw Write offset %x count %x",
rwcp->offset.LowPart, rwcp->count);
userp = smb_GetUser(vcp, inp);
op = (char *) inp->data;
op += smb_GetSMBParm(inp, 11);
- osi_Log4(afsd_logp,
+ osi_Log4(smb_logp,
"smb_ReceiveCoreWriteRaw fd %d, off 0x%x, size 0x%x, WriteMode 0x%x",
fd, offset.LowPart, count, writeMode);
offset.HighPart = 0; /* too bad */
offset.LowPart = smb_GetSMBParm(inp, 2) | (smb_GetSMBParm(inp, 3) << 16);
- osi_Log3(afsd_logp, "smb_ReceiveCoreRead fd %d, off 0x%x, size 0x%x",
+ osi_Log3(smb_logp, "smb_ReceiveCoreRead fd %d, off 0x%x, size 0x%x",
fd, offset.LowPart, count);
fd = smb_ChainFID(fd, inp);
if (!smb_IsLegalFilename(lastNamep))
return CM_ERROR_BADNTFILENAME;
- osi_Log1(afsd_logp, "SMB receive create [%s]", osi_LogSaveString( afsd_logp, pathp ));
+ osi_Log1(smb_logp, "SMB receive create [%s]", osi_LogSaveString( smb_logp, pathp ));
#ifdef DEBUG_VERBOSE
{
char *hexp;
void smb_DispatchPacket(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp,
NCB *ncbp, raw_write_cont_t *rwcp)
{
- static showErrors = 0;
smb_dispatch_t *dp;
smb_t *smbp;
unsigned long code = 0;
/* process each request in the packet; inCom, wctp and inCount
* are already set up.
*/
- osi_Log2(afsd_logp, "SMB received op 0x%x lsn %d", inp->inCom,
+ osi_Log2(smb_logp, "SMB received op 0x%x lsn %d", inp->inCom,
ncbp->ncb_lsn);
/* now do the dispatch */
rwcp);
else {
osi_LogEvent("AFS Dispatch %s",(myCrt_Dispatch(inp->inCom)),"vcp[%x] lana[%d] lsn[%d]",(int)vcp,vcp->lana,vcp->lsn);
- osi_Log4(afsd_logp,"Dispatch %s vcp[%x] lana[%d] lsn[%d]",(myCrt_Dispatch(inp->inCom)),vcp,vcp->lana,vcp->lsn);
+ osi_Log4(smb_logp,"Dispatch %s vcp[%x] lana[%d] lsn[%d]",(myCrt_Dispatch(inp->inCom)),vcp,vcp->lana,vcp->lsn);
code = (*(dp->procp)) (vcp, inp, outp);
osi_LogEvent("AFS Dispatch return",NULL,"Code[%d]",(code==0)?0:code-CM_ERROR_BASE);
- osi_Log1(afsd_logp,"Dispatch return code[%d]",(code==0)?0:code-CM_ERROR_BASE);
+ osi_Log1(smb_logp,"Dispatch return code[%d]",(code==0)?0:code-CM_ERROR_BASE);
}
if (oldGen != sessionGen) {
1005, NULL, 1, ncbp->ncb_length, ptbuf, smbp);
DeregisterEventSource(h);
#else /* DJGPP */
- osi_Log1(afsd_logp, "Pkt straddled session startup, "
+ osi_Log1(smb_logp, "Pkt straddled session startup, "
"ncb length %d", ncbp->ncb_length);
#endif /* !DJGPP */
}
if (showErrors) {
sprintf(tbuffer, "Received bad SMB req 0x%x", inp->inCom);
code = (*smb_MBfunc)(NULL, tbuffer, "Cancel: don't show again",
- MB_OKCANCEL);
+ MB_OKCANCEL|MB_SERVICE_NOTIFICATION);
if (code == IDCANCEL) showErrors = 0;
}
#endif /* DJGPP */
smb_LogPacket(inp);
#endif /* NOTSERVICE */
#else /* DJGPP */
- osi_Log1(afsd_logp, "Invalid SMB message, length %d",
+ osi_Log1(smb_logp, "Invalid SMB message, length %d",
ncbp->ncb_length);
#endif /* !DJGPP */
if (tod > EXPIREDATE) {
(*smb_MBfunc)(NULL, "AFS demo expiration",
"afsd dispatcher",
- MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
+ MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_SERVICE_NOTIFICATION);
trhd_Exit(1);
}
}
rc = ncbp->ncb_retcode;
if (rc != NRC_PENDING && rc != NRC_GOODRET)
- osi_Log1(afsd_logp, "NCBRECV failure code %d", rc);
+ osi_Log1(smb_logp, "NCBRECV failure code %d", rc);
switch (rc) {
case NRC_GOODRET: break;
*/
if (vcp) {
if (dead_vcp)
- osi_Log1(afsd_logp,
+ osi_Log1(smb_logp,
"dead_vcp already set, %x",
dead_vcp);
if (!dead_vcp && !(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
- osi_Log2(afsd_logp,
+ osi_Log2(smb_logp,
"setting dead_vcp %x, user struct %x",
vcp, vcp->usersp);
dead_vcp = vcp;
}
/* Also log in the trace log. */
- osi_Log4(afsd_logp, "Server: BAD VCP!"
+ osi_Log4(smb_logp, "Server: BAD VCP!"
"LSNs[idx_session]=[%d],"
"lanas[idx_session]=[%d],"
"ncbp->ncb_lsn=[%d],"
if (tod > EXPIREDATE) {
(*smb_MBfunc)(NULL, "AFS demo expiration",
"afsd listener",
- MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
+ MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_SERVICE_NOTIFICATION);
#ifndef DJGPP
ExitThread(1);
#else
if (code != 0)
{
- /* terminate if shutdown flag is set */
+#ifndef DJGPP
+ char tbuffer[256];
+#endif
+
+ /* terminate silently if shutdown flag is set */
if (smbShutdownFlag == 1) {
#ifndef DJGPP
ExitThread(1);
#endif
}
+ osi_Log2(smb_logp,
+ "NCBLISTEN lana=%d failed with code %d",
+ ncbp->ncb_lana_num, code);
+ osi_Log0(smb_logp,
+ "Client exiting due to network failure. Please restart client.\n");
+
#ifndef DJGPP
- osi_assert(0);
+ sprintf(tbuffer,
+ "Client exiting due to network failure. Please restart client.\n"
+ "NCBLISTEN lana=%d failed with code %d",
+ ncbp->ncb_lana_num, code);
+ if (showErrors)
+ code = (*smb_MBfunc)(NULL, tbuffer, "AFS Client Service: Fatal Error",
+ MB_OK|MB_SERVICE_NOTIFICATION);
+ osi_assert(tbuffer);
+ ExitThread(1);
#else
fprintf(stderr, "NCBLISTEN lana=%d failed with code %d\n",
ncbp->ncb_lana_num, code);
- osi_Log2(0, "NCBLISTEN lana=%d failed with code %d",
- ncbp->ncb_lana_num, code);
fprintf(stderr, "\nClient exiting due to network failure "
"(possibly due to power-saving mode)\n");
fprintf(stderr, "Please restart client.\n");
- afs_exit(AFS_EXITCODE_NETWORK_FAILURE);
+ afs_exit(AFS_EXITCODE_NETWORK_FAILURE);
#endif /* !DJGPP */
}
if (strncmp(rname, cname, NCBNAMSZ) != 0)
flags |= SMB_VCFLAG_REMOTECONN;
- osi_Log1(afsd_logp, "New session lsn %d", ncbp->ncb_lsn);
+ osi_Log1(smb_logp, "New session lsn %d", ncbp->ncb_lsn);
/* lock */
lock_ObtainMutex(&smb_ListenerLock);
DeregisterEventSource(h);
#else /* DJGPP */
afsi_log("NCBLISTEN completed, call from %s",rname);
- osi_Log1(afsd_logp, "SMB session startup, %d ongoing ops",
+ osi_Log1(smb_logp, "SMB session startup, %d ongoing ops",
ongoingOps);
time(&now);
fprintf(stderr, "%s: New session %d starting from host %s\n",
/* Add new NCB for new session */
char eventName[MAX_PATH];
- osi_Log1(afsd_logp, "smb_Listener creating new session %d", i);
+ osi_Log1(smb_logp, "smb_Listener creating new session %d", i);
InitNCBslot(numNCBs);
numNCBs++;
if (tod > EXPIREDATE) {
#ifndef DJGPP
(*smb_MBfunc)(NULL, "AFS demo expiration", "afsd",
- MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
+ MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_SERVICE_NOTIFICATION);
exit(1);
#else /* DJGPP */
fprintf(stderr, "AFS demo expiration\n");
/*fprintf(stderr, "returned from NCBHANGUP session %d LSN %d\n", i, LSNs[i]);*/
if (code == 0) code = ncbp->ncb_retcode;
if (code != 0) {
- osi_Log1(afsd_logp, "Netbios NCBHANGUP error code %d", code);
+ osi_Log1(smb_logp, "Netbios NCBHANGUP error code %d", code);
fprintf(stderr, "Session %d Netbios NCBHANGUP error code %d", i, code);
}
}
if(!packet) return;
- osi_Log0(afsd_logp, "*** SMB packet dump ***");
+ osi_Log0(smb_logp, "*** SMB packet dump ***");
vp = (BYTE *) packet->data;
*cp = 0;
- osi_Log0( afsd_logp, buf );
+ osi_Log0( smb_logp, buf );
}
- osi_Log0(afsd_logp, "*** End SMB packet dump ***");
+ osi_Log0(smb_logp, "*** End SMB packet dump ***");
}