2003-07-18 Pierre Humblet <pierre.humblet@ieee.org>
* security.cc (verify_token): Fix white space and style.
        Use type bool instead of BOOL and char. Use alloca
        instead of malloc and free for my_grps.
			
			
This commit is contained in:
		
							parent
							
								
									19c6e1624b
								
							
						
					
					
						commit
						b4ece40c0f
					
				| 
						 | 
				
			
			@ -1,3 +1,9 @@
 | 
			
		|||
2003-07-18  Pierre Humblet  <pierre.humblet@ieee.org>
 | 
			
		||||
 | 
			
		||||
	* security.cc (verify_token): Fix white space and style.
 | 
			
		||||
	Use type bool instead of BOOL and char. Use alloca
 | 
			
		||||
	instead of malloc and free for my_grps. 
 | 
			
		||||
 | 
			
		||||
2003-07-17  Corinna Vinschen  <corinna@vinschen.de>
 | 
			
		||||
 | 
			
		||||
	* sysconf.cc (sysconf): Fix OPEN_MAX patch.  Return page size on
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -744,30 +744,26 @@ verify_token (HANDLE token, cygsid &usersid, user_groups &groups, BOOL *pintern)
 | 
			
		|||
	return gsid == groups.pgsid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  PTOKEN_GROUPS my_grps = NULL;
 | 
			
		||||
  BOOL ret = FALSE;
 | 
			
		||||
  char saw_buf[NGROUPS_MAX] = {};
 | 
			
		||||
  char *saw = saw_buf, sawpg = FALSE;
 | 
			
		||||
  PTOKEN_GROUPS my_grps;
 | 
			
		||||
  bool saw_buf[NGROUPS_MAX] = {};
 | 
			
		||||
  bool *saw = saw_buf, sawpg = false, ret = false;
 | 
			
		||||
 | 
			
		||||
  if (!GetTokenInformation (token, TokenGroups, NULL, 0, &size) &&
 | 
			
		||||
      GetLastError () != ERROR_INSUFFICIENT_BUFFER)
 | 
			
		||||
    debug_printf ("GetTokenInformation(token, TokenGroups): %E");
 | 
			
		||||
  else if (!(my_grps = (PTOKEN_GROUPS) malloc (size)))
 | 
			
		||||
    debug_printf ("malloc (my_grps) failed.");
 | 
			
		||||
  else if (!(my_grps = (PTOKEN_GROUPS) alloca (size)))
 | 
			
		||||
    debug_printf ("alloca (my_grps) failed.");
 | 
			
		||||
  else if (!GetTokenInformation (token, TokenGroups, my_grps, size, &size))
 | 
			
		||||
    debug_printf ("GetTokenInformation(my_token, TokenGroups): %E");
 | 
			
		||||
  else if (!groups.issetgroups ()) /* setgroups was never called */
 | 
			
		||||
    {
 | 
			
		||||
      ret = sid_in_token_groups (my_grps, groups.pgsid);
 | 
			
		||||
      if (ret == FALSE)
 | 
			
		||||
	ret = (groups.pgsid == tok_usersid);
 | 
			
		||||
    }
 | 
			
		||||
    ret = sid_in_token_groups (my_grps, groups.pgsid)
 | 
			
		||||
          || groups.pgsid == usersid;
 | 
			
		||||
  else /* setgroups was called */
 | 
			
		||||
    {
 | 
			
		||||
      struct __group32 *gr;
 | 
			
		||||
      cygsid gsid;
 | 
			
		||||
      if (groups.sgsids.count > (int) sizeof (saw_buf) &&
 | 
			
		||||
	  !(saw = (char *) calloc (groups.sgsids.count, sizeof (char))))
 | 
			
		||||
      if (groups.sgsids.count > (int) (sizeof (saw_buf) / sizeof (*saw_buf))
 | 
			
		||||
	  && !(saw = (bool *) calloc (groups.sgsids.count, sizeof (bool))))
 | 
			
		||||
	goto done;
 | 
			
		||||
 | 
			
		||||
      /* token groups found in /etc/group match the user.gsids ? */
 | 
			
		||||
| 
						 | 
				
			
			@ -776,24 +772,21 @@ verify_token (HANDLE token, cygsid &usersid, user_groups &groups, BOOL *pintern)
 | 
			
		|||
	  {
 | 
			
		||||
	    int pos = groups.sgsids.position (gsid);
 | 
			
		||||
	    if (pos >= 0)
 | 
			
		||||
	      saw[pos] = TRUE;
 | 
			
		||||
	      saw[pos] = true;
 | 
			
		||||
	    else if (groups.pgsid == gsid)
 | 
			
		||||
	      sawpg = TRUE;
 | 
			
		||||
	   else if (gsid != well_known_world_sid &&
 | 
			
		||||
		    gsid != usersid)
 | 
			
		||||
	      sawpg = true;
 | 
			
		||||
	    else if (gsid != well_known_world_sid
 | 
			
		||||
		     && gsid != usersid)
 | 
			
		||||
	      goto done;
 | 
			
		||||
	  }
 | 
			
		||||
      for (int gidx = 0; gidx < groups.sgsids.count; gidx++)
 | 
			
		||||
	if (!saw[gidx])
 | 
			
		||||
	  goto done;
 | 
			
		||||
      if (sawpg ||
 | 
			
		||||
	  groups.sgsids.contains (groups.pgsid) ||
 | 
			
		||||
	  groups.pgsid == usersid)
 | 
			
		||||
	ret = TRUE;
 | 
			
		||||
      ret = sawpg
 | 
			
		||||
	    || groups.sgsids.contains (groups.pgsid)
 | 
			
		||||
	    || groups.pgsid == usersid;
 | 
			
		||||
    }
 | 
			
		||||
done:
 | 
			
		||||
  if (my_grps)
 | 
			
		||||
    free (my_grps);
 | 
			
		||||
  if (saw != saw_buf)
 | 
			
		||||
    free (saw);
 | 
			
		||||
  return ret;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue