Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKmPs-0004BZ-6n for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Feb 2022 19:26:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nKmPq-0003Ru-OW for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Feb 2022 19:26:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKmPq-0003Rl-AV for pgsql-hackers@lists.postgresql.org; Thu, 17 Feb 2022 19:26:10 +0000 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nKmPl-00068S-5a for pgsql-hackers@lists.postgresql.org; Thu, 17 Feb 2022 19:26:09 +0000 Received: by mail-pf1-x436.google.com with SMTP id z16so523633pfh.3 for ; Thu, 17 Feb 2022 11:26:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=2o84DhCXxdJe5iV5A+sfYDln/LSjVMdxACnwVj0HBew=; b=B4YOir2FyUVt4mMORVkc8hK7j4Pugz7axyZtuv9h3lPNJjBJMifTG5Q6ZUWvcemILl HbZQRxaSdZw5Ias/IhTkD9ENR2ZM9PsF+oEhYI6/S7rXbxOCVLfPKIJoNIIGyWOlY9o0 aUn/2FEwJEPzTxSvaNv1X4llykYmtYfzubcmKm+/qobb685k7UPoSWXfiB7vTzAcjszX mvXfsNUt7pkdoFDn3osrgQjmKZI6Z9vyPBlIDZJRJgn2JySEzfjBV/OEPtSns8ERtwHt Os9agkdEZCBZsvwhXjWkiZqlqf3s7DtYZA2ZTNSuups16/nleBRnwy7biHQjtohoU95I GNWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=2o84DhCXxdJe5iV5A+sfYDln/LSjVMdxACnwVj0HBew=; b=TS6ekmnpk4DIBS08WStIZRzUelRgvJ0sEIBHY9ChkOZ96RpEKDXo3B3lt+Lk6GK+m1 bkON+axmWz2HsQ2JCdJ6vACvkXGhD0nSJBnIZyvUAu0hNzWcbCmGiuwWhGnt3W9hoha/ 12wPJIypRC6M27sqIzdipdRiMGKzBc7GRohBJCjc63ON9NOki6MKV7WTWtI8wd6Lp47t avZ08tqpMkLVSpe1uzwkkeEPeY5g8GCxAYjwmW5yDQZBjeycP+pw/0GwY3XkL0JAj/Wb wu2XnauMhkwNXu0m5rNncFyINngf8dQPxamVUI9AYYDDeiRNDxTAQg/8AuNIJuqtsSyE 9FFg== X-Gm-Message-State: AOAM532RP5TOeMPTNG7Uhb8fxyzjSWSd5C4szD4+l900YfmsQIP3rTjX Da1cY1xuOMoiSwprQtMGHSF4WXaQFaxp06u0pxT20kuAKZc= X-Google-Smtp-Source: ABdhPJxp7GLYWSdVzWVvs8TOYMQHCEtgzb7GxfCfX3O0gFhvLXTCaDkQXRwRd7rW/OUCDVEy96LR71Vv0RP1yLgx3aM= X-Received: by 2002:a63:f357:0:b0:373:1038:269c with SMTP id t23-20020a63f357000000b003731038269cmr3502909pgj.454.1645125962081; Thu, 17 Feb 2022 11:26:02 -0800 (PST) MIME-Version: 1.0 From: samay sharma Date: Thu, 17 Feb 2022 11:25:50 -0800 Message-ID: Subject: Proposal: Support custom authentication methods using hooks To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000094f43c05d83bbc26" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000094f43c05d83bbc26 Content-Type: multipart/alternative; boundary="00000000000094f43805d83bbc24" --00000000000094f43805d83bbc24 Content-Type: text/plain; charset="UTF-8" Hi all, I wanted to submit a patch to expose 2 new hooks (one for the authentication check and another one for error reporting) in auth.c. These will allow users to implement their own authentication methods for Postgres or add custom logic around authentication. A use case where this is useful are environments where you want authentication to be centrally managed across different services. This is a common deployment model for cloud providers where customers like to use single sign on and authenticate across different services including Postgres. Implementing this now is tricky as it requires syncing that authentication method's credentials with Postgres (and that gets trickier with TTL/expiry etc.). With these hooks, you can implement an extension to check credentials directly using the authentication provider's APIs. To enable this, I've proposed adding a new authentication method "custom" which can be specified in pg_hba.conf and takes a mandatory argument "provider" specifying which authentication provider to use. I've also moved a couple static functions to headers so that extensions can call them. Sample pg_hba.conf line to use a custom provider: host all all ::1/128 custom provider=test As an example and a test case, I've added an extension named test_auth_provider in src/test/modules which fetches credentials from a pre-defined array. I've also added tap tests for the extension to test this functionality. One constraint in the current implementation is that we allow only one authentication provider to be loaded at a time. In the future, we can add more functionality to maintain an array of hooks and call the appropriate one based on the provider name in the pg_hba line. A couple of my tests are flaky and sometimes fail in CI. I think the reason for that is I don't wait for pg_hba reload to be processed before checking logs for error messages. I didn't find an immediate way to address that and I'm looking into it but wanted to get an initial version out for feedback on the approach taken and interfaces. Once those get finalized, I can submit a patch to add docs as well. Looking forward to your feedback. Regards, Samay --00000000000094f43805d83bbc24 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,

I wanted to submit a patch to exp= ose 2 new hooks (one for the authentication check and another one for error= reporting) in auth.c. These will allow users to implement their=C2=A0own a= uthentication=C2=A0methods for Postgres or add custom logic around authenti= cation.

A use case where this is useful are=C2=A0e= nvironments where you want authentication to be centrally managed=C2=A0acro= ss different services. This is a common deployment model for cloud provider= s where customers like to use single sign on and authenticate across differ= ent=C2=A0services including Postgres. Implementing this now is tricky as it= requires syncing that authentication method's credentials with Postgre= s (and that gets trickier with TTL/expiry etc.). With these hooks, you can = implement an extension to check credentials directly using the authenticati= on=C2=A0provider's=C2=A0APIs.

To enable=C2=A0t= his, I've proposed adding a new authentication method "custom"= ; which can be specified in pg_hba.conf and takes a mandatory argument=C2= =A0 "provider" specifying which authentication provider to use. I= 've also moved a couple static functions to=C2=A0headers=C2=A0so that e= xtensions can call them.

Sample pg_hba.conf line t= o use a custom provider:

host=C2=A0 =C2=A0=C2=A0all=C2=A0=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0all=C2=A0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A0::1/128=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A0custom provider=3Dtest


<= /p>

As an ex= ample and a test case, I've added an extension=C2=A0named test_auth_pro= vider in src/test/modules which fetches credentials=C2=A0from a=C2=A0pre-de= fined array. I've also added tap tests for the extension to test this f= unctionality.


One constraint in= the current=C2=A0implementation is that we allow only one authentication= =C2=A0provider to be loaded at a time. In the future, we can add more funct= ionality to maintain an array of hooks and call the appropriate one based o= n the provider name in the pg_hba line.


A cou= ple of my tests are flaky and sometimes fail in CI. I think the reason for = that is I don't wait for pg_hba reload to be processed before checking = logs for error messages. I didn't find an immediate way to address that= and I'm looking into it but wanted to get an initial version out for f= eedback=C2=A0on the approach taken and interfaces. Once those get finalized= , I can submit a patch to add docs as well.


L= ooking forward to your feedback.


Regards,

=

Samay

<= /div>
--00000000000094f43805d83bbc24-- --00000000000094f43c05d83bbc26 Content-Type: application/octet-stream; name="0001-Add-support-for-custom-authentication-methods.patch" Content-Disposition: attachment; filename="0001-Add-support-for-custom-authentication-methods.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzratq6n0 RnJvbSBmODM4ZGQzNzdjMzA3NzhmNTMwZWMxOWJjMDA0Y2JhMTZhODBkOGU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgRmViIDIwMjIgMjI6MjM6MjkgLTA4MDAKU3ViamVjdDogW1BBVENIIDEv M10gQWRkIHN1cHBvcnQgZm9yIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBtZXRob2RzCgpDdXJyZW50 bHksIFBvc3RncmVTUUwgc3VwcG9ydHMgb25seSBhIHNldCBvZiBwcmUtZGVmaW5lZCBhdXRoZW50 aWNhdGlvbgptZXRob2RzLiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgMiBob29rcyB3aGlj aCBhbGxvdyB1c2VycyB0byBhZGQKdGhlaXIgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMg YnkgZGVmaW5pbmcgYSBjaGVjayBmdW5jdGlvbiBhbmQgYW4KZXJyb3IgZnVuY3Rpb24uIFVzZXJz IGNhbiB0aGVuIHVzZSB0aGVzZSBtZXRob2RzIGJ5IHVzaW5nIGEgbmV3ICJjdXN0b20iCmtleXdv cmQgaW4gcGdfaGJhLmNvbmYgYW5kIHNwZWNpZnlpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIHByb3Zp ZGVyIHRoZXkKd2FudCB0byB1c2UuCi0tLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jIHwgODUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvbGli cHEvaGJhLmMgIHwgMzYgKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2xpYnBxL2F1dGgu aCB8IDI3ICsrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2xpYnBxL2hiYS5oICB8ICA0ICsrCiA0 IGZpbGVzIGNoYW5nZWQsIDEzMSBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRo LmMKaW5kZXggZWZjNTNmMzEzNS4uMmUzZDAyYjM1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bGlicHEvYXV0aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwpAQCAtNDcsOCArNDcs NiBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2b2lkIGF1dGhfZmFpbGVkKFBvcnQgKnBvcnQs IGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmxvZ2RldGFpbCk7Ci1zdGF0aWMgY2hhciAqcmVjdl9w YXNzd29yZF9wYWNrZXQoUG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBzZXRfYXV0aG5faWQoUG9y dCAqcG9ydCwgY29uc3QgY2hhciAqaWQpOwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjA2LDIzICsyMDQs NiBAQCBzdGF0aWMgaW50CXBnX1NTUElfbWFrZV91cG4oY2hhciAqYWNjb3VudG5hbWUsCiBzdGF0 aWMgaW50CUNoZWNrUkFESVVTQXV0aChQb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQJUGVyZm9ybVJh ZGl1c1RyYW5zYWN0aW9uKGNvbnN0IGNoYXIgKnNlcnZlciwgY29uc3QgY2hhciAqc2VjcmV0LCBj b25zdCBjaGFyICpwb3J0c3RyLCBjb25zdCBjaGFyICppZGVudGlmaWVyLCBjb25zdCBjaGFyICp1 c2VyX25hbWUsIGNvbnN0IGNoYXIgKnBhc3N3ZCk7CiAKLQotLyoKLSAqIE1heGltdW0gYWNjZXB0 ZWQgc2l6ZSBvZiBHU1MgYW5kIFNTUEkgYXV0aGVudGljYXRpb24gdG9rZW5zLgotICogV2UgYWxz byB1c2UgdGhpcyBhcyBhIGxpbWl0IG9uIG9yZGluYXJ5IHBhc3N3b3JkIHBhY2tldCBsZW5ndGhz LgotICoKLSAqIEtlcmJlcm9zIHRpY2tldHMgYXJlIHVzdWFsbHkgcXVpdGUgc21hbGwsIGJ1dCB0 aGUgVEdUcyBpc3N1ZWQgYnkgV2luZG93cwotICogZG9tYWluIGNvbnRyb2xsZXJzIGluY2x1ZGUg YW4gYXV0aG9yaXphdGlvbiBmaWVsZCBrbm93biBhcyB0aGUgUHJpdmlsZWdlCi0gKiBBdHRyaWJ1 dGUgQ2VydGlmaWNhdGUgKFBBQyksIHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VyJ3MgV2luZG93cyBw ZXJtaXNzaW9ucwotICogKGdyb3VwIG1lbWJlcnNoaXBzIGV0Yy4pLiBUaGUgUEFDIGlzIGNvcGll ZCBpbnRvIGFsbCB0aWNrZXRzIG9idGFpbmVkIG9uCi0gKiB0aGUgYmFzaXMgb2YgdGhpcyBUR1Qg KGV2ZW4gdGhvc2UgaXNzdWVkIGJ5IFVuaXggcmVhbG1zIHdoaWNoIHRoZSBXaW5kb3dzCi0gKiBy ZWFsbSB0cnVzdHMpLCBhbmQgY2FuIGJlIHNldmVyYWwga0IgaW4gc2l6ZS4gVGhlIG1heGltdW0g dG9rZW4gc2l6ZQotICogYWNjZXB0ZWQgYnkgV2luZG93cyBzeXN0ZW1zIGlzIGRldGVybWluZWQg YnkgdGhlIE1heEF1dGhUb2tlbiBXaW5kb3dzCi0gKiByZWdpc3RyeSBzZXR0aW5nLiBNaWNyb3Nv ZnQgcmVjb21tZW5kcyB0aGF0IGl0IGlzIG5vdCBzZXQgaGlnaGVyIHRoYW4KLSAqIDY1NTM1IGJ5 dGVzLCBzbyB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGxpbWl0IGZvciB1cyBhcyB3ZWxs LgotICovCi0jZGVmaW5lIFBHX01BWF9BVVRIX1RPS0VOX0xFTkdUSAk2NTUzNQotCiAvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqIEdsb2JhbCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM1 LDYgKzIxNiwxNiBAQCBzdGF0aWMgaW50CVBlcmZvcm1SYWRpdXNUcmFuc2FjdGlvbihjb25zdCBj aGFyICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKnNlY3JldCwgY29ucwogICovCiBDbGllbnRBdXRoZW50 aWNhdGlvbl9ob29rX3R5cGUgQ2xpZW50QXV0aGVudGljYXRpb25faG9vayA9IE5VTEw7CiAKKy8q CisgKiBUaGVzZSBob29rcyBhbGxvdyBwbHVnaW5zIHRvIGdldCBjb250cm9sIG9mIHRoZSBjbGll bnQgYXV0aGVudGljYXRpb24gY2hlY2sKKyAqIGFuZCBlcnJvciByZXBvcnRpbmcgbG9naWMuIFRo aXMgYWxsb3dzIHVzZXJzIHRvIHdyaXRlIGV4dGVuc2lvbnMgdG8KKyAqIGltcGxlbWVudCBhdXRo ZW50aWNhdGlvbiB1c2luZyBhbnkgcHJvdG9jb2wgb2YgdGhlaXIgY2hvaWNlLiBUbyBhY3F1aXJl IHRoZXNlCisgKiBob29rcywgcGx1Z2lucyBuZWVkIHRvIGNhbGwgdGhlIFJlZ2lzdGVyQXV0aFBy b3ZpZGVyKCkgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNr X2hvb2tfdHlwZSBDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2sgPSBOVUxMOworc3RhdGlj IEN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9va190eXBlIEN1c3RvbUF1dGhlbnRpY2F0aW9u RXJyb3JfaG9vayA9IE5VTEw7CitjaGFyICpjdXN0b21fcHJvdmlkZXJfbmFtZSA9IE5VTEw7CisK IC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZSBhdXRoZW50aWNhdGlvbiBmYWlsZWQsIGJ1dCBub3Qg KG11Y2ggYWJvdXQpIHdoeS4KICAqCkBAIC0zMTEsNiArMzAyLDEyIEBAIGF1dGhfZmFpbGVkKFBv cnQgKnBvcnQsIGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmxvZ2RldGFpbCkKIAkJY2FzZSB1YVJB RElVUzoKIAkJCWVycnN0ciA9IGdldHRleHRfbm9vcCgiUkFESVVTIGF1dGhlbnRpY2F0aW9uIGZh aWxlZCBmb3IgdXNlciBcIiVzXCIiKTsKIAkJCWJyZWFrOworCQljYXNlIHVhQ3VzdG9tOgorCQkJ aWYgKEN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9vaykKKwkJCQllcnJzdHIgPSBDdXN0b21B dXRoZW50aWNhdGlvbkVycm9yX2hvb2socG9ydCk7CisJCQllbHNlCisJCQkJZXJyc3RyID0gZ2V0 dGV4dF9ub29wKCJDdXN0b20gYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyIFwiJXNcIiIp OworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJzdHIgPSBnZXR0ZXh0X25vb3AoImF1dGhl bnRpY2F0aW9uIGZhaWxlZCBmb3IgdXNlciBcIiVzXCI6IGludmFsaWQgYXV0aGVudGljYXRpb24g bWV0aG9kIik7CiAJCQlicmVhazsKQEAgLTM0NSw3ICszNDIsNyBAQCBhdXRoX2ZhaWxlZChQb3J0 ICpwb3J0LCBpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpsb2dkZXRhaWwpCiAgKiBsaWZldGltZSBv ZiB0aGUgUG9ydCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIGEgc3RyaW5nIHRoYXQgaXMgbWFuYWdl ZCBieSBhbgogICogZXh0ZXJuYWwgbGlicmFyeS4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHNl dF9hdXRobl9pZChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICppZCkKIHsKIAlBc3NlcnQoaWQpOwpA QCAtNjMwLDYgKzYyNywxMCBAQCBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogCQlj YXNlIHVhVHJ1c3Q6CiAJCQlzdGF0dXMgPSBTVEFUVVNfT0s7CiAJCQlicmVhazsKKwkJY2FzZSB1 YUN1c3RvbToKKwkJCWlmIChDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2spCisJCQkJc3Rh dHVzID0gQ3VzdG9tQXV0aGVudGljYXRpb25DaGVja19ob29rKHBvcnQpOworCQkJYnJlYWs7CiAJ fQogCiAJaWYgKChzdGF0dXMgPT0gU1RBVFVTX09LICYmIHBvcnQtPmhiYS0+Y2xpZW50Y2VydCA9 PSBjbGllbnRDZXJ0RnVsbCkKQEAgLTY4OSw3ICs2OTAsNyBAQCBzZW5kQXV0aFJlcXVlc3QoUG9y dCAqcG9ydCwgQXV0aFJlcXVlc3QgYXJlcSwgY29uc3QgY2hhciAqZXh0cmFkYXRhLCBpbnQgZXh0 cmFsZQogICoKICAqIFJldHVybnMgTlVMTCBpZiBjb3VsZG4ndCBnZXQgcGFzc3dvcmQsIGVsc2Ug cGFsbG9jJ2Qgc3RyaW5nLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIHJlY3ZfcGFzc3dv cmRfcGFja2V0KFBvcnQgKnBvcnQpCiB7CiAJU3RyaW5nSW5mb0RhdGEgYnVmOwpAQCAtMzM0Mywz ICszMzQ0LDQ1IEBAIFBlcmZvcm1SYWRpdXNUcmFuc2FjdGlvbihjb25zdCBjaGFyICpzZXJ2ZXIs IGNvbnN0IGNoYXIgKnNlY3JldCwgY29uc3QgY2hhciAqcG9yCiAJCX0KIAl9CQkJCQkJCS8qIHdo aWxlICh0cnVlKSAqLwogfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEN1c3RvbSBhdXRoZW50aWNhdGlvbgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFJlZ2lzdGVyQXV0aFByb3ZpZGVyIHJlZ2lzdGVycyBh IGN1c3RvbSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciB0byBiZQorICogdXNlZCBmb3IgYXV0aGVu dGljYXRpb24uIEN1cnJlbnRseSwgd2UgYWxsb3cgb25seSBvbmUgYXV0aGVudGljYXRpb24KKyAq IHByb3ZpZGVyIHRvIGJlIHJlZ2lzdGVyZWQgZm9yIHVzZSBhdCBhIHRpbWUuCisgKgorICogVGhp cyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIF9QR19pbml0KCkgYnkgYW55IGV4dGVuc2lv biBsb29raW5nIHRvCisgKiBhZGQgYSBjdXN0b20gYXV0aGVudGljYXRpb24gbWV0aG9kLgorICov Cit2b2lkIFJlZ2lzdGVyQXV0aFByb3ZpZGVyKGNvbnN0IGNoYXIgKnByb3ZpZGVyX25hbWUsCisJ CUN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9va190eXBlIEF1dGhlbnRpY2F0aW9uQ2hlY2tG dW5jdGlvbiwKKwkJQ3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rX3R5cGUgQXV0aGVudGlj YXRpb25FcnJvckZ1bmN0aW9uKQoreworCWlmIChwcm92aWRlcl9uYW1lID09IE5VTEwpCisJewor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNhbm5vdCByZWdpc3RlciBhdXRoZW50aWNh dGlvbiBwcm92aWRlciB3aXRob3V0IG5hbWUiKSkpOworCX0KKworCWlmIChBdXRoZW50aWNhdGlv bkNoZWNrRnVuY3Rpb24gPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1z ZygiY2Fubm90IHJlZ2lzdGVyIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHdpdGhvdXQgYSBjaGVj ayBmdW5jdGlvbiIpKSk7CisJfQorCisJaWYgKGN1c3RvbV9wcm92aWRlcl9uYW1lKQorCXsKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjYW5ub3QgcmVnaXN0ZXIgYXV0aGVudGljYXRp b24gcHJvdmlkZXIgJXMiLCBwcm92aWRlcl9uYW1lKSwKKwkJCQkgZXJyZGV0YWlsKCJPbmx5IG9u ZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBhbGxvd2VkLiAgUHJvdmlkZXIgJXMgaXMgYWxyZWFk eSByZWdpc3RlcmVkLiIsCisJCQkJCQkJY3VzdG9tX3Byb3ZpZGVyX25hbWUpKSk7CisJfQorCisJ Y3VzdG9tX3Byb3ZpZGVyX25hbWUgPSBwc3RyZHVwKHByb3ZpZGVyX25hbWUpOworCUN1c3RvbUF1 dGhlbnRpY2F0aW9uQ2hlY2tfaG9vayA9IEF1dGhlbnRpY2F0aW9uQ2hlY2tGdW5jdGlvbjsKKwlD dXN0b21BdXRoZW50aWNhdGlvbkVycm9yX2hvb2sgPSBBdXRoZW50aWNhdGlvbkVycm9yRnVuY3Rp b247Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYyBiL3NyYy9iYWNrZW5k L2xpYnBxL2hiYS5jCmluZGV4IGQ4NGE0MGI3MjYuLjk1NmQ3ZDY4NTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2xpYnBxL2hiYS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCkBAIC0x MzQsNiArMTM0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IFVzZXJBdXRoTmFtZVtdID0K IAkibGRhcCIsCiAJImNlcnQiLAogCSJyYWRpdXMiLAorCSJjdXN0b20iLAogCSJwZWVyIgogfTsK IApAQCAtMTM5OSw2ICsxNDAwLDggQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkTGluZSAqdG9r X2xpbmUsIGludCBlbGV2ZWwpCiAjZW5kaWYKIAllbHNlIGlmIChzdHJjbXAodG9rZW4tPnN0cmlu ZywgInJhZGl1cyIpID09IDApCiAJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFSQURJVVM7 CisJZWxzZSBpZiAoc3RyY21wKHRva2VuLT5zdHJpbmcsICJjdXN0b20iKSA9PSAwKQorCQlwYXJz ZWRsaW5lLT5hdXRoX21ldGhvZCA9IHVhQ3VzdG9tOwogCWVsc2UKIAl7CiAJCWVyZXBvcnQoZWxl dmVsLApAQCAtMTY5MSw2ICsxNjk0LDE0IEBAIHBhcnNlX2hiYV9saW5lKFRva2VuaXplZExpbmUg KnRva19saW5lLCBpbnQgZWxldmVsKQogCQlwYXJzZWRsaW5lLT5jbGllbnRjZXJ0ID0gY2xpZW50 Q2VydEZ1bGw7CiAJfQogCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZXIgbmFtZSBp cyBzcGVjaWZpZWQgZm9yIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBtZXRob2QuCisJICovCisJaWYg KHBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID09IHVhQ3VzdG9tKQorCXsKKwkJTUFOREFUT1JZX0FV VEhfQVJHKHBhcnNlZGxpbmUtPmN1c3RvbV9wcm92aWRlciwgInByb3ZpZGVyIiwgImN1c3RvbSIp OworCX0KKwogCXJldHVybiBwYXJzZWRsaW5lOwogfQogCkBAIC0yMTAyLDYgKzIxMTMsMzEgQEAg cGFyc2VfaGJhX2F1dGhfb3B0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAqaGJhbGlu ZSwKIAkJaGJhbGluZS0+cmFkaXVzaWRlbnRpZmllcnMgPSBwYXJzZWRfaWRlbnRpZmllcnM7CiAJ CWhiYWxpbmUtPnJhZGl1c2lkZW50aWZpZXJzX3MgPSBwc3RyZHVwKHZhbCk7CiAJfQorCWVsc2Ug aWYgKHN0cmNtcChuYW1lLCAicHJvdmlkZXIiKSA9PSAwKQorCXsKKwkJUkVRVUlSRV9BVVRIX09Q VElPTih1YUN1c3RvbSwgInByb3ZpZGVyIiwgImN1c3RvbSIpOworCisJCS8qCisJCSAqIFZlcmlm eSB0aGF0IHRoZSBwcm92aWRlciBtZW50aW9uZWQgaXMgc2FtZSBhcyB0aGUgb25lIGxvYWRlZAor CQkgKiB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgorCQkgKi8KKworCQlpZiAoY3VzdG9t X3Byb3ZpZGVyX25hbWUgPT0gTlVMTCB8fCBzdHJjbXAodmFsLGN1c3RvbV9wcm92aWRlcl9uYW1l KSAhPSAwKQorCQl7CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9D T05GSUdfRklMRV9FUlJPUiksCisJCQkJCSBlcnJtc2coImNhbm5vdCB1c2UgYXV0aGVudGljYXRp b24gcHJvdmlkZXIgJXMiLHZhbCksCisJCQkJCSBlcnJoaW50KCJMb2FkIGF1dGhlbnRpY2F0aW9u IHByb3ZpZGVyIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMuIiksCisJCQkJCSBlcnJjb250 ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIiLAorCQkJCQkJCWxpbmVf bnVtLCBIYmFGaWxlTmFtZSkpKTsKKworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWVsc2UKKwkJ eworCQkJaGJhbGluZS0+Y3VzdG9tX3Byb3ZpZGVyID0gcHN0cmR1cCh2YWwpOworCQl9CisJfQog CWVsc2UKIAl7CiAJCWVyZXBvcnQoZWxldmVsLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli cHEvYXV0aC5oIGIvc3JjL2luY2x1ZGUvbGlicHEvYXV0aC5oCmluZGV4IDZkN2VlMWFjYjkuLjFk MTBjY2NjMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2F1dGguaAorKysgYi9zcmMv aW5jbHVkZS9saWJwcS9hdXRoLmgKQEAgLTIzLDkgKzIzLDM2IEBAIGV4dGVybiBjaGFyICpwZ19r cmJfcmVhbG07CiBleHRlcm4gdm9pZCBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KTsK IGV4dGVybiB2b2lkIHNlbmRBdXRoUmVxdWVzdChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVx LCBjb25zdCBjaGFyICpleHRyYWRhdGEsCiAJCQkJCQkJaW50IGV4dHJhbGVuKTsKK2V4dGVybiB2 b2lkIHNldF9hdXRobl9pZChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICppZCk7CitleHRlcm4gY2hh ciAqcmVjdl9wYXNzd29yZF9wYWNrZXQoUG9ydCAqcG9ydCk7CiAKIC8qIEhvb2sgZm9yIHBsdWdp bnMgdG8gZ2V0IGNvbnRyb2wgaW4gQ2xpZW50QXV0aGVudGljYXRpb24oKSAqLwordHlwZWRlZiBp bnQgKCpDdXN0b21BdXRoZW50aWNhdGlvbkNoZWNrX2hvb2tfdHlwZSkgKFBvcnQgKik7CiB0eXBl ZGVmIHZvaWQgKCpDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rX3R5cGUpIChQb3J0ICosIGludCk7 CiBleHRlcm4gUEdETExJTVBPUlQgQ2xpZW50QXV0aGVudGljYXRpb25faG9va190eXBlIENsaWVu dEF1dGhlbnRpY2F0aW9uX2hvb2s7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gcmVwb3J0IGVy cm9yIG1lc3NhZ2VzIGluIGF1dGhfZmFpbGVkKCkgKi8KK3R5cGVkZWYgY29uc3QgY2hhciAqICgq Q3VzdG9tQXV0aGVudGljYXRpb25FcnJvcl9ob29rX3R5cGUpIChQb3J0ICopOworCitleHRlcm4g dm9pZCBSZWdpc3RlckF1dGhQcm92aWRlcgorCQkoY29uc3QgY2hhciAqcHJvdmlkZXJfbmFtZSwK KwkJIEN1c3RvbUF1dGhlbnRpY2F0aW9uQ2hlY2tfaG9va190eXBlIEN1c3RvbUF1dGhlbnRpY2F0 aW9uQ2hlY2tfaG9vaywKKwkJIEN1c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9va190eXBlIEN1 c3RvbUF1dGhlbnRpY2F0aW9uRXJyb3JfaG9vayk7CisKKy8qCisgKiBNYXhpbXVtIGFjY2VwdGVk IHNpemUgb2YgR1NTIGFuZCBTU1BJIGF1dGhlbnRpY2F0aW9uIHRva2Vucy4KKyAqIFdlIGFsc28g dXNlIHRoaXMgYXMgYSBsaW1pdCBvbiBvcmRpbmFyeSBwYXNzd29yZCBwYWNrZXQgbGVuZ3Rocy4K KyAqCisgKiBLZXJiZXJvcyB0aWNrZXRzIGFyZSB1c3VhbGx5IHF1aXRlIHNtYWxsLCBidXQgdGhl IFRHVHMgaXNzdWVkIGJ5IFdpbmRvd3MKKyAqIGRvbWFpbiBjb250cm9sbGVycyBpbmNsdWRlIGFu IGF1dGhvcml6YXRpb24gZmllbGQga25vd24gYXMgdGhlIFByaXZpbGVnZQorICogQXR0cmlidXRl IENlcnRpZmljYXRlIChQQUMpLCB3aGljaCBjb250YWlucyB0aGUgdXNlcidzIFdpbmRvd3MgcGVy bWlzc2lvbnMKKyAqIChncm91cCBtZW1iZXJzaGlwcyBldGMuKS4gVGhlIFBBQyBpcyBjb3BpZWQg aW50byBhbGwgdGlja2V0cyBvYnRhaW5lZCBvbgorICogdGhlIGJhc2lzIG9mIHRoaXMgVEdUIChl dmVuIHRob3NlIGlzc3VlZCBieSBVbml4IHJlYWxtcyB3aGljaCB0aGUgV2luZG93cworICogcmVh bG0gdHJ1c3RzKSwgYW5kIGNhbiBiZSBzZXZlcmFsIGtCIGluIHNpemUuIFRoZSBtYXhpbXVtIHRv a2VuIHNpemUKKyAqIGFjY2VwdGVkIGJ5IFdpbmRvd3Mgc3lzdGVtcyBpcyBkZXRlcm1pbmVkIGJ5 IHRoZSBNYXhBdXRoVG9rZW4gV2luZG93cworICogcmVnaXN0cnkgc2V0dGluZy4gTWljcm9zb2Z0 IHJlY29tbWVuZHMgdGhhdCBpdCBpcyBub3Qgc2V0IGhpZ2hlciB0aGFuCisgKiA2NTUzNSBieXRl cywgc28gdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBsaW1pdCBmb3IgdXMgYXMgd2VsbC4K KyAqLworI2RlZmluZSBQR19NQVhfQVVUSF9UT0tFTl9MRU5HVEgJNjU1MzUKKwogI2VuZGlmCQkJ CQkJCS8qIEFVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmggYi9z cmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCA4ZDlmMzgyMWIxLi5jNWFlZjY5OTRjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9o YmEuaApAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIGVudW0gVXNlckF1dGgKIAl1YUxEQVAsCiAJ dWFDZXJ0LAogCXVhUkFESVVTLAorCXVhQ3VzdG9tLAogCXVhUGVlcgogI2RlZmluZSBVU0VSX0FV VEhfTEFTVCB1YVBlZXIJLyogTXVzdCBiZSBsYXN0IHZhbHVlIG9mIHRoaXMgZW51bSAqLwogfSBV c2VyQXV0aDsKQEAgLTEyMCw2ICsxMjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBIYmFMaW5lCiAJY2hh cgkgICAqcmFkaXVzaWRlbnRpZmllcnNfczsKIAlMaXN0CSAgICpyYWRpdXNwb3J0czsKIAljaGFy CSAgICpyYWRpdXNwb3J0c19zOworCWNoYXIJICAgKmN1c3RvbV9wcm92aWRlcjsKIH0gSGJhTGlu ZTsKIAogdHlwZWRlZiBzdHJ1Y3QgSWRlbnRMaW5lCkBAIC0xNDQsNCArMTQ2LDYgQEAgZXh0ZXJu IGludAljaGVja191c2VybWFwKGNvbnN0IGNoYXIgKnVzZXJtYXBfbmFtZSwKIAkJCQkJCSAgYm9v bCBjYXNlX3NlbnNpdGl2ZSk7CiBleHRlcm4gYm9vbCBwZ19pc2JsYW5rKGNvbnN0IGNoYXIgYyk7 CiAKK2V4dGVybiBjaGFyICpjdXN0b21fcHJvdmlkZXJfbmFtZTsKKwogI2VuZGlmCQkJCQkJCS8q IEhCQV9IICovCi0tIAoyLjM0LjEKCg== --00000000000094f43c05d83bbc26 Content-Type: application/octet-stream; name="0002-Add-sample-extension-to-test-custom-auth-provider-ho.patch" Content-Disposition: attachment; filename="0002-Add-sample-extension-to-test-custom-auth-provider-ho.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzratq6z1 RnJvbSA0NmQwMGI3NGNlZTJlNmMzMTJlY2U5MGI5YWRkOTFiYjBmNGFjOGU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgRmViIDIwMjIgMjI6Mjg6NDAgLTA4MDAKU3ViamVjdDogW1BBVENIIDIv M10gQWRkIHNhbXBsZSBleHRlbnNpb24gdG8gdGVzdCBjdXN0b20gYXV0aCBwcm92aWRlciBob29r cwoKVGhpcyBjaGFuZ2UgYWRkcyBhIG5ldyBleHRlbnNpb24gdG8gc3JjL3Rlc3QvbW9kdWxlcyB0 bwp0ZXN0IHRoZSBjdXN0b20gYXV0aGVudGljYXRpb24gcHJvdmlkZXIgaG9va3MuIEluIHRoaXMK ZXh0ZW5zaW9uLCB3ZSB1c2UgYW4gYXJyYXkgdG8gZGVmaW5lIHdoaWNoIHVzZXJzIHRvCmF1dGhl bnRpY2F0ZSBhbmQgd2hhdCBwYXNzd29yZHMgdG8gdXNlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9hdXRoX3Byb3ZpZGVyL01ha2VmaWxlICB8IDE2ICsrKysKIC4uLi90ZXN0X2F1dGhfcHJv dmlkZXIvdGVzdF9hdXRoX3Byb3ZpZGVyLmMgICB8IDkwICsrKysrKysrKysrKysrKysrKysKIDIg ZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL3Rlc3RfYXV0aF9wcm92aWRl ci5jCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvTWFr ZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNzk3MWE1YzdhCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUKQEAg LTAsMCArMSwxNiBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci9NYWtl ZmlsZQorCitNT0RVTEVfYmlnID0gdGVzdF9hdXRoX3Byb3ZpZGVyCitPQkpTID0gdGVzdF9hdXRo X3Byb3ZpZGVyLm8KK1BHRklMRURFU0MgPSAidGVzdF9hdXRoX3Byb3ZpZGVyIC0gcHJvdmlkZXIg dG8gdGVzdCBhdXRoIGhvb2tzIgorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29u ZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIKK3Rv cF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFr ZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2Jh bC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3Zp ZGVyL3Rlc3RfYXV0aF9wcm92aWRlci5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJv dmlkZXIvdGVzdF9hdXRoX3Byb3ZpZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNDc3ZWY4YjJjMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9hdXRoX3Byb3ZpZGVyL3Rlc3RfYXV0aF9wcm92aWRlci5jCkBAIC0wLDAgKzEsOTAgQEAK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X2F1dGhfcHJvdmlkZXIuYworICoJCQll eGFtcGxlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHBsdWdpbgkJCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElE RU5USUZJQ0FUSU9OCisgKgkJY29udHJpYi90ZXN0X2F1dGhfcHJvdmlkZXIvdGVzdF9hdXRoX3By b3ZpZGVyLmMKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImxpYnBxL2F1dGguaCIKKyNpbmNs dWRlICJsaWJwcS9saWJwcS5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3ZvaWQgX1BHX2luaXQo dm9pZCk7CisKK3N0YXRpYyBjaGFyICpnZXRfcGFzc3dvcmRfZm9yX3VzZXIoY2hhciAqdXNlcl9u YW1lKTsKKworLyoKKyAqIExpc3Qgb2YgdXNlcm5hbWVzIC8gcGFzc3dvcmRzIHRvIGFwcHJvdmUu IEhlcmUgd2UgYXJlIG5vdAorICogZ2V0dGluZyBwYXNzd29yZHMgZnJvbSBQb3N0Z3JlcyBidXQg ZnJvbSB0aGlzIGxpc3QuIEluIGEgbW9yZSByZWFsLWxpZmUKKyAqIGV4dGVuc2lvbiwgeW91IGNh biBmZXRjaCB2YWxpZCBjcmVkZW50aWFscyBhbmQgYXV0aGVudGljYXRpb24gdG9rZW5zIC8KKyAq IHBhc3N3b3JkcyBmcm9tIGFuIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLgorICov CitjaGFyIGNyZWRlbnRpYWxzWzNdWzNdWzUwXSA9IHsKKwl7ImJvYiIsImFsaWNlIiwiY2Fyb2wi fSwKKwl7ImJvYjEyMyIsImFsaWNlMTIzIiwiY2Fyb2wxMjMifQorfTsKKworc3RhdGljIGludCBU ZXN0QXV0aGVudGljYXRpb25DaGVjayhQb3J0ICpwb3J0KQoreworCWNoYXIgKnBhc3N3ZDsKKwlp bnQgcmVzdWx0ID0gU1RBVFVTX0VSUk9SOworCWNoYXIgKnJlYWxfcGFzczsKKworCXNlbmRBdXRo UmVxdWVzdChwb3J0LCBBVVRIX1JFUV9QQVNTV09SRCwgTlVMTCwgMCk7CisKKwlwYXNzd2QgPSBy ZWN2X3Bhc3N3b3JkX3BhY2tldChwb3J0KTsKKwlpZiAocGFzc3dkID09IE5VTEwpCisJCXJldHVy biBTVEFUVVNfRU9GOworCQkKKwlyZWFsX3Bhc3MgPSBnZXRfcGFzc3dvcmRfZm9yX3VzZXIocG9y dC0+dXNlcl9uYW1lKTsKKwlpZiAocmVhbF9wYXNzKQorCXsKKwkJaWYoc3RyY21wKHBhc3N3ZCwg cmVhbF9wYXNzKSA9PSAwKQorCQl7CisJCQlyZXN1bHQgPSBTVEFUVVNfT0s7CisJCX0KKwkJcGZy ZWUocmVhbF9wYXNzKTsKKwl9CisKKwlwZnJlZShwYXNzd2QpOworCisJcmV0dXJuIHJlc3VsdDsK K30KKworc3RhdGljIGNoYXIgKgorZ2V0X3Bhc3N3b3JkX2Zvcl91c2VyKGNoYXIgKnVzZXJfbmFt ZSkKK3sKKwljaGFyICpwYXNzd29yZCA9IE5VTEw7CisJaW50IGk7CisJZm9yIChpPTA7IGk8Mzsg aSsrKQorCXsKKwkJaWYgKHN0cmNtcCh1c2VyX25hbWUsIGNyZWRlbnRpYWxzWzBdW2ldKSA9PSAw KQorCQl7CisJCQlwYXNzd29yZCA9IHBzdHJkdXAoY3JlZGVudGlhbHNbMV1baV0pOworCQl9CisJ fQorCisJcmV0dXJuIHBhc3N3b3JkOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqVGVzdEF1dGhl bnRpY2F0aW9uRXJyb3IoUG9ydCAqcG9ydCkKK3sKKwljaGFyICplcnJvcl9tZXNzYWdlID0gKGNo YXIgKilwYWxsb2MgKDEwMCk7CisJc3ByaW50ZihlcnJvcl9tZXNzYWdlLCAiVGVzdCBhdXRoZW50 aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgJXMiLCBwb3J0LT51c2VyX25hbWUpOworCXJldHVybiBl cnJvcl9tZXNzYWdlOworfQorCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCVJlZ2lzdGVyQXV0 aFByb3ZpZGVyKCJ0ZXN0IiwgVGVzdEF1dGhlbnRpY2F0aW9uQ2hlY2ssIFRlc3RBdXRoZW50aWNh dGlvbkVycm9yKTsKK30KLS0gCjIuMzQuMQoK --00000000000094f43c05d83bbc26 Content-Type: application/octet-stream; name="0003-Add-tests-for-test_auth_provider-extension.patch" Content-Disposition: attachment; filename="0003-Add-tests-for-test_auth_provider-extension.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzratq792 RnJvbSA2NWVjZGE0ODI3ZGZjMTM5YWYyY2M4NWEwNTBlOWY0ZTMxYWQwYWNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1heSBTaGFybWEgPHNtaWxpbmdzYW1heUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTYgRmViIDIwMjIgMTI6Mjg6MzYgLTA4MDAKU3ViamVjdDogW1BBVENIIDMv M10gQWRkIHRlc3RzIGZvciB0ZXN0X2F1dGhfcHJvdmlkZXIgZXh0ZW5zaW9uCgpBZGQgdGFwIHRl c3RzIGZvciB0ZXN0X2F1dGhfcHJvdmlkZXIgZXh0ZW5zaW9uIGFsbG93IG1ha2UgY2hlY2sgaW4K c3JjL3Rlc3QvbW9kdWxlcyB0byBydW4gdGhlbS4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1 dGhfcHJvdmlkZXIvTWFrZWZpbGUgIHwgICAyICsKIC4uLi90ZXN0X2F1dGhfcHJvdmlkZXIvdC8w MDFfY3VzdG9tX2F1dGgucGwgICB8IDEzNCArKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hh bmdlZCwgMTM3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbAoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmlu ZGV4IGRmZmM3OWIyZDkuLmY1NjUzM2VhMTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBA QCBTVUJESVJTID0gXAogCQkgIHBsc2FtcGxlIFwKIAkJICBzbmFwc2hvdF90b29fb2xkIFwKIAkJ ICBzcGdpc3RfbmFtZV9vcHMgXAorCQkgIHRlc3RfYXV0aF9wcm92aWRlciBcCiAJCSAgdGVzdF9i bG9vbWZpbHRlciBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBcCiAJCSAgdGVzdF9leHRlbnNpb25z IFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL01ha2Vm aWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUKaW5kZXgg MTc5NzFhNWM3YS4uN2Q2MDFjZjdkNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2F1dGhfcHJvdmlkZXIvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dGhf cHJvdmlkZXIvTWFrZWZpbGUKQEAgLTQsNiArNCw4IEBAIE1PRFVMRV9iaWcgPSB0ZXN0X2F1dGhf cHJvdmlkZXIKIE9CSlMgPSB0ZXN0X2F1dGhfcHJvdmlkZXIubwogUEdGSUxFREVTQyA9ICJ0ZXN0 X2F1dGhfcHJvdmlkZXIgLSBwcm92aWRlciB0byB0ZXN0IGF1dGggaG9va3MiCiAKK1RBUF9URVNU UyA9IDEKKwogaWZkZWYgVVNFX1BHWFMKIFBHX0NPTkZJRyA9IHBnX2NvbmZpZwogUEdYUyA6PSAk KHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9hdXRoX3Byb3ZpZGVyL3QvMDAxX2N1c3RvbV9hdXRoLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRlYjBjZGY0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0aF9wcm92aWRlci90LzAwMV9jdXN0b21fYXV0aC5wbApA QCAtMCwwICsxLDEzNCBAQAorCisjIENvcHlyaWdodCAoYykgMjAyMS0yMDIyLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFNldCBvZiB0ZXN0cyBmb3IgdGVzdGluZyBj dXN0b20gYXV0aGVudGljYXRpb24uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsK K3VzZSBUZXN0OjpNb3JlOworCisjIERlbGV0ZSBwZ19oYmEuY29uZiBmcm9tIHRoZSBnaXZlbiBu b2RlLCBhZGQgYSBuZXcgZW50cnkgdG8gaXQKKyMgYW5kIHRoZW4gZXhlY3V0ZSBhIHJlbG9hZCB0 byByZWZyZXNoIGl0Lgorc3ViIHJlc2V0X3BnX2hiYQoreworCW15ICRub2RlICAgICAgID0gc2hp ZnQ7CisJbXkgJGhiYV9tZXRob2QgPSBzaGlmdDsKKworCXVubGluaygkbm9kZS0+ZGF0YV9kaXIg LiAnL3BnX2hiYS5jb25mJyk7CisJIyBqdXN0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB1c2UgYSBj b250aW51YXRpb24gbGluZQorCSRub2RlLT5hcHBlbmRfY29uZigncGdfaGJhLmNvbmYnLCAibG9j YWwgYWxsIGFsbFxcXG4gJGhiYV9tZXRob2QiKTsKKwkkbm9kZS0+cmVsb2FkOworCXJldHVybjsK K30KKworIyBUZXN0IHRoYXQgeW91IGdldCBleHBlY3RlZCBvdXRwdXQgYWZ0ZXIgbWFraW5nIGEg Y2hhbmdlIHRvIGhiYS5jb25mCisjIGFuZCByZWxvYWRpbmcgaXQuCitzdWIgdGVzdF9oYmFfcmVs b2FkCit7CisJbXkgKCRub2RlLCRtZXRob2QsJGV4cGVjdGVkX3JlcywkbG9nX21lc3NhZ2UpID0g QF87CisJbXkgJHN0YXR1c19zdHJpbmcgPSAnZmFpbGVkJzsKKwkkc3RhdHVzX3N0cmluZyA9ICdz dWNjZXNzJyBpZiAoJGV4cGVjdGVkX3JlcyBlcSAwKTsKKwlteSAkdGVzdG5hbWUgPSAicGdfaGJh LmNvbmYgcmVsb2FkICRzdGF0dXNfc3RyaW5nIGZvciBtZXRob2QgJG1ldGhvZCI7CisKKwlteSAk bG9nX2xvY2F0aW9uID0gLXMgJG5vZGUtPmxvZ2ZpbGU7CisJCisJcmVzZXRfcGdfaGJhKCRub2Rl LCRtZXRob2QpOworCisJbXkgJGxvZ19jb250ZW50cyA9IHNsdXJwX2ZpbGUoJG5vZGUtPmxvZ2Zp bGUsICRsb2dfbG9jYXRpb24pOworCisJIyBTZWFyY2ggZm9yIHNwZWNpZmljIGVycm9yIG1lc3Nh Z2UgaWYgaXQncyBhIGZhaWx1cmUuCisJIyBGb3Igc3VjY2VzcywganVzdCBjb25maXJtIHRoYXQg dGhlcmUgd2FzIG5vIGVycm9yIG1lc3NhZ2UuCisJaWYgKCRleHBlY3RlZF9yZXMgZXEgMSkKKwl7 CisJCWxpa2UoJGxvZ19jb250ZW50cywkbG9nX21lc3NhZ2UsJHRlc3RuYW1lKTsKKwl9CisJZWxz ZQorCXsKKwkJdW5saWtlKCRsb2dfY29udGVudHMsJGxvZ19tZXNzYWdlLCR0ZXN0bmFtZSk7CisJ fQorfQorCisjIFRlc3QgYWNjZXNzIGZvciBhIHNpbmdsZSByb2xlLCB1c2VmdWwgdG8gd3JhcCBh bGwgdGVzdHMgaW50byBvbmUuICBFeHRyYQorIyBuYW1lZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQg dG8gY29ubmVjdF9vay9mYWlscyBhcy1pcy4KK3N1YiB0ZXN0X3JvbGUKK3sKKwlsb2NhbCAkVGVz dDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOworCisJbXkgKCRu b2RlLCAkcm9sZSwgJG1ldGhvZCwgJGV4cGVjdGVkX3JlcywgJXBhcmFtcykgPSBAXzsKKwlteSAk c3RhdHVzX3N0cmluZyA9ICdmYWlsZWQnOworCSRzdGF0dXNfc3RyaW5nID0gJ3N1Y2Nlc3MnIGlm ICgkZXhwZWN0ZWRfcmVzIGVxIDApOworCisJbXkgJGNvbm5zdHIgPSAidXNlcj0kcm9sZSI7CisJ bXkgJHRlc3RuYW1lID0KKwkgICJhdXRoZW50aWNhdGlvbiAkc3RhdHVzX3N0cmluZyBmb3IgbWV0 aG9kICRtZXRob2QsIHJvbGUgJHJvbGUiOworCisJaWYgKCRleHBlY3RlZF9yZXMgZXEgMCkKKwl7 CisJCSRub2RlLT5jb25uZWN0X29rKCRjb25uc3RyLCAkdGVzdG5hbWUsICVwYXJhbXMpOworCX0K KwllbHNlCisJeworCQkjIE5vIGNoZWNrcyBvZiB0aGUgZXJyb3IgbWVzc2FnZSwgb25seSB0aGUg c3RhdHVzIGNvZGUuCisJCSRub2RlLT5jb25uZWN0X2ZhaWxzKCRjb25uc3RyLCAkdGVzdG5hbWUs ICVwYXJhbXMpOworCX0KK30KKworIyBJbml0aWFsaXplIHNlcnZlciBub2RlCitteSAkbm9kZSA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc2VydmVyJyk7Ciskbm9kZS0+aW5pdDsK KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19jb25uZWN0aW9ucyA9 IG9uXG4iKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInNoYXJlZF9w cmVsb2FkX2xpYnJhcmllcyA9ICd0ZXN0X2F1dGhfcHJvdmlkZXIuc28nXG4iKTsKKyRub2RlLT5z dGFydDsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJDUkVBVEUgUk9MRSBib2IgTE9H SU47Iik7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIkNSRUFURSBST0xFIGFsaWNlIExP R0lOOyIpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJDUkVBVEUgUk9MRSB0ZXN0IExP R0lOOyIpOworCisjIEFkZCBjdXN0b20gYXV0aCBtZXRob2QgdG8gcGdfaGJhLmNvbmYKK3Jlc2V0 X3BnX2hiYSgkbm9kZSwgJ2N1c3RvbSBwcm92aWRlcj10ZXN0Jyk7CisKKyMgVGVzdCB0aGF0IHVz ZXJzIGFyZSBhYmxlIHRvIGxvZ2luIHdpdGggY29ycmVjdCBwYXNzd29yZHMuCiskRU5WeyJQR1BB U1NXT1JEIn0gPSAnYm9iMTIzJzsKK3Rlc3Rfcm9sZSgkbm9kZSwgJ2JvYicsJ2N1c3RvbScsIDAs IGxvZ19saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhvcml6ZWQ6IHVzZXI9Ym9iL10pOworJEVO VnsiUEdQQVNTV09SRCJ9ID0gJ2FsaWNlMTIzJzsKK3Rlc3Rfcm9sZSgkbm9kZSwgJ2FsaWNlJywn Y3VzdG9tJywgMCwgbG9nX2xpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aG9yaXplZDogdXNlcj1h bGljZS9dKTsKKworIyBUZXN0IHRoYXQgYmFkIHBhc3N3b3JkcyBhcmUgcmVqZWN0ZWQuIAorJEVO VnsiUEdQQVNTV09SRCJ9ID0gJ2JhZHBhc3N3b3JkJzsKK3Rlc3Rfcm9sZSgkbm9kZSwgJ2JvYics J2N1c3RvbScsIDIsIGxvZ191bmxpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aG9yaXplZDovXSk7 Cit0ZXN0X3JvbGUoJG5vZGUsICdhbGljZScsJ2N1c3RvbScsIDIsIGxvZ191bmxpa2UgPT4gW3Fy L2Nvbm5lY3Rpb24gYXV0aG9yaXplZDovXSk7CisKKyMgVGVzdCB0aGF0IHVzZXJzIG5vdCBpbiBh dXRoZW50aWNhdGlvbiBsaXN0IGFyZSByZWplY3RlZC4KK3Rlc3Rfcm9sZSgkbm9kZSwgJ3Rlc3Qn LCdjdXN0b20nLCAyLCBsb2dfdW5saWtlID0+IFtxci9jb25uZWN0aW9uIGF1dGhvcml6ZWQ6L10p OworCisjIFRlc3RzIGZvciBpbnZhbGlkIGF1dGggb3B0aW9ucworCisjIFRlc3QgdGhhdCBhbiBp bmNvcnJlY3QgcHJvdmlkZXIgbmFtZSBpcyBub3QgYWNjZXB0ZWQuCit0ZXN0X2hiYV9yZWxvYWQo JG5vZGUsICdjdXN0b20gcHJvdmlkZXI9d3JvbmcnLCAxLCBxci9jYW5ub3QgdXNlIGF1dGhlbnRp Y2F0aW9uIHByb3ZpZGVyIHdyb25nLyk7CisKKyMgVGVzdCB0aGF0IHNwZWNpZnlpbmcgcHJvdmlk ZXIgb3B0aW9uIHdpdGggZGlmZmVyZW50IGF1dGggbWV0aG9kIGlzIG5vdCBhbGxvd2VkLgordGVz dF9oYmFfcmVsb2FkKCRub2RlLCAndHJ1c3QgcHJvdmlkZXI9dGVzdCcsIDEsIHFyL29ubHkgdmFs aWQgZm9yIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgY3VzdG9tLyk7CisKKyMgVGVzdCB0aGF0IHBy b3ZpZGVyIG5hbWUgaXMgYSBtYW5kYXRvcnkgb3B0aW9uIGZvciBjdXN0b20gYXV0aC4KK3Rlc3Rf aGJhX3JlbG9hZCgkbm9kZSwgJ2N1c3RvbScsIDEsIHFyL3JlcXVpcmVzIGFyZ3VtZW50Lyk7CisK KyMgVGVzdCB0aGF0IGNvcnJlY3QgcHJvdmlkZXIgbmFtZSBhbGxvd3MgcmVsb2FkIHRvIHN1Y2Nl ZWQuCit0ZXN0X2hiYV9yZWxvYWQoJG5vZGUsICdjdXN0b20gcHJvdmlkZXI9dGVzdCcsIDAsIHFy L3BnX2hiYS5jb25mIHdhcyBub3QgcmVsb2FkZWQvKTsKKworIyBDdXN0b20gYXV0aCBtb2R1bGVz IHJlcXVpcmUgbWVudGlvbmluZyBleHRlbnNpb24gaW4gc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVz LgorCisjIFJlbW92ZSBleHRlbnNpb24gZnJvbSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgYW5k IHRyeSB0byByZXN0YXJ0LgorJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCdz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXMnLCInJyIpOworY29tbWFuZF9mYWlscyhbJ3BnX2N0bCcs ICctdycsICctRCcsICRub2RlLT5kYXRhX2RpciwgJy1sJywgJG5vZGUtPmxvZ2ZpbGUsICdyZXN0 YXJ0J10sJ3Jlc3RhcnQgd2l0aCBlbXB0eSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgZmFpbGVk Jyk7CisKKyMgRml4IHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyBhbmQgY29uZmlybSB0aGF0IHlv dSBjYW4gbm93IHJlc3RhcnQuCiskbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZics J3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcycsIid0ZXN0X2F1dGhfcHJvdmlkZXIuc28nIik7Citj b21tYW5kX29rKFsncGdfY3RsJywgJy13JywgJy1EJywgJG5vZGUtPmRhdGFfZGlyLCAnLWwnLCAk bm9kZS0+bG9nZmlsZSwnc3RhcnQnXSwncmVzdGFydCB3aXRoIGNvcnJlY3Qgc2hhcmVkX3ByZWxv YWRfbGlicmFyaWVzIHN1Y2NlZWRlZCcpOworCisjIFRlc3QgdGhhdCB3ZSBjYW4gY29ubmVjdCBh Z2FpbgorJEVOVnsiUEdQQVNTV09SRCJ9ID0gJ2JvYjEyMyc7Cit0ZXN0X3JvbGUoJG5vZGUsICdi b2InLCAnY3VzdG9tJywgMCwgbG9nX2xpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aG9yaXplZDog dXNlcj1ib2IvXSk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi4zNC4xCgo= --00000000000094f43c05d83bbc26--