Author: gd Date: 2005-10-06 18:00:19 +0000 (Thu, 06 Oct 2005) New Revision: 10782
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10782 Log: Only parse the group rid_array in net_user_info3() when num_group is > 0. This fixes the PAC parsing for win2k DCs up to SP3. (Where full SIDs are stored in the PAC instead of RIDs). Guenther Modified: branches/SAMBA_3_0/source/rpc_parse/parse_net.c trunk/source/rpc_parse/parse_net.c Changeset: Modified: branches/SAMBA_3_0/source/rpc_parse/parse_net.c =================================================================== --- branches/SAMBA_3_0/source/rpc_parse/parse_net.c 2005-10-06 17:48:03 UTC (rev 10781) +++ branches/SAMBA_3_0/source/rpc_parse/parse_net.c 2005-10-06 18:00:19 UTC (rev 10782) @@ -1622,18 +1622,30 @@ if(!prs_align(ps)) return False; - if(!prs_uint32("num_groups2 ", ps, depth, &usr->num_groups2)) /* num groups */ - return False; - if (UNMARSHALLING(ps) && usr->num_groups2 > 0) { - usr->gids = PRS_ALLOC_MEM(ps, DOM_GID, usr->num_groups2); - if (usr->gids == NULL) + if (usr->num_groups > 0) { + + if(!prs_uint32("num_groups2 ", ps, depth, &usr->num_groups2)) /* num groups2 */ return False; - } - for (i = 0; i < usr->num_groups2; i++) { - if(!smb_io_gid("", &usr->gids[i], ps, depth)) /* group info */ + if (usr->num_groups != usr->num_groups2) { + DEBUG(3,("net_io_user_info3: num_groups mismatch! (%d != %d)\n", + usr->num_groups, usr->num_groups2)); return False; + } + + + if (UNMARSHALLING(ps)) { + usr->gids = PRS_ALLOC_MEM(ps, DOM_GID, usr->num_groups); + if (usr->gids == NULL) + return False; + } + + for (i = 0; i < usr->num_groups; i++) { + if(!smb_io_gid("", &usr->gids[i], ps, depth)) /* group info */ + return False; + } + } if(!smb_io_unistr2("uni_logon_srv", &usr->uni_logon_srv, usr->hdr_logon_srv.buffer, ps, depth)) /* logon server unicode string */ Modified: trunk/source/rpc_parse/parse_net.c =================================================================== --- trunk/source/rpc_parse/parse_net.c 2005-10-06 17:48:03 UTC (rev 10781) +++ trunk/source/rpc_parse/parse_net.c 2005-10-06 18:00:19 UTC (rev 10782) @@ -1622,18 +1622,30 @@ if(!prs_align(ps)) return False; - if(!prs_uint32("num_groups2 ", ps, depth, &usr->num_groups2)) /* num groups */ - return False; - if (UNMARSHALLING(ps) && usr->num_groups2 > 0) { - usr->gids = PRS_ALLOC_MEM(ps, DOM_GID, usr->num_groups2); - if (usr->gids == NULL) + if (usr->num_groups > 0) { + + if(!prs_uint32("num_groups2 ", ps, depth, &usr->num_groups2)) /* num groups2 */ return False; - } - for (i = 0; i < usr->num_groups2; i++) { - if(!smb_io_gid("", &usr->gids[i], ps, depth)) /* group info */ + if (usr->num_groups != usr->num_groups2) { + DEBUG(3,("net_io_user_info3: num_groups mismatch! (%d != %d)\n", + usr->num_groups, usr->num_groups2)); return False; + } + + + if (UNMARSHALLING(ps)) { + usr->gids = PRS_ALLOC_MEM(ps, DOM_GID, usr->num_groups); + if (usr->gids == NULL) + return False; + } + + for (i = 0; i < usr->num_groups; i++) { + if(!smb_io_gid("", &usr->gids[i], ps, depth)) /* group info */ + return False; + } + } if(!smb_io_unistr2("uni_logon_srv", &usr->uni_logon_srv, usr->hdr_logon_srv.buffer, ps, depth)) /* logon server unicode string */