The branch, v4-11-test has been updated via f47dc8b8f68 docs-xml: Fix usernames in pam_winbind manpages via f5ee0cc29e4 libsmb: Protect cli_oem_change_password() from rprcnt<2 via e8ffd6244d6 libsmb: Protect cli_RNetServerEnum against rprcnt<6 via 39a3d728a60 libsmb: Protect cli_RNetShareEnum() against rprcnt<6 via f69c9ea345f libsmb: Fix indentation in cli_RNetShareEnum() from 84362eef4cf vfs_shadow_copy2: implement case canonicalisation in shadow_copy2_get_real_filename()
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-11-test - Log ----------------------------------------------------------------- commit f47dc8b8f68c93e9e57bda704125b28c22bcf731 Author: Andreas Schneider <a...@samba.org> Date: Tue Apr 28 17:25:35 2020 +0200 docs-xml: Fix usernames in pam_winbind manpages BUG: https://bugzilla.samba.org/show_bug.cgi?id=14358 Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Alexander Bokovoy <a...@samba.org> Autobuild-User(master): Andreas Schneider <a...@cryptomilk.org> Autobuild-Date(master): Wed Apr 29 09:44:55 UTC 2020 on sn-devel-184 (cherry picked from commit 3abd92d7824e803f1ff53425088ebee30b58894b) Autobuild-User(v4-11-test): Karolin Seeger <ksee...@samba.org> Autobuild-Date(v4-11-test): Thu May 14 15:42:16 UTC 2020 on sn-devel-184 commit f5ee0cc29e405b222d2c8ae7ea0eb166671d87be Author: Volker Lendecke <v...@samba.org> Date: Sat May 2 15:18:07 2020 +0200 libsmb: Protect cli_oem_change_password() from rprcnt<2 Bug: https://bugzilla.samba.org/show_bug.cgi?id=14366 Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> Autobuild-User(master): Andreas Schneider <a...@cryptomilk.org> Autobuild-Date(master): Tue May 5 17:12:04 UTC 2020 on sn-devel-184 (cherry picked from commit f80c97cb8da64f3cd9904e2e1fd43c29b691166d) commit e8ffd6244d60866044f3702999eb292bebd0b99c Author: Volker Lendecke <v...@samba.org> Date: Sat May 2 15:10:14 2020 +0200 libsmb: Protect cli_RNetServerEnum against rprcnt<6 Bug: https://bugzilla.samba.org/show_bug.cgi?id=14366 Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> (cherry picked from commit ce8b70df7bd63e96723b8e8dc864f1690f5fad7b) commit 39a3d728a605b02d209b39ee764de5bd4d4501fc Author: Volker Lendecke <v...@samba.org> Date: Sat May 2 14:59:07 2020 +0200 libsmb: Protect cli_RNetShareEnum() against rprcnt<6 Bug: https://bugzilla.samba.org/show_bug.cgi?id=14366 Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> (cherry picked from commit 4a9fe4efefa67d6f24efcbe29722a43fc4859fdc) commit f69c9ea345fa05a1e63888eeccfba98a6c9182f7 Author: Volker Lendecke <v...@samba.org> Date: Sat May 2 14:54:01 2020 +0200 libsmb: Fix indentation in cli_RNetShareEnum() Also remove a level of indentation with a "goto done;" Best review with "git show -b", almost no code change Bug: https://bugzilla.samba.org/show_bug.cgi?id=14366 Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> (cherry picked from commit ae91d67a247424d4ddc89230f52365558d6ff402) ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/pam_winbind.8.xml | 4 +- docs-xml/manpages/pam_winbind.conf.5.xml | 4 +- source3/libsmb/clirap.c | 151 ++++++++++++++++++------------- 3 files changed, 91 insertions(+), 68 deletions(-) Changeset truncated at 500 lines: diff --git a/docs-xml/manpages/pam_winbind.8.xml b/docs-xml/manpages/pam_winbind.8.xml index b8af5b54c58..a9a227f1647 100644 --- a/docs-xml/manpages/pam_winbind.8.xml +++ b/docs-xml/manpages/pam_winbind.8.xml @@ -83,8 +83,8 @@ <listitem><para> If this option is set, pam_winbind will only succeed if the user is a member of the given SID or NAME. A SID can be either a group-SID, an alias-SID or even an user-SID. It is also possible to give a NAME instead of the - SID. That name must have the form: <parameter>MYDOMAIN\\mygroup</parameter> or - <parameter>MYDOMAIN\\myuser</parameter>. pam_winbind will, in that case, lookup the SID internally. Note that + SID. That name must have the form: <parameter>MYDOMAIN\mygroup</parameter> or + <parameter>MYDOMAIN\myuser</parameter>. pam_winbind will, in that case, lookup the SID internally. Note that NAME may not contain any spaces. It is thus recommended to only use SIDs. You can verify the list of SIDs a user is a member of with <command>wbinfo --user-sids=SID</command>. </para> diff --git a/docs-xml/manpages/pam_winbind.conf.5.xml b/docs-xml/manpages/pam_winbind.conf.5.xml index a5aaa01504d..193a0dc971c 100644 --- a/docs-xml/manpages/pam_winbind.conf.5.xml +++ b/docs-xml/manpages/pam_winbind.conf.5.xml @@ -68,8 +68,8 @@ <listitem><para> If this option is set, pam_winbind will only succeed if the user is a member of the given SID or NAME. A SID can be either a group-SID, an alias-SID or even an user-SID. It is also possible to give a NAME instead of the - SID. That name must have the form: <parameter>MYDOMAIN\\mygroup</parameter> or - <parameter>MYDOMAIN\\myuser</parameter>. pam_winbind will, in that case, lookup the SID internally. Note that + SID. That name must have the form: <parameter>MYDOMAIN\mygroup</parameter> or + <parameter>MYDOMAIN\myuser</parameter>. pam_winbind will, in that case, lookup the SID internally. Note that NAME may not contain any spaces. It is thus recommended to only use SIDs. You can verify the list of SIDs a user is a member of with <command>wbinfo --user-sids=SID</command>. This setting is empty by default. </para> diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index b4b40ebdab4..8a844050461 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -174,6 +174,8 @@ int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32_t, unsigned int rdrcnt,rprcnt; char param[1024]; int count = -1; + bool ok; + int res; /* now send a SMBtrans command with api RNetShareEnum */ p = param; @@ -191,74 +193,82 @@ int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32_t, SSVAL(p,2,0xFFE0); p += 4; - if (cli_api(cli, - param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */ - NULL, 0, 0xFFE0, /* data, length, maxlen - Win2k needs a small buffer here too ! */ - &rparam, &rprcnt, /* return params, length */ - &rdata, &rdrcnt)) /* return data, length */ - { - int res = rparam? SVAL(rparam,0) : -1; - - if (res == 0 || res == ERRmoredata) { - int converter=SVAL(rparam,2); - int i; - char *rdata_end = rdata + rdrcnt; - - count=SVAL(rparam,4); - p = rdata; - - for (i=0;i<count;i++,p+=20) { - char *sname; - int type; - int comment_offset; - const char *cmnt; - const char *p1; - char *s1, *s2; - size_t len; - TALLOC_CTX *frame = talloc_stackframe(); - - if (p + 20 > rdata_end) { - TALLOC_FREE(frame); - break; - } - - sname = p; - type = SVAL(p,14); - comment_offset = (IVAL(p,16) & 0xFFFF) - converter; - if (comment_offset < 0 || - comment_offset > (int)rdrcnt) { - TALLOC_FREE(frame); - break; - } - cmnt = comment_offset?(rdata+comment_offset):""; - - /* Work out the comment length. */ - for (p1 = cmnt, len = 0; *p1 && - p1 < rdata_end; len++) - p1++; - if (!*p1) { - len++; - } - pull_string_talloc(frame,rdata,0, - &s1,sname,14,STR_ASCII); - pull_string_talloc(frame,rdata,0, - &s2,cmnt,len,STR_ASCII); - if (!s1 || !s2) { - TALLOC_FREE(frame); - continue; - } - - fn(s1, type, s2, state); + ok = cli_api( + cli, + param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */ + NULL, 0, 0xFFE0, /* data, length, maxlen - Win2k needs a small buffer here too ! */ + &rparam, &rprcnt, /* return params, length */ + &rdata, &rdrcnt); /* return data, length */ + if (!ok) { + DEBUG(4,("NetShareEnum failed\n")); + goto done; + } - TALLOC_FREE(frame); - } - } else { - DEBUG(4,("NetShareEnum res=%d\n", res)); + if (rprcnt < 6) { + DBG_ERR("Got invalid result: rprcnt=%u\n", rprcnt); + goto done; + } + + res = rparam? SVAL(rparam,0) : -1; + + if (res == 0 || res == ERRmoredata) { + int converter=SVAL(rparam,2); + int i; + char *rdata_end = rdata + rdrcnt; + + count=SVAL(rparam,4); + p = rdata; + + for (i=0;i<count;i++,p+=20) { + char *sname; + int type; + int comment_offset; + const char *cmnt; + const char *p1; + char *s1, *s2; + size_t len; + TALLOC_CTX *frame = talloc_stackframe(); + + if (p + 20 > rdata_end) { + TALLOC_FREE(frame); + break; } - } else { - DEBUG(4,("NetShareEnum failed\n")); + + sname = p; + type = SVAL(p,14); + comment_offset = (IVAL(p,16) & 0xFFFF) - converter; + if (comment_offset < 0 || + comment_offset > (int)rdrcnt) { + TALLOC_FREE(frame); + break; + } + cmnt = comment_offset?(rdata+comment_offset):""; + + /* Work out the comment length. */ + for (p1 = cmnt, len = 0; *p1 && + p1 < rdata_end; len++) + p1++; + if (!*p1) { + len++; + } + pull_string_talloc(frame,rdata,0, + &s1,sname,14,STR_ASCII); + pull_string_talloc(frame,rdata,0, + &s2,cmnt,len,STR_ASCII); + if (!s1 || !s2) { + TALLOC_FREE(frame); + continue; + } + + fn(s1, type, s2, state); + + TALLOC_FREE(frame); } + } else { + DEBUG(4,("NetShareEnum res=%d\n", res)); + } +done: SAFE_FREE(rparam); SAFE_FREE(rdata); @@ -362,6 +372,13 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32_t stype, } rdata_end = rdata + rdrcnt; + + if (rprcnt < 6) { + DBG_ERR("Got invalid result: rprcnt=%u\n", rprcnt); + res = -1; + break; + } + res = rparam ? SVAL(rparam,0) : -1; if (res == 0 || res == ERRmoredata || @@ -560,10 +577,16 @@ bool cli_oem_change_password(struct cli_state *cli, const char *user, const char return False; } + if (rdrcnt < 2) { + cli->rap_error = ERRbadformat; + goto done; + } + if (rparam) { cli->rap_error = SVAL(rparam,0); } +done: SAFE_FREE(rparam); SAFE_FREE(rdata); -- Samba Shared Repository