X-Git-Url: http://pileus.org/git/?p=~andy%2Ffetchmail;a=blobdiff_plain;f=smbutil.c;h=78041ae969180f950f29cb6d5d682181079969da;hp=aa50ed09652418effda7ca57255edad822045686;hb=f16d8d23439b5569f0c2e1af22494708b507f277;hpb=c3e52ea6ca3178b7ecab4b389a9ba9269662b48f diff --git a/smbutil.c b/smbutil.c index aa50ed09..78041ae9 100644 --- a/smbutil.c +++ b/smbutil.c @@ -26,7 +26,7 @@ char versionString[] ="libntlm version 0.21"; #define AddBytes(ptr, header, buf, count) \ { \ -if (buf && count) \ +if (buf != NULL && count != 0) \ { \ SSVAL(&ptr->header.len,0,count); \ SSVAL(&ptr->header.maxlen,0,count); \ @@ -44,23 +44,23 @@ else \ #define AddString(ptr, header, string) \ { \ -char *p = string; \ -int len = 0; \ -if (p) len = strlen(p); \ -AddBytes(ptr, header, ((unsigned char*)p), len); \ +char *p_ = string; \ +int len_ = 0; \ +if (p_) len_ = strlen(p_); \ +AddBytes(ptr, header, ((unsigned char*)p_), len_); \ } #define AddUnicodeString(ptr, header, string) \ { \ -char *p = string; \ -unsigned char *b = NULL; \ -int len = 0; \ -if (p) \ +char *p_ = string; \ +unsigned char *b_ = NULL; \ +int len_ = 0; \ +if (p_) \ { \ - len = strlen(p); \ - b = strToUnicode(p); \ + len_ = strlen(p_); \ + b_ = strToUnicode(p_); \ } \ -AddBytes(ptr, header, b, len*2); \ +AddBytes(ptr, header, b_, len_*2); \ } @@ -82,15 +82,29 @@ static void dumpRaw(FILE *fp, unsigned char *buf, size_t len) fprintf(fp,"\n"); } +/* helper macro to destructively resize buffers; assumes that bufsiz + * is initialized to 0 if buf is unallocated! */ +#define allocbuf(buf, bufsiz, need, type) do { \ + if (!buf || (need) > (bufsiz)) \ + { \ + (bufsiz) = ((need) < 1024) ? 1024 : (need); \ + xfree(buf); \ + (buf) = (type)xmalloc(bufsiz); \ + } \ + } while (0); + +/* this is a brute-force conversion from UCS-2LE to US-ASCII, discarding + * the upper 9 bits */ static char *unicodeToString(char *p, size_t len) { size_t i; - static char buf[1024]; + static char *buf; + static size_t bufsiz; + + allocbuf(buf, bufsiz, len + 1, char *); - assert(len+1 < sizeof buf); - for (i=0; iident); - fprintf(fp," mType = %d\n",IVAL(&request->msgType,0)); + fprintf(fp," mType = %ld\n",(long int)IVAL(&request->msgType,0)); fprintf(fp," Flags = %08x\n",IVAL(&request->flags,0)); - fprintf(fp," User = %s\n",GetString(request,user)); - fprintf(fp," Domain = %s\n",GetString(request,domain)); + fprintf(fp," User = %s\n",(char *)GetString(request,user)); + fprintf(fp," Domain = %s\n",(char *)GetString(request,domain)); } void dumpSmbNtlmAuthChallenge(FILE *fp, tSmbNtlmAuthChallenge *challenge) { fprintf(fp,"NTLM Challenge:\n"); fprintf(fp," Ident = %s\n",challenge->ident); - fprintf(fp," mType = %d\n",IVAL(&challenge->msgType,0)); + fprintf(fp," mType = %ld\n",(long int)IVAL(&challenge->msgType,0)); fprintf(fp," Domain = %s\n",GetUnicodeString(challenge,uDomain)); fprintf(fp," Flags = %08x\n",IVAL(&challenge->flags,0)); fprintf(fp," Challenge = "); dumpRaw(fp, challenge->challengeData,8); @@ -151,7 +168,7 @@ void dumpSmbNtlmAuthResponse(FILE *fp, tSmbNtlmAuthResponse *response) { fprintf(fp,"NTLM Response:\n"); fprintf(fp," Ident = %s\n",response->ident); - fprintf(fp," mType = %d\n",IVAL(&response->msgType,0)); + fprintf(fp," mType = %ld\n",(long int)IVAL(&response->msgType,0)); fprintf(fp," LmResp = "); DumpBuffer(fp,response,lmResponse); fprintf(fp," NTResp = "); DumpBuffer(fp,response,ntResponse); fprintf(fp," Domain = %s\n",GetUnicodeString(response,uDomain));