r5702: Fix bug #2271. Correctly pull out and use resume names in a
authorJeremy Allison <jra@samba.org>
Wed, 9 Mar 2005 00:06:27 +0000 (00:06 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:55:55 +0000 (10:55 -0500)
directory listing (we were incorrectly understanding what was
returned in the "last name" entry).
Jeremy.
(This used to be commit 4f2da9ecf1e5cee4749839ea1b35a942d27de09e)

source3/libsmb/clilist.c

index 4e90a79719e573e8056f61fd1d5b352f2ab9f2a4..d60739cf7c4b25ffedb7816969509d5c0ad53de8 100644 (file)
@@ -268,24 +268,6 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
                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);
@@ -299,10 +281,18 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
 
                /* 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,NULL);
+               for (p2=p,i=0;i<(ff_searchcount-1);i++) {
+                       p2 += interpret_long_filename(cli,info_level,p2,&finfo);
+               }
                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;