From c0f069944f0c9f2fad33b3b6da610dce8fde4ff4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 14 Jan 2001 19:23:27 +0000 Subject: [PATCH] Make aclcontains() do something that's at least vaguely reasonable: 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 | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 1a505ccadd..889fb5b224 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -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); }