Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u1n0c-0087m0-OT for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Apr 2025 13:59:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u1n0b-00Gp1k-0N for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Apr 2025 13:59:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u1n0a-00Gp0s-7V for pgsql-hackers@lists.postgresql.org; Mon, 07 Apr 2025 13:59:29 +0000 Received: from fout-b8-smtp.messagingengine.com ([202.12.124.151]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1u1n0X-003vmq-1M for pgsql-hackers@postgresql.org; Mon, 07 Apr 2025 13:59:28 +0000 Received: from phl-compute-03.internal (phl-compute-03.phl.internal [10.202.2.43]) by mailfout.stl.internal (Postfix) with ESMTP id F0C9A114010B; Mon, 7 Apr 2025 09:59:22 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Mon, 07 Apr 2025 09:59:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm1; t=1744034362; x=1744120762; bh=otXsGbH/jZ59ZzUWrHABJs6n6h3JgE97Fpdbjk8RuQ8=; b= WStWD5nITljLprA9HdLg30Cf0ojZ4c/ruXCEsqZuhpLYTIn+xeUTWo9OZlsGPwSR mJtr+HAiNzxpXvftqkvi/BgVKk3nn9XFp4Zus/P6SjmhiyBC9/dSJd8BHTLEtMVC CY2fBTvXIZBUja0CFQWnc4pQkO9mftTbyZ44drcgFc5tMRZbuht8aUmAYbMpwBjo NogUUk4t3PEUIrkjuoudzMNElusIlffluTPtTLOL+0w7yZpU8kmLBZat2WbIDuob bHrxa4LEPhBuMzTuNDmgBZBXCaC61pIPPun7IdZEzd3oMJRtn6BDTdYjZ5sEAp1J 9gHgZwHJSgeD3j6rla+56g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1744034362; x=1744120762; bh=o tXsGbH/jZ59ZzUWrHABJs6n6h3JgE97Fpdbjk8RuQ8=; b=MLACs9xL/ct+cOwxY u0a3ffNNcskIJ1ZUVQZpmbsCJ/pQnLO8iGGZ3O6retwrjU/RyhWunSejwHuEvYWw sLbSUOURl2EioElWv/yXaaVncH1WHdhrd3cvkDOvqR0HBt/hs2eYXCrGlKgXh05X p5QFQWBa2QeKYVz5gwuUL8DUEJHmUZu6xOaUaYiT2OMbJZj7DNRuWyQnAzRH8Qph M+xNzTOFTPKm+K/oemlrXGPkO2XafSpEls7mjycnc/p5MlUJ4mWLZhtnBrHC/MGh EFI46R4d/6TXt4BA7AFsJ/s4lfoQg3N9kwNuuXO1kaHQ8rvnhJYZPC2Z6ZWO/bw9 qgPQA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvtddtfeejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhepkfffgggfuffvfhfhjggtgfesthekredttddv jeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhesvghish gvnhhtrhgruhhtrdhorhhgqeenucggtffrrghtthgvrhhnpeevtdfgjeduuedtvedtleeu kedvlefgudekfffhvdfgteekjeeffeefgeeugffgveenucffohhmrghinhepuggvsghirg hnrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhho mhepphgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgpdhnsggprhgtphhtthhopedutd dpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhgrtghosgdrtghhrghmphhiohhn segvnhhtvghrphhrihhsvggusgdrtghomhdprhgtphhtthhopehmhihonhesuggvsghirg hnrdhorhhgpdhrtghpthhtoheprghnughrvghssegrnhgrrhgriigvlhdruggvpdhrtghp thhtohepthhglhesshhsshdrphhghhdrphgrrdhushdprhgtphhtthhopegsrhhutggvse hmohhmjhhirghnrdhushdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhs thhgrhgvshhqlhdrohhrghdprhgtphhtthhopegurghnihgvlheshigvshhqlhdrshgvpd hrtghpthhtohepthhhohhmrghsrdhmuhhnrhhosehgmhgrihhlrdgtohhmpdhrtghpthht ohepsgihrghvuhiikedusehgmhgrihhlrdgtohhm X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 7 Apr 2025 09:59:20 -0400 (EDT) Message-ID: <5bec3d4f-613f-425b-88c4-59e71c70f7d6@eisentraut.org> Date: Mon, 7 Apr 2025 15:59:19 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PoC] Federated Authn/z with OAUTHBEARER To: Jacob Champion , Christoph Berg , Andres Freund , Tom Lane , Bruce Momjian , PostgreSQL Hackers , Daniel Gustafsson , Thomas Munro , Nazir Bilal Yavuz , Antonin Houska References: <636879.1742357835@sss.pgh.pa.us> <641687.1742360249@sss.pgh.pa.us> <1120967.1742504934@sss.pgh.pa.us> Content-Language: de-DE, en-US From: Peter Eisentraut In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 05.04.25 02:27, Jacob Champion wrote: > On Tue, Apr 1, 2025 at 3:40 PM Jacob Champion > wrote: >> Maybe a better idea would be to ship an SONAME of >> `libpq-oauth.so.0.`, without any symlinks, so that there's >> never any ambiguity about which module belongs with which libpq. > > While I was looking into this I found that Debian's going to use the > existence of an SONAME to check other things, which I assume will make > Christoph's life harder. I have switched over to > 'libpq-oauth-.so', without any SONAME or symlinks. Yes, this is correct. We want a shared module, not a shared library, in meson parlance. But the installation directory of a shared module should not be directly libdir. That is reserved for libraries that you can link at build-time. Here are some examples I found of other packages that have a library that itself has plugins: https://packages.debian.org/bookworm/amd64/libaspell15/filelist https://packages.debian.org/bookworm/amd64/libkrb5-3/filelist https://packages.debian.org/bookworm/amd64/libmagickcore-6.q16-6/filelist > v2 simplifies quite a few things and breaks out the new duplicated > code into its own file. I pared down the exports from libpq, by having > it push the pg_g_threadlock pointer directly into the module when > needed. I think a future improvement would be to combine the dlopen > with the libcurl initialization, so that everything is done exactly > once and the module doesn't need to know about threadlocks at all. Looks mostly ok. I need the following patch to get it to build on macOS: diff --git a/src/interfaces/libpq-oauth/Makefile b/src/interfaces/libpq-oauth/Makefile index 461c44b59c1..d5469ca0e11 100644 --- a/src/interfaces/libpq-oauth/Makefile +++ b/src/interfaces/libpq-oauth/Makefile @@ -28,8 +28,9 @@ OBJS = \ oauth-utils.o SHLIB_LINK_INTERNAL = $(libpq_pgport_shlib) -SHLIB_LINK = -lcurl +SHLIB_LINK = -lcurl $(filter -lintl, $(LIBS)) SHLIB_PREREQS = submake-libpq +BE_DLLLIBS = SHLIB_EXPORTS = exports.txt (The second change is not strictly required, but it disables the use of -bundle_loader postgres, since this is not a backend-loadable module.) I don't know whether we need an exports file for libpq-oauth. The other shared modules don't provide an export file, and I'm not sure whether this is even supported for shared modules. I guess it doesn't hurt? The PKG_CONFIG_REQUIRES_PRIVATE setting in libpq-oauth/Makefile is meaningless and can be removed. In fe-auth-oauth.c, I note that dlerror() is not necessarily thread-safe. Since there isn't really an alternative, I guess it's ok to leave it like that, but I figured it should be mentioned. > i18n is still not working correctly on my machine. I've gotten `make > init-po` to put the files into the right places now, but if I fake a > .po file and install the generated .mo, the translations still don't > seem to be found at runtime. Is anyone able to take a quick look to > see if I'm missing something obvious? Not sure, the code looks correct at first glance. However, you could also just keep the libpq-oauth strings in the libpq catalog. There isn't really a need to make a separate one, since the versions you end up installing are locked to each other. So you could for example in libpq's nls.mk just add ../libpq-oauth/oauth-curl.c etc. to the files. Maybe it would also make sense to make libpq-oauth a subdirectory of the libpq directory instead of a peer.