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 1sPeVU-005dxO-UU for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Jul 2024 08:41:29 +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 1sPeVS-007j6f-4Z for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Jul 2024 08:41:26 +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 1sPeVQ-007j6X-Ju for pgsql-hackers@lists.postgresql.org; Fri, 05 Jul 2024 08:41:26 +0000 Received: from fhigh7-smtp.messagingengine.com ([103.168.172.158]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sPeVN-000WhP-F3 for pgsql-hackers@lists.postgresql.org; Fri, 05 Jul 2024 08:41:24 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.nyi.internal (Postfix) with ESMTP id 5880B1140101; Fri, 5 Jul 2024 04:41:18 -0400 (EDT) Received: from imap48 ([10.202.2.98]) by compute6.internal (MEProxy); Fri, 05 Jul 2024 04:41:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc: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=fm2; t=1720168878; x=1720255278; bh=aJi15lbfxj 0GCKD4BbQbUmOxA44KX5LRJHsuj6hBn4E=; b=TnMeMc/UwXgEP0pKLT1kMCeIHI TnoOtw8qOA6NwmZhrVlVrCJV0FOxcSYgxecDmfcvPNOsvzekshUZoRn5zwF9Tk0J qcOnSy9NXdrAnyRtd2vk2GDT07KQQmdtKOLNJNXEmioqtYEWHxRf53MrQ9zBqjH/ FOBM+hL9BgtBzVgPPV7avUSbmGDtucl/4Ltw6OXCEYgV8ch0ezEK919sAt4MhYVH LsJDCyZHf82L3BTZT54vVeJyLZeJIgKRpiVfqwAnE2ceNbCigOOvwvY9CyjSx1xT SvE/wduCfxsgwDtQlW4uGzZqN8rEuT1UExR92m/fVfggYiUe4H9koR2zrYFQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc: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-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; t=1720168878; x=1720255278; bh=aJi15lbfxj0GCKD4BbQbUmOxA44K X5LRJHsuj6hBn4E=; b=ekGOrE6e4r+GBIZcJXF7wUu7WBfcwGXgUuKprODq6t+t MlQ9HPXvO14aXLfIggqKVO/BtJGEaGkqTS0ZHIluXfKnPSsqhFIvPgEmhwfF7wAw o2fK4urm0Icm1ECicB5icxiWb4/I9wCJDZ0RnL3vE6tSocgsD92Va0Tpo5gckCx4 WOC4gB1CipoKMqwIAyfyAfror1/1T9YMPI9aYT67h8ynU+Bcx45UppEhTO/lJV8d bjFbq7eFr21zoNsVfttAlW23hEKh7SyhgjdBMi14mc3nGrW0HgCIbVr/23YAE1e5 jGp6hfBhUUjE4ilM3aPiy3kWzH4uSxWvtcGzI7L4MQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvddugddtjecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhffvvefutgesmhdtreerreertdenucfhrhhomhepfdflohgv lhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhpihhlvghrrdhorhhgqeenucggtf frrghtthgvrhhnpeetgfejvdffuedujeektdfgjeehfeffgeeuhfegteeujedvtdeifeef vddvveeuueenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpehjohgvlhestghomhhpihhlvghrrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id DA2DA31A0065; Fri, 5 Jul 2024 04:41:17 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-566-g3812ddbbc-fm-20240627.001-g3812ddbb MIME-Version: 1.0 Message-Id: In-Reply-To: References: <3408967.1720107891@sss.pgh.pa.us> Date: Fri, 05 Jul 2024 10:40:39 +0200 From: "Joel Jacobson" To: "Michael Paquier" Cc: "Tom Lane" , "Postgres hackers" Subject: Re: pgsql: Add pg_get_acl() to get the ACL for a database object Content-Type: multipart/mixed; boundary=8ab88bcac9a74ce28fe0ad0b4d765961 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --8ab88bcac9a74ce28fe0ad0b4d765961 Content-Type: text/plain On Fri, Jul 5, 2024, at 01:18, Michael Paquier wrote: > I would still stick to only one function, with arguments coming from > scanning pg_[sh]depend. > >> I found some code in aclchk.c on line 4452-4468 that seems useful, >> but not sure. Maybe there is some other existing code that is better >> as an inspiration? > > My first feelings about that was that subobjids are only used for > pg_attribute, so if we use them as a base, it would look like: > - Adding a new AttrNumber in ObjectProperty to track to which column > the subobjid should apply and its catcache number (ATTNUM for the > attribute number for fast lookup). > - Extend get_catalog_object_by_oid() with more data: the attribute > column for the subobjid scan stored in ObjectProperty, the subobjid > value given by the caller. If get_catalog_object_by_oid()'s caller > defines a subobjid, use get_object_catcache_oid() on it over the main > OID one. If it cannot be found in the cache, use a scan key based on > the class OID and the subobjid. > >> I guess we need to handle the RelationRelationId separately, >> and handle all other classes using the current code in pg_get_acl()? > > But most of that simply blows away because we track the dependency to > the attribute ACLs in pg_shdepend based on pg_class, not pg_attribute. > get_attname() itself relies on ATTNUM, so perhaps that's OK to just > add an exception based on RelationRelationId in the code path of > pg_get_acl(). That makes me a bit uncomfortable to derive more from > the other routines for the object descriptions, but we've been living > with that in getObjectDescription() for years now, as well. OK, I made an attempt to implement this, based on adapting code from recordExtObjInitPriv() in aclchk.c, which retrieves ACL based on ATTNUM. There are now two different code paths for columns and non-columns. It sounds like a bigger refactoring in this area would be nice, which would enable cleaning up code in other functions as well, but maybe that's better to do as a separate project. I've also updated func.sgml, adjusted pg_proc.dat, and added regression tests for column privileges. Regards, Joel --8ab88bcac9a74ce28fe0ad0b4d765961 Content-Disposition: attachment; filename*0="0001-Extend-pg_get_acl-to-handle-sub-object-IDs.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-Extend-pg=5Fget=5Facl-to-handle-sub-object-IDs.patch?=" Content-Transfer-Encoding: BASE64 RnJvbSA2MjQ1NTAyZjlmYzk4MWQ2MTNjNzAwMTZiNDVkNmUyNjc0ZDdkMGNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEpha29ic3NvbiA8Z2l0aHViQGNvbXBpbGVy Lm9yZz4KRGF0ZTogVGh1LCA0IEp1bCAyMDI0IDIyOjU2OjM3ICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gRXh0ZW5kIHBnX2dldF9hY2wgdG8gaGFuZGxlIHN1Yi1vYmplY3QgSURzLgoKVGhp cyBwYXRjaCBtb2RpZmllcyB0aGUgcGdfZ2V0X2FjbCBmdW5jdGlvbiB0byBhY2NlcHQgYSB0 aGlyZCBvYmpzdWJpZCBwYXJhbS4KVGhpcyBlbmFibGVzIHRoZSByZXRyaWV2YWwgb2YgQUNM cyBmb3IgY29sdW1ucyB3aXRoaW4gYSB0YWJsZS4KCkRldGFpbGVkIGNoYW5nZXM6Ci0gVXBk YXRlZCBmdW5jLnNnbWwgdG8gZG9jdW1lbnQgdGhlIG5ldyBwYXJhbWV0ZXIgYW5kIGl0cyB1 c2FnZS4KLSBNb2RpZmllZCBwZ19nZXRfYWNsIGZ1bmN0aW9uIGluIG9iamVjdGFkZHJlc3Mu YyB0byBoYW5kbGUgc3ViLW9iamVjdCBJRHMuCi0gQWRqdXN0ZWQgdGhlIGNhdGFsb2cgZW50 cnkgaW4gcGdfcHJvYy5kYXQgdG8gaW5jbHVkZSB0aGUgbmV3IHBhcmFtZXRlci4KLSBFbmhh bmNlZCByZWdyZXNzaW9uIHRlc3RzIGluIHByaXZpbGVnZXMuc3FsIHRvIHRlc3QgdGhlIG5l dyBmdW5jdGlvbmFsaXR5LgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAg ICAgICAgICAgfCAgNiArLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j ICAgICAgfCA2NyArKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wcml2aWxlZ2VzLm91dCB8IDU2ICsrKysrKysrKysrKysrKysrKy0tCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9wcml2aWxlZ2VzLnNxbCAgICAgIHwgMTYgKysrKy0tCiA1IGZpbGVz IGNoYW5nZWQsIDEyMyBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApp bmRleCA5M2VlM2Q0YjYwLi5hYWQ5NDQ5NzlmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTI2NTkyLDEyICsy NjU5MiwxMiBAQCBTRUxFQ1QgY3VycnZhbChwZ19nZXRfc2VyaWFsX3NlcXVlbmNlKCdzb21l dGFibGUnLCAnaWQnKSk7CiAgICAgICAgIDxpbmRleHRlcm0+CiAgICAgICAgICA8cHJpbWFy eT5wZ19nZXRfYWNsPC9wcmltYXJ5PgogICAgICAgICA8L2luZGV4dGVybT4KLSAgICAgICAg PGZ1bmN0aW9uPnBnX2dldF9hY2w8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+Y2xhc3NpZDwv cGFyYW1ldGVyPiA8dHlwZT5vaWQ8L3R5cGU+LCA8cGFyYW1ldGVyPm9iamlkPC9wYXJhbWV0 ZXI+IDx0eXBlPm9pZDwvdHlwZT4gKQorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2FjbDwv ZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5jbGFzc2lkPC9wYXJhbWV0ZXI+IDx0eXBlPm9pZDwv dHlwZT4sIDxwYXJhbWV0ZXI+b2JqaWQ8L3BhcmFtZXRlcj4gPHR5cGU+b2lkPC90eXBlPiwg PHBhcmFtZXRlcj5vYmpzdWJpZDwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiAp CiAgICAgICAgIDxyZXR1cm52YWx1ZT5hY2xpdGVtW108L3JldHVybnZhbHVlPgogICAgICAg IDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgUmV0dXJucyB0aGUgPGFjcm9ueW0+ QUNMPC9hY3JvbnltPiBmb3IgYSBkYXRhYmFzZSBvYmplY3QsIHNwZWNpZmllZAotICAgICAg ICBieSBjYXRhbG9nIE9JRCBhbmQgb2JqZWN0IE9JRC4gVGhpcyBmdW5jdGlvbiByZXR1cm5z CisgICAgICAgIGJ5IGNhdGFsb2cgT0lELCBvYmplY3QgT0lEIGFuZCBzdWItb2JqZWN0IElE LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKICAgICAgICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJh bD4gdmFsdWVzIGZvciB1bmRlZmluZWQgb2JqZWN0cy4KICAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgIDwvcm93PgpAQCAtMjY3MjMsNyArMjY3MjMsNyBAQCBTRUxFQ1QgY3VycnZh bChwZ19nZXRfc2VyaWFsX3NlcXVlbmNlKCdzb21ldGFibGUnLCAnaWQnKSk7CiA8cHJvZ3Jh bWxpc3Rpbmc+CiBwb3N0Z3Jlcz0jIFNFTEVDVAogICAgIChwZ19pZGVudGlmeV9vYmplY3Qo cy5jbGFzc2lkLHMub2JqaWQscy5vYmpzdWJpZCkpLiosCi0gICAgcGdfY2F0YWxvZy5wZ19n ZXRfYWNsKHMuY2xhc3NpZCxzLm9iamlkKSBBUyBhY2wKKyAgICBwZ19jYXRhbG9nLnBnX2dl dF9hY2wocy5jbGFzc2lkLHMub2JqaWQscy5vYmpzdWJpZCkgQVMgYWNsCiBGUk9NIHBnX2Nh dGFsb2cucGdfc2hkZXBlbmQgQVMgcwogSk9JTiBwZ19jYXRhbG9nLnBnX2RhdGFiYXNlIEFT IGQKICAgICBPTiBkLmRhdG5hbWUgPSBjdXJyZW50X2RhdGFiYXNlKCkgQU5ECmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IDI5ODNiOTE4MGYuLjY1OTUxMmIyNTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBAIC00MzY0LDEzICs0MzY0 LDE0IEBAIHBnX2lkZW50aWZ5X29iamVjdF9hc19hZGRyZXNzKFBHX0ZVTkNUSU9OX0FSR1Mp CiAKIC8qCiAgKiBTUUwtbGV2ZWwgY2FsbGFibGUgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBB Q0wgb2YgYSBzcGVjaWZpZWQgb2JqZWN0LCBnaXZlbgotICogaXRzIGNhdGFsb2cgT0lEIGFu ZCBvYmplY3QgT0lELgorICogaXRzIGNhdGFsb2cgT0lELCBvYmplY3QgT0lEIGFuZCBzdWIt b2JqZWN0IElELgogICovCiBEYXR1bQogcGdfZ2V0X2FjbChQR19GVU5DVElPTl9BUkdTKQog ewogCU9pZAkJCWNsYXNzSWQgPSBQR19HRVRBUkdfT0lEKDApOwogCU9pZAkJCW9iamVjdElk ID0gUEdfR0VUQVJHX09JRCgxKTsKKwlpbnQzMgkJb2Jqc3ViaWQgPSBQR19HRVRBUkdfSU5U MzIoMik7CiAJT2lkCQkJY2F0YWxvZ0lkOwogCUF0dHJOdW1iZXIJQW51bV9hY2w7CiAJUmVs YXRpb24JcmVsOwpAQCAtNDM5MSwyMSArNDM5Miw2MyBAQCBwZ19nZXRfYWNsKFBHX0ZVTkNU SU9OX0FSR1MpCiAJaWYgKEFudW1fYWNsID09IEludmFsaWRBdHRyTnVtYmVyKQogCQlQR19S RVRVUk5fTlVMTCgpOwogCi0JcmVsID0gdGFibGVfb3BlbihjYXRhbG9nSWQsIEFjY2Vzc1No YXJlTG9jayk7Ci0KLQl0dXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHJlbCwgZ2V0 X29iamVjdF9hdHRudW1fb2lkKGNhdGFsb2dJZCksCi0JCQkJCQkJCQlvYmplY3RJZCk7Ci0J aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJLyoKKwkgKiBUaGUgcHJvY2VkdXJlIHRv IHJldHJpdmUgdGhlIEFDTCBpcyBkaWZmZXJlbnQgaWYgdGhlIG9iamVjdCBpcyBhIHRhYmxl CisJICogYW5kIHRoZSBzdWItb2JqZWN0IGlzIG5vbi16ZXJvLCB3aGljaCBtZWFucyB3ZSdy ZSBkZWFsaW5nIHdpdGggYSBjb2x1bW4KKwkgKiBvZiBhIHRhYmxlLiBJbiB0aGlzIGNhc2Us IHRoZSBvYmpzdWJpZCBpcyB0aGUgYXR0bnVtIGZvciB0aGUgY29sdW1uLgorCSAqLworCWlm IChjbGFzc0lkID09IFJlbGF0aW9uUmVsYXRpb25JZCAmJiBvYmpzdWJpZCAhPSAwKQogCXsK LQkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOwotCQlQR19SRVRVUk5fTlVM TCgpOworCQlBdHRyTnVtYmVyCWF0dG51bSA9IChBdHRyTnVtYmVyKSBvYmpzdWJpZDsKKwor CQlIZWFwVHVwbGUJYXR0VHVwbGU7CisJCWJvb2wJCWlzTnVsbDsKKworCQlhdHRUdXBsZSA9 IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSwKKwkJCQkJCQkJCUludDE2R2V0RGF0dW0oYXR0bnVtKSk7CisKKwkJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cGxlKSkKKwkJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkJ LyogaWdub3JlIGRyb3BwZWQgY29sdW1ucyAqLworCQlpZiAoKChGb3JtX3BnX2F0dHJpYnV0 ZSkgR0VUU1RSVUNUKGF0dFR1cGxlKSktPmF0dGlzZHJvcHBlZCkKKwkJeworCQkJUmVsZWFz ZVN5c0NhY2hlKGF0dFR1cGxlKTsKKwkJCVBHX1JFVFVSTl9OVUxMKCk7CisJCX0KKworCQlk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFROVU0sIGF0dFR1cGxlLAorCQkJCQkJCQkJCUFu dW1fcGdfYXR0cmlidXRlX2F0dGFjbCwKKwkJCQkJCQkJCQkmaXNOdWxsKTsKKworCQkvKiBu byBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBhIE5VTEwgQUNMICovCisJCWlmIChpc051bGwp CisJCXsKKwkJCVJlbGVhc2VTeXNDYWNoZShhdHRUdXBsZSk7CisJCQlQR19SRVRVUk5fTlVM TCgpOworCQl9CisKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dFR1cGxlKTsKIAl9CisJZWxzZQor CXsKKwkJcmVsID0gdGFibGVfb3BlbihjYXRhbG9nSWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAK LQlkYXR1bSA9IGhlYXBfZ2V0YXR0cih0dXAsIEFudW1fYWNsLCBSZWxhdGlvbkdldERlc2Ny KHJlbCksICZpc251bGwpOwotCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJdHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChyZWwsIGdldF9vYmplY3RfYXR0 bnVtX29pZChjYXRhbG9nSWQpLAorCQkJCQkJCQkJCW9iamVjdElkKTsKKwkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHR1cCkpCisJCXsKKwkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCVBHX1JFVFVSTl9OVUxMKCk7CisJCX0KIAotCWlmIChpc251bGwpCi0J CVBHX1JFVFVSTl9OVUxMKCk7CisJCWRhdHVtID0gaGVhcF9nZXRhdHRyKHR1cCwgQW51bV9h Y2wsIFJlbGF0aW9uR2V0RGVzY3IocmVsKSwgJmlzbnVsbCk7CisJCXRhYmxlX2Nsb3NlKHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlpZiAoaXNudWxsKQorCQkJUEdfUkVUVVJOX05V TEwoKTsKKwl9CiAKIAlQR19SRVRVUk5fREFUVU0oZGF0dW0pOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKaW5kZXggZTEwMDFhNDgyMi4uOTY1NGIzYmE0ZSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CkBAIC02MzY0LDcgKzYzNjQsNyBAQAogCiB7IG9pZCA9PiAnNjM0 NycsIGRlc2NyID0+ICdnZXQgQUNMIGZvciBTUUwgb2JqZWN0JywKICAgcHJvbmFtZSA9PiAn cGdfZ2V0X2FjbCcsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAnX2FjbGl0 ZW0nLAotICBwcm9hcmd0eXBlcyA9PiAnb2lkIG9pZCcsIHByb2FyZ25hbWVzID0+ICd7Y2xh c3NpZCxvYmppZH0nLAorICBwcm9hcmd0eXBlcyA9PiAnb2lkIG9pZCBpbnQ0JywgcHJvYXJn bmFtZXMgPT4gJ3tjbGFzc2lkLG9iamlkLG9ianN1YmlkfScsCiAgIHByb3NyYyA9PiAncGdf Z2V0X2FjbCcgfSwKIAogeyBvaWQgPT4gJzM4MzknLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wcml2aWxlZ2VzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHJpdmlsZWdlcy5vdXQKaW5kZXggMzMyYmM1ODRlYi4uYzkwNGNiZWY4NCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wcml2aWxlZ2VzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ByaXZpbGVnZXMub3V0CkBAIC0yMTMsNyAr MjEzLDcgQEAgU0VMRUNUICogRlJPTSBhdGVzdDE7CiAoMCByb3dzKQogCiBDUkVBVEUgVEFC TEUgYXRlc3QyIChjb2wxIHZhcmNoYXIoMTApLCBjb2wyIGJvb2xlYW4pOwotU0VMRUNUIHBn X2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDInOjpyZWdjbGFzczo6b2lk KTsKK1NFTEVDVCBwZ19nZXRfYWNsKCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3QyJzo6 cmVnY2xhc3M6Om9pZCwgMCk7CiAgcGdfZ2V0X2FjbCAKIC0tLS0tLS0tLS0tLQogIApAQCAt MjIzLDcgKzIyMyw3IEBAIEdSQU5UIFNFTEVDVCBPTiBhdGVzdDIgVE8gcmVncmVzc19wcml2 X3VzZXIyOwogR1JBTlQgVVBEQVRFIE9OIGF0ZXN0MiBUTyByZWdyZXNzX3ByaXZfdXNlcjM7 CiBHUkFOVCBJTlNFUlQgT04gYXRlc3QyIFRPIHJlZ3Jlc3NfcHJpdl91c2VyNCBHUkFOVEVE IEJZIENVUlJFTlRfVVNFUjsKIEdSQU5UIFRSVU5DQVRFIE9OIGF0ZXN0MiBUTyByZWdyZXNz X3ByaXZfdXNlcjUgR1JBTlRFRCBCWSBDVVJSRU5UX1JPTEU7Ci1TRUxFQ1QgdW5uZXN0KHBn X2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDInOjpyZWdjbGFzczo6b2lk KSk7CitTRUxFQ1QgdW5uZXN0KHBnX2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdh dGVzdDInOjpyZWdjbGFzczo6b2lkLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgICB1bm5l c3QgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIHJlZ3Jlc3NfcHJpdl91c2VyMT1hcndkRHh0bS9yZWdy ZXNzX3ByaXZfdXNlcjEKQEAgLTIzNCwxMyArMjM0LDEzIEBAIFNFTEVDVCB1bm5lc3QocGdf Z2V0X2FjbCgncGdfY2xhc3MnOjpyZWdjbGFzcywgJ2F0ZXN0Mic6OnJlZ2NsYXNzOjpvaWQp KTsKICg1IHJvd3MpCiAKIC0tIEludmFsaWQgaW5wdXRzCi1TRUxFQ1QgcGdfZ2V0X2FjbCgn cGdfY2xhc3MnOjpyZWdjbGFzcywgMCk7IC0tIG51bGwKK1NFTEVDVCBwZ19nZXRfYWNsKCdw Z19jbGFzcyc6OnJlZ2NsYXNzLCAwLCAwKTsgLS0gbnVsbAogIHBnX2dldF9hY2wgCiAtLS0t LS0tLS0tLS0KICAKICgxIHJvdykKIAotU0VMRUNUIHBnX2dldF9hY2woMCwgMCk7IC0tIG51 bGwKK1NFTEVDVCBwZ19nZXRfYWNsKDAsIDAsIDApOyAtLSBudWxsCiAgcGdfZ2V0X2FjbCAK IC0tLS0tLS0tLS0tLQogIApAQCAtNjUxLDggKzY1MSw1NiBAQCBFUlJPUjogIHBlcm1pc3Np b24gZGVuaWVkIGZvciB0YWJsZSBhdGVzdDIKIFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04g cmVncmVzc19wcml2X3VzZXIxOwogQ1JFQVRFIFRBQkxFIGF0ZXN0NSAob25lIGludCwgdHdv IGludCB1bmlxdWUsIHRocmVlIGludCwgZm91ciBpbnQgdW5pcXVlKTsKIENSRUFURSBUQUJM RSBhdGVzdDYgKG9uZSBpbnQsIHR3byBpbnQsIGJsdWUgaW50KTsKK1NFTEVDVCBwZ19nZXRf YWNsKCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3Q1Jzo6cmVnY2xhc3M6Om9pZCwgMSk7 CisgcGdfZ2V0X2FjbCAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgcGdf Z2V0X2FjbCgncGdfY2xhc3MnOjpyZWdjbGFzcywgJ2F0ZXN0NSc6OnJlZ2NsYXNzOjpvaWQs IDIpOworIHBnX2dldF9hY2wgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IHBnX2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpyZWdjbGFzczo6 b2lkLCAzKTsKKyBwZ19nZXRfYWNsIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NF TEVDVCBwZ19nZXRfYWNsKCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3Q1Jzo6cmVnY2xh c3M6Om9pZCwgNCk7CisgcGdfZ2V0X2FjbCAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CiBHUkFOVCBTRUxFQ1QgKG9uZSksIElOU0VSVCAodHdvKSwgVVBEQVRFICh0aHJlZSkgT04g YXRlc3Q1IFRPIHJlZ3Jlc3NfcHJpdl91c2VyNDsKIEdSQU5UIEFMTCAob25lKSBPTiBhdGVz dDUgVE8gcmVncmVzc19wcml2X3VzZXIzOworU0VMRUNUIHVubmVzdChwZ19nZXRfYWNsKCdw Z19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3Q1Jzo6cmVnY2xhc3M6Om9pZCwgMSkpOworICAg ICAgICAgICAgICAgICAgIHVubmVzdCAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19wcml2X3VzZXI0 PXIvcmVncmVzc19wcml2X3VzZXIxCisgcmVncmVzc19wcml2X3VzZXIzPWFyd3gvcmVncmVz c19wcml2X3VzZXIxCisoMiByb3dzKQorCitTRUxFQ1QgdW5uZXN0KHBnX2dldF9hY2woJ3Bn X2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpyZWdjbGFzczo6b2lkLCAyKSk7CisgICAg ICAgICAgICAgICAgIHVubmVzdCAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3ByaXZfdXNlcjQ9YS9yZWdy ZXNzX3ByaXZfdXNlcjEKKygxIHJvdykKKworU0VMRUNUIHVubmVzdChwZ19nZXRfYWNsKCdw Z19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3Q1Jzo6cmVnY2xhc3M6Om9pZCwgMykpOworICAg ICAgICAgICAgICAgICB1bm5lc3QgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19wcml2X3VzZXI0PXcvcmVn cmVzc19wcml2X3VzZXIxCisoMSByb3cpCisKK1NFTEVDVCB1bm5lc3QocGdfZ2V0X2FjbCgn cGdfY2xhc3MnOjpyZWdjbGFzcywgJ2F0ZXN0NSc6OnJlZ2NsYXNzOjpvaWQsIDQpKTsKKyB1 bm5lc3QgCistLS0tLS0tLQorKDAgcm93cykKKwogSU5TRVJUIElOVE8gYXRlc3Q1IFZBTFVF UyAoMSwyLDMpOwogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3ByaXZfdXNl cjQ7CiBTRUxFQ1QgKiBGUk9NIGF0ZXN0NTsgLS0gZmFpbApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcHJpdmlsZWdlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w cml2aWxlZ2VzLnNxbAppbmRleCA5ODBkMTliZGU1Li5lYTVjOTNjYzU3IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wcml2aWxlZ2VzLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wcml2aWxlZ2VzLnNxbApAQCAtMTgzLDE2ICsxODMsMTYgQEAgR1JBTlQg U0VMRUNUIE9OIGF0ZXN0MSBUTyByZWdyZXNzX3ByaXZfdXNlcjMsIHJlZ3Jlc3NfcHJpdl91 c2VyNDsKIFNFTEVDVCAqIEZST00gYXRlc3QxOwogCiBDUkVBVEUgVEFCTEUgYXRlc3QyIChj b2wxIHZhcmNoYXIoMTApLCBjb2wyIGJvb2xlYW4pOwotU0VMRUNUIHBnX2dldF9hY2woJ3Bn X2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDInOjpyZWdjbGFzczo6b2lkKTsKK1NFTEVDVCBw Z19nZXRfYWNsKCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3QyJzo6cmVnY2xhc3M6Om9p ZCwgMCk7CiBHUkFOVCBTRUxFQ1QgT04gYXRlc3QyIFRPIHJlZ3Jlc3NfcHJpdl91c2VyMjsK IEdSQU5UIFVQREFURSBPTiBhdGVzdDIgVE8gcmVncmVzc19wcml2X3VzZXIzOwogR1JBTlQg SU5TRVJUIE9OIGF0ZXN0MiBUTyByZWdyZXNzX3ByaXZfdXNlcjQgR1JBTlRFRCBCWSBDVVJS RU5UX1VTRVI7CiBHUkFOVCBUUlVOQ0FURSBPTiBhdGVzdDIgVE8gcmVncmVzc19wcml2X3Vz ZXI1IEdSQU5URUQgQlkgQ1VSUkVOVF9ST0xFOwotU0VMRUNUIHVubmVzdChwZ19nZXRfYWNs KCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3QyJzo6cmVnY2xhc3M6Om9pZCkpOworU0VM RUNUIHVubmVzdChwZ19nZXRfYWNsKCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAnYXRlc3QyJzo6 cmVnY2xhc3M6Om9pZCwgMCkpOwogCiAtLSBJbnZhbGlkIGlucHV0cwotU0VMRUNUIHBnX2dl dF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsIDApOyAtLSBudWxsCi1TRUxFQ1QgcGdfZ2V0 X2FjbCgwLCAwKTsgLS0gbnVsbAorU0VMRUNUIHBnX2dldF9hY2woJ3BnX2NsYXNzJzo6cmVn Y2xhc3MsIDAsIDApOyAtLSBudWxsCitTRUxFQ1QgcGdfZ2V0X2FjbCgwLCAwLCAwKTsgLS0g bnVsbAogCiBHUkFOVCBUUlVOQ0FURSBPTiBhdGVzdDIgVE8gcmVncmVzc19wcml2X3VzZXI0 IEdSQU5URUQgQlkgcmVncmVzc19wcml2X3VzZXI1OyAgLS0gZXJyb3IKIApAQCAtNDM3LDgg KzQzNywxNiBAQCBTRUxFQ1QgKiBGUk9NIGF0ZXN0djI7IC0tIGZhaWwgKGV2ZW4gdGhvdWdo IHJlZ3Jlc3NfcHJpdl91c2VyMiBjYW4gYWNjZXNzIHVuZGVybAogU0VUIFNFU1NJT04gQVVU SE9SSVpBVElPTiByZWdyZXNzX3ByaXZfdXNlcjE7CiBDUkVBVEUgVEFCTEUgYXRlc3Q1IChv bmUgaW50LCB0d28gaW50IHVuaXF1ZSwgdGhyZWUgaW50LCBmb3VyIGludCB1bmlxdWUpOwog Q1JFQVRFIFRBQkxFIGF0ZXN0NiAob25lIGludCwgdHdvIGludCwgYmx1ZSBpbnQpOworU0VM RUNUIHBnX2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpyZWdjbGFz czo6b2lkLCAxKTsKK1NFTEVDVCBwZ19nZXRfYWNsKCdwZ19jbGFzcyc6OnJlZ2NsYXNzLCAn YXRlc3Q1Jzo6cmVnY2xhc3M6Om9pZCwgMik7CitTRUxFQ1QgcGdfZ2V0X2FjbCgncGdfY2xh c3MnOjpyZWdjbGFzcywgJ2F0ZXN0NSc6OnJlZ2NsYXNzOjpvaWQsIDMpOworU0VMRUNUIHBn X2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpyZWdjbGFzczo6b2lk LCA0KTsKIEdSQU5UIFNFTEVDVCAob25lKSwgSU5TRVJUICh0d28pLCBVUERBVEUgKHRocmVl KSBPTiBhdGVzdDUgVE8gcmVncmVzc19wcml2X3VzZXI0OwogR1JBTlQgQUxMIChvbmUpIE9O IGF0ZXN0NSBUTyByZWdyZXNzX3ByaXZfdXNlcjM7CitTRUxFQ1QgdW5uZXN0KHBnX2dldF9h Y2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpyZWdjbGFzczo6b2lkLCAxKSk7 CitTRUxFQ1QgdW5uZXN0KHBnX2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVz dDUnOjpyZWdjbGFzczo6b2lkLCAyKSk7CitTRUxFQ1QgdW5uZXN0KHBnX2dldF9hY2woJ3Bn X2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpyZWdjbGFzczo6b2lkLCAzKSk7CitTRUxF Q1QgdW5uZXN0KHBnX2dldF9hY2woJ3BnX2NsYXNzJzo6cmVnY2xhc3MsICdhdGVzdDUnOjpy ZWdjbGFzczo6b2lkLCA0KSk7CiAKIElOU0VSVCBJTlRPIGF0ZXN0NSBWQUxVRVMgKDEsMiwz KTsKIAotLSAKMi40NS4xCgo= --8ab88bcac9a74ce28fe0ad0b4d765961--