diff options
author | Stefan Metzmacher <metze@samba.org> | 2010-02-08 18:38:03 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2010-02-15 14:46:52 +0100 |
commit | 7948c58dd1e7e3173f3da7c7a7f48ddc90f81444 (patch) | |
tree | b8c57cf107a3b5d7545d671b1f9142369abea3c7 /source3 | |
parent | f7c5a163aaa5a604010637fa1017fc54e83ab4b8 (diff) | |
download | samba-7948c58dd1e7e3173f3da7c7a7f48ddc90f81444.tar.gz samba-7948c58dd1e7e3173f3da7c7a7f48ddc90f81444.tar.xz samba-7948c58dd1e7e3173f3da7c7a7f48ddc90f81444.zip |
s3:libsmb: fix NetServerEnum3 rap calls.
metze
(cherry picked from commit 9b5198dd443a00fdad4faa1f9cdabedd81012d93)
(cherry picked from commit 86eae5b4862735309313e1800be44dab2641b393)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libsmb/clirap.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index 9705cac7d75..36b137e45d7 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -247,11 +247,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)); } @@ -270,7 +268,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); @@ -280,6 +278,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 */ |