Make aclcontains() do something that's at least vaguely reasonable:
authorTom Lane
Sun, 14 Jan 2001 19:23:27 +0000 (19:23 +0000)
committerTom Lane
Sun, 14 Jan 2001 19:23:27 +0000 (19:23 +0000)
it now returns true if the aclitem argument exactly matches any one of
the elements of the aclitem[] argument.  Per complaint from Wolff 1/10/01.

src/backend/utils/adt/acl.c

index 1a505ccaddd39186b91ef719e3dbb4ecda107f0a..889fb5b224bbad2138df121d77984c0310caf51b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.55 2000/12/03 20:45:35 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.56 2001/01/14 19:23:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -333,8 +333,10 @@ aclitemout(PG_FUNCTION_ARGS)
  * aclitemeq
  * aclitemgt
  *     AclItem equality and greater-than comparison routines.
- *     Two AclItems are equal iff they have the
- *     same identifier (and identifier type).
+ *     Two AclItems are considered equal iff they have the
+ *     same identifier (and identifier type); the mode is ignored.
+ *     Note that these routines are really only useful for sorting
+ *     AclItems into identifier order.
  *
  * RETURNS:
  *     a boolean value indicating = or >
@@ -581,8 +583,12 @@ aclcontains(PG_FUNCTION_ARGS)
    num = ACL_NUM(acl);
    aidat = ACL_DAT(acl);
    for (i = 0; i < num; ++i)
-       if (aclitemeq(aip, aidat + i))
+   {
+       /* Note that aclitemeq only considers id, not mode */
+       if (aclitemeq(aip, aidat + i) &&
+           aip->ai_mode == aidat[i].ai_mode)
            PG_RETURN_BOOL(true);
+   }
    PG_RETURN_BOOL(false);
 }