# 02-Aug-92 Noah Friedman <friedman@prep.ai.mit.edu>
# Public domain.

sub getgroupsbyfield
{
  local ($uid, $field) = @_; 
  local ($uname, $passwd, $gid, $members, @groups, @ginfo);

  if ($uid =~ /[0-9][0-9]*/)
    {
      ($uname, $passwd, $uid, $gid) = getpwuid ($uid);
    }
  else
    {
      ($uname, $passwd, $uid, $gid) = getpwnam ($uid);
    }

  if ("$uname" eq "") 
    { 
      return (); 
    }

  if (@ginfo = getgrgid ($gid))
    {
      @groups = ($ginfo[$field]);
    }
  
  while (@ginfo = getgrent ())
    {
      $members = $ginfo[3];
      if ("$members" =~ /^$uname /
          || "$members" =~ / $uname /
          || "$members" =~ / $uname$/
          || "$members" =~ /^$uname$/)
        {
          # Don't add duplicates
          if ("$ginfo[$field]" ne "$groups[0]")
            {
              @groups = (@groups, $ginfo[$field]);
            }
        }
    }
  return @groups;
}

sub getgroupsbyname
{
  return &getgroupsbyfield (@_, 0);
}

sub getgroupsbygid
{
  return &getgroupsbyfield (@_, 2);
}

