From 4eea9caac3cf260cf99ec67c30e31dd2d8c623d9 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 9 Aug 2008 05:48:10 +0000 Subject: [PATCH] windows-smb-skip-nuls-20080809 LICENSE MIT rename SMB_STF_IGNORENULL to SMB_STF_IGNORENUL apply SMB_STR_IGNORENUL when copying length tagged strings into the smb response packets. --- src/WINNT/afsd/smb.c | 10 +++++----- src/WINNT/afsd/smb.h | 2 +- src/WINNT/afsd/smb3.c | 18 +++++++++--------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 0b0ead2..c231e04 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -2753,7 +2753,7 @@ unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp, if (WANTS_UNICODE(pktp) && !(flags & SMB_STRF_FORCEASCII)) { StringCbLengthW(str, SMB_STRINGBUFSIZE * sizeof(wchar_t), plen); - if (!(flags & SMB_STRF_IGNORENULL)) + if (!(flags & SMB_STRF_IGNORENUL)) *plen += sizeof(wchar_t); return (unsigned char *) 1; /* return TRUE if we are using unicode */ @@ -2770,7 +2770,7 @@ unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp, cch_dest = cm_ClientStringToUtf8(str, (int)cch_str, NULL, 0); if (plen) - *plen = ((flags & SMB_STRF_IGNORENULL)? cch_dest: cch_dest+1); + *plen = ((flags & SMB_STRF_IGNORENUL)? cch_dest: cch_dest+1); return NULL; } @@ -2809,7 +2809,7 @@ unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp, return NULL; *((wchar_t *) outp) = L'\0'; - if (plen && !(flags & SMB_STRF_IGNORENULL)) + if (plen && !(flags & SMB_STRF_IGNORENUL)) *plen += sizeof(wchar_t); return outp + sizeof(wchar_t); } @@ -2823,7 +2823,7 @@ unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp, } if (plen) - *plen += sizeof(wchar_t) * ((flags & SMB_STRF_IGNORENULL)? nchars - 1: nchars); + *plen += sizeof(wchar_t) * ((flags & SMB_STRF_IGNORENUL)? nchars - 1: nchars); return outp + sizeof(wchar_t) * nchars; } @@ -2836,7 +2836,7 @@ unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp, cch_dest = cm_ClientStringToUtf8(str, -1, outp, (int)buffersize); if (plen) - *plen += ((flags & SMB_STRF_IGNORENULL)? cch_dest - 1: cch_dest); + *plen += ((flags & SMB_STRF_IGNORENUL)? cch_dest - 1: cch_dest); return outp + cch_dest; } diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index 101a431..b8699da 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -651,7 +651,7 @@ extern void smb_StripLastComponent(clientchar_t *outPathp, clientchar_t **lastCo #define SMB_STRF_FORCEASCII (1<<0) #define SMB_STRF_ANSIPATH (1<<1) -#define SMB_STRF_IGNORENULL (1<<2) +#define SMB_STRF_IGNORENUL (1<<2) extern clientchar_t *smb_ParseASCIIBlock(smb_packet_t * pktp, unsigned char *inp, char **chainpp, int flags); diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 37bd818..dc1f940 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -2710,7 +2710,7 @@ long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t * #ifdef SMB_UNICODE } #endif - smb_UnparseString(op, qi.u.FSattributeInfo.FSname, _C("AFS"), &sz, 0); + smb_UnparseString(op, qi.u.FSattributeInfo.FSname, _C("AFS"), &sz, SMB_STRF_IGNORENUL); qi.u.FSattributeInfo.FSnameLength = sz; responseSize = @@ -3037,13 +3037,13 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t goto done; } - smb_UnparseString(opx, qpi.u.QPfileAltNameInfo.fileName, shortName, &len, 0); + smb_UnparseString(opx, qpi.u.QPfileAltNameInfo.fileName, shortName, &len, SMB_STRF_IGNORENUL); qpi.u.QPfileAltNameInfo.fileNameLength = len; goto done; } else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) { - smb_UnparseString(opx, qpi.u.QPfileNameInfo.fileName, lastComp, &len, 0); + smb_UnparseString(opx, qpi.u.QPfileNameInfo.fileName, lastComp, &len, SMB_STRF_IGNORENUL); qpi.u.QPfileNameInfo.fileNameLength = len; goto done; @@ -3121,7 +3121,7 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t qpi.u.QPfileAllInfo.mode = 0; qpi.u.QPfileAllInfo.alignmentRequirement = 0; - smb_UnparseString(opx, qpi.u.QPfileAllInfo.fileName, lastComp, &len, 0); + smb_UnparseString(opx, qpi.u.QPfileAllInfo.fileName, lastComp, &len, SMB_STRF_IGNORENUL); qpi.u.QPfileAllInfo.fileNameLength = len; } @@ -3500,7 +3500,7 @@ long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t name = _C("\\"); /* probably can't happen */ lock_ReleaseMutex(&fidp->mx); - smb_UnparseString(opx, qfi.u.QFfileNameInfo.fileName, name, &len, 0); + smb_UnparseString(opx, qfi.u.QFfileNameInfo.fileName, name, &len, SMB_STRF_IGNORENUL); outp->totalData = len + 4; /* this is actually what we want to return */ qfi.u.QFfileNameInfo.fileNameLength = len; } @@ -4582,7 +4582,7 @@ long smb_T2SearchDirSingle(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op /* add header to name & term. null */ onbytes = 0; - smb_UnparseString(opx, NULL, maskp, &onbytes, SMB_STRF_ANSIPATH); + smb_UnparseString(opx, NULL, maskp, &onbytes, SMB_STRF_ANSIPATH|SMB_STRF_IGNORENUL); orbytes = ohbytes + onbytes; /* now, we round up the record to a 4 byte alignment, and we make @@ -4614,7 +4614,7 @@ long smb_T2SearchDirSingle(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op memset(origOp, 0, orbytes); onbytes = 0; - smb_UnparseString(opx, origOp + ohbytes, maskp, &onbytes, SMB_STRF_ANSIPATH); + smb_UnparseString(opx, origOp + ohbytes, maskp, &onbytes, SMB_STRF_ANSIPATH|SMB_STRF_IGNORENUL); switch (infoLevel) { case SMB_INFO_STANDARD: @@ -5284,7 +5284,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t /* finally check if this name will fit */ onbytes = 0; - smb_UnparseString(opx, NULL, cfileName, &onbytes, SMB_STRF_ANSIPATH); + smb_UnparseString(opx, NULL, cfileName, &onbytes, SMB_STRF_ANSIPATH|SMB_STRF_IGNORENUL); orbytes = ohbytes + onbytes; /* now, we round up the record to a 4 byte alignment, @@ -5312,7 +5312,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t memset(origOp, 0, orbytes); onbytes = 0; - smb_UnparseString(opx, origOp + ohbytes, cfileName, &onbytes, SMB_STRF_ANSIPATH); + smb_UnparseString(opx, origOp + ohbytes, cfileName, &onbytes, SMB_STRF_ANSIPATH|SMB_STRF_IGNORENUL); switch (infoLevel) { case SMB_INFO_STANDARD: -- 1.9.4