diff options
author | Luke Leighton <lkcl@samba.org> | 1999-07-13 19:52:33 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 1999-07-13 19:52:33 +0000 |
commit | d2b2dff2e854a73a8b80eb4b23f19a540ce3afe1 (patch) | |
tree | 326e123d30089d9c68413c55f1789f17e5c51dd0 | |
parent | d9a18c82d13dda861e1cbcce8390b52aa73118a5 (diff) | |
download | samba-d2b2dff2e854a73a8b80eb4b23f19a540ce3afe1.tar.gz samba-d2b2dff2e854a73a8b80eb4b23f19a540ce3afe1.tar.bz2 samba-d2b2dff2e854a73a8b80eb4b23f19a540ce3afe1.zip |
dfs parsed string length was being set explicitly to value "6", overwriting
the correct length.
(This used to be commit 5d1fad53c2bdfef63930e0b9d5cc460c9740066e)
-rw-r--r-- | source3/smbd/trans2.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 381f4ed392..7cfe291c0d 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -2021,6 +2021,8 @@ int reply_findnclose(connection_struct *conn, return(outsize); } +#define UNICODE_DFS + /**************************************************************************** reply to a TRANS2_GET_DFS_REFERRAL ****************************************************************************/ @@ -2054,6 +2056,8 @@ static int call_trans2getdfsreferral(connection_struct *conn, DEBUG(0,("call_trans2getdfsreferral:1\n")); ZERO_STRUCT(rtp); + ZERO_STRUCT(reply); + /* decode the param member of query */ rtp.level=SVAL(params, 0); DEBUGADD(0,("rtp.level:[%d]\n",rtp.level)); @@ -2084,7 +2088,7 @@ static int call_trans2getdfsreferral(connection_struct *conn, DEBUGADD(0,("checking against [%s][%d]\n", list[i].localpath, filename_len)); if( (filename_len==query_file_len) && - (!strncmp(rtp.directory, list[i].localpath, query_file_len)) ) + (!StrnCaseCmp(rtp.directory, list[i].localpath, query_file_len)) ) { bytesreq+=22; /* the referal size */ @@ -2117,14 +2121,14 @@ static int call_trans2getdfsreferral(connection_struct *conn, localstring_offset = pdata + 8 + reply.number_of_referal*22; -/* unicode version */ +#ifdef UNICODE_DFS mangledstring_offset = localstring_offset + 2*(1+strlen(reply.filename)); sharename_offset = mangledstring_offset + 2*(1+strlen(reply.mangledname)); -/*ascii version +#else mangledstring_offset = localstring_offset + (1+strlen(reply.filename)); sharename_offset = mangledstring_offset + (1+strlen(reply.mangledname)); -*/ +#endif referal_offset = pdata + 8; /* right now respond storage server */ @@ -2134,50 +2138,45 @@ static int call_trans2getdfsreferral(connection_struct *conn, reply.server_function=1; /* write the header */ -/* unicode version*/ - /*SSVAL(pheader, 0, reply.path_consumed*2);*/ -/*ascii version - +#ifdef UNICODE_DFS + SSVAL(pheader, 0, reply.path_consumed*2); +#else SSVAL(pheader, 0, reply.path_consumed); -*/ - - SSVAL(pheader, 0, 6); - +#endif SSVAL(pheader, 2, reply.number_of_referal); SIVAL(pheader, 4, reply.server_function); /* write the local path string */ -/* unicode version*/ +#ifdef UNICODE_DFS for(i=0; i<strlen(reply.filename); i++) { SSVAL(localstring_offset, 2*i, (uint16) reply.filename[i]); } SSVAL(localstring_offset, 2*strlen(reply.filename), 0); -/*ascii version +#else for(i=0; i<strlen(reply.filename); i++) { localstring_offset[i]=reply.filename[i]; } localstring_offset[strlen(reply.filename)]=0; -*/ +#endif DEBUG(0,("reply.filename is [%s]:[%d], i is [%d]\n", reply.filename, strlen(reply.filename), i)); /* write the mangled local path string */ -/* unicode version*/ +#ifdef UNICODE_DFS for(i=0; i<strlen(reply.mangledname); i++) { SSVAL(mangledstring_offset, 2*i, (uint16) reply.mangledname[i]); } SSVAL(mangledstring_offset, 2*i, 0); -/*ascii version - +#else for(i=0; i<strlen(reply.mangledname); i++) { mangledstring_offset[i]=reply.mangledname[i]; } mangledstring_offset[i]=0; -*/ +#endif DEBUGADD(0,("call_trans2getdfsreferral:4\n")); /* the order of the referals defines the load balancing */ @@ -2205,7 +2204,7 @@ static int call_trans2getdfsreferral(connection_struct *conn, SSVAL(referal_offset, 18, mangledstring_offset-referal_offset); SSVAL(referal_offset, 20, sharename_offset-referal_offset); -/* unicode version */ +#ifdef UNICODE_DFS for(j=0; j<list[i].sharename_length; j++) { SSVAL(sharename_offset, 2*j, (uint16) list[i].sharename[j]); @@ -2213,7 +2212,7 @@ static int call_trans2getdfsreferral(connection_struct *conn, SSVAL(sharename_offset, 2*j, 0); sharename_offset=sharename_offset + 2*(1+list[i].sharename_length); -/*ascii version +#else for(j=0; j<list[i].sharename_length; j++) { sharename_offset[j]=list[i].sharename[j]; @@ -2221,7 +2220,7 @@ static int call_trans2getdfsreferral(connection_struct *conn, sharename_offset[j]=0; sharename_offset=sharename_offset + (1+list[i].sharename_length); -*/ +#endif referal_offset=referal_offset+22; } |