s3:libsmb: fix NetServerEnum3 rap calls.
authorStefan Metzmacher <metze@samba.org>
Mon, 8 Feb 2010 17:38:03 +0000 (18:38 +0100)
committerStefan Metzmacher <metze@samba.org>
Mon, 8 Feb 2010 17:47:41 +0000 (18:47 +0100)
metze

source3/libsmb/clirap.c

index a9a13f7b96d3a2b0173761766f4dec86331d8c82..7f6dbf5bbb5abc4efa32a3bb96b925f9f1a481a9 100644 (file)
@@ -248,11 +248,9 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
                p = param;
                SIVAL(p,0,func); /* api number */
                p += 2;
-               /* Next time through we need to use the continue api */
-               func = RAP_NetServerEnum3;
 
-               if (last_entry) {
-                       strlcpy(p,"WrLehDOz", sizeof(param)-PTR_DIFF(p,param));
+               if (func == RAP_NetServerEnum3) {
+                       strlcpy(p,"WrLehDzz", sizeof(param)-PTR_DIFF(p,param));
                } else {
                        strlcpy(p,"WrLehDz", sizeof(param)-PTR_DIFF(p,param));
                }
@@ -271,7 +269,7 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
                 * to continue from.
                 */
                len = push_ascii(p,
-                               last_entry ? last_entry : workgroup,
+                               workgroup,
                                sizeof(param) - PTR_DIFF(p,param) - 1,
                                STR_TERMINATE|STR_UPPER);
 
@@ -281,6 +279,22 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
                }
                p += len;
 
+               if (func == RAP_NetServerEnum3) {
+                       len = push_ascii(p,
+                                       last_entry ? last_entry : "",
+                                       sizeof(param) - PTR_DIFF(p,param) - 1,
+                                       STR_TERMINATE);
+
+                       if (len == (size_t)-1) {
+                               SAFE_FREE(last_entry);
+                               return false;
+                       }
+                       p += len;
+               }
+
+               /* Next time through we need to use the continue api */
+               func = RAP_NetServerEnum3;
+
                if (!cli_api(cli,
                        param, PTR_DIFF(p,param), 8, /* params, length, max */
                        NULL, 0, CLI_BUFFER_SIZE, /* data, length, max */