--- clilist.c.save 2005-02-06 18:15:32.000000000 +0530 +++ ../SetupFiles/samba-3.0.9/source/libsmb/clilist.c 2005-02-06 18:24:52.000000000 +0530 @@ -142,6 +142,7 @@ Do a directory listing, calling fn on each file found. ****************************************************************************/ + int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { @@ -154,6 +155,7 @@ char *p, *p2; pstring mask; file_info finfo; + file_info sf; int i; char *tdl, *dirlist = NULL; int dirlist_len = 0; @@ -169,6 +171,8 @@ uint16 setup; pstring param; + int transactcount = 0; + /* NT uses 260, OS/2 uses 2. Both accept 1. */ info_level = (cli->capabilities&CAP_NT_SMBS)?260:1; @@ -181,11 +185,12 @@ break; } + transactcount++; if (First) { setup = TRANSACT2_FINDFIRST; SSVAL(param,0,attribute); /* attribute */ SSVAL(param,2,max_matches); /* max count */ - SSVAL(param,4,4+2); /* resume required + close on end */ + SSVAL(param,4,16+4+2); /* backup + resume required + close on end */ SSVAL(param,6,info_level); SIVAL(param,8,0); p = param+12; @@ -197,7 +202,7 @@ SSVAL(param,2,max_matches); /* max count */ SSVAL(param,4,info_level); SIVAL(param,6,0); /* ff_resume_key */ - SSVAL(param,10,8+4+2); /* continue + resume required + close on end */ + SSVAL(param,10,16+/*8+*/4+2); /* backup + continue + resume required + close on end */ p = param+12; p += clistr_push(cli, param+12, mask, sizeof(param)-12, STR_TERMINATE); @@ -265,10 +270,12 @@ if (ff_lastname > 0) { switch(info_level) { case 260: - clistr_pull(cli, mask, p+ff_lastname, + interpret_long_filename(cli,info_level,p+ff_lastname,&sf); + pstrcpy(mask, sf.name); + /*clistr_pull(cli, mask, p+ff_lastname, sizeof(mask), data_len-ff_lastname, - STR_TERMINATE); + STR_TERMINATE);*/ break; case 1: clistr_pull(cli, mask, p+ff_lastname+1, @@ -281,6 +288,7 @@ pstrcpy(mask,""); } + /* and add them to the dirlist pool */ tdl = Realloc(dirlist,dirlist_len + data_len); @@ -308,7 +316,6 @@ DEBUG(3,("received %d entries (eos=%d)\n", ff_searchcount,ff_eos)); - if (ff_searchcount > 0) loop_count = 0;