From 6a8a64dc87863b39490d7f22a7d107e6916584f2 Mon Sep 17 00:00:00 2001 From: "Christopher R. Hertel" Date: Wed, 28 Jan 2004 23:13:22 +0000 Subject: [PATCH] This is Simo's patch for the NetShareEnum() bug which caused us to return share names longer than 12 bytes. The function now filters out names longer than 12 bytes (which is compatible with Windows behavior). A better fix might be to store short names along with any names longer than 12 bytes, using a simple (very) name mangling. I'm committing in HEAD. If there are no problems this can easily be merged into 3.0.x. Chris -)----- --- source/smbd/lanman.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/source/smbd/lanman.c b/source/smbd/lanman.c index c53889a7a47..c4df84e76c7 100644 --- a/source/smbd/lanman.c +++ b/source/smbd/lanman.c @@ -1465,12 +1465,24 @@ static BOOL api_RNetShareGetInfo(connection_struct *conn,uint16 vuid, char *para } /**************************************************************************** - view list of shares available - ****************************************************************************/ -static BOOL api_RNetShareEnum(connection_struct *conn,uint16 vuid, char *param,char *data, - int mdrcnt,int mprcnt, - char **rdata,char **rparam, - int *rdata_len,int *rparam_len) + View the list of available shares. + + This function is the server side of the NetShareEnum() RAP call. + It fills the return buffer with share names and share comments. + Note that the return buffer normally (in all known cases) allows only + twelve byte strings for share names (plus one for a nul terminator). + Share names longer than 12 bytes must be skipped. + ****************************************************************************/ +static BOOL api_RNetShareEnum( connection_struct *conn, + uint16 vuid, + char *param, + char *data, + int mdrcnt, + int mprcnt, + char **rdata, + char **rparam, + int *rdata_len, + int *rparam_len ) { char *str1 = param+2; char *str2 = skip_string(str1,1); @@ -1490,7 +1502,9 @@ static BOOL api_RNetShareEnum(connection_struct *conn,uint16 vuid, char *param,c data_len = fixed_len = string_len = 0; for (i=0;i