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 */

Reply via email to