aclitemout() shouldn't coredump when it finds an ACL item
authorTom Lane
Tue, 28 Nov 2000 23:42:31 +0000 (23:42 +0000)
committerTom Lane
Tue, 28 Nov 2000 23:42:31 +0000 (23:42 +0000)
for a now-vanished group.  Instead, display the numeric group ID, same
as it does for vanished users.

src/backend/catalog/aclchk.c
src/backend/utils/adt/acl.c

index b2698ad19b645f43d2d32dbfdbefb0e60f081d2b..67f675f0d3b8dfb9fe67a3785f4f0e0a2f5c79ff 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.43 2000/11/16 22:30:17 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.44 2000/11/28 23:42:31 tgl Exp $
  *
  * NOTES
  *   See acl.h.
@@ -172,6 +172,9 @@ get_grosysid(char *groname)
    return id;
 }
 
+/*
+ * Convert group ID to name, or return NULL if group can't be found
+ */
 char *
 get_groname(AclId grosysid)
 {
@@ -186,8 +189,6 @@ get_groname(AclId grosysid)
        name = pstrdup(NameStr(((Form_pg_group) GETSTRUCT(tuple))->groname));
        ReleaseSysCache(tuple);
    }
-   else
-       elog(NOTICE, "get_groname: group %u not found", grosysid);
    return name;
 }
 
index a8bc5e349a3e960bd00da97213e5835b9d074d95..ee3a41701f74c156e1724382885c77205821f41f 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.53 2000/11/16 22:30:31 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.54 2000/11/28 23:42:31 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -276,7 +276,14 @@ aclitemout(PG_FUNCTION_ARGS)
            htup = SearchSysCache(SHADOWSYSID,
                                  ObjectIdGetDatum(aip->ai_id),
                                  0, 0, 0);
-           if (!HeapTupleIsValid(htup))
+           if (HeapTupleIsValid(htup))
+           {
+               strncat(p,
+                       NameStr(((Form_pg_shadow) GETSTRUCT(htup))->usename),
+                       NAMEDATALEN);
+               ReleaseSysCache(htup);
+           }
+           else
            {
                /* Generate numeric UID if we don't find an entry */
                char       *tmp;
@@ -286,18 +293,22 @@ aclitemout(PG_FUNCTION_ARGS)
                strcat(p, tmp);
                pfree(tmp);
            }
-           else
-           {
-               strncat(p, (char *) &((Form_pg_shadow)
-                                     GETSTRUCT(htup))->usename,
-                       sizeof(NameData));
-               ReleaseSysCache(htup);
-           }
            break;
        case ACL_IDTYPE_GID:
            strcat(p, "group ");
            tmpname = get_groname(aip->ai_id);
-           strncat(p, tmpname, NAMEDATALEN);
+           if (tmpname != NULL)
+               strncat(p, tmpname, NAMEDATALEN);
+           else
+           {
+               /* Generate numeric GID if we don't find an entry */
+               char       *tmp;
+
+               tmp = DatumGetCString(DirectFunctionCall1(int4out,
+                                     Int32GetDatum((int32) aip->ai_id)));
+               strcat(p, tmp);
+               pfree(tmp);
+           }
            break;
        case ACL_IDTYPE_WORLD:
            break;