--- clilist.c 2005-03-13 09:29:52.541928856 -0500
+++ old/clilist.c 2005-03-13 09:30:02.151467984 -0500
@@ -185,7 +185,7 @@
setup = TRANSACT2_FINDFIRST;
SSVAL(param,0,attribute); /* attribute */
SSVAL(param,2,max_matches); /* max count */
- SSVAL(param,4,(FLAG_TRANS2_FIND_REQUIRE_RESUME|FLAG_TRANS2_FIND_CLOSE_IF_END)); /* resume required + close on end */
+ SSVAL(param,4,4+2); /* resume required + close on end */
SSVAL(param,6,info_level);
SIVAL(param,8,0);
p = param+12;
@@ -197,9 +197,7 @@
SSVAL(param,2,max_matches); /* max count */
SSVAL(param,4,info_level);
SIVAL(param,6,0); /* ff_resume_key */
- /* NB. *DON'T* use continue here. If you do it seems that W2K and bretheren
- can miss filenames. Use last filename continue instead. JRA */
- SSVAL(param,4,(FLAG_TRANS2_FIND_REQUIRE_RESUME|FLAG_TRANS2_FIND_CLOSE_IF_END)); /* resume required + close on end */
+ SSVAL(param,10,8+4+2); /* continue + resume required + close on end */
p = param+12;
p += clistr_push(cli, param+12, mask, sizeof(param)-12, STR_TERMINATE);
@@ -264,6 +262,24 @@
p = rdata;
/* we might need the lastname for continuations */
+ if (ff_lastname > 0) {
+ switch(info_level) {
+ case 260:
+ clistr_pull(cli, mask, p+ff_lastname,
+ sizeof(mask),
+ data_len-ff_lastname,
+ STR_TERMINATE);
+ break;
+ case 1:
+ clistr_pull(cli, mask, p+ff_lastname+1,
+ sizeof(mask),
+ -1,
+ STR_TERMINATE);
+ break;
+ }
+ } else {
+ pstrcpy(mask,"");
+ }
/* and add them to the dirlist pool */
tdl = SMB_REALLOC(dirlist,dirlist_len + data_len);
@@ -277,18 +293,10 @@
/* put in a length for the last entry, to ensure we can chain entries
into the next packet */
- for (p2=p,i=0;i<(ff_searchcount-1);i++) {
- p2 += interpret_long_filename(cli,info_level,p2,&finfo);
- }
+ for (p2=p,i=0;i<(ff_searchcount-1);i++)
+ p2 += interpret_long_filename(cli,info_level,p2,NULL);
SSVAL(p2,0,data_len - PTR_DIFF(p2,p));
- /* we might need the lastname for continuations */
- if (ff_lastname > 0) {
- pstrcpy(mask, finfo.name);
- } else {
- pstrcpy(mask,"");
- }
-
/* grab the data for later use */
memcpy(dirlist+dirlist_len,p,data_len);
dirlist_len += data_len;
Message-ID: <20050313143301 .GA27986@ andromeda>
Date: Sun, 13 Mar 2005 09:33:01 -0500
From: Justin Pryzby <email address hidden>
To: <email address hidden>
Subject: patch
--dDRMvlgZJXvWKvBx Disposition: inline
Content-Type: text/plain; charset=us-ascii
Content-
Attaching a patch which is the result of the two upstream svn commits,
applied cleanly to Debian's clilist.c, and reran diff.
Justin
--dDRMvlgZJXvWKvBx Disposition: attachment; filename=smbpatch
Content-Type: text/plain; charset=us-ascii
Content-
--- clilist.c 2005-03-13 09:29:52.541928856 -0500 FINDFIRST; param,0, attribute) ; /* attribute */ param,2, max_matches) ; /* max count */ 4,(FLAG_ TRANS2_ FIND_REQUIRE_ RESUME| FLAG_TRANS2_ FIND_CLOSE_ IF_END) ); /* resume required + close on end */ param,6, info_level) ; param,8, 0); param,2, max_matches) ; /* max count */ param,4, info_level) ; param,6, 0); /* ff_resume_key */ 4,(FLAG_ TRANS2_ FIND_REQUIRE_ RESUME| FLAG_TRANS2_ FIND_CLOSE_ IF_END) ); /* resume required + close on end */ 10,8+4+ 2); /* continue + resume required + close on end */
STR_TERMINATE) ;
+++ old/clilist.c 2005-03-13 09:30:02.151467984 -0500
@@ -185,7 +185,7 @@
setup = TRANSACT2_
SSVAL(
SSVAL(
- SSVAL(param,
+ SSVAL(param,4,4+2); /* resume required + close on end */
SSVAL(
SIVAL(
p = param+12;
@@ -197,9 +197,7 @@
SSVAL(
SSVAL(
SIVAL(
- /* NB. *DON'T* use continue here. If you do it seems that W2K and bretheren
- can miss filenames. Use last filename continue instead. JRA */
- SSVAL(param,
+ SSVAL(param,
p = param+12;
p += clistr_push(cli, param+12, mask, sizeof(param)-12,
@@ -264,6 +262,24 @@
p = rdata;
/* we might need the lastname for continuations */ ff_lastname,
+ if (ff_lastname > 0) {
+ switch(info_level) {
+ case 260:
+ clistr_pull(cli, mask, p+ff_lastname,
+ sizeof(mask),
+ data_len-
+ STR_TERMINATE);
+ break;
+ case 1:
+ clistr_pull(cli, mask, p+ff_lastname+1,
+ sizeof(mask),
+ -1,
+ STR_TERMINATE);
+ break;
+ }
+ } else {
+ pstrcpy(mask,"");
+ }
/* and add them to the dirlist pool */ dirlist, dirlist_ len + data_len);
tdl = SMB_REALLOC(
@@ -277,18 +293,10 @@
/* put in a length for the last entry, to ensure we can chain entries 0;i<(ff_ searchcount- 1);i++) { long_filename( cli,info_ level,p2, &finfo) ; 0;i<(ff_ searchcount- 1);i++) long_filename( cli,info_ level,p2, NULL); p2,0,data_ len - PTR_DIFF(p2,p));
into the next packet */
- for (p2=p,i=
- p2 += interpret_
- }
+ for (p2=p,i=
+ p2 += interpret_
SSVAL(
- /* we might need the lastname for continuations */ dirlist+ dirlist_ len,p,data_ len);
- if (ff_lastname > 0) {
- pstrcpy(mask, finfo.name);
- } else {
- pstrcpy(mask,"");
- }
-
/* grab the data for later use */
memcpy(
dirlist_len += data_len;
--dDRMvlgZJXvWK vBx--