]> granicus.if.org Git - postgresql/commitdiff
aclitemout() shouldn't coredump when it finds an ACL item
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Nov 2000 23:42:31 +0000 (23:42 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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;