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.96) (envelope-from ) id 1w3dw9-001PvQ-2Y for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Mar 2026 17:47:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3dw7-007Zeg-3D for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Mar 2026 17:47:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3dw7-007ZeW-0w for pgsql-hackers@lists.postgresql.org; Fri, 20 Mar 2026 17:47:04 +0000 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3dw4-00000000Cm9-1Q5s for pgsql-hackers@lists.postgresql.org; Fri, 20 Mar 2026 17:47:01 +0000 Received: by mail-qt1-x82a.google.com with SMTP id d75a77b69052e-50b2d6f9d00so16967671cf.2 for ; Fri, 20 Mar 2026 10:47:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774028818; cv=none; d=google.com; s=arc-20240605; b=Gp6wTCnmvOjiyDvjVBLNLnLwC4UdrqE1gapc9R6d2vISsyDeL4X0Mus93x6ch72woZ ZsRDmBldFrp8lnNPYOal9DKSnjW9WfcMq/AaUX6Hc2o/xqRE3LfsFu0ba3dOpuPeRz2M XZKV5hbwbZxnDzxVl/xAMJoLjLUp9WvnrCSO1zDpUc+6shhrV/MI+DPsv1ovwCb82043 R6iwazlxmqB0AinimBKL13agjyUdjxiauFLZ4tuGICE5zW6Y6jHpUTbgS5LANJqtmKyg c+Ayf8G4vl0Dfv2yuQeChT6O99XNX3mW9vHSYAN8v2r8Te0w02H9foNEcY1Ij0y/2VA4 tB5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=B3WykJQdOekERV/WCX8H9KzSILfJW97mFcI2chn1Kv8=; fh=sf8u4wu3fnkbc7emn8nzKcOklQ3cL2mE7H22mUn1gBo=; b=b6CMcFdMg7Vt4ufsXb96G7IaKAT/iHy5gn1OSDMeKRHyYqk/g0IchrsFTKbKtCwm6b twiZuWf/g6S7V6FyCMh5gOSOyzi5e53c/i2ONvh9uwO6FGyc+Qqf+XRifBZCU/dalIim X7y2rSyup5avpkbdQDV3q/qxoD7q5syVm1iUV7UoGb0a/tQ5ZDt9W2G0PYRfJ0ddd3gu f3/lDwBwjmu1ewH2ahnu39mpSc3EG0mhjWxTqeIdeTPVEXEyCJo9Zzz5CM3WORXxHdjP xAvz6KuQdVpl6L3eo25WU2FV1RYGCZ3+6uitRawJ+6oK2ISoZ7XGK5F30x3rozuXvz4C Qhkg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1774028818; x=1774633618; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=B3WykJQdOekERV/WCX8H9KzSILfJW97mFcI2chn1Kv8=; b=gCvgantfWVn0+WiKEZ0Q5BPFKraTFU4D8Pbh5GT8MTodH/o/m2ZDyN1OIWbh2Uf6Bb RPSLv7nWbdl+ktb7pxQ/5M2uQdnFYnPzx+oF1tvBQkAO5e0eoUP+nuGBBxFIt9NVG6SJ DEZRhdncrv8zMGK5jwQ78WkZIqw/ud+Um7b29qxblEKKH5ebamEk/UdEq+I4Qu0EhBTG 9nL9VtCCz84XalAS1eyFCFhMXHTHRvgO6ch8jOYca3Lk5HJTN/FtOMmeHEeoo04cxZNO 3CMOqA+PEbyvFqkhhipynyWM8/702FR+8ilkcH8gnrpgHD/kNrjfMmRgKuvptmenhILL fc5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774028818; x=1774633618; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=B3WykJQdOekERV/WCX8H9KzSILfJW97mFcI2chn1Kv8=; b=GWpgdqgPalacCu0p6MIiK+T+wolmUw2wkBTq0/b7reatmcVmaL0lIxHz9aA+9h7B9a hx1hM97vogS3QihVIQAbyeB27/lxeesec5TgjBxIHpTCgzxDpJ/91SwN/+25pvWroeUf OMEeYU/imZrmJSsYLXhhNT4PEOYpJc3J7uzYovFKW6/Bj2G0HyPZEUeymKIsYz1WXI6q Nj4KeUnZV6HSzBOrC3HQhvF0OrDJVBWEM3mteWPSpO0qjBPyDBPV8NidYzEeXXCMBMiO 6rwU5vLuuCWPj6BRZLC9VjrbcbRvonpRfmHQNhTA1/JNkMSoeRqszXO6gYo65UOepVUY XutQ== X-Forwarded-Encrypted: i=1; AJvYcCW7WEt0mknq0uNMOkgL+CMwX4XUhLRGtrHtDm8pLK8KKWDQ7Z1H/kVo/72bk0k6pvhXAa7jP3tjOqCuOk5f@lists.postgresql.org X-Gm-Message-State: AOJu0YwoVeBQgeGPBhUTwzTz/GDEqge7jUouDL3YyovLA3tE/rKyukX3 CewJ7xbcAnfi1P98UgWnaoorUhENB4ubnJncevo1i/kDizcJtEVOvuk1zVP/eQxix+iXpEIBFkn zjDA2IpdJGrSrxRIsidOsQFbKAQYFx2emPPugaqfn X-Gm-Gg: ATEYQzzIGxYCGceraX64Nq3eFOSX4mZElBmnIKxeShQkMAhM48UwNyWRe5x1c7XWPDq KZG4kh8uFeio1q9VtCNAsUlDqnOzNC78nRdkHYs0pXr/6mIc6ZP9n3c62Zi7uKe6w/G1wS5LV55 zLIDD78EolWJlUEsk99jv4l7QBamjU2VLLfi3JIyNhssH4B++iJT5C0MlrPeajzc0DpqJCjdCjA A6IwUa36VHa3BQiSW6JxaFsf/FgbzU1RKL7dFPejBg78hf+CSEKnoCrcN6UO1B2lZtDqvdckxor iSYhY6LrdQ== X-Received: by 2002:a05:622a:1b28:b0:509:cbc:127b with SMTP id d75a77b69052e-50b37539037mr56628651cf.60.1774028818388; Fri, 20 Mar 2026 10:46:58 -0700 (PDT) MIME-Version: 1.0 References: <202601281620.m3hrqtih5b2w@alvherre.pgsql> In-Reply-To: From: Jacob Champion Date: Fri, 20 Mar 2026 10:46:46 -0700 X-Gm-Features: AaiRm53ksolTLQTKKz2RA5lUOJ0R2VmzysuPfGQmaMeW7Pa16DSr6YzTXlL1aI8 Message-ID: Subject: Re: Custom oauth validator options To: Zsolt Parragi Cc: Nikolay Shaplov , =?UTF-8?Q?=C3=81lvaro_Herrera?= , VASUKI M , PostgreSQL Hackers , david.g.johnston@gmail.com, Robert Haas , myon@debian.org Content-Type: multipart/mixed; boundary="0000000000008ba8d9064d7845c4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008ba8d9064d7845c4 Content-Type: text/plain; charset="UTF-8" Hi all, First, an apology for the state of this thread -- I thought I had already responded to the prior message last month. Turns out, I had not... Instead, I'm dropping a surprise alternative patchset on top of a thread that I let go cold, which is rude, and I'm sorry. Here are my overall thoughts on the approaches shared so far. And thank you, Zsolt, for doing so much legwork here; that effort was not wasted at all. 1) A GUC-centric solution -- option (d) -- is the Ideal Solution here, IMO. We shouldn't have to reinvent the wheel. 2) A GUC-centric solution is not going to land for 19, and I'd be surprised if it landed for 20, given the coalition that I'll need to build to say either "yes" or "no". There are too many questions about session_preload_libraries and prefixing and etc., and I'm honestly not a fan of the guc_prefix_enforcement approach. 3) I'm not convinced yet that GUCs and relation options are similar enough to share a framework. (This is not a rejection of the reloption refactoring work, just a statement that I don't want to rely on it to solve this problem.) 4) I really don't like the hba_parse_option_hook. I prefer APIs over hooks as a general architectural point, and more practically, I don't want to hand control to extensions during HBA parsing. I don't think they're going to coordinate with each other well, and I think they're likely to couple against internals in ways we don't want to support (which is my general problem with hooks). = Option (b) = I don't want this problem to go unfixed for 2+ years, so I think it would be best to reinvent a very small wheel that doesn't take up a lot of maintenance effort once it's in, and then simply replace it with the Ideal Solution eventually. This is my take on option (b), which is what Vasuki M advocated for upthread. It's just a setter/getter API for string keys and values: static const char* opts[] = { "my_parameter" }; void startup_cb(ValidatorModuleState *state) { RegisterOAuthHBAOptions(state, lengthof(opts), opts); } bool validate_cb(const ValidatorModuleState *state, ...) { const char *param; if ((param = GetOAuthHBAOption(state, "my_parameter")) != NULL) do_something_with(param); ... } And then in your HBA: host all all ::1/128 oauth validator.my_parameter=foo ... The core implementation is conceptually simple. Most of the lines in the patch are guardrails, to reduce the probability of regret over this temporary solution: - Parameter names aren't freeform; they're restricted to almost-alphanumeric identifiers. (We've wanted to steal symbols for HBA features in the past.) - Name syntax is checked on reload, but cross-referencing the registered list must be deferred to connection time. That's unusual for users, so the WARNING that gets printed in this case is extremely verbose; that way hopefully no one will be confused about what is happening. - The compiler won't let you register names during validate_cb, and we won't let you retrieve options during startup_cb, so we retain control over the internal order of operations. (This is discussed more deeply in the patch.) I was worried that we'd need a third API call to report option parsing failures from the validator. Instead of doing that, I've made it easier to link an authentication failure to a validator internal error that caused it, in v3-0001, which serendipitously fixes a separate sharp edge [1]. I feel good about that patch even if -0002 doesn't make it. v3-0002 still lacks user documentation, which I need to write a lot of -- but if everyone dislikes this approach then I'd rather not spend the time there. = WDYT? = I realize this puts you all in a difficult position; the effect is kind of "take it or leave it", which again was not my intent. I considered letting this lapse for 19 instead. But since I believe the ideal solution is one we can't have for a while, and there's good research and discussion of alternatives in this thread, waiting may not produce a more committable short-term solution in the end. Let me know if any of you disagree, though -- especially if you think the status quo is preferable! -- and I can shelve -0002 for now. (I'll continue with -0001 at [1] either way.) Thanks, --Jacob [1] https://postgr.es/m/202601241015.y5uvxd7oxnfs%40alvherre.pgsql --0000000000008ba8d9064d7845c4 Content-Type: application/octet-stream; name="v3-0001-oauth-Let-validators-provide-failure-DETAILs.patch" Content-Disposition: attachment; filename="v3-0001-oauth-Let-validators-provide-failure-DETAILs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmz6g7zc0 RnJvbSBmMzZlNmJlY2MzNGQwNTgzNGMzZDgwODU3NWIwNGQzOWJhZGY3NTY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAxOSBNYXIgMjAyNiAwOTozNzoyMCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMS8yXSBvYXV0aDogTGV0IHZhbGlkYXRvcnMgcHJvdmlkZSBmYWlsdXJlIERF VEFJTHMKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0 PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkF0IHRoZSBtb21lbnQsIHRo ZSBvbmx5IHdheSBmb3IgYSB2YWxpZGF0b3IgbW9kdWxlIHRvIHJlcG9ydCBlcnJvcgpkZXRhaWxz IG9uIGZhaWx1cmUgaXMgdG8gbG9nIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgcmV0dXJuaW5nIGZy b20KdmFsaWRhdGVfY2IuIEluZGVwZW5kZW50bHkgb2YgdGhhdCBwcm9ibGVtLCB0aGUgZXJlcG9y dCgpIGNhbGxzIHRoYXQgd2UKbWFrZSBkdXJpbmcgdmFsaWRhdGlvbiBmYWlsdXJlIHBhcnRpYWxs eSBkdXBsaWNhdGUgc29tZSBvZiB0aGUgd29yayBvZgphdXRoX2ZhaWxlZCgpLgoKVGhlIGVuZCBy ZXN1bHQgaXMgb3Zlcmx5IHZlcmJvc2UgYW5kIGNvbmZ1c2luZyBmb3IgcmVhZGVycyBvZiB0aGUg bG9nczoKCiAgICBbNzY4MjMzXSBMT0c6ICBbbXlfdmFsaWRhdG9yXSBiYWQgc2lnbmF0dXJlIGlu IGJlYXJlciB0b2tlbgogICAgWzc2ODIzM10gTE9HOiAgT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0 aW9uIGZhaWxlZCBmb3IgdXNlciAiamFjb2IiCiAgICBbNzY4MjMzXSBERVRBSUw6ICBWYWxpZGF0 b3IgZmFpbGVkIHRvIGF1dGhvcml6ZSB0aGUgcHJvdmlkZWQgdG9rZW4uCiAgICBbNzY4MjMzXSBG QVRBTDogIE9BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgImphY29i IgogICAgWzc2ODIzM10gREVUQUlMOiAgQ29ubmVjdGlvbiBtYXRjaGVkIGZpbGUgIi4uLi9wZ19o YmEuY29uZiIgbGluZSAuLi4KClNvbHZlIGJvdGggcHJvYmxlbXMgYnkgbWFraW5nIHVzZSBvZiB0 aGUgZXhpc3RpbmcgbG9nZGV0YWlsIHBvaW50ZXIKdGhhdCdzIHByb3ZpZGVkIGJ5IENsaWVudEF1 dGhlbnRpY2F0aW9uLiBWYWxpZGF0b3IgbW9kdWxlcyBtYXkgc2V0ClZhbGlkYXRvck1vZHVsZVJl c3VsdC0+ZXJyb3JfZGV0YWlsIHRvIG92ZXJyaWRlIG91ciBkZWZhdWx0IGdlbmVyaWMKbWVzc2Fn ZS4KClRoZSBlbmQgcmVzdWx0IGxvb2tzIHNvbWV0aGluZyBsaWtlCgogICAgWzI0MjI4NF0gRkFU QUw6ICBPQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIGZvciB1c2VyICJqYWNvYiIK ICAgIFsyNDIyODRdIERFVEFJTDogIFtteV92YWxpZGF0b3JdIGJhZCBzaWduYXR1cmUgaW4gYmVh cmVyIHRva2VuCiAgICAgICAgQ29ubmVjdGlvbiBtYXRjaGVkIGZpbGUgIi4uLi9wZ19oYmEuY29u ZiIgbGluZSAuLi4KClJlcG9ydGVkLWJ5OiDDgWx2YXJvIEhlcnJlcmEgPGFsdmhlcnJlQGt1cmls ZW11LmRlPgpSZXBvcnRlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25h LmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDI2MDEyNDEwMTUueTV1dnhk N294bmZzJTQwYWx2aGVycmUucGdzcWwKRGlzY3Vzc2lvbjogVE9ETwotLS0KIGRvYy9zcmMvc2dt bC9vYXV0aC12YWxpZGF0b3JzLnNnbWwgICAgICAgICAgICB8IDIxICsrKysrKysrKy0KIHNyYy9p bmNsdWRlL2xpYnBxL29hdXRoLmggICAgICAgICAgICAgICAgICAgICB8IDE0ICsrKysrKysKIHNy Yy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYyAgICAgICAgICAgICAgICB8IDI0ICsrKysrLS0t LS0tCiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiAr LQogLi4uL21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAxX3NlcnZlci5wbCAgIHwgNDAgKysr KysrKysrKysrKysrKysrLQogc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRh dG9yLmMgIHwgMjkgKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMTE0IGluc2VydGlv bnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9vYXV0aC12 YWxpZGF0b3JzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvb2F1dGgtdmFsaWRhdG9ycy5zZ21sCmluZGV4 IDcwNDA4OWRkN2IzLi5hNzE0MGVhZTg0ZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL29hdXRo LXZhbGlkYXRvcnMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvb2F1dGgtdmFsaWRhdG9ycy5zZ21s CkBAIC0xOTIsMTEgKzE5MiwxOCBAQAogICAgICA8dGVybT5Mb2dnaW5nPC90ZXJtPgogICAgICA8 bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBNb2R1bGVzIG1heSB1c2UgdGhlIHNhbWUg PGxpbmsgbGlua2VuZD0iZXJyb3ItbWVzc2FnZS1yZXBvcnRpbmciPmxvZ2dpbmcKKyAgICAgICBU byBzaW1wbHkgbG9nIHRoZSByZWFzb24gZm9yIGEgdmFsaWRhdGlvbiBmYWlsdXJlLCB2YWxpZGF0 b3JzIG1heSBzZXQKKyAgICAgICB0aGUgZnJlZWZvcm0gPHN0cnVjdGZpZWxkPmVycm9yX2RldGFp bDwvc3RydWN0ZmllbGQ+IGZpZWxkIGR1cmluZyB0aGUKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJv YXV0aC12YWxpZGF0b3ItY2FsbGJhY2stdmFsaWRhdGUiLz4uIFRoaXMgaXMgcHJpbnRlZCBvbmx5 CisgICAgICAgdG8gdGhlIHNlcnZlciBsb2csIGFzIHBhcnQgb2YgdGhlIGZpbmFsIGF1dGhlbnRp Y2F0aW9uIGZhaWx1cmUgbWVzc2FnZSwKKyAgICAgICBhbmQgaXQgaXMgbm90IHNoYXJlZCB3aXRo IHRoZSBjbGllbnQuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBNb2R1bGVz IG1heSBhbHNvIHVzZSB0aGUgc2FtZSA8bGluayBsaW5rZW5kPSJlcnJvci1tZXNzYWdlLXJlcG9y dGluZyI+bG9nZ2luZwogICAgICAgIGZhY2lsaXRpZXM8L2xpbms+IGFzIHN0YW5kYXJkIGV4dGVu c2lvbnM7IGhvd2V2ZXIsIHRoZSBydWxlcyBmb3IgZW1pdHRpbmcKICAgICAgICBsb2cgZW50cmll cyB0byB0aGUgY2xpZW50IGFyZSBzdWJ0bHkgZGlmZmVyZW50IGR1cmluZyB0aGUgYXV0aGVudGlj YXRpb24KICAgICAgICBwaGFzZSBvZiB0aGUgY29ubmVjdGlvbi4gR2VuZXJhbGx5IHNwZWFraW5n LCBtb2R1bGVzIHNob3VsZCBsb2cKLSAgICAgICB2ZXJpZmljYXRpb24gcHJvYmxlbXMgYXQgdGhl IDxzeW1ib2w+Q09NTUVSUk9SPC9zeW1ib2w+IGxldmVsIGFuZCByZXR1cm4KKyAgICAgICBwcm9i bGVtcyBhdCB0aGUgPHN5bWJvbD5DT01NRVJST1I8L3N5bWJvbD4gbGV2ZWwgYW5kIHJldHVybgog ICAgICAgIG5vcm1hbGx5LCBpbnN0ZWFkIG9mIHVzaW5nIDxzeW1ib2w+RVJST1I8L3N5bWJvbD4v PHN5bWJvbD5GQVRBTDwvc3ltYm9sPgogICAgICAgIHRvIHVud2luZCB0aGUgc3RhY2ssIHRvIGF2 b2lkIGxlYWtpbmcgaW5mb3JtYXRpb24gdG8gdW5hdXRoZW50aWNhdGVkCiAgICAgICAgY2xpZW50 cy4KQEAgLTM3MCw2ICszNzcsNyBAQCB0eXBlZGVmIHN0cnVjdCBWYWxpZGF0b3JNb2R1bGVSZXN1 bHQKIHsKICAgICBib29sICAgICAgICBhdXRob3JpemVkOwogICAgIGNoYXIgICAgICAgKmF1dGhu X2lkOworICAgIGNoYXIgICAgICAgKmVycm9yX2RldGFpbDsKIH0gVmFsaWRhdG9yTW9kdWxlUmVz dWx0OwogPC9wcm9ncmFtbGlzdGluZz4KIApAQCAtMzg3LDYgKzM5NSwxNSBAQCB0eXBlZGVmIHN0 cnVjdCBWYWxpZGF0b3JNb2R1bGVSZXN1bHQKICAgICBPdGhlcndpc2UgdGhlIHZhbGlkYXRvciBz aG91bGQgcmV0dXJuIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IHRvIGluZGljYXRlCiAgICAgdGhh dCBpdCBoYXMgcHJvY2Vzc2VkIHRoZSB0b2tlbiBhbmQgbWFkZSBhbiBhdXRob3JpemF0aW9uIGRl Y2lzaW9uLgogICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgSW4gZWl0aGVyIGZhaWx1cmUgY2Fz ZSAodmFsaWRhdGlvbiBlcnJvciBvciBpbnRlcm5hbCBlcnJvcikgdGhlIG1vZHVsZSBtYXkKKyAg ICBzdG9yZSBhIHVzZXItcmVhZGFibGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSBpbiA8c3RydWN0 ZmllbGQ+cmVzdWx0LT5lcnJvcl9kZXRhaWw8L3N0cnVjdGZpZWxkPi4KKyAgICBUaGlzIHdpbGwg YmUgcHJpbnRlZCB0byB0aGUgc2VydmVyIGxvZ3MgKG5vdCBzZW50IHRvIHRoZSBjbGllbnQpIGFz IGEKKyAgICA8bGl0ZXJhbD5ERVRBSUw8L2xpdGVyYWw+IGVudHJ5IGZvciB0aGUgYXV0aGVudGlj YXRpb24gZmFpbHVyZS4gVGhlIG1lbW9yeQorICAgIHBvaW50ZWQgdG8gYnkgPHN0cnVjdGZpZWxk PmVycm9yX2RldGFpbDwvc3RydWN0ZmllbGQ+IG1heSBiZSBlaXRoZXIgcGFsbG9jJ2QKKyAgICBv ciBvZiBzdGF0aWMgZHVyYXRpb24uIDxzdHJ1Y3RmaWVsZD5lcnJvcl9kZXRhaWw8L3N0cnVjdGZp ZWxkPiBpcyBpZ25vcmVkCisgICAgb24gc3VjY2Vzcy4KKyAgIDwvcGFyYT4KICAgIDxwYXJhPgog ICAgIFRoZSBiZWhhdmlvciBhZnRlciA8ZnVuY3Rpb24+dmFsaWRhdGVfY2I8L2Z1bmN0aW9uPiBy ZXR1cm5zIGRlcGVuZHMgb24gdGhlCiAgICAgc3BlY2lmaWMgSEJBIHNldHVwLiAgTm9ybWFsbHks IHRoZSA8c3RydWN0ZmllbGQ+cmVzdWx0LT5hdXRobl9pZDwvc3RydWN0ZmllbGQ+IHVzZXIKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRoLmggYi9zcmMvaW5jbHVkZS9saWJwcS9v YXV0aC5oCmluZGV4IDRhODIyZTlhMWYyLi42MGY0OTNhY2RkZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbGlicHEvb2F1dGguaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oCkBAIC00 OSw2ICs0OSwyMCBAQCB0eXBlZGVmIHN0cnVjdCBWYWxpZGF0b3JNb2R1bGVSZXN1bHQKIAkgKiBk ZWxlZ2F0aW9uLiBTZWUgdGhlIHZhbGlkYXRvciBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0 YWlscy4KIAkgKi8KIAljaGFyCSAgICphdXRobl9pZDsKKworCS8qCisJICogV2hlbiB2YWxpZGF0 aW9uIGZhaWxzLCB0aGlzIG1heSBvcHRpb25hbGx5IGJlIHNldCB0byBhIHN0cmluZworCSAqIGNv bnRhaW5pbmcgYW4gZXhwbGFuYXRpb24gZm9yIHRoZSBmYWlsdXJlLiBJdCB3aWxsIGJlIHNlbnQg dG8gdGhlCisJICogc2VydmVyIGxvZyBvbmx5OyBpdCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIGNs aWVudCwgYW5kIGl0J3MgaWdub3JlZCBpZgorCSAqIHZhbGlkYXRpb24gc3VjY2VlZHMuCisJICoK KwkgKiBUaGlzIGRlc2NyaXB0aW9uIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGZpbmFsIGF1dGhl bnRpY2F0aW9uIGZhaWx1cmUKKwkgKiBtZXNzYWdlIGluIHRoZSBsb2dzLCBhcyBhIERFVEFJTCwg d2hpY2ggbWF5IGJlIHByZWZlcmFibGUgdG8gc2VwYXJhdGUKKwkgKiBlcmVwb3J0KCkgY2FsbHMg dGhhdCBoYXZlIHRvIGJlIGNvcnJlbGF0ZWQgYnkgdGhlIHJlYWRlci4KKwkgKgorCSAqIFRoaXMg c3RyaW5nIG1heSBiZSBlaXRoZXIgb2Ygc3RhdGljIGR1cmF0aW9uIG9yIHBhbGxvYydkLgorCSAq LworCWNoYXIJICAgKmVycm9yX2RldGFpbDsKIH0gVmFsaWRhdG9yTW9kdWxlUmVzdWx0OwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jIGIvc3JjL2JhY2tl bmQvbGlicHEvYXV0aC1vYXV0aC5jCmluZGV4IDExMzY1MDQ4OTUxLi42ZDRiZTcwYWFkYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jCisrKyBiL3NyYy9iYWNrZW5k L2xpYnBxL2F1dGgtb2F1dGguYwpAQCAtNzMsNyArNzMsNyBAQCBzdHJ1Y3Qgb2F1dGhfY3R4CiBz dGF0aWMgY2hhciAqc2FuaXRpemVfY2hhcihjaGFyIGMpOwogc3RhdGljIGNoYXIgKnBhcnNlX2t2 cGFpcnNfZm9yX2F1dGgoY2hhciAqKmlucHV0KTsKIHN0YXRpYyB2b2lkIGdlbmVyYXRlX2Vycm9y X3Jlc3BvbnNlKHN0cnVjdCBvYXV0aF9jdHggKmN0eCwgY2hhciAqKm91dHB1dCwgaW50ICpvdXRw dXRsZW4pOwotc3RhdGljIGJvb2wgdmFsaWRhdGUoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqYXV0 aCk7CitzdGF0aWMgYm9vbCB2YWxpZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoLCBj b25zdCBjaGFyICoqbG9nZGV0YWlsKTsKIAogLyogQ29uc3RhbnRzIHNlZW4gaW4gYW4gT0FVVEhC RUFSRVIgY2xpZW50IGluaXRpYWwgcmVzcG9uc2UuICovCiAjZGVmaW5lIEtWU0VQIDB4MDEJCQkJ Lyogc2VwYXJhdG9yIGJ5dGUgZm9yIGtleS92YWx1ZSBwYWlycyAqLwpAQCAtMjc5LDcgKzI3OSw3 IEBAIG9hdXRoX2V4Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgaW5w dXRsZW4sCiAJCQkJZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAogCQkJ CWVycmRldGFpbCgiTWVzc2FnZSBjb250YWlucyBhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgdGhlIGZp bmFsIHRlcm1pbmF0b3IuIikpOwogCi0JaWYgKCF2YWxpZGF0ZShjdHgtPnBvcnQsIGF1dGgpKQor CWlmICghdmFsaWRhdGUoY3R4LT5wb3J0LCBhdXRoLCBsb2dkZXRhaWwpKQogCXsKIAkJZ2VuZXJh dGVfZXJyb3JfcmVzcG9uc2UoY3R4LCBvdXRwdXQsIG91dHB1dGxlbik7CiAKQEAgLTYzNSw3ICs2 MzUsNyBAQCB2YWxpZGF0ZV90b2tlbl9mb3JtYXQoY29uc3QgY2hhciAqaGVhZGVyKQogICogYXV0 aG9yaXphdGlvbi4gUmV0dXJucyB0cnVlIGlmIHZhbGlkYXRpb24gc3VjY2VlZHMuCiAgKi8KIHN0 YXRpYyBib29sCi12YWxpZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoKQordmFsaWRh dGUoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqYXV0aCwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkK IHsKIAlpbnQJCQltYXBfc3RhdHVzOwogCVZhbGlkYXRvck1vZHVsZVJlc3VsdCAqcmV0OwpAQCAt NjYyLDcgKzY2MiwxMCBAQCB2YWxpZGF0ZShQb3J0ICpwb3J0LCBjb25zdCBjaGFyICphdXRoKQog CXsKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCWVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJP UiksCi0JCQkJZXJybXNnKCJpbnRlcm5hbCBlcnJvciBpbiBPQXV0aCB2YWxpZGF0b3IgbW9kdWxl IikpOworCQkJCWVycm1zZygiaW50ZXJuYWwgZXJyb3IgaW4gT0F1dGggdmFsaWRhdG9yIG1vZHVs ZSIpLAorCQkJCXJldC0+ZXJyb3JfZGV0YWlsID8gZXJyZGV0YWlsX2xvZygiJXMiLCByZXQtPmVy cm9yX2RldGFpbCkgOiAwKTsKKworCQkqbG9nZGV0YWlsID0gcmV0LT5lcnJvcl9kZXRhaWw7CiAJ CXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTY3NSwxMCArNjc4LDEwIEBAIHZhbGlkYXRlKFBvcnQg KnBvcnQsIGNvbnN0IGNoYXIgKmF1dGgpCiAKIAlpZiAoIXJldC0+YXV0aG9yaXplZCkKIAl7Ci0J CWVyZXBvcnQoTE9HLAotCQkJCWVycm1zZygiT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZh aWxlZCBmb3IgdXNlciBcIiVzXCIiLAotCQkJCQkgICBwb3J0LT51c2VyX25hbWUpLAotCQkJCWVy cmRldGFpbF9sb2coIlZhbGlkYXRvciBmYWlsZWQgdG8gYXV0aG9yaXplIHRoZSBwcm92aWRlZCB0 b2tlbi4iKSk7CisJCWlmIChyZXQtPmVycm9yX2RldGFpbCkKKwkJCSpsb2dkZXRhaWwgPSByZXQt PmVycm9yX2RldGFpbDsKKwkJZWxzZQorCQkJKmxvZ2RldGFpbCA9IF8oIlZhbGlkYXRvciBmYWls ZWQgdG8gYXV0aG9yaXplIHRoZSBwcm92aWRlZCB0b2tlbi4iKTsKIAogCQlzdGF0dXMgPSBmYWxz ZTsKIAkJZ290byBjbGVhbnVwOwpAQCAtNjk5LDEwICs3MDIsNyBAQCB2YWxpZGF0ZShQb3J0ICpw b3J0LCBjb25zdCBjaGFyICphdXRoKQogCS8qIE1ha2Ugc3VyZSB0aGUgdmFsaWRhdG9yIGF1dGhl bnRpY2F0ZWQgdGhlIHVzZXIuICovCiAJaWYgKHJldC0+YXV0aG5faWQgPT0gTlVMTCB8fCByZXQt PmF1dGhuX2lkWzBdID09ICdcMCcpCiAJewotCQllcmVwb3J0KExPRywKLQkJCQllcnJtc2coIk9B dXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiIiwKLQkJCQkJ ICAgcG9ydC0+dXNlcl9uYW1lKSwKLQkJCQllcnJkZXRhaWxfbG9nKCJWYWxpZGF0b3IgcHJvdmlk ZWQgbm8gaWRlbnRpdHkuIikpOworCQkqbG9nZGV0YWlsID0gXygiVmFsaWRhdG9yIHByb3ZpZGVk IG5vIGlkZW50aXR5LiIpOwogCiAJCXN0YXR1cyA9IGZhbHNlOwogCQlnb3RvIGNsZWFudXA7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgYi9zcmMvYmFja2VuZC9saWJwcS9h dXRoLmMKaW5kZXggZTA0YWEyZTY4ZWQuLjY4MDFlYTljNTY2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9saWJwcS9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCkBAIC02MjUs NyArNjI1LDcgQEAgQ2xpZW50QXV0aGVudGljYXRpb24oUG9ydCAqcG9ydCkKIAkJCXN0YXR1cyA9 IFNUQVRVU19PSzsKIAkJCWJyZWFrOwogCQljYXNlIHVhT0F1dGg6Ci0JCQlzdGF0dXMgPSBDaGVj a1NBU0xBdXRoKCZwZ19iZV9vYXV0aF9tZWNoLCBwb3J0LCBOVUxMLCBOVUxMKTsKKwkJCXN0YXR1 cyA9IENoZWNrU0FTTEF1dGgoJnBnX2JlX29hdXRoX21lY2gsIHBvcnQsIE5VTEwsICZsb2dkZXRh aWwpOwogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRo X3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIucGwgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci90LzAwMV9zZXJ2ZXIucGwKaW5kZXggY2RhZDJhZTgwMTEuLjI4ZDEyM2I4MzNlIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIucGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsCkBA IC01MjEsOCArNTIxLDggQEAgJG5vZGUtPmNvbm5lY3RfZmFpbHMoCiAJZXhwZWN0ZWRfc3RkZXJy ID0+IHFyL09BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQvLAogCWxvZ19saWtlID0+ IFsKIAkJcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOiBpZGVudGl0eT0iIi8sCi0JCXFyL0RF VEFJTDpccytWYWxpZGF0b3IgcHJvdmlkZWQgbm8gaWRlbnRpdHkvLAogCQlxci9GQVRBTDpccytP QXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkLywKKwkJcXIvREVUQUlMOlxzK1ZhbGlk YXRvciBwcm92aWRlZCBubyBpZGVudGl0eS8sCiAJXSk7CiAKICMgRXZlbiBpZiBhIHZhbGlkYXRv ciBhdXRoZW50aWNhdGVzIHRoZSB1c2VyLCBpZiB0aGUgdG9rZW4gaXNuJ3QgY29uc2lkZXJlZApA QCAtNTQxLDEwICs1NDEsNDggQEAgJG5vZGUtPmNvbm5lY3RfZmFpbHMoCiAJZXhwZWN0ZWRfc3Rk ZXJyID0+IHFyL09BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQvLAogCWxvZ19saWtl ID0+IFsKIAkJcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOiBpZGVudGl0eT0idGVzdFxAZXhh bXBsZVwub3JnIi8sCisJCXFyL0ZBVEFMOlxzK09BdXRoIGJlYXJlciBhdXRoZW50aWNhdGlvbiBm YWlsZWQvLAogCQlxci9ERVRBSUw6XHMrVmFsaWRhdG9yIGZhaWxlZCB0byBhdXRob3JpemUgdGhl IHByb3ZpZGVkIHRva2VuLywKKwldKTsKKworIyBWYWxpZGF0b3JzIGNhbiBwcm92aWRlIHRoZWly IG93biBleHBsYW5hdGlvbnMuCiskYmdjb25uLT5xdWVyeV9zYWZlKAorCSJBTFRFUiBTWVNURU0g U0VUIG9hdXRoX3ZhbGlkYXRvci5lcnJvcl9kZXRhaWwgVE8gJ3NvbWV0aGluZyBmYWlsZWQnIik7 Ciskbm9kZS0+cmVsb2FkOworJGxvZ19zdGFydCA9CisgICRub2RlLT53YWl0X2Zvcl9sb2cocXIv cmVsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMvLCAkbG9nX3N0YXJ0KTsKKworJG5vZGUtPmNv bm5lY3RfZmFpbHMoCisJIiRjb21tb25fY29ubnN0ciB1c2VyPXRlc3QiLAorCSJ2YWxpZGF0b3Ig bXVzdCBhdXRob3JpemUgdG9rZW4gZXhwbGljaXRseSAoY3VzdG9tIGxvZ2RldGFpbCkiLAorCWV4 cGVjdGVkX3N0ZGVyciA9PiBxci9PQXV0aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkLywK Kwlsb2dfbGlrZSA9PiBbCisJCXFyL2Nvbm5lY3Rpb24gYXV0aGVudGljYXRlZDogaWRlbnRpdHk9 InRlc3RcQGV4YW1wbGVcLm9yZyIvLAogCQlxci9GQVRBTDpccytPQXV0aCBiZWFyZXIgYXV0aGVu dGljYXRpb24gZmFpbGVkLywKKwkJcXIvREVUQUlMOlxzK3NvbWV0aGluZyBmYWlsZWQvLAogCV0p OwogCiskYmdjb25uLT5xdWVyeV9zYWZlKAorCSJBTFRFUiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlk YXRvci5pbnRlcm5hbF9lcnJvciBUTyB0cnVlIik7Ciskbm9kZS0+cmVsb2FkOworJGxvZ19zdGFy dCA9CisgICRub2RlLT53YWl0X2Zvcl9sb2cocXIvcmVsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZmls ZXMvLCAkbG9nX3N0YXJ0KTsKKworJG5vZGUtPmNvbm5lY3RfZmFpbHMoCisJIiRjb21tb25fY29u bnN0ciB1c2VyPXRlc3QiLAorCSJ2YWxpZGF0b3IgaW50ZXJuYWwgZXJyb3IgKGN1c3RvbSBsb2dk ZXRhaWwpIiwKKwlleHBlY3RlZF9zdGRlcnIgPT4gcXIvT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0 aW9uIGZhaWxlZC8sCisJbG9nX2xpa2UgPT4gWworCQlxci9XQVJOSU5HOlxzK2ludGVybmFsIGVy cm9yIGluIE9BdXRoIHZhbGlkYXRvciBtb2R1bGUvLAorCQlxci9ERVRBSUw6XHMrc29tZXRoaW5n IGZhaWxlZC8sCisJXSk7CisKKyRiZ2Nvbm4tPnF1ZXJ5X3NhZmUoIkFMVEVSIFNZU1RFTSBSRVNF VCBvYXV0aF92YWxpZGF0b3IuZXJyb3JfZGV0YWlsIik7CiskYmdjb25uLT5xdWVyeV9zYWZlKCJB TFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRhdG9yLmludGVybmFsX2Vycm9yIik7Ciskbm9k ZS0+cmVsb2FkOworJGxvZ19zdGFydCA9CisgICRub2RlLT53YWl0X2Zvcl9sb2cocXIvcmVsb2Fk aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMvLCAkbG9nX3N0YXJ0KTsKKwogIwogIyBUZXN0IHVzZXIg bWFwcGluZy4KICMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L3ZhbGlkYXRvci5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRhdG9y LmMKaW5kZXggMGI5ODNhOWRjOGYuLjM1M2UwZTBkMzJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL29hdXRoX3ZhbGlkYXRvci92YWxpZGF0b3IuYworKysgYi9zcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci92YWxpZGF0b3IuYwpAQCAtNDAsNiArNDAsOCBAQCBzdGF0aWMgY29u c3QgT0F1dGhWYWxpZGF0b3JDYWxsYmFja3MgdmFsaWRhdG9yX2NhbGxiYWNrcyA9IHsKIC8qIEdV Q3MgKi8KIHN0YXRpYyBjaGFyICphdXRobl9pZCA9IE5VTEw7CiBzdGF0aWMgYm9vbCBhdXRob3Jp emVfdG9rZW5zID0gdHJ1ZTsKK3N0YXRpYyBjaGFyICplcnJvcl9kZXRhaWwgPSBOVUxMOworc3Rh dGljIGJvb2wgaW50ZXJuYWxfZXJyb3IgPSBmYWxzZTsKIAogLyotLS0KICAqIEV4dGVuc2lvbiBl bnRyeSBwb2ludC4gU2V0cyB1cCBHVUNzIGZvciB1c2UgYnkgdGVzdHM6CkBAIC01MSw2ICs1Mywx MyBAQCBzdGF0aWMgYm9vbCBhdXRob3JpemVfdG9rZW5zID0gdHJ1ZTsKICAqIC0gb2F1dGhfdmFs aWRhdG9yLmF1dGhvcml6ZV90b2tlbnMKICAqCQkJCQkJCQlTZXRzIHdoZXRoZXIgdG8gc3VjY2Vz c2Z1bGx5IHZhbGlkYXRlIGluY29taW5nCiAgKgkJCQkJCQkJdG9rZW5zLiBEZWZhdWx0cyB0byB0 cnVlLgorICoKKyAqIC0gb2F1dGhfdmFsaWRhdG9yLmVycm9yX2RldGFpbAorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTZXRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gYmUgaW5jbHVkZWQg YXMgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVRBSUwgb24gZmFpbHVyZS4K KyAqCisgKiAtIG9hdXRoX3ZhbGlkYXRvci5pbnRlcm5hbF9lcnJvcgorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZXBvcnRzIGFuIGludGVybmFsIGVycm9yIHRvIHRoZSBzZXJ2ZXIu CiAgKi8KIHZvaWQKIF9QR19pbml0KHZvaWQpCkBAIC03MSw2ICs4MCwyMiBAQCBfUEdfaW5pdCh2 b2lkKQogCQkJCQkJCSBQR0NfU0lHSFVQLAogCQkJCQkJCSAwLAogCQkJCQkJCSBOVUxMLCBOVUxM LCBOVUxMKTsKKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgib2F1dGhfdmFsaWRhdG9yLmVy cm9yX2RldGFpbCIsCisJCQkJCQkJICAgIkVycm9yIG1lc3NhZ2UgdG8gcHJpbnQgZHVyaW5nIGZh aWx1cmVzIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZlcnJvcl9kZXRhaWwsCisJCQkJ CQkJICAgTlVMTCwKKwkJCQkJCQkgICBQR0NfU0lHSFVQLAorCQkJCQkJCSAgIDAsCisJCQkJCQkJ ICAgTlVMTCwgTlVMTCwgTlVMTCk7CisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJvYXV0aF92 YWxpZGF0b3IuaW50ZXJuYWxfZXJyb3IiLAorCQkJCQkJCSAiU2hvdWxkIHRoZSB2YWxpZGF0b3Ig cmVwb3J0IGFuIGludGVybmFsIGVycm9yPyIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZpbnRl cm5hbF9lcnJvciwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19TSUdIVVAsCisJCQkJCQkJ IDAsCisJCQkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpOwogCiAJTWFya0dVQ1ByZWZpeFJlc2VydmVk KCJvYXV0aF92YWxpZGF0b3IiKTsKIH0KQEAgLTEzMyw2ICsxNTgsMTAgQEAgdmFsaWRhdGVfdG9r ZW4oY29uc3QgVmFsaWRhdG9yTW9kdWxlU3RhdGUgKnN0YXRlLAogCQkgTXlQcm9jUG9ydC0+aGJh LT5vYXV0aF9pc3N1ZXIsCiAJCSBNeVByb2NQb3J0LT5oYmEtPm9hdXRoX3Njb3BlKTsKIAorCXJl cy0+ZXJyb3JfZGV0YWlsID0gZXJyb3JfZGV0YWlsOwkvKiBvbmx5IHJlbGV2YW50IGZvciBmYWls dXJlcyAqLworCWlmIChpbnRlcm5hbF9lcnJvcikKKwkJcmV0dXJuIGZhbHNlOworCiAJcmVzLT5h dXRob3JpemVkID0gYXV0aG9yaXplX3Rva2VuczsKIAlpZiAoYXV0aG5faWQpCiAJCXJlcy0+YXV0 aG5faWQgPSBwc3RyZHVwKGF1dGhuX2lkKTsKLS0gCjIuMzQuMQoK --0000000000008ba8d9064d7845c4 Content-Type: application/octet-stream; name="v3-0002-WIP-oauth-Allow-validators-to-register-custom-HBA.patch" Content-Disposition: attachment; filename="v3-0002-WIP-oauth-Allow-validators-to-register-custom-HBA.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmz6gb7n1 RnJvbSA5NzI2YWMzOTQ0MmRkM2FmNDc5OTAzYmZhYjYyODk0NzY1YTZhYjJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxNyBNYXIgMjAyNiAxMjowMToyOCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMi8yXSBXSVA6IG9hdXRoOiBBbGxvdyB2YWxpZGF0b3JzIHRvIHJlZ2lzdGVy IGN1c3RvbSBIQkEKIG9wdGlvbnMKCihsYWNrcyB1c2VyIGRvY3VtZW50YXRpb24pCgpUd28gbmV3 IEFQSSBlbnRyeSBwb2ludHMgZm9yIHZhbGlkYXRvciBjYWxsYmFja3M6Ci0gUmVnaXN0ZXJPQXV0 aEhCQU9wdGlvbnMKLSBHZXRPQXV0aEhCQU9wdGlvbgoKUmVnaXN0ZXJpbmcgb3B0aW9ucyAiZm9v IiBhbmQgImJhciIgYWxsb3dzIGEgdXNlciB0byBzZXQgdmFsaWRhdG9yLmZvbwphbmQgdmFsaWRh dG9yLmJhciBvbiBhbiBgb2F1dGhgIEhCQSBsaW5lLgoKVGhlIGJ1bGsgb2YgdGhlIHBhdGNoIGlz IG5vdCB0aGUgY29uY2VwdHVhbGx5IHNpbXBsZSBBUEkgaW1wbGVtZW50YXRpb24sCmJ1dCBndWFy ZHJhaWxzIG9uIHRoZSBzaW1wbGUgQVBJIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGJpbmQgb3Vy IGhhbmRzCmluIHRoZSBmdXR1cmUsIGVpdGhlciBmb3IgY2FsbGJhY2sgYXJjaGl0ZWN0dXJlIG9y IEhCQSBzeW50YXguCgpTdWdnZXN0ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lA cGVyY29uYS5jb20+ClN1Z2dlc3RlZC1ieTogVkFTVUtJIE0gPHZhc3VraWFuYW5kMDExOUBnbWFp bC5jb20+CkludmVzdGlnYXRlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJj b25hLmNvbT4KLS0tCiBzcmMvaW5jbHVkZS9saWJwcS9oYmEuaCAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCAgICAgICAgICAgICAgICAgICAg IHwgIDE1ICstCiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLW9hdXRoLmMgICAgICAgICAgICAgICAg fCAyMjUgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9saWJwcS9oYmEuYyAgICAgICAg ICAgICAgICAgICAgICAgfCAgMjUgKysKIC4uLi9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAw MV9zZXJ2ZXIucGwgICB8ICA5NyArKysrKysrKwogc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3IvdmFsaWRhdG9yLmMgIHwgIDQ4ICsrKy0KIDYgZmlsZXMgY2hhbmdlZCwgNDA3IGluc2Vy dGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEv aGJhLmggYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAppbmRleCBjNDU3MGNlOWIzZi4uZTg4OTg1 NjFjOGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCisrKyBiL3NyYy9pbmNs dWRlL2xpYnBxL2hiYS5oCkBAIC0xNDAsNiArMTQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSGJhTGlu ZQogCWNoYXIJICAgKm9hdXRoX3Njb3BlOwogCWNoYXIJICAgKm9hdXRoX3ZhbGlkYXRvcjsKIAli b29sCQlvYXV0aF9za2lwX3VzZXJtYXA7CisJTGlzdAkgICAqb2F1dGhfb3B0X2tleXM7CisJTGlz dAkgICAqb2F1dGhfb3B0X3ZhbHM7CiB9IEhiYUxpbmU7CiAKIHR5cGVkZWYgc3RydWN0IElkZW50 TGluZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaCBiL3NyYy9pbmNsdWRl L2xpYnBxL29hdXRoLmgKaW5kZXggNjBmNDkzYWNkZGQuLjg2ZjQ2M2EyODRlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL29hdXRo LmgKQEAgLTk2LDYgKzk2LDE3IEBAIHR5cGVkZWYgc3RydWN0IE9BdXRoVmFsaWRhdG9yQ2FsbGJh Y2tzCiAJVmFsaWRhdG9yVmFsaWRhdGVDQiB2YWxpZGF0ZV9jYjsKIH0gT0F1dGhWYWxpZGF0b3JD YWxsYmFja3M7CiAKKy8qCisgKiBBIHZhbGlkYXRvciBjYW4gcmVnaXN0ZXIgYSBsaXN0IG9mIGN1 c3RvbSBvcHRpb24gbmFtZXMgZHVyaW5nIGl0cyBzdGFydHVwX2NiLAorICogdGhlbiBsYXRlciBy ZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5ncyBmb3IgZWFjaCBkdXJpbmcgdmFsaWRhdGlvbi4gVGhp cworICogZW5hYmxlcyBwZXItSEJBLWxpbmUgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3Jt YXRpb24sIHJlZmVyIHRvIHRoZSBPQXV0aAorICogdmFsaWRhdG9yIG1vZHVsZXMgZG9jdW1lbnRh dGlvbi4KKyAqLworZXh0ZXJuIHZvaWQgUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMoVmFsaWRhdG9y TW9kdWxlU3RhdGUgKnN0YXRlLCBpbnQgbnVtLAorCQkJCQkJCQkJY29uc3QgY2hhciAqb3B0c1td KTsKK2V4dGVybiBjb25zdCBjaGFyICpHZXRPQXV0aEhCQU9wdGlvbihjb25zdCBWYWxpZGF0b3JN b2R1bGVTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqb3B0bmFtZSk7CisKIC8q CiAgKiBUeXBlIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBzeW1ib2wgX1BHX29hdXRoX3ZhbGlkYXRv cl9tb2R1bGVfaW5pdCB3aGljaCBpcwogICogcmVxdWlyZWQgZm9yIGFsbCB2YWxpZGF0b3IgbW9k dWxlcy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGR1cmluZwpAQCAtMTA3LDkgKzEx OCw3IEBAIGV4dGVybiBQR0RMTEVYUE9SVCBjb25zdCBPQXV0aFZhbGlkYXRvckNhbGxiYWNrcyAq X1BHX29hdXRoX3ZhbGlkYXRvcl9tb2R1bGVfaW5pCiAvKiBJbXBsZW1lbnRhdGlvbiAqLwogZXh0 ZXJuIFBHRExMSU1QT1JUIGNvbnN0IHBnX2JlX3Nhc2xfbWVjaCBwZ19iZV9vYXV0aF9tZWNoOwog Ci0vKgotICogRW5zdXJlIGEgdmFsaWRhdG9yIG5hbWVkIGluIHRoZSBIQkEgaXMgcGVybWl0dGVk IGJ5IHRoZSBjb25maWd1cmF0aW9uLgotICovCiBleHRlcm4gYm9vbCBjaGVja19vYXV0aF92YWxp ZGF0b3IoSGJhTGluZSAqaGJhbGluZSwgaW50IGVsZXZlbCwgY2hhciAqKmVycl9tc2cpOworZXh0 ZXJuIGJvb2wgdmFsaWRfb2F1dGhfaGJhX29wdGlvbl9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwog CiAjZW5kaWYJCQkJCQkJLyogUEdfT0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bGlicHEvYXV0aC1vYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1vYXV0aC5jCmluZGV4 IDZkNGJlNzBhYWRhLi4wMzJiNDllMTc0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC1vYXV0aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYwpAQCAtMjUs NiArMjUsNyBAQAogI2luY2x1ZGUgImxpYnBxL2hiYS5oIgogI2luY2x1ZGUgImxpYnBxL29hdXRo LmgiCiAjaW5jbHVkZSAibGlicHEvc2FzbC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUg InV0aWxzL2pzb24uaCIKQEAgLTQwLDEwICs0MSwxNSBAQCBzdGF0aWMgaW50CW9hdXRoX2V4Y2hh bmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCiAKIHN0YXRp YyB2b2lkIGxvYWRfdmFsaWRhdG9yX2xpYnJhcnkoY29uc3QgY2hhciAqbGlibmFtZSk7CiBzdGF0 aWMgdm9pZCBzaHV0ZG93bl92YWxpZGF0b3JfbGlicmFyeSh2b2lkICphcmcpOworc3RhdGljIGJv b2wgY2hlY2tfdmFsaWRhdG9yX2hiYV9vcHRpb25zKFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKips b2dkZXRhaWwpOwogCiBzdGF0aWMgVmFsaWRhdG9yTW9kdWxlU3RhdGUgKnZhbGlkYXRvcl9tb2R1 bGVfc3RhdGU7CiBzdGF0aWMgY29uc3QgT0F1dGhWYWxpZGF0b3JDYWxsYmFja3MgKlZhbGlkYXRv ckNhbGxiYWNrczsKIAorc3RhdGljIE1lbW9yeUNvbnRleHQgVmFsaWRhdG9yTWVtb3J5Q29udGV4 dDsKK3N0YXRpYyBMaXN0ICpWYWxpZGF0b3JPcHRpb25zOworc3RhdGljIGJvb2wgVmFsaWRhdG9y T3B0aW9uc0NoZWNrZWQ7CisKIC8qIE1lY2hhbmlzbSBkZWNsYXJhdGlvbiAqLwogY29uc3QgcGdf YmVfc2FzbF9tZWNoIHBnX2JlX29hdXRoX21lY2ggPSB7CiAJLmdldF9tZWNoYW5pc21zID0gb2F1 dGhfZ2V0X21lY2hhbmlzbXMsCkBAIC0xMDgsNiArMTE0LDkgQEAgb2F1dGhfaW5pdChQb3J0ICpw b3J0LCBjb25zdCBjaGFyICpzZWxlY3RlZF9tZWNoLCBjb25zdCBjaGFyICpzaGFkb3dfcGFzcykK IAkJCQllcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQllcnJtc2coImNs aWVudCBzZWxlY3RlZCBhbiBpbnZhbGlkIFNBU0wgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIikp OwogCisJLyogU2F2ZSBvdXIgbWVtb3J5IGNvbnRleHQgZm9yIGxhdGVyIHVzZSBieSBjbGllbnQg QVBJIGNhbGxzLiAqLworCVZhbGlkYXRvck1lbW9yeUNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29u dGV4dDsKKwogCWN0eCA9IHBhbGxvYzBfb2JqZWN0KHN0cnVjdCBvYXV0aF9jdHgpOwogCiAJY3R4 LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0lOSVQ7CkBAIC0yNzksNiArMjg4LDE2IEBAIG9hdXRoX2V4 Y2hhbmdlKHZvaWQgKm9wYXEsIGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCiAJCQkJ ZXJybXNnKCJtYWxmb3JtZWQgT0FVVEhCRUFSRVIgbWVzc2FnZSIpLAogCQkJCWVycmRldGFpbCgi TWVzc2FnZSBjb250YWlucyBhZGRpdGlvbmFsIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIHRlcm1pbmF0 b3IuIikpOwogCisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIGN1c3RvbSBIQkEgb3B0aW9ucyBhcmUg dW5kZXJzdG9vZCBieSB0aGUgdmFsaWRhdG9yIGJlZm9yZQorCSAqIGNvbnRpbnVpbmcsIHNpbmNl IHdlIGNvdWxkbid0IGNoZWNrIHRoZW0gZHVyaW5nIHNlcnZlciBzdGFydC9yZWxvYWQuCisJICov CisJaWYgKCFjaGVja192YWxpZGF0b3JfaGJhX29wdGlvbnMoY3R4LT5wb3J0LCBsb2dkZXRhaWwp KQorCXsKKwkJY3R4LT5zdGF0ZSA9IE9BVVRIX1NUQVRFX0ZJTklTSEVEOworCQlyZXR1cm4gUEdf U0FTTF9FWENIQU5HRV9GQUlMVVJFOworCX0KKwogCWlmICghdmFsaWRhdGUoY3R4LT5wb3J0LCBh dXRoLCBsb2dkZXRhaWwpKQogCXsKIAkJZ2VuZXJhdGVfZXJyb3JfcmVzcG9uc2UoY3R4LCBvdXRw dXQsIG91dHB1dGxlbik7CkBAIC04MDcsNiArODI2LDkgQEAgc2h1dGRvd25fdmFsaWRhdG9yX2xp YnJhcnkodm9pZCAqYXJnKQogewogCWlmIChWYWxpZGF0b3JDYWxsYmFja3MtPnNodXRkb3duX2Ni ICE9IE5VTEwpCiAJCVZhbGlkYXRvckNhbGxiYWNrcy0+c2h1dGRvd25fY2IodmFsaWRhdG9yX21v ZHVsZV9zdGF0ZSk7CisKKwkvKiBUaGUgYmFja2luZyBtZW1vcnkgZm9yIHRoaXMgaXMgYWJvdXQg dG8gZGlzYXBwZWFyLiAqLworCVZhbGlkYXRvck9wdGlvbnMgPSBOSUw7CiB9CiAKIC8qCkBAIC04 OTIsMyArOTE0LDIwNiBAQCBkb25lOgogCiAJcmV0dXJuICgqZXJyX21zZyA9PSBOVUxMKTsKIH0K KworLyoKKyAqIENsaWVudCBBUElzIGZvciB2YWxpZGF0b3IgaW1wbGVtZW50YXRpb25zCisgKgor ICogU2luY2Ugd2UncmUgY3VycmVudGx5IG5vdCB0aHJlYWRlZCwgd2Ugb25seSBhbGxvdyBvbmUg dmFsaWRhdG9yIGluIHRoZQorICogcHJvY2VzcyBhdCBhIHRpbWUuIFNvIHdlIGNhbiBtYWtlIHVz ZSBvZiBnbG9iYWxzIGZvciBub3cgaW5zdGVhZCBvZiBsb29raW5nCisgKiB1cCBpbmZvcm1hdGlv biB1c2luZyB0aGUgc3RhdGUgcG9pbnRlci4gV2UgcHJvYmFibHkgc2hvdWxkbid0IGFzc3VtZSB0 aGF0IHRoZQorICogbW9kdWxlIGhhc24ndCB0ZW1wb3JhcmlseSBjaGFuZ2VkIG1lbW9yeSBjb250 ZXh0cyBvbiB1cywgdGhvdWdoOyBmdW5jdGlvbnMKKyAqIGhlcmUgc2hvdWxkIGRlZmVuc2l2ZWx5 IHVzZSBhbiBhcHByb3ByaWF0ZSBjb250ZXh0IHdoZW4gbWFraW5nIGdsb2JhbAorICogYWxsb2Nh dGlvbnMuCisgKi8KKworLyoKKyAqIEFkZHMgdG8gdGhlIGxpc3Qgb2YgYWxsb3dlZCB2YWxpZGF0 b3IuKiBIQkEgb3B0aW9ucy4gVXNlZCBkdXJpbmcgdGhlCisgKiBzdGFydHVwX2NiLgorICovCit2 b2lkCitSZWdpc3Rlck9BdXRoSEJBT3B0aW9ucyhWYWxpZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUs IGludCBudW0sCisJCQkJCQljb25zdCBjaGFyICpvcHRzW10pCit7CisJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCisJaWYgKCFzdGF0ZSkKKwl7CisJCUFzc2VydChmYWxzZSk7CisJCXJldHVy bjsKKwl9CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFZhbGlkYXRvck1l bW9yeUNvbnRleHQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKKwl7CisJCWlm ICghdmFsaWRfb2F1dGhfaGJhX29wdGlvbl9uYW1lKG9wdHNbaV0pKQorCQl7CisJCQkvKgorCQkJ ICogVGhlIHVzZXIgY2FuJ3Qgc2V0IHRoaXMgb3B0aW9uIGluIHRoZSBIQkEsIHNvIEdldE9BdXRo SEJBT3B0aW9uCisJCQkgKiB3b3VsZCBhbHdheXMgcmV0dXJuIE5VTEwuCisJCQkgKi8KKwkJCWVy ZXBvcnQoV0FSTklORywKKwkJCQkJZXJybXNnKCJIQkEgb3B0aW9uIG5hbWUgXCIlc1wiIGlzIGlu dmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZCIsCisJCQkJCQkgICBvcHRzW2ldKSwKKwkJCS8qIHRy YW5zbGF0b3I6IHRoZSBzZWNvbmQgJXMgaXMgYSBmdW5jdGlvbiBuYW1lICovCisJCQkJCWVycmNv bnRleHQoInZhbGlkYXRvciBtb2R1bGUgXCIlc1wiLCBpbiBjYWxsIHRvICVzIiwKKwkJCQkJCQkg ICBNeVByb2NQb3J0LT5oYmEtPm9hdXRoX3ZhbGlkYXRvciwKKwkJCQkJCQkgICAiUmVnaXN0ZXJP QXV0aEhCQU9wdGlvbnMiKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCVZhbGlkYXRvck9wdGlv bnMgPSBsYXBwZW5kKFZhbGlkYXRvck9wdGlvbnMsIHBzdHJkdXAob3B0c1tpXSkpOworCX0KKwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCS8qCisJICogV2FpdCB0byB2 YWxpZGF0ZSB0aGUgSEJBIGFnYWluc3QgdGhlIHJlZ2lzdGVyZWQgb3B0aW9ucyB1bnRpbCBsYXRl cgorCSAqIChzZWUgY2hlY2tfdmFsaWRhdG9yX2hiYV9vcHRpb25zKCkpLgorCSAqCisJICogRGVs YXlpbmcgYWxsb3dzIHRoZSB2YWxpZGF0b3IgdG8gbWFrZSBtdWx0aXBsZSByZWdpc3RyYXRpb24g Y2FsbHMsIHRvCisJICogYXBwZW5kIHRvIHRoZSBsaXN0OyBpdCBsZXRzIHVzIG1ha2UgdGhlIGNo ZWNrIGluIGEgcGxhY2Ugd2hlcmUgd2UgY2FuCisJICogcmVwb3J0IHRoZSBlcnJvciB3aXRob3V0 IGxlYWtpbmcgZGV0YWlscyB0byB0aGUgY2xpZW50OyBhbmQgaXQgYXZvaWRzCisJICogZXhwb3J0 aW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGJldHdlZW4gSEJBIG1hdGNoaW5nIGFuZCB0aGUK KwkgKiBzdGFydHVwX2NiIGNhbGwgYXMgYW4gQVBJIGd1YXJhbnRlZS4gKFRoZSBsYXN0IGlzc3Vl IG1heSBiZWNvbWUKKwkgKiByZWxldmFudCB3aXRoIGEgdGhyZWFkZWQgbW9kZWwuKQorCSAqLwor fQorCisvKgorICogUmVzdHJpY3QgdGhlIG5hbWVzIGF2YWlsYWJsZSB0byBjdXN0b20gSEJBIG9w dGlvbnMsIHNvIHRoYXQgd2UgZG9uJ3QKKyAqIGFjY2lkZW50YWxseSBwcmV2ZW50IGZ1dHVyZSBz eW50YXggZXh0ZW5zaW9ucyB0byBIQkEgZmlsZXMuCisgKi8KK2Jvb2wKK3ZhbGlkX29hdXRoX2hi YV9vcHRpb25fbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCS8qCisJICogVGhpcyBsaXN0IGlz IG5vdCBpbmNyZWRpYmx5IHByaW5jaXBsZWQsIHNpbmNlIHRoZSBnb2FsIGlzIGp1c3QgdG8gYm91 bmQKKwkgKiBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMgZm9yIG91ciBIQkEgcGFyc2VyLiBBbHBo YW51bWVyaWNzIHNlZW0KKwkgKiBvYnZpb3VzbHkgZmluZSwgYW5kIGl0J3MgZGlmZmljdWx0IHRv IGFyZ3VlIGFnYWluc3QgdGhlIHB1bmN0dWF0aW9uCisJICogdGhhdCdzIGFscmVhZHkgaW5jbHVk ZWQgaW4gc29tZSBIQkEgb3B0aW9uIG5hbWVzIGFuZCBpZGVudGlmaWVycy4KKwkgKi8KKwlzdGF0 aWMgY29uc3QgY2hhciAqbmFtZV9hbGxvd2VkX3NldCA9CisJCSJhYmNkZWZnaGlqa2xtbm9wcXJz dHV2d3h5eiIKKwkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCQkiMDEyMzQ1Njc4OV8t IjsKKworCXNpemVfdAkJc3BhbjsKKworCWlmICghbmFtZVswXSkKKwkJcmV0dXJuIGZhbHNlOwor CisJc3BhbiA9IHN0cnNwbihuYW1lLCBuYW1lX2FsbG93ZWRfc2V0KTsKKwlyZXR1cm4gbmFtZVtz cGFuXSA9PSAnXDAnOworfQorCisvKgorICogVmVyaWZpZXMgdGhhdCBhbGwgdmFsaWRhdG9yLiog SEJBIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIHdlcmUgYWN0dWFsbHkKKyAqIHJlZ2lz dGVyZWQgYnkgdGhlIHZhbGlkYXRvciBsaWJyYXJ5IGluIHVzZS4KKyAqLworc3RhdGljIGJvb2wK K2NoZWNrX3ZhbGlkYXRvcl9oYmFfb3B0aW9ucyhQb3J0ICpwb3J0LCBjb25zdCBjaGFyICoqbG9n ZGV0YWlsKQoreworCUhiYUxpbmUgICAgKmhiYSA9IHBvcnQtPmhiYTsKKworCWZvcmVhY2hfcHRy KGNoYXIsIGtleSwgaGJhLT5vYXV0aF9vcHRfa2V5cykKKwl7CisJCWJvb2wJCWZvdW5kID0gZmFs c2U7CisKKwkJLyogTyhuXjIpIHNob3VsZG4ndCBiZSBhIHByb2JsZW0gaGVyZSBpbiBwcmFjdGlj ZS4gKi8KKwkJZm9yZWFjaF9wdHIoY2hhciwgb3B0bmFtZSwgVmFsaWRhdG9yT3B0aW9ucykKKwkJ eworCQkJaWYgKHN0cmNtcChrZXksIG9wdG5hbWUpID09IDApCisJCQl7CisJCQkJZm91bmQgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJeworCQkJLyoK KwkJCSAqIEJhZCBvcHRpb24gbmFtZS4gTWlycm9yIHRoZSBlcnJvciBtZXNzYWdlcyBpbiBoYmEu YyBoZXJlLAorCQkJICoga2VlcGluZyBpbiBtaW5kIHRoYXQgdGhlIG9yaWdpbmFsICJ2YWxpZGF0 b3IuIiBwcmVmaXggd2FzCisJCQkgKiBzdHJpcHBlZCBmcm9tIHRoZSBrZXkgZHVyaW5nIHBhcnNp bmcuCisJCQkgKgorCQkJICogU2luY2UgdGhpcyBpcyBhZmZlY3RpbmcgbGl2ZSBjb25uZWN0aW9u cywgd2hpY2ggaXMgdW51c3VhbCBmb3IKKwkJCSAqIEhCQSwgYmUgbm9pc3kgd2l0aCBhIFdBUk5J TkcuIChXYXJuaW5ncyBhcmVuJ3Qgc2VudCB0byBjbGllbnRzCisJCQkgKiBwcmlvciB0byBzdWNj ZXNzZnVsIGF1dGhlbnRpY2F0aW9uLCBzbyB0aGlzIHdvbid0IGRpc2Nsb3NlIHRoZQorCQkJICog c2VydmVyIGNvbmZpZy4pIEl0J2xsIGR1cGxpY2F0ZSBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUKKwkJCSAqIGxvZ2RldGFpbCwgYnV0IHRoYXQgc2hvdWxkIG1ha2UgaXQgaGFyZCB0byBt aXNzIHRoZSBjb25uZWN0aW9uCisJCQkgKiBiZXR3ZWVuIHRoZSB0d28uCisJCQkgKi8KKwkJCWNo YXIJICAgKm5hbWUgPSBwc3ByaW50ZigidmFsaWRhdG9yLiVzIiwga2V5KTsKKworCQkJKmxvZ2Rl dGFpbCA9IHBzcHJpbnRmKF8oInVucmVjb2duaXplZCBhdXRoZW50aWNhdGlvbiBvcHRpb24gbmFt ZTogXCIlc1wiIiksCisJCQkJCQkJCSAgbmFtZSk7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ CWVycmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCisJCQkJCWVycm1zZygidW5yZWNv Z25pemVkIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBuYW1lOiBcIiVzXCIiLAorCQkJCQkJICAgbmFt ZSksCisJCQkvKiB0cmFuc2xhdG9yOiB0aGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlIG1v ZHVsZSAqLworCQkJCQllcnJkZXRhaWwoIlRoZSBpbnN0YWxsZWQgdmFsaWRhdG9yIG1vZHVsZSAo XCIlc1wiKSBkaWQgbm90IGRlZmluZSBhbiBvcHRpb24gbmFtZWQgXCIlc1wiLiIsCisJCQkJCQkJ ICBoYmEtPm9hdXRoX3ZhbGlkYXRvciwga2V5KSwKKwkJCQkJZXJyaGludCgiQWxsIE9BdXRoIGNv bm5lY3Rpb25zIG1hdGNoaW5nIHRoaXMgbGluZSB3aWxsIGZhaWwuIENvcnJlY3QgdGhlIG9wdGlv biBhbmQgcmVsb2FkIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi4iKSwKKwkJCQkJZXJyY29udGV4 dCgibGluZSAlZCBvZiBjb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkgICBoYmEt PmxpbmVudW1iZXIsIGhiYS0+c291cmNlZmlsZSkpOworCisJCQlyZXR1cm4gZmFsc2U7CisJCX0K Kwl9CisKKwlWYWxpZGF0b3JPcHRpb25zQ2hlY2tlZCA9IHRydWU7IC8qIHVuZmV0dGVyIEdldE9B dXRoSEJBT3B0aW9uKCkgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFJldHJpZXZlcyB0 aGUgc2V0dGluZyBmb3IgYSB2YWxpZGF0b3IuKiBIQkEgb3B0aW9uLCBvciBOVUxMIGlmIG5vdCBm b3VuZC4KKyAqIFRoaXMgbWF5IG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHZhbGlkYXRlX2NiIGFu ZCBzaHV0ZG93bl9jYi4KKyAqLworY29uc3QgY2hhciAqCitHZXRPQXV0aEhCQU9wdGlvbihjb25z dCBWYWxpZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm9wdG5hbWUpCit7CisJ SGJhTGluZSAgICAqaGJhID0gTXlQcm9jUG9ydC0+aGJhOworCUxpc3RDZWxsICAgKmxjX2s7CisJ TGlzdENlbGwgICAqbGNfdjsKKwljb25zdCBjaGFyICpyZXQgPSBOVUxMOworCisJaWYgKCFWYWxp ZGF0b3JPcHRpb25zQ2hlY2tlZCkKKwl7CisJCS8qCisJCSAqIFByZXZlbnQgdGhlIHN0YXJ0dXBf Y2IgZnJvbSByZXRyaWV2aW5nIEhCQSBvcHRpb25zIHRoYXQgaXQgaGFzIGp1c3QKKwkJICogcmVn aXN0ZXJlZC4gVGhpcyBwcm9iYWJseSBzZWVtcyBzdHJhbmdlIC0tIHdoeSByZWZ1c2UgdG8gaGFu ZCBvdXQKKwkJICogaW5mb3JtYXRpb24gd2UgYWxyZWFkeSBrbm93PyAtLSBidXQgdGhpcyBsZXRz IHVzIHJlc2VydmUgdGhlCisJCSAqIGFiaWxpdHkgdG8gcGVyZm9ybSB0aGUgc3RhcnR1cF9jYiBj YWxsIGVhcmxpZXIsIGJlZm9yZSB3ZSBrbm93CisJCSAqIHdoaWNoIEhCQSBsaW5lIGlzIG1hdGNo ZWQgYnkgYSBjb25uZWN0aW9uLCB3aXRob3V0IGJyZWFraW5nIHRoaXMKKwkJICogQVBJLgorCQkg Ki8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFzdGF0ZSB8fCAhaGJhKQorCXsKKwkJQXNz ZXJ0KGZhbHNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGhi YS0+b2F1dGhfb3B0X2tleXMpID09IGxpc3RfbGVuZ3RoKGhiYS0+b2F1dGhfb3B0X3ZhbHMpKTsK KworCWZvcmJvdGgobGNfaywgaGJhLT5vYXV0aF9vcHRfa2V5cywgbGNfdiwgaGJhLT5vYXV0aF9v cHRfdmFscykKKwl7CisJCWNvbnN0IGNoYXIgKmtleSA9IGxmaXJzdChsY19rKTsKKwkJY29uc3Qg Y2hhciAqdmFsID0gbGZpcnN0KGxjX3YpOworCisJCWlmIChzdHJjbXAoa2V5LCBvcHRuYW1lKSA9 PSAwKQorCQl7CisJCQkvKgorCQkJICogRG9uJ3QgcmV0dXJuIHlldCAtLSB3aGVuIHJlZ3VsYXIg SEJBIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBtb3JlCisJCQkgKiB0aGFuIG9uY2UsIHRoZSBsYXN0 IG9uZSB3aW5zLiBEbyB0aGUgc2FtZSBmb3IgdGhlc2Ugb3B0aW9ucy4KKwkJCSAqLworCQkJcmV0 ID0gdmFsOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2xpYnBxL2hiYS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKaW5kZXggODdlZTU0MWU4 ODAuLjA1NjllOGZjZWQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9oYmEuYworKysg Yi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwpAQCAtMjQ5Nyw2ICsyNDk3LDMxIEBAIHBhcnNlX2hi YV9hdXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUgKmhiYWxpbmUsCiAJCVJF UVVJUkVfQVVUSF9PUFRJT04odWFPQXV0aCwgInZhbGlkYXRvciIsICJvYXV0aCIpOwogCQloYmFs aW5lLT5vYXV0aF92YWxpZGF0b3IgPSBwc3RyZHVwKHZhbCk7CiAJfQorCWVsc2UgaWYgKHN0cm5j bXAobmFtZSwgInZhbGlkYXRvci4iLCBzdHJsZW4oInZhbGlkYXRvci4iKSkgPT0gMCkKKwl7CisJ CWNvbnN0IGNoYXIgKmtleSA9IG5hbWUgKyBzdHJsZW4oInZhbGlkYXRvci4iKTsKKworCQkvKgor CQkgKiBWYWxpZGF0b3IgbW9kdWxlcyBtYXkgcmVnaXN0ZXIgdGhlaXIgb3duIHBlci1IQkEtbGlu ZSBvcHRpb25zLgorCQkgKiBVbmZvcnR1bmF0ZWx5LCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHJl cXVpcmUgdGhlc2UgbW9kdWxlcyB0byBiZQorCQkgKiBsb2FkZWQgaW50byB0aGUgcG9zdG1hc3Rl ciwgd2UgZG9uJ3Qga25vdyBpZiB0aGUgb3B0aW9ucyBhcmUgdmFsaWQKKwkJICogeWV0IGFuZCBt dXN0IHN0b3JlIHRoZW0gZm9yIGxhdGVyLiBQZXJmb3JtIG9ubHkgYSBiYXNpYyBzeW50YXgKKwkJ ICogY2hlY2sgaGVyZS4KKwkJICovCisJCWlmICghdmFsaWRfb2F1dGhfaGJhX29wdGlvbl9uYW1l KGtleSkpCisJCXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NP TkZJR19GSUxFX0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBPQXV0aCB2YWxpZGF0b3Ig b3B0aW9uIG5hbWU6IFwiJXNcIiIsIG5hbWUpLAorCQkJCQkgZXJyY29udGV4dCgibGluZSAlZCBv ZiBjb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJbGluZV9udW0sIGZpbGVfbmFt ZSkpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCVJFUVVJUkVfQVVUSF9PUFRJT04odWFP QXV0aCwgbmFtZSwgIm9hdXRoIik7CisJCWhiYWxpbmUtPm9hdXRoX29wdF9rZXlzID0gbGFwcGVu ZChoYmFsaW5lLT5vYXV0aF9vcHRfa2V5cywgcHN0cmR1cChrZXkpKTsKKwkJaGJhbGluZS0+b2F1 dGhfb3B0X3ZhbHMgPSBsYXBwZW5kKGhiYWxpbmUtPm9hdXRoX29wdF92YWxzLCBwc3RyZHVwKHZh bCkpOworCX0KIAllbHNlIGlmIChzdHJjbXAobmFtZSwgImRlbGVnYXRlX2lkZW50X21hcHBpbmci KSA9PSAwKQogCXsKIAkJUkVRVUlSRV9BVVRIX09QVElPTih1YU9BdXRoLCAiZGVsZWdhdGVfaWRl bnRfbWFwcGluZyIsICJvYXV0aCIpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0 aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3IvdC8wMDFfc2VydmVyLnBsCmluZGV4IDI4ZDEyM2I4MzNlLi4wNzU2ZTYwMzhjNCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAxX3NlcnZlci5wbApA QCAtNTc5LDEwICs1NzksMjkgQEAgJG5vZGUtPmNvbm5lY3RfZmFpbHMoCiAKICRiZ2Nvbm4tPnF1 ZXJ5X3NhZmUoIkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0aF92YWxpZGF0b3IuZXJyb3JfZGV0YWls Iik7CiAkYmdjb25uLT5xdWVyeV9zYWZlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRh dG9yLmludGVybmFsX2Vycm9yIik7CisKKyMgV2UgY29tcGxhaW4gd2hlbiBiYWQgb3B0aW9uIG5h bWVzIGFyZSByZWdpc3RlcmVkLCBidXQgY29ubmVjdGlvbnMgbWF5IHByb2NlZWQKKyMgKHNpbmNl IHVzZXJzIGNhbid0IHNldCB0aG9zZSBvcHRpb25zIGluIHRoZSBIQkEgYW55d2F5KS4KKyRiZ2Nv bm4tPnF1ZXJ5X3NhZmUoIkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0aF92YWxpZGF0b3IuYXV0aG5f aWQiKTsKKyRiZ2Nvbm4tPnF1ZXJ5X3NhZmUoIkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0aF92YWxp ZGF0b3IuYXV0aG9yaXplX3Rva2VucyIpOworJGJnY29ubi0+cXVlcnlfc2FmZSgiQUxURVIgU1lT VEVNIFNFVCBvYXV0aF92YWxpZGF0b3IuaW52YWxpZF9oYmEgVE8gdHJ1ZSIpOworCiAkbm9kZS0+ cmVsb2FkOwogJGxvZ19zdGFydCA9CiAgICRub2RlLT53YWl0X2Zvcl9sb2cocXIvcmVsb2FkaW5n IGNvbmZpZ3VyYXRpb24gZmlsZXMvLCAkbG9nX3N0YXJ0KTsKIAorJG5vZGUtPmNvbm5lY3Rfb2so CisJIiRjb21tb25fY29ubnN0ciB1c2VyPXRlc3QiLAorCSJiYWQgcmVnaXN0ZXJlZCBIQkEgb3B0 aW9uIiwKKwlleHBlY3RlZF9zdGRlcnIgPT4KKwkgIHFyQFZpc2l0IGh0dHBzOi8vZXhhbXBsZVwu Y29tLyBhbmQgZW50ZXIgdGhlIGNvZGU6IHBvc3RncmVzdXNlckAsCisJbG9nX2xpa2UgPT4gWwor CQlxci9XQVJOSU5HOlxzK0hCQSBvcHRpb24gbmFtZSAiYmFkIG9wdGlvbiBuYW1lIiBpcyBpbnZh bGlkIGFuZCB3aWxsIGJlIGlnbm9yZWQvLAorCQlxci9DT05URVhUOlxzK3ZhbGlkYXRvciBtb2R1 bGUgInZhbGlkYXRvciIsIGluIGNhbGwgdG8gUmVnaXN0ZXJPQXV0aEhCQU9wdGlvbnMvLAorCV0p OworCiskYmdjb25uLT5xdWVyeV9zYWZlKCJBTFRFUiBTWVNURU0gUkVTRVQgb2F1dGhfdmFsaWRh dG9yLmludmFsaWRfaGJhIik7CisKICMKICMgVGVzdCB1c2VyIG1hcHBpbmcuCiAjCkBAIC02NTEs NiArNjcwLDg0IEBAICRub2RlLT5yZWxvYWQ7CiAkbG9nX3N0YXJ0ID0KICAgJG5vZGUtPndhaXRf Zm9yX2xvZyhxci9yZWxvYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlcy8sICRsb2dfc3RhcnQpOwog CiskYmdjb25uLT5xdWl0OyAgICAjIHRoZSB0ZXN0cyBiZWxvdyByZXN0YXJ0IHRoZSBzZXJ2ZXIK KworIworIyBUZXN0IHZhbGlkYXRvci1zcGVjaWZpYyBIQkEgb3B0aW9ucy4KKyMKKwordW5saW5r KCRub2RlLT5kYXRhX2RpciAuICcvcGdfaGJhLmNvbmYnKTsKKyRub2RlLT5hcHBlbmRfY29uZigK KwkncGdfaGJhLmNvbmYnLCBxcXsKK2xvY2FsIGFsbCB0ZXN0ICAgIG9hdXRoIGlzc3Vlcj0iJGlz c3VlciIgc2NvcGU9Im9wZW5pZCBwb3N0Z3JlcyIgZGVsZWdhdGVfaWRlbnRfbWFwcGluZz0xIFxc CisgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IuYXV0aG5faWQ9Imlnbm9yZWQiIHZh bGlkYXRvci5hdXRobl9pZD0ib3RoZXItaWRlbnRpdHkiCitsb2NhbCBhbGwgdGVzdGFsdCBvYXV0 aCBpc3N1ZXI9IiRpc3N1ZXIiIHNjb3BlPSJvcGVuaWQgcG9zdGdyZXMiIHZhbGlkYXRvci5sb2c9 InRlc3RhbHQgbWVzc2FnZSIKK30pOworCiskbm9kZS0+cmVsb2FkOworJGxvZ19zdGFydCA9Cisg ICRub2RlLT53YWl0X2Zvcl9sb2cocXIvcmVsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMvLCAk bG9nX3N0YXJ0KTsKKworJG5vZGUtPmNvbm5lY3Rfb2soCisJIiRjb21tb25fY29ubnN0ciB1c2Vy PXRlc3QiLAorCSJjdXN0b20gSEJBIHNldHRpbmcgKHRlc3QpIiwKKwlleHBlY3RlZF9zdGRlcnIg PT4KKwkgIHFyQFZpc2l0IGh0dHBzOi8vZXhhbXBsZVwuY29tLyBhbmQgZW50ZXIgdGhlIGNvZGU6 IHBvc3RncmVzdXNlckAsCisJbG9nX2xpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aGVudGljYXRl ZDogaWRlbnRpdHk9Im90aGVyLWlkZW50aXR5Ii9dKTsKKyRub2RlLT5jb25uZWN0X29rKAorCSIk Y29tbW9uX2Nvbm5zdHIgdXNlcj10ZXN0YWx0IiwKKwkiY3VzdG9tIEhCQSBzZXR0aW5nICh0ZXN0 YWx0KSIsCisJZXhwZWN0ZWRfc3RkZXJyID0+CisJICBxckBWaXNpdCBodHRwczovL2V4YW1wbGVc LmNvbS8gYW5kIGVudGVyIHRoZSBjb2RlOiBwb3N0Z3Jlc3VzZXJALAorCWxvZ19saWtlID0+IFsK KwkJcXIvTE9HOlxzK3Rlc3RhbHQgbWVzc2FnZS8sCisJCXFyL2Nvbm5lY3Rpb24gYXV0aGVudGlj YXRlZDogaWRlbnRpdHk9InRlc3RhbHQiLywKKwldKTsKKworIyBiYWQgc3ludGF4Cit1bmxpbmso JG5vZGUtPmRhdGFfZGlyIC4gJy9wZ19oYmEuY29uZicpOworJG5vZGUtPmFwcGVuZF9jb25mKAor CSdwZ19oYmEuY29uZicsIHFxeworbG9jYWwgYWxsIHRlc3RhbHQgb2F1dGggaXNzdWVyPSIkaXNz dWVyIiBzY29wZT0ib3BlbmlkIHBvc3RncmVzIiB2YWxpZGF0b3IuPTEKK30pOworCiskbG9nX3N0 YXJ0ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7Ciskbm9kZS0+cmVzdGFydChmYWlsX29rID0+IDEpOwor JG5vZGUtPmxvZ19jaGVjaygiZW1wdHkgSEJBIG9wdGlvbiBuYW1lIiwKKwkkbG9nX3N0YXJ0LAor CWxvZ19saWtlID0+IFtxci9pbnZhbGlkIE9BdXRoIHZhbGlkYXRvciBvcHRpb24gbmFtZTogInZh bGlkYXRvclwuIi9dKTsKKwordW5saW5rKCRub2RlLT5kYXRhX2RpciAuICcvcGdfaGJhLmNvbmYn KTsKKyRub2RlLT5hcHBlbmRfY29uZigKKwkncGdfaGJhLmNvbmYnLCBxcXsKK2xvY2FsIGFsbCB0 ZXN0YWx0IG9hdXRoIGlzc3Vlcj0iJGlzc3VlciIgc2NvcGU9Im9wZW5pZCBwb3N0Z3JlcyIgdmFs aWRhdG9yLkBAPTEKK30pOworCiskbG9nX3N0YXJ0ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7Ciskbm9k ZS0+cmVzdGFydChmYWlsX29rID0+IDEpOworJG5vZGUtPmxvZ19jaGVjaygiaW52YWxpZCBIQkEg b3B0aW9uIG5hbWUiLAorCSRsb2dfc3RhcnQsCisJbG9nX2xpa2UgPT4gW3FyL2ludmFsaWQgT0F1 dGggdmFsaWRhdG9yIG9wdGlvbiBuYW1lOiAidmFsaWRhdG9yXC5AQCIvXSk7CisKKyMgdW5rbm93 biBzZXR0aW5ncyAodmFsaWRhdGlvbiBpcyBkZWZlcnJlZCB0byBjb25uZWN0IHRpbWUpCit1bmxp bmsoJG5vZGUtPmRhdGFfZGlyIC4gJy9wZ19oYmEuY29uZicpOworJG5vZGUtPmFwcGVuZF9jb25m KAorCSdwZ19oYmEuY29uZicsIHFxeworbG9jYWwgYWxsIHRlc3RhbHQgb2F1dGggaXNzdWVyPSIk aXNzdWVyIiBzY29wZT0ib3BlbmlkIHBvc3RncmVzIiBcXAorICAgICAgICAgICAgICAgICAgICAg ICAgdmFsaWRhdG9yLmxvZz1pZ25vcmVkIHZhbGlkYXRvci5iYWQ9MQorfSk7Ciskbm9kZS0+cmVz dGFydDsKKworJG5vZGUtPmNvbm5lY3RfZmFpbHMoCisJIiRjb21tb25fY29ubnN0ciB1c2VyPXRl c3RhbHQiLAorCSJiYWQgSEJBIHNldHRpbmciLAorCWV4cGVjdGVkX3N0ZGVyciA9PiBxci9PQXV0 aCBiZWFyZXIgYXV0aGVudGljYXRpb24gZmFpbGVkLywKKwlsb2dfbGlrZSA9PiBbCisJCXFyL1dB Uk5JTkc6XHMrdW5yZWNvZ25pemVkIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBuYW1lOiAidmFsaWRh dG9yXC5iYWQiLywKKwkJcXIvRkFUQUw6XHMrT0F1dGggYmVhcmVyIGF1dGhlbnRpY2F0aW9uIGZh aWxlZC8sCisJCXFyL0RFVEFJTDpccyt1bnJlY29nbml6ZWQgYXV0aGVudGljYXRpb24gb3B0aW9u IG5hbWU6ICJ2YWxpZGF0b3JcLmJhZCIvLAorCV0pOworCiAjCiAjIFRlc3QgbXVsdGlwbGUgdmFs aWRhdG9ycy4KICMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L3ZhbGlkYXRvci5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRhdG9y LmMKaW5kZXggMzUzZTBlMGQzMmEuLjg1ZmI0YzA4YmYyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL29hdXRoX3ZhbGlkYXRvci92YWxpZGF0b3IuYworKysgYi9zcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci92YWxpZGF0b3IuYwpAQCAtNDIsMTMgKzQyLDIxIEBAIHN0YXRpYyBj aGFyICphdXRobl9pZCA9IE5VTEw7CiBzdGF0aWMgYm9vbCBhdXRob3JpemVfdG9rZW5zID0gdHJ1 ZTsKIHN0YXRpYyBjaGFyICplcnJvcl9kZXRhaWwgPSBOVUxMOwogc3RhdGljIGJvb2wgaW50ZXJu YWxfZXJyb3IgPSBmYWxzZTsKK3N0YXRpYyBib29sIGludmFsaWRfaGJhID0gZmFsc2U7CisKKy8q IEhCQSBvcHRpb25zICovCitzdGF0aWMgY29uc3QgY2hhciAqaGJhX29wdHNbXSA9IHsKKwkiYXV0 aG5faWQiLAkJCQkJLyogb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGF1dGhuX2lkICovCisJImxvZyIs CQkJCQkJLyogbG9ncyBhbiBhcmJpdHJhcnkgc3RyaW5nICovCit9OwogCiAvKi0tLQogICogRXh0 ZW5zaW9uIGVudHJ5IHBvaW50LiBTZXRzIHVwIEdVQ3MgZm9yIHVzZSBieSB0ZXN0czoKICAqCiAg KiAtIG9hdXRoX3ZhbGlkYXRvci5hdXRobl9pZAlTZXRzIHRoZSB1c2VyIGlkZW50aWZpZXIgdG8g cmV0dXJuIGR1cmluZyB0b2tlbgogICoJCQkJCQkJCXZhbGlkYXRpb24uIERlZmF1bHRzIHRvIHRo ZSB1c2VybmFtZSBpbiB0aGUKLSAqCQkJCQkJCQlzdGFydHVwIHBhY2tldC4KKyAqCQkJCQkJCQlz dGFydHVwIHBhY2tldCwgb3IgdGhlIHZhbGlkYXRvci5hdXRobl9pZCBIQkEKKyAqCQkJCQkJCQlv cHRpb24gaWYgaXQgaXMgc2V0LgogICoKICAqIC0gb2F1dGhfdmFsaWRhdG9yLmF1dGhvcml6ZV90 b2tlbnMKICAqCQkJCQkJCQlTZXRzIHdoZXRoZXIgdG8gc3VjY2Vzc2Z1bGx5IHZhbGlkYXRlIGlu Y29taW5nCkBAIC05Niw2ICsxMDQsMTQgQEAgX1BHX2luaXQodm9pZCkKIAkJCQkJCQkgUEdDX1NJ R0hVUCwKIAkJCQkJCQkgMCwKIAkJCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCk7CisJRGVmaW5lQ3Vz dG9tQm9vbFZhcmlhYmxlKCJvYXV0aF92YWxpZGF0b3IuaW52YWxpZF9oYmEiLAorCQkJCQkJCSAi U2hvdWxkIHRoZSB2YWxpZGF0b3IgcmVnaXN0ZXIgYW4gaW52YWxpZCBvcHRpb24/IiwKKwkJCQkJ CQkgTlVMTCwKKwkJCQkJCQkgJmludmFsaWRfaGJhLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkg UEdDX1NJR0hVUCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCk7CiAKIAlN YXJrR1VDUHJlZml4UmVzZXJ2ZWQoIm9hdXRoX3ZhbGlkYXRvciIpOwogfQpAQCAtMTI0LDYgKzE0 MCwyOSBAQCB2YWxpZGF0b3Jfc3RhcnR1cChWYWxpZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUpCiAJ aWYgKHN0YXRlLT5zdmVyc2lvbiAhPSBQR19WRVJTSU9OX05VTSkKIAkJZWxvZyhFUlJPUiwgIm9h dXRoX3ZhbGlkYXRvcjogc3ZlcnNpb24gc2V0IHRvICVkIiwgc3RhdGUtPnN2ZXJzaW9uKTsKIAor CS8qCisJICogVGVzdCB0aGUgYmVoYXZpb3Igb2YgY3VzdG9tIEhCQSBvcHRpb25zLiBSZWdpc3Rl cmVkIG9wdGlvbnMgc2hvdWxkIG5vdAorCSAqIGJlIHJldHJpZXZhYmxlIGR1cmluZyBzdGFydHVw ICh3ZSB3YW50IHRvIGRpc2NvdXJhZ2UgbW9kdWxlcyBmcm9tCisJICogcmVseWluZyBvbiB0aGUg cmVsYXRpdmUgb3JkZXIgb2YgY2xpZW50IGNvbm5lY3Rpb25zIGFuZCB0aGUKKwkgKiBzdGFydHVw X2NiKS4KKwkgKi8KKwlSZWdpc3Rlck9BdXRoSEJBT3B0aW9ucyhzdGF0ZSwgbGVuZ3Rob2YoaGJh X29wdHMpLCBoYmFfb3B0cyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhvZihoYmFfb3B0 cyk7IGkrKykKKwl7CisJCWlmIChHZXRPQXV0aEhCQU9wdGlvbihzdGF0ZSwgaGJhX29wdHNbaV0p KQorCQkJZWxvZyhFUlJPUiwKKwkJCQkgIm9hdXRoX3ZhbGlkYXRvcjogR2V0T0F1dGhWYWxpZGF0 b3JPcHRpb24oXCIlc1wiKSB3YXMgbm9uLU5VTEwgZHVyaW5nIHN0YXJ0dXBfY2IiLAorCQkJCSBo YmFfb3B0c1tpXSk7CisJfQorCisJaWYgKGludmFsaWRfaGJhKQorCXsKKwkJLyogUmVnaXN0ZXIg YSBiYWQgb3B0aW9uLCB3aGljaCBzaG91bGQgcHJpbnQgYSBXQVJOSU5HIHRvIHRoZSBsb2dzLiAq LworCQljb25zdCBjaGFyICppbnZhbGlkID0gImJhZCBvcHRpb24gbmFtZSI7CisKKwkJUmVnaXN0 ZXJPQXV0aEhCQU9wdGlvbnMoc3RhdGUsIDEsICZpbnZhbGlkKTsKKwl9CisKIAlzdGF0ZS0+cHJp dmF0ZV9kYXRhID0gUFJJVkFURV9DT09LSUU7CiB9CiAKQEAgLTE0MSw3ICsxODAsNyBAQCB2YWxp ZGF0b3Jfc2h1dGRvd24oVmFsaWRhdG9yTW9kdWxlU3RhdGUgKnN0YXRlKQogCiAvKgogICogVmFs aWRhdG9yIGltcGxlbWVudGF0aW9uLiBMb2dzIHRoZSBpbmNvbWluZyBkYXRhIGFuZCBhdXRob3Jp emVzIHRoZSB0b2tlbiBieQotICogZGVmYXVsdDsgdGhlIGJlaGF2aW9yIGNhbiBiZSBtb2RpZmll ZCB2aWEgdGhlIG1vZHVsZSdzIEdVQyBzZXR0aW5ncy4KKyAqIGRlZmF1bHQ7IHRoZSBiZWhhdmlv ciBjYW4gYmUgbW9kaWZpZWQgdmlhIHRoZSBtb2R1bGUncyBHVUMgYW5kIEhCQSBzZXR0aW5ncy4K ICAqLwogc3RhdGljIGJvb2wKIHZhbGlkYXRlX3Rva2VuKGNvbnN0IFZhbGlkYXRvck1vZHVsZVN0 YXRlICpzdGF0ZSwKQEAgLTE1Myw2ICsxOTIsOSBAQCB2YWxpZGF0ZV90b2tlbihjb25zdCBWYWxp ZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUsCiAJCWVsb2coRVJST1IsICJvYXV0aF92YWxpZGF0b3I6 IHByaXZhdGUgc3RhdGUgY29va2llIGNoYW5nZWQgdG8gJXAgaW4gdmFsaWRhdGUiLAogCQkJIHN0 YXRlLT5wcml2YXRlX2RhdGEpOwogCisJaWYgKEdldE9BdXRoSEJBT3B0aW9uKHN0YXRlLCAibG9n IikpCisJCWVsb2coTE9HLCAiJXMiLCBHZXRPQXV0aEhCQU9wdGlvbihzdGF0ZSwgImxvZyIpKTsK KwogCWVsb2coTE9HLCAib2F1dGhfdmFsaWRhdG9yOiB0b2tlbj1cIiVzXCIsIHJvbGU9XCIlc1wi IiwgdG9rZW4sIHJvbGUpOwogCWVsb2coTE9HLCAib2F1dGhfdmFsaWRhdG9yOiBpc3N1ZXI9XCIl c1wiLCBzY29wZT1cIiVzXCIiLAogCQkgTXlQcm9jUG9ydC0+aGJhLT5vYXV0aF9pc3N1ZXIsCkBA IC0xNjUsNiArMjA3LDggQEAgdmFsaWRhdGVfdG9rZW4oY29uc3QgVmFsaWRhdG9yTW9kdWxlU3Rh dGUgKnN0YXRlLAogCXJlcy0+YXV0aG9yaXplZCA9IGF1dGhvcml6ZV90b2tlbnM7CiAJaWYgKGF1 dGhuX2lkKQogCQlyZXMtPmF1dGhuX2lkID0gcHN0cmR1cChhdXRobl9pZCk7CisJZWxzZSBpZiAo R2V0T0F1dGhIQkFPcHRpb24oc3RhdGUsICJhdXRobl9pZCIpKQorCQlyZXMtPmF1dGhuX2lkID0g cHN0cmR1cChHZXRPQXV0aEhCQU9wdGlvbihzdGF0ZSwgImF1dGhuX2lkIikpOwogCWVsc2UKIAkJ cmVzLT5hdXRobl9pZCA9IHBzdHJkdXAocm9sZSk7CiAKLS0gCjIuMzQuMQoK --0000000000008ba8d9064d7845c4--