mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	pg_dump: Fix dumping of security labels on subscriptions and event triggers.
Previously, pg_dump incorrectly queried pg_seclabel to retrieve security labels for subscriptions, which are stored in pg_shseclabel as they are global objects. This could result in security labels for subscriptions not being dumped. This commit fixes the issue by updating pg_dump to query the pg_seclabels view, which aggregates entries from both pg_seclabel and pg_shseclabel. While querying pg_shseclabel directly for subscriptions was an alternative, using pg_seclabels is simpler and sufficient. In addition, pg_dump is updated to dump security labels on event triggers, which were previously omitted. Backpatch to all supported versions. Author: Jian He <jian.universality@gmail.com> Co-authored-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/CACJufxHCt00pR9h51AVu6+yPD5J7JQn=7dQXxqacj0XyDhc-fA@mail.gmail.com Backpatch-through: 13
This commit is contained in:
		@@ -3134,12 +3134,14 @@ _tocEntryRestorePass(TocEntry *te)
 | 
				
			|||||||
		return RESTORE_PASS_POST_ACL;
 | 
							return RESTORE_PASS_POST_ACL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Comments need to be emitted in the same pass as their parent objects.
 | 
						 * Comments and security labels need to be emitted in the same pass as
 | 
				
			||||||
	 * ACLs haven't got comments, and neither do matview data objects, but
 | 
						 * their parent objects. ACLs haven't got comments and security labels,
 | 
				
			||||||
	 * event triggers do.  (Fortunately, event triggers haven't got ACLs, or
 | 
						 * and neither do matview data objects, but event triggers do.
 | 
				
			||||||
	 * we'd need yet another weird special case.)
 | 
						 * (Fortunately, event triggers haven't got ACLs, or we'd need yet another
 | 
				
			||||||
 | 
						 * weird special case.)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (strcmp(te->desc, "COMMENT") == 0 &&
 | 
						if ((strcmp(te->desc, "COMMENT") == 0 ||
 | 
				
			||||||
 | 
							 strcmp(te->desc, "SECURITY LABEL") == 0) &&
 | 
				
			||||||
		strncmp(te->tag, "EVENT TRIGGER ", 14) == 0)
 | 
							strncmp(te->tag, "EVENT TRIGGER ", 14) == 0)
 | 
				
			||||||
		return RESTORE_PASS_POST_ACL;
 | 
							return RESTORE_PASS_POST_ACL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15841,7 +15841,7 @@ collectSecLabels(Archive *fout, SecLabelItem **items)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	appendPQExpBufferStr(query,
 | 
						appendPQExpBufferStr(query,
 | 
				
			||||||
						 "SELECT label, provider, classoid, objoid, objsubid "
 | 
											 "SELECT label, provider, classoid, objoid, objsubid "
 | 
				
			||||||
						 "FROM pg_catalog.pg_seclabel "
 | 
											 "FROM pg_catalog.pg_seclabels "
 | 
				
			||||||
						 "ORDER BY classoid, objoid, objsubid");
 | 
											 "ORDER BY classoid, objoid, objsubid");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 | 
						res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 | 
				
			||||||
@@ -18238,6 +18238,11 @@ dumpEventTrigger(Archive *fout, EventTriggerInfo *evtinfo)
 | 
				
			|||||||
					NULL, evtinfo->evtowner,
 | 
										NULL, evtinfo->evtowner,
 | 
				
			||||||
					evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
 | 
										evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (evtinfo->dobj.dump & DUMP_COMPONENT_SECLABEL)
 | 
				
			||||||
 | 
							dumpSecLabel(fout, "EVENT TRIGGER", qevtname,
 | 
				
			||||||
 | 
										 NULL, evtinfo->evtowner,
 | 
				
			||||||
 | 
										 evtinfo->dobj.catId, 0, evtinfo->dobj.dumpId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	destroyPQExpBuffer(query);
 | 
						destroyPQExpBuffer(query);
 | 
				
			||||||
	destroyPQExpBuffer(delqry);
 | 
						destroyPQExpBuffer(delqry);
 | 
				
			||||||
	free(qevtname);
 | 
						free(qevtname);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user