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 1oiV4g-0003Wo-Iv for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Oct 2022 06:18:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oiV4f-000243-Ex for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Oct 2022 06:18:37 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oiV4e-00021H-RM for pgsql-hackers@lists.postgresql.org; Wed, 12 Oct 2022 06:18:37 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oiV4b-0007pN-7b for pgsql-hackers@lists.postgresql.org; Wed, 12 Oct 2022 06:18:35 +0000 Received: by mail-wr1-x42d.google.com with SMTP id n12so24666003wrp.10 for ; Tue, 11 Oct 2022 23:18:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=Wjg6Hw8cviyjEEuimncnUJiiDVHSlWBGALvYsCAgSng=; b=q71y4vmZ12tjjriClAKTRvhQ70FoIZb42JrKA3RjyMq9sxSR25YvOKd5u8LXwS+dAy tsQdeaWvS/rt4G1nzIb9fu67vSanJW/hMe1xEdsw1o7ZDjvaP9QZ6QUjLP8VSwCHstb3 RVGaaihJHueKia3N2F8YAYhn3N65no/j9+GtqsZI9JZbLfcpETFte9pfFNUyBdzC/Jtr ZvCeqX8ja1eRba/zd1f6nVKD6dyIlTzs6KVw9TxxWHM/6pKHvmi9JIe3O34iq91Jdb28 Uo2ZwcMvJnpT+plfomsdCUpiYp8wzxb5n3X4ZbvOOaFjPAI51IJrePuawiXTydmRGFwu s7sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Wjg6Hw8cviyjEEuimncnUJiiDVHSlWBGALvYsCAgSng=; b=7HlrYHHZjGPXDG1ms+lncDZoQ9DlEQbBg+Y1q5Nshx0P6baaxTgKh67SzYYORZuQIR c1s1lUoO73anx18xF7VHHQZk7Zt4RJA1zZsBzRFuLi/oXYmoeJL1d9bztUx83vQzHUlx PHvk4ec0XJC1FnCZoZlzGz/hLJ5vWTJQtB2e1wcpr6pO6IBxN6gdpq6KKYgCPF8jMYIe 1BczE0GG4XafWjeP/qJcFOrMa5lxHLMoSP5A8iBtyEodhHGDDuzVNJp/H4brfZ0YIgkZ 3iQkJCsbSGdnAlPqTMkX/qY7Fkq1u1FfsQCeTsDl5WjJ8AsV6WffLv0c8QImMSjDMh9d /JGA== X-Gm-Message-State: ACrzQf0n5xSn98oWt/hecXBfUSxYp8glH/Z/Qywcv55zXhjP7GjP/R66 LVBIa/7WL5XTE2BX1bCYmS4= X-Google-Smtp-Source: AMsMyM7eHs1hG8tuVZpratyU3TKgY0bDL9r5Xpt73Vgd6eBFSw3uFY+T3GPbJ0xDs0Is4vM384OnbQ== X-Received: by 2002:a05:6000:144f:b0:231:2053:ef7c with SMTP id v15-20020a056000144f00b002312053ef7cmr6124468wrx.179.1665555511458; Tue, 11 Oct 2022 23:18:31 -0700 (PDT) Received: from [192.168.11.72] ([54.239.6.187]) by smtp.gmail.com with ESMTPSA id q22-20020a7bce96000000b003c21ba7d7d6sm860389wmj.44.2022.10.11.23.18.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Oct 2022 23:18:30 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------iORugA1AB3ATNywXu3oJGcQ5" Message-ID: <607af3c9-e45d-3941-41a2-d21065d6594b@gmail.com> Date: Wed, 12 Oct 2022 08:17:14 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.3.2 Subject: Re: Patch proposal: make use of regular expressions for the username in pg_hba.conf To: Michael Paquier Cc: Tom Lane , Jacob Champion , PostgreSQL Hackers References: <4177827.1662684400@sss.pgh.pa.us> <572017.1663646973@sss.pgh.pa.us> Content-Language: en-US From: "Drouvot, Bertrand" In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------iORugA1AB3ATNywXu3oJGcQ5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 10/11/22 8:29 AM, Michael Paquier wrote: > On Mon, Oct 10, 2022 at 09:00:06AM +0200, Drouvot, Bertrand wrote: >> foreach(cell, tokens) >> { >> [...] >> + tokreg = lfirst(cell); >> + if (!token_is_regexp(tokreg)) >> { >> - if (strcmp(dbname, role) == 0) >> + if (am_walsender && !am_db_walsender) >> + { >> + /* >> + * physical replication walsender connections can only match >> + * replication keyword >> + */ >> + if (token_is_keyword(tokreg->authtoken, "replication")) >> + return true; >> + } >> + else if (token_is_keyword(tokreg->authtoken, "all")) >> return true; > > When checking the list of databases in check_db(), physical WAL > senders (aka am_walsender && !am_db_walsender) would be able to accept > regexps, but these should only accept "replication" and never a > regexp, no? Oh right, good catch, thanks! Please find attached v6 fixing it. > This is kind of special in the HBA logic, coming back to 9.0 where > physical replication and this special role property have been > introduced. WAL senders have gained an actual database property later > on in 9.4 with logical decoding, keeping "replication" for > compatibility (connection strings can use replication=database to > connect as a non-physical WAL sender and connect to a specific > database). > Thanks for the explanation! >> +typedef struct AuthToken >> +{ >> + char *string; >> + bool quoted; >> +} AuthToken; >> + >> +/* >> + * Distinguish the case a token has to be treated as a regular >> + * expression or not. >> + */ >> +typedef struct AuthTokenOrRegex >> +{ >> + bool is_regex; >> + >> + /* >> + * Not an union as we still need the token string for fill_hba_line(). >> + */ >> + AuthToken *authtoken; >> + regex_t *regex; >> +} AuthTokenOrRegex; > > Hmm. With is_regex to check if a regex_t exists, both structures may > not be necessary. Agree that both struct are not necessary. In v6, AuthTokenOrRegex has been removed and the regex has been moved to AuthToken. There is no is_regex bool anymore, as it's enough to test whether regex is NULL or not. > I have not put my hands on that directly, but if > I guess that I would shape things to have only AuthToken with > (enforcing regex_t in priority if set in the list of elements to check > for a match): > - the string > - quoted > - regex_t > A list member should never have (regex_t != NULL && quoted), right? The patch does allow that. For example it happens for the test where we add a comma in the role name. As we don't rely on a dedicated char to mark the end of a reg exp (we only rely on / to mark its start) then allowing (regex_t != NULL && quoted) seems reasonable to me. >> +# test with a comma in the regular expression >> +reset_pg_hba($node, 'all', '"/^.*5,.*e$"', 'password'); >> +test_conn($node, 'user=md5,role', 'password', 'matching regexp for username', >> + 0); > > So, we check here that the role includes "5," in its name. This is > getting fun to parse ;) > Indeed, ;-) >> elsif ($ENV{PG_TEST_EXTRA} !~ /\bssl\b/) >> { >> - plan skip_all => 'Potentially unsafe test SSL not enabled in PG_TEST_EXTRA'; >> + plan skip_all => >> + 'Potentially unsafe test SSL not enabled in PG_TEST_EXTRA'; >> } > > Unrelated noise from perltidy. Right. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------iORugA1AB3ATNywXu3oJGcQ5 Content-Type: text/plain; charset=UTF-8; name="v6-0001-hba_with_regexp.patch" Content-Disposition: attachment; filename="v6-0001-hba_with_regexp.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sIGIvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKaW5kZXggYzZmMWI3MGZkMy4uNDA2NjI4ZWYzNSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NsaWVudC1hdXRoLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKQEAgLTIzNSw4ICsyMzUsOSBAQCBob3N0bm9nc3NlbmMg IDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFibGU+ICA8cmVwbGFjZWFibGU+dXNl cjwvcmVwbGFjZWFibAogICAgICAgIGxvZ2ljYWwgcmVwbGljYXRpb24gY29ubmVjdGlvbnMg ZG8gc3BlY2lmeSBpdC4KICAgICAgICBPdGhlcndpc2UsIHRoaXMgaXMgdGhlIG5hbWUgb2YK ICAgICAgICBhIHNwZWNpZmljIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2UuCi0gICAgICAgTXVsdGlwbGUgZGF0YWJhc2UgbmFtZXMgY2FuIGJlIHN1 cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoCi0gICAgICAgY29tbWFzLiAgQSBzZXBh cmF0ZSBmaWxlIGNvbnRhaW5pbmcgZGF0YWJhc2UgbmFtZXMgY2FuIGJlIHNwZWNpZmllZCBi eQorICAgICAgIE11bHRpcGxlIGRhdGFiYXNlIG5hbWVzIGFuZC9vciByZWd1bGFyIGV4cHJl c3Npb25zIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88L2xpdGVyYWw+CisgICAgICAgY2FuIGJl IHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KKyAgICAgICBBIHNl cGFyYXRlIGZpbGUgY29udGFpbmluZyBkYXRhYmFzZSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVk IGJ5CiAgICAgICAgcHJlY2VkaW5nIHRoZSBmaWxlIG5hbWUgd2l0aCA8bGl0ZXJhbD5APC9s aXRlcmFsPi4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KQEAgLTI0OSw3ICsy NTAsOCBAQCBob3N0bm9nc3NlbmMgIDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFi bGU+ICA8cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibAogICAgICAgIFNwZWNpZmllcyB3 aGljaCBkYXRhYmFzZSB1c2VyIG5hbWUocykgdGhpcyByZWNvcmQKICAgICAgICBtYXRjaGVz LiBUaGUgdmFsdWUgPGxpdGVyYWw+YWxsPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBpdAog ICAgICAgIG1hdGNoZXMgYWxsIHVzZXJzLiAgT3RoZXJ3aXNlLCB0aGlzIGlzIGVpdGhlciB0 aGUgbmFtZSBvZiBhIHNwZWNpZmljCi0gICAgICAgZGF0YWJhc2UgdXNlciwgb3IgYSBncm91 cCBuYW1lIHByZWNlZGVkIGJ5IDxsaXRlcmFsPis8L2xpdGVyYWw+LgorICAgICAgIGRhdGFi YXNlIHVzZXIsIGEgcmVndWxhciBleHByZXNzaW9uIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88 L2xpdGVyYWw+CisgICAgICAgb3IgYSBncm91cCBuYW1lIHByZWNlZGVkIGJ5IDxsaXRlcmFs Pis8L2xpdGVyYWw+LgogICAgICAgIChSZWNhbGwgdGhhdCB0aGVyZSBpcyBubyByZWFsIGRp c3RpbmN0aW9uIGJldHdlZW4gdXNlcnMgYW5kIGdyb3VwcwogICAgICAgIGluIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT47IGEgPGxpdGVyYWw+KzwvbGl0ZXJhbD4g bWFyayByZWFsbHkgbWVhbnMKICAgICAgICA8cXVvdGU+bWF0Y2ggYW55IG9mIHRoZSByb2xl cyB0aGF0IGFyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG1lbWJlcnMKQEAgLTI1OCw3ICsy NjAsOCBAQCBob3N0bm9nc3NlbmMgIDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFi bGU+ICA8cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibAogICAgICAgIGNvbnNpZGVyZWQg dG8gYmUgYSBtZW1iZXIgb2YgYSByb2xlIGlmIHRoZXkgYXJlIGV4cGxpY2l0bHkgYSBtZW1i ZXIKICAgICAgICBvZiB0aGUgcm9sZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgYW5kIG5v dCBqdXN0IGJ5IHZpcnR1ZSBvZgogICAgICAgIGJlaW5nIGEgc3VwZXJ1c2VyLgotICAgICAg IE11bHRpcGxlIHVzZXIgbmFtZXMgY2FuIGJlIHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhl bSB3aXRoIGNvbW1hcy4KKyAgICAgICBNdWx0aXBsZSB1c2VyIG5hbWVzIGFuZC9vciByZWd1 bGFyIGV4cHJlc3Npb25zIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88L2xpdGVyYWw+CisgICAg ICAgY2FuIGJlIHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KICAg ICAgICBBIHNlcGFyYXRlIGZpbGUgY29udGFpbmluZyB1c2VyIG5hbWVzIGNhbiBiZSBzcGVj aWZpZWQgYnkgcHJlY2VkaW5nIHRoZQogICAgICAgIGZpbGUgbmFtZSB3aXRoIDxsaXRlcmFs PkA8L2xpdGVyYWw+LgogICAgICAgPC9wYXJhPgpAQCAtMjcwLDggKzI3Myw5IEBAIGhvc3Ru b2dzc2VuYyAgPHJlcGxhY2VhYmxlPmRhdGFiYXNlPC9yZXBsYWNlYWJsZT4gIDxyZXBsYWNl YWJsZT51c2VyPC9yZXBsYWNlYWJsCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgog ICAgICAgIFNwZWNpZmllcyB0aGUgY2xpZW50IG1hY2hpbmUgYWRkcmVzcyhlcykgdGhhdCB0 aGlzIHJlY29yZAotICAgICAgIG1hdGNoZXMuICBUaGlzIGZpZWxkIGNhbiBjb250YWluIGVp dGhlciBhIGhvc3QgbmFtZSwgYW4gSVAKLSAgICAgICBhZGRyZXNzIHJhbmdlLCBvciBvbmUg b2YgdGhlIHNwZWNpYWwga2V5IHdvcmRzIG1lbnRpb25lZCBiZWxvdy4KKyAgICAgICBtYXRj aGVzLiAgVGhpcyBmaWVsZCBjYW4gY29udGFpbiBlaXRoZXIgYSBob3N0IG5hbWUsIGEgcmVn dWxhciBleHByZXNzaW9uCisgICAgICAgcHJlY2VkZWQgYnkgPGxpdGVyYWw+LzwvbGl0ZXJh bD4gcmVwcmVzZW50aW5nIGhvc3QgbmFtZXMsIGFuIElQIGFkZHJlc3MgcmFuZ2UsCisgICAg ICAgb3Igb25lIG9mIHRoZSBzcGVjaWFsIGtleSB3b3JkcyBtZW50aW9uZWQgYmVsb3cuCiAg ICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtNzM5LDYgKzc0MywyNCBAQCBob3N0 ICAgIGFsbCAgICAgICAgICAgICBhbGwgICAgICAgICAgICAgOjoxLzEyOCAgICAgICAgICAg ICAgICAgdHJ1c3QKICMgVFlQRSAgREFUQUJBU0UgICAgICAgIFVTRVIgICAgICAgICAgICBB RERSRVNTICAgICAgICAgICAgICAgICBNRVRIT0QKIGhvc3QgICAgYWxsICAgICAgICAgICAg IGFsbCAgICAgICAgICAgICBsb2NhbGhvc3QgICAgICAgICAgICAgICB0cnVzdAogCisjIFRo ZSBzYW1lIHVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIGZvciBob3N0IG5hbWUsIHdoaWNo IGFsbG93cyBjb25uZWN0aW9uIGZvcgorIyBob3N0IG5hbWUgZW5kaW5nIHdpdGggInRlc3Qi LgorIworIyBUWVBFICBEQVRBQkFTRSAgICAgICAgVVNFUiAgICAgICAgICAgIEFERFJFU1Mg ICAgICAgICAgICAgICAgIE1FVEhPRAoraG9zdCAgICBhbGwgICAgICAgICAgICAgYWxsICAg ICAgICAgICAgIC9eLip0ZXN0JCAgICAgICAgICAgICAgIHRydXN0CisKKyMgVGhlIHNhbWUg dXNpbmcgcmVndWxhciBleHByZXNzaW9uIGZvciBEQVRBQkFTRSwgd2hpY2ggYWxsb3dzIGNv bm5lY3Rpb24gdG8gdGhlCisjIGRiMSBhbmQgdGVzdGRiIGRhdGFiYXNlcyBhbmQgYW55IGRh dGFiYXNlIHdpdGggYSBuYW1lIGVuZGluZyB3aXRoICJ0ZXN0Ii4KKyMKKyMgVFlQRSAgREFU QUJBU0UgICAgICAgICAgICAgICBVU0VSICAgICAgICAgICAgQUREUkVTUyAgICAgICAgICAg ICAgICAgTUVUSE9ECitsb2NhbCAgIGRiMSwvXi4qdGVzdCQsdGVzdGRiICAgYWxsICAgICAg ICAgICAgIC9eLip0ZXN0JCAgICAgICAgICAgICAgIHRydXN0CisKKyMgVGhlIHNhbWUgdXNp bmcgcmVndWxhciBleHByZXNzaW9uIGZvciBVU0VSLCB3aGljaCBhbGxvd3MgY29ubmVjdGlv biB0byB0aGUKKyMgdXNlcjEgYW5kIHRlc3R1c2VyIHVzZXJzIGFuZCBhbnkgdXNlciB3aXRo IGEgbmFtZSBlbmRpbmcgd2l0aCAidGVzdCIuCisjCisjIFRZUEUgIERBVEFCQVNFICAgICAg ICAgICAgICAgICBVU0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUREUkVTUyAg ICAgICAgICAgICAgICAgTUVUSE9ECitsb2NhbCAgIGRiMSwvXi4qdGVzdCQsdGVzdGRiICAg ICB1c2VyMSwvXi4qdGVzdCQsdGVzdHVzZXIgICAgICAgICAgL14uKnRlc3QkICAgICAgICAg ICAgICAgdHJ1c3QKKwogIyBBbGxvdyBhbnkgdXNlciBmcm9tIGFueSBob3N0IHdpdGggSVAg YWRkcmVzcyAxOTIuMTY4LjkzLnggdG8gY29ubmVjdAogIyB0byBkYXRhYmFzZSAicG9zdGdy ZXMiIGFzIHRoZSBzYW1lIHVzZXIgbmFtZSB0aGF0IGlkZW50IHJlcG9ydHMgZm9yCiAjIHRo ZSBjb25uZWN0aW9uICh0eXBpY2FsbHkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdXNlciBuYW1l KS4KQEAgLTc4NSwxNiArODA3LDE4IEBAIGhvc3QgICAgYWxsICAgICAgICAgICAgIGFsbCAg ICAgICAgICAgICAxOTIuMTY4LjEyLjEwLzMyICAgICAgICBnc3MKICMgVFlQRSAgREFUQUJB U0UgICAgICAgIFVTRVIgICAgICAgICAgICBBRERSRVNTICAgICAgICAgICAgICAgICBNRVRI T0QKIGhvc3QgICAgYWxsICAgICAgICAgICAgIGFsbCAgICAgICAgICAgICAxOTIuMTY4LjAu MC8xNiAgICAgICAgICBpZGVudCBtYXA9b21pY3JvbgogCi0jIElmIHRoZXNlIGFyZSB0aGUg b25seSB0aHJlZSBsaW5lcyBmb3IgbG9jYWwgY29ubmVjdGlvbnMsIHRoZXkgd2lsbAorIyBJ ZiB0aGVzZSBhcmUgdGhlIG9ubHkgZm91ciBsaW5lcyBmb3IgbG9jYWwgY29ubmVjdGlvbnMs IHRoZXkgd2lsbAogIyBhbGxvdyBsb2NhbCB1c2VycyB0byBjb25uZWN0IG9ubHkgdG8gdGhl aXIgb3duIGRhdGFiYXNlcyAoZGF0YWJhc2VzCi0jIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0 aGVpciBkYXRhYmFzZSB1c2VyIG5hbWUpIGV4Y2VwdCBmb3IgYWRtaW5pc3RyYXRvcnMKLSMg YW5kIG1lbWJlcnMgb2Ygcm9sZSAic3VwcG9ydCIsIHdobyBjYW4gY29ubmVjdCB0byBhbGwg ZGF0YWJhc2VzLiAgVGhlIGZpbGUKLSMgJFBHREFUQS9hZG1pbnMgY29udGFpbnMgYSBsaXN0 IG9mIG5hbWVzIG9mIGFkbWluaXN0cmF0b3JzLiAgUGFzc3dvcmRzCisjIHdpdGggdGhlIHNh bWUgbmFtZSBhcyB0aGVpciBkYXRhYmFzZSB1c2VyIG5hbWUpIGV4Y2VwdCBmb3IgYWRtaW5p c3RyYXRvcnMsCisjIHVzZXJzIGVuZGluZyB3aXRoICJoZWxwZGVzayIgYW5kIG1lbWJlcnMg b2Ygcm9sZSAic3VwcG9ydCIsCisjIHdobyBjYW4gY29ubmVjdCB0byBhbGwgZGF0YWJhc2Vz LgorIyBUaGUgZmlsZSRQR0RBVEEvYWRtaW5zIGNvbnRhaW5zIGEgbGlzdCBvZiBuYW1lcyBv ZiBhZG1pbmlzdHJhdG9ycy4gIFBhc3N3b3JkcwogIyBhcmUgcmVxdWlyZWQgaW4gYWxsIGNh c2VzLgogIwogIyBUWVBFICBEQVRBQkFTRSAgICAgICAgVVNFUiAgICAgICAgICAgIEFERFJF U1MgICAgICAgICAgICAgICAgIE1FVEhPRAogbG9jYWwgICBzYW1ldXNlciAgICAgICAgYWxs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNQogbG9jYWwgICBhbGwg ICAgICAgICAgICAgQGFkbWlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1k NQorbG9jYWwgICBhbGwgICAgICAgICAgICAgL14uKmhlbHBkZXNrJCAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1kNQogbG9jYWwgICBhbGwgICAgICAgICAgICAgK3N1cHBvcnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNQogCiAjIFRoZSBsYXN0IHR3byBsaW5l cyBhYm92ZSBjYW4gYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBsaW5lOgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgYi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwpp bmRleCA0NjM3NDI2ZDYyLi5mYzFmYjEyYmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9s aWJwcS9oYmEuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9oYmEuYwpAQCAtNjYsNiArNjYs NyBAQCB0eXBlZGVmIHN0cnVjdCBjaGVja19uZXR3b3JrX2RhdGEKIH0gY2hlY2tfbmV0d29y a19kYXRhOwogCiAKKyNkZWZpbmUgdG9rZW5faXNfcmVnZXhwKHQpCSh0LT5yZWdleCkKICNk ZWZpbmUgdG9rZW5faXNfa2V5d29yZCh0LCBrKQkoIXQtPnF1b3RlZCAmJiBzdHJjbXAodC0+ c3RyaW5nLCBrKSA9PSAwKQogI2RlZmluZSB0b2tlbl9tYXRjaGVzKHQsIGspICAoc3RyY21w KHQtPnN0cmluZywgaykgPT0gMCkKIApAQCAtMTE3LDYgKzExOCw5IEBAIHN0YXRpYyBMaXN0 ICp0b2tlbml6ZV9pbmNfZmlsZShMaXN0ICp0b2tlbnMsIGNvbnN0IGNoYXIgKm91dGVyX2Zp bGVuYW1lLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmluY19maWxlbmFtZSwgaW50IGVsZXZl bCwgY2hhciAqKmVycl9tc2cpOwogc3RhdGljIGJvb2wgcGFyc2VfaGJhX2F1dGhfb3B0KGNo YXIgKm5hbWUsIGNoYXIgKnZhbCwgSGJhTGluZSAqaGJhbGluZSwKIAkJCQkJCQkgICBpbnQg ZWxldmVsLCBjaGFyICoqZXJyX21zZyk7CitzdGF0aWMgYm9vbCB0b2tlbl9yZWdjb21wKHJl Z2V4X3QgKnJlLCBjaGFyICpzdHJpbmcsIGNoYXIgKmZpbGVuYW1lLAorCQkJCQkJICBpbnQg bGluZV9udW0sIGNoYXIgKiplcnJfbXNnLCBpbnQgZWxldmVsKTsKK3N0YXRpYyBib29sIHRv a2VuX3JlZ2V4ZWMoY29uc3QgY2hhciAqbWF0Y2gsIHJlZ2V4X3QgKnJlKTsKIAogCiAvKgpA QCAtMjY3LDcgKzI3MSw3IEBAIG1ha2VfYXV0aF90b2tlbihjb25zdCBjaGFyICp0b2tlbiwg Ym9vbCBxdW90ZWQpCiAKIAl0b2tsZW4gPSBzdHJsZW4odG9rZW4pOwogCS8qIHdlIGNvcHkg c3RyaW5nIGludG8gc2FtZSBwYWxsb2MgYmxvY2sgYXMgdGhlIHN0cnVjdCAqLwotCWF1dGh0 b2tlbiA9IChBdXRoVG9rZW4gKikgcGFsbG9jKHNpemVvZihBdXRoVG9rZW4pICsgdG9rbGVu ICsgMSk7CisJYXV0aHRva2VuID0gKEF1dGhUb2tlbiAqKSBwYWxsb2MwKHNpemVvZihBdXRo VG9rZW4pICsgdG9rbGVuICsgMSk7CiAJYXV0aHRva2VuLT5zdHJpbmcgPSAoY2hhciAqKSBh dXRodG9rZW4gKyBzaXplb2YoQXV0aFRva2VuKTsKIAlhdXRodG9rZW4tPnF1b3RlZCA9IHF1 b3RlZDsKIAltZW1jcHkoYXV0aHRva2VuLT5zdHJpbmcsIHRva2VuLCB0b2tsZW4gKyAxKTsK QEAgLTU3NCw3ICs1NzgsOCBAQCBpc19tZW1iZXIoT2lkIHVzZXJpZCwgY29uc3QgY2hhciAq cm9sZSkKIH0KIAogLyoKLSAqIENoZWNrIEF1dGhUb2tlbiBsaXN0IGZvciBhIG1hdGNoIHRv IHJvbGUsIGFsbG93aW5nIGdyb3VwIG5hbWVzLgorICogQ2hlY2sgQXV0aFRva2VuIGxpc3Qg Zm9yIGEgbWF0Y2ggdG8gcm9sZS4KKyAqIFdlIGFyZSBhbGxvd2luZyBncm91cCBuYW1lcyBh bmQgcmVndWxhciBleHByZXNzaW9ucy4KICAqLwogc3RhdGljIGJvb2wKIGNoZWNrX3JvbGUo Y29uc3QgY2hhciAqcm9sZSwgT2lkIHJvbGVpZCwgTGlzdCAqdG9rZW5zKQpAQCAtNTg1LDEz ICs1OTAsMTggQEAgY2hlY2tfcm9sZShjb25zdCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBM aXN0ICp0b2tlbnMpCiAJZm9yZWFjaChjZWxsLCB0b2tlbnMpCiAJewogCQl0b2sgPSBsZmly c3QoY2VsbCk7Ci0JCWlmICghdG9rLT5xdW90ZWQgJiYgdG9rLT5zdHJpbmdbMF0gPT0gJysn KQorCQlpZiAoIXRva2VuX2lzX3JlZ2V4cCh0b2spKQogCQl7Ci0JCQlpZiAoaXNfbWVtYmVy KHJvbGVpZCwgdG9rLT5zdHJpbmcgKyAxKSkKKwkJCWlmICghdG9rLT5xdW90ZWQgJiYgdG9r LT5zdHJpbmdbMF0gPT0gJysnKQorCQkJeworCQkJCWlmIChpc19tZW1iZXIocm9sZWlkLCB0 b2stPnN0cmluZyArIDEpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYg KHRva2VuX21hdGNoZXModG9rLCByb2xlKSB8fAorCQkJCQkgdG9rZW5faXNfa2V5d29yZCh0 b2ssICJhbGwiKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQotCQllbHNlIGlmICh0b2tlbl9t YXRjaGVzKHRvaywgcm9sZSkgfHwKLQkJCQkgdG9rZW5faXNfa2V5d29yZCh0b2ssICJhbGwi KSkKKwkJZWxzZSBpZiAodG9rZW5fcmVnZXhlYyhyb2xlLCB0b2stPnJlZ2V4KSkKIAkJCXJl dHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CkBAIC02MTgsMjIgKzYyOCwyNyBAQCBj aGVja19kYihjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnJvbGUsIE9pZCByb2xl aWQsIExpc3QgKnRva2VucykKIAkJCWlmICh0b2tlbl9pc19rZXl3b3JkKHRvaywgInJlcGxp Y2F0aW9uIikpCiAJCQkJcmV0dXJuIHRydWU7CiAJCX0KLQkJZWxzZSBpZiAodG9rZW5faXNf a2V5d29yZCh0b2ssICJhbGwiKSkKLQkJCXJldHVybiB0cnVlOwotCQllbHNlIGlmICh0b2tl bl9pc19rZXl3b3JkKHRvaywgInNhbWV1c2VyIikpCisJCWVsc2UgaWYgKHRva2VuX2lzX2tl eXdvcmQodG9rLCAicmVwbGljYXRpb24iKSkKKwkJCWNvbnRpbnVlOwkJCS8qIG5ldmVyIG1h dGNoIHRoaXMgaWYgbm90IHdhbHNlbmRlciAqLworCQllbHNlIGlmICghdG9rZW5faXNfcmVn ZXhwKHRvaykpCiAJCXsKLQkJCWlmIChzdHJjbXAoZGJuYW1lLCByb2xlKSA9PSAwKQorCQkJ aWYgKHRva2VuX2lzX2tleXdvcmQodG9rLCAiYWxsIikpCiAJCQkJcmV0dXJuIHRydWU7Ci0J CX0KLQkJZWxzZSBpZiAodG9rZW5faXNfa2V5d29yZCh0b2ssICJzYW1lZ3JvdXAiKSB8fAot CQkJCSB0b2tlbl9pc19rZXl3b3JkKHRvaywgInNhbWVyb2xlIikpCi0JCXsKLQkJCWlmIChp c19tZW1iZXIocm9sZWlkLCBkYm5hbWUpKQorCQkJZWxzZSBpZiAodG9rZW5faXNfa2V5d29y ZCh0b2ssICJzYW1ldXNlciIpKQorCQkJeworCQkJCWlmIChzdHJjbXAoZGJuYW1lLCByb2xl KSA9PSAwKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKHRva2VuX2lz X2tleXdvcmQodG9rLCAic2FtZWdyb3VwIikgfHwKKwkJCQkJIHRva2VuX2lzX2tleXdvcmQo dG9rLCAic2FtZXJvbGUiKSkKKwkJCXsKKwkJCQlpZiAoaXNfbWVtYmVyKHJvbGVpZCwgZGJu YW1lKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQllbHNlIGlmICh0b2tlbl9tYXRj aGVzKHRvaywgZGJuYW1lKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQotCQllbHNlIGlmICh0 b2tlbl9pc19rZXl3b3JkKHRvaywgInJlcGxpY2F0aW9uIikpCi0JCQljb250aW51ZTsJCQkv KiBuZXZlciBtYXRjaCB0aGlzIGlmIG5vdCB3YWxzZW5kZXIgKi8KLQkJZWxzZSBpZiAodG9r ZW5fbWF0Y2hlcyh0b2ssIGRibmFtZSkpCisJCWVsc2UgaWYgKHRva2VuX3JlZ2V4ZWMoZGJu YW1lLCB0b2stPnJlZ2V4KSkKIAkJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7 CkBAIC02ODEsNyArNjk2LDcgQEAgaG9zdG5hbWVfbWF0Y2goY29uc3QgY2hhciAqcGF0dGVy biwgY29uc3QgY2hhciAqYWN0dWFsX2hvc3RuYW1lKQogICogQ2hlY2sgdG8gc2VlIGlmIGEg Y29ubmVjdGluZyBJUCBtYXRjaGVzIGEgZ2l2ZW4gaG9zdCBuYW1lLgogICovCiBzdGF0aWMg Ym9vbAotY2hlY2tfaG9zdG5hbWUoaGJhUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqaG9zdG5h bWUpCitjaGVja19ob3N0bmFtZShoYmFQb3J0ICpwb3J0LCBjb25zdCBBdXRoVG9rZW4gKnRv a19ob3N0bmFtZSkKIHsKIAlzdHJ1Y3QgYWRkcmluZm8gKmdhaV9yZXN1bHQsCiAJCQkgICAq Z2FpOwpAQCAtNzEyLDggKzcyNywxMyBAQCBjaGVja19ob3N0bmFtZShoYmFQb3J0ICpwb3J0 LCBjb25zdCBjaGFyICpob3N0bmFtZSkKIAkJcG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gcHN0 cmR1cChyZW1vdGVfaG9zdG5hbWUpOwogCX0KIAorCWlmICh0b2tlbl9pc19yZWdleHAodG9r X2hvc3RuYW1lKSkKKwl7CisJCWlmICghdG9rZW5fcmVnZXhlYyhwb3J0LT5yZW1vdGVfaG9z dG5hbWUsIHRva19ob3N0bmFtZS0+cmVnZXgpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KIAkv KiBOb3cgc2VlIGlmIHJlbW90ZSBob3N0IG5hbWUgbWF0Y2hlcyB0aGlzIHBnX2hiYSBsaW5l ICovCi0JaWYgKCFob3N0bmFtZV9tYXRjaChob3N0bmFtZSwgcG9ydC0+cmVtb3RlX2hvc3Ru YW1lKSkKKwllbHNlIGlmICghaG9zdG5hbWVfbWF0Y2godG9rX2hvc3RuYW1lLT5zdHJpbmcs IHBvcnQtPnJlbW90ZV9ob3N0bmFtZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIElmIHdl IGFscmVhZHkgdmVyaWZpZWQgdGhlIGZvcndhcmQgbG9va3VwLCB3ZSdyZSBkb25lICovCkBA IC03NjEsNyArNzgxLDcgQEAgY2hlY2tfaG9zdG5hbWUoaGJhUG9ydCAqcG9ydCwgY29uc3Qg Y2hhciAqaG9zdG5hbWUpCiAKIAlpZiAoIWZvdW5kKQogCQllbG9nKERFQlVHMiwgInBnX2hi YS5jb25mIGhvc3QgbmFtZSBcIiVzXCIgcmVqZWN0ZWQgYmVjYXVzZSBhZGRyZXNzIHJlc29s dXRpb24gZGlkIG5vdCByZXR1cm4gYSBtYXRjaCB3aXRoIElQIGFkZHJlc3Mgb2YgY2xpZW50 IiwKLQkJCSBob3N0bmFtZSk7CisJCQkgdG9rX2hvc3RuYW1lLT5zdHJpbmcpOwogCiAJcG9y dC0+cmVtb3RlX2hvc3RuYW1lX3Jlc29sdiA9IGZvdW5kID8gKzEgOiAtMTsKIApAQCAtOTM5 LDEzICs5NTksMTMgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExpbmUgKnRva19s aW5lLCBpbnQgZWxldmVsKQogCXN0cnVjdCBhZGRyaW5mbyAqZ2FpX3Jlc3VsdDsKIAlzdHJ1 Y3QgYWRkcmluZm8gaGludHM7CiAJaW50CQkJcmV0OwotCWNoYXIJICAgKmNpZHJfc2xhc2g7 CiAJY2hhcgkgICAqdW5zdXBhdXRoOwogCUxpc3RDZWxsICAgKmZpZWxkOwogCUxpc3QJICAg KnRva2VuczsKIAlMaXN0Q2VsbCAgICp0b2tlbmNlbGw7CiAJQXV0aFRva2VuICAqdG9rZW47 CiAJSGJhTGluZSAgICAqcGFyc2VkbGluZTsKKwljaGFyCSAgICpjaWRyX3NsYXNoID0gTlVM TDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogCiAJcGFyc2VkbGluZSA9IHBhbGxvYzAo c2l6ZW9mKEhiYUxpbmUpKTsKIAlwYXJzZWRsaW5lLT5saW5lbnVtYmVyID0gbGluZV9udW07 CkBAIC0xMDUyLDggKzEwNzIsMjYgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExp bmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCXRva2VucyA9IGxmaXJzdChmaWVsZCk7CiAJ Zm9yZWFjaCh0b2tlbmNlbGwsIHRva2VucykKIAl7Ci0JCXBhcnNlZGxpbmUtPmRhdGFiYXNl cyA9IGxhcHBlbmQocGFyc2VkbGluZS0+ZGF0YWJhc2VzLAotCQkJCQkJCQkJCWNvcHlfYXV0 aF90b2tlbihsZmlyc3QodG9rZW5jZWxsKSkpOworCQlBdXRoVG9rZW4gICp0b2sgPSBsZmly c3QodG9rZW5jZWxsKTsKKworCQl0b2sgPSBjb3B5X2F1dGhfdG9rZW4obGZpcnN0KHRva2Vu Y2VsbCkpOworCQlpZiAodG9rLT5zdHJpbmdbMF0gPT0gJy8nKQorCQl7CisJCQkvKgorCQkJ ICogV2hlbiB0b2stPnN0cmluZyBzdGFydHMgd2l0aCBhIHNsYXNoLCB0cmVhdCBpdCBhcyBh IHJlZ3VsYXIKKwkJCSAqIGV4cHJlc3Npb24uIFByZS1jb21waWxlIGl0LgorCQkJICovCisJ CQlyZWdleF90ICAgICpyZTsKKworCQkJcmUgPSAocmVnZXhfdCAqKSBwYWxsb2Moc2l6ZW9m KHJlZ2V4X3QpKTsKKwkJCWlmICh0b2tlbl9yZWdjb21wKHJlLCB0b2stPnN0cmluZyArIDEs IEhiYUZpbGVOYW1lLCBsaW5lX251bSwKKwkJCQkJCQkgIGVycl9tc2csIGVsZXZlbCkpCisJ CQkJdG9rLT5yZWdleCA9IHJlOworCQkJZWxzZQorCQkJCXJldHVybiBOVUxMOworCQl9CisK KwkJcGFyc2VkbGluZS0+ZGF0YWJhc2VzID0gbGFwcGVuZChwYXJzZWRsaW5lLT5kYXRhYmFz ZXMsIHRvayk7CiAJfQogCiAJLyogR2V0IHRoZSByb2xlcy4gKi8KQEAgLTEwNzIsOCArMTEx MCwyNiBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGlu dCBlbGV2ZWwpCiAJdG9rZW5zID0gbGZpcnN0KGZpZWxkKTsKIAlmb3JlYWNoKHRva2VuY2Vs bCwgdG9rZW5zKQogCXsKLQkJcGFyc2VkbGluZS0+cm9sZXMgPSBsYXBwZW5kKHBhcnNlZGxp bmUtPnJvbGVzLAotCQkJCQkJCQkJY29weV9hdXRoX3Rva2VuKGxmaXJzdCh0b2tlbmNlbGwp KSk7CisJCUF1dGhUb2tlbiAgKnRvayA9IGxmaXJzdCh0b2tlbmNlbGwpOworCisJCXRvayA9 IGNvcHlfYXV0aF90b2tlbihsZmlyc3QodG9rZW5jZWxsKSk7CisJCWlmICh0b2stPnN0cmlu Z1swXSA9PSAnLycpCisJCXsKKwkJCS8qCisJCQkgKiBXaGVuIHRvay0+c3RyaW5nIHN0YXJ0 cyB3aXRoIGEgc2xhc2gsIHRyZWF0IGl0IGFzIGEgcmVndWxhcgorCQkJICogZXhwcmVzc2lv bi4gUHJlLWNvbXBpbGUgaXQuCisJCQkgKi8KKwkJCXJlZ2V4X3QgICAgKnJlOworCisJCQly ZSA9IChyZWdleF90ICopIHBhbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQkJaWYgKHRva2Vu X3JlZ2NvbXAocmUsIHRvay0+c3RyaW5nICsgMSwgSGJhRmlsZU5hbWUsIGxpbmVfbnVtLAor CQkJCQkJCSAgZXJyX21zZywgZWxldmVsKSkKKwkJCQl0b2stPnJlZ2V4ID0gcmU7CisJCQll bHNlCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlwYXJzZWRsaW5lLT5yb2xlcyA9IGxh cHBlbmQocGFyc2VkbGluZS0+cm9sZXMsIHRvayk7CiAJfQogCiAJaWYgKHBhcnNlZGxpbmUt PmNvbm50eXBlICE9IGN0TG9jYWwpCkBAIC0xMTIwLDYgKzExNzYsOCBAQCBwYXJzZV9oYmFf bGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCX0KIAkJ ZWxzZQogCQl7CisJCQlib29sCQlpc19yZWdleHAgPSB0b2tlbi0+c3RyaW5nWzBdID09ICcv JyA/IHRydWUgOiBmYWxzZTsKKwogCQkJLyogSVAgYW5kIG5ldG1hc2sgYXJlIHNwZWNpZmll ZCAqLwogCQkJcGFyc2VkbGluZS0+aXBfY21wX21ldGhvZCA9IGlwQ21wTWFzazsKIApAQCAt MTEyNyw5ICsxMTg1LDEyIEBAIHBhcnNlX2hiYV9saW5lKFRva2VuaXplZEF1dGhMaW5lICp0 b2tfbGluZSwgaW50IGVsZXZlbCkKIAkJCXN0ciA9IHBzdHJkdXAodG9rZW4tPnN0cmluZyk7 CiAKIAkJCS8qIENoZWNrIGlmIGl0IGhhcyBhIENJRFIgc3VmZml4IGFuZCBpZiBzbyBpc29s YXRlIGl0ICovCi0JCQljaWRyX3NsYXNoID0gc3RyY2hyKHN0ciwgJy8nKTsKLQkJCWlmIChj aWRyX3NsYXNoKQotCQkJCSpjaWRyX3NsYXNoID0gJ1wwJzsKKwkJCWlmICghaXNfcmVnZXhw KQorCQkJeworCQkJCWNpZHJfc2xhc2ggPSBzdHJjaHIoc3RyLCAnLycpOworCQkJCWlmIChj aWRyX3NsYXNoKQorCQkJCQkqY2lkcl9zbGFzaCA9ICdcMCc7CisJCQl9CiAKIAkJCS8qIEdl dCB0aGUgSVAgYWRkcmVzcyBlaXRoZXIgd2F5ICovCiAJCQloaW50cy5haV9mbGFncyA9IEFJ X05VTUVSSUNIT1NUOwpAQCAtMTE0OSw3ICsxMjEwLDE0IEBAIHBhcnNlX2hiYV9saW5lKFRv a2VuaXplZEF1dGhMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKIAkJCQlwYXJzZWRsaW5l LT5hZGRybGVuID0gZ2FpX3Jlc3VsdC0+YWlfYWRkcmxlbjsKIAkJCX0KIAkJCWVsc2UgaWYg KHJldCA9PSBFQUlfTk9OQU1FKQotCQkJCXBhcnNlZGxpbmUtPmhvc3RuYW1lID0gc3RyOwor CQkJeworCQkJCS8qCisJCQkJICogVGhpcyBpcyBvayB0byBjb3B5IHRoZSB0b2tlbi0+c3Ry aW5nIGFuZCBub3Qgc3RyIGhlcmUsIGFzCisJCQkJICogd2UnbGwgZXJyb3IgYW5kIHJlcG9y dCAic3BlY2lmeWluZyBib3RoIGhvc3QgbmFtZSBhbmQgQ0lEUgorCQkJCSAqIG1hc2sgaXMg aW52YWxpZCIgYmVsb3cgc2hvdWxkIHRoZXkgZGlmZmVyLgorCQkJCSAqLworCQkJCXBhcnNl ZGxpbmUtPnRva19ob3N0bmFtZSA9ICpjb3B5X2F1dGhfdG9rZW4odG9rZW4pOworCQkJfQog CQkJZWxzZQogCQkJewogCQkJCWVyZXBvcnQoZWxldmVsLApAQCAtMTE2OCw5ICsxMjM2LDkg QEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExpbmUgKnRva19saW5lLCBpbnQgZWxl dmVsKQogCQkJcGdfZnJlZWFkZHJpbmZvX2FsbChoaW50cy5haV9mYW1pbHksIGdhaV9yZXN1 bHQpOwogCiAJCQkvKiBHZXQgdGhlIG5ldG1hc2sgKi8KLQkJCWlmIChjaWRyX3NsYXNoKQor CQkJaWYgKGNpZHJfc2xhc2ggJiYgIWlzX3JlZ2V4cCkKIAkJCXsKLQkJCQlpZiAocGFyc2Vk bGluZS0+aG9zdG5hbWUpCisJCQkJaWYgKHBhcnNlZGxpbmUtPnRva19ob3N0bmFtZS5zdHJp bmcpCiAJCQkJewogCQkJCQllcmVwb3J0KGVsZXZlbCwKIAkJCQkJCQkoZXJyY29kZShFUlJD T0RFX0NPTkZJR19GSUxFX0VSUk9SKSwKQEAgLTExOTksNyArMTI2Nyw3IEBAIHBhcnNlX2hi YV9saW5lKFRva2VuaXplZEF1dGhMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKIAkJCQlw YXJzZWRsaW5lLT5tYXNrbGVuID0gcGFyc2VkbGluZS0+YWRkcmxlbjsKIAkJCQlwZnJlZShz dHIpOwogCQkJfQotCQkJZWxzZSBpZiAoIXBhcnNlZGxpbmUtPmhvc3RuYW1lKQorCQkJZWxz ZSBpZiAoIXBhcnNlZGxpbmUtPnRva19ob3N0bmFtZS5zdHJpbmcgJiYgIWlzX3JlZ2V4cCkK IAkJCXsKIAkJCQkvKiBSZWFkIHRoZSBtYXNrIGZpZWxkLiAqLwogCQkJCXBmcmVlKHN0cik7 CkBAIC0xMjYxLDYgKzEzMjksMjIgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExp bmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJ CQl9CisJCQllbHNlIGlmIChpc19yZWdleHApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXaGVu IHRva2VuLT5zdHJpbmcgc3RhcnRzIHdpdGggYSBzbGFzaCwgdHJlYXQgaXQgYXMgYQorCQkJ CSAqIHJlZ3VsYXIgZXhwcmVzc2lvbi4gUHJlLWNvbXBpbGUgaXQuCisJCQkJICovCisJCQkJ cmVnZXhfdCAgICAqcmU7CisKKwkJCQlyZSA9IChyZWdleF90ICopIHBhbGxvYyhzaXplb2Yo cmVnZXhfdCkpOworCQkJCWlmICghdG9rZW5fcmVnY29tcChyZSwKKwkJCQkJCQkJICAgdG9r ZW4tPnN0cmluZyArIDEsIEhiYUZpbGVOYW1lLAorCQkJCQkJCQkgICBsaW5lX251bSwgZXJy X21zZywgZWxldmVsKSkKKwkJCQkJcmV0dXJuIE5VTEw7CisKKwkJCQlwYXJzZWRsaW5lLT50 b2tfaG9zdG5hbWUucmVnZXggPSByZTsKKwkJCX0KIAkJfQogCX0JCQkJCQkJLyogIT0gY3RM b2NhbCAqLwogCkBAIC0yMTMyLDEwICsyMjE2LDExIEBAIGNoZWNrX2hiYShoYmFQb3J0ICpw b3J0KQogCQkJc3dpdGNoIChoYmEtPmlwX2NtcF9tZXRob2QpCiAJCQl7CiAJCQkJY2FzZSBp cENtcE1hc2s6Ci0JCQkJCWlmIChoYmEtPmhvc3RuYW1lKQorCQkJCQlpZiAoaGJhLT50b2tf aG9zdG5hbWUuc3RyaW5nIHx8IGhiYS0+dG9rX2hvc3RuYW1lLnJlZ2V4KQogCQkJCQl7CiAJ CQkJCQlpZiAoIWNoZWNrX2hvc3RuYW1lKHBvcnQsCi0JCQkJCQkJCQkJCWhiYS0+aG9zdG5h bWUpKQorCQkJCQkJCQkJCQkmaGJhLT50b2tfaG9zdG5hbWUpKQorCiAJCQkJCQkJY29udGlu dWU7CiAJCQkJCX0KIAkJCQkJZWxzZQpAQCAtMjM0MiwzNCArMjQyNyw5IEBAIHBhcnNlX2lk ZW50X2xpbmUoVG9rZW5pemVkQXV0aExpbmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCQkg KiBXaGVuIHN5c3RlbSB1c2VybmFtZSBzdGFydHMgd2l0aCBhIHNsYXNoLCB0cmVhdCBpdCBh cyBhIHJlZ3VsYXIKIAkJICogZXhwcmVzc2lvbi4gUHJlLWNvbXBpbGUgaXQuCiAJCSAqLwot CQlpbnQJCQlyOwotCQlwZ193Y2hhciAgICp3c3RyOwotCQlpbnQJCQl3bGVuOwotCi0JCXdz dHIgPSBwYWxsb2MoKHN0cmxlbihwYXJzZWRsaW5lLT5pZGVudF91c2VyICsgMSkgKyAxKSAq IHNpemVvZihwZ193Y2hhcikpOwotCQl3bGVuID0gcGdfbWIyd2NoYXJfd2l0aF9sZW4ocGFy c2VkbGluZS0+aWRlbnRfdXNlciArIDEsCi0JCQkJCQkJCQl3c3RyLCBzdHJsZW4ocGFyc2Vk bGluZS0+aWRlbnRfdXNlciArIDEpKTsKLQotCQlyID0gcGdfcmVnY29tcCgmcGFyc2VkbGlu ZS0+cmUsIHdzdHIsIHdsZW4sIFJFR19BRFZBTkNFRCwgQ19DT0xMQVRJT05fT0lEKTsKLQkJ aWYgKHIpCi0JCXsKLQkJCWNoYXIJCWVycnN0clsxMDBdOwotCi0JCQlwZ19yZWdlcnJvcihy LCAmcGFyc2VkbGluZS0+cmUsIGVycnN0ciwgc2l6ZW9mKGVycnN0cikpOwotCQkJZXJlcG9y dChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9SRUdVTEFSX0VYUFJF U1NJT04pLAotCQkJCQkgZXJybXNnKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiVz XCI6ICVzIiwKLQkJCQkJCQlwYXJzZWRsaW5lLT5pZGVudF91c2VyICsgMSwgZXJyc3RyKSwK LQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNc IiIsCi0JCQkJCQkJbGluZV9udW0sIElkZW50RmlsZU5hbWUpKSk7Ci0KLQkJCSplcnJfbXNn ID0gcHNwcmludGYoImludmFsaWQgcmVndWxhciBleHByZXNzaW9uIFwiJXNcIjogJXMiLAot CQkJCQkJCQlwYXJzZWRsaW5lLT5pZGVudF91c2VyICsgMSwgZXJyc3RyKTsKLQotCQkJcGZy ZWUod3N0cik7CisJCWlmICghdG9rZW5fcmVnY29tcCgmcGFyc2VkbGluZS0+cmUsIHBhcnNl ZGxpbmUtPmlkZW50X3VzZXIgKyAxLAorCQkJCQkJICAgSWRlbnRGaWxlTmFtZSwgbGluZV9u dW0sIGVycl9tc2csIGVsZXZlbCkpCiAJCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlwZnJlZSh3 c3RyKTsKIAl9CiAKIAlyZXR1cm4gcGFyc2VkbGluZTsKQEAgLTI3MDYsMyArMjc2Niw2OCBA QCBoYmFfYXV0aG5hbWUoVXNlckF1dGggYXV0aF9tZXRob2QpCiAKIAlyZXR1cm4gVXNlckF1 dGhOYW1lW2F1dGhfbWV0aG9kXTsKIH0KKworLyoKKyAqIENvbXBpbGUgdGhlIHJlZ3VsYXIg ZXhwcmVzc2lvbiAicmUiIGFuZCByZXR1cm4gd2hldGhlciBpdCBjb21waWxlcworICogc3Vj Y2Vzc2Z1bGx5IG9yIG5vdC4KKyAqCisgKiBJZiBub3QsIHRoZSBsYXN0IDQgcGFyYW1ldGVy cyBhcmUgdXNlZCB0byBhZGQgZXh0cmEgZGV0YWlscyB3aGlsZSByZXBvcnRpbmcKKyAqIHRo ZSBlcnJvci4KKyAqLworc3RhdGljIGJvb2wKK3Rva2VuX3JlZ2NvbXAocmVnZXhfdCAqcmUs IGNoYXIgKnN0cmluZywgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lX251bSwKKwkJCSAgY2hh ciAqKmVycl9tc2csIGludCBlbGV2ZWwpCit7CisJaW50CQkJcjsKKwlwZ193Y2hhciAgICp3 c3RyOworCWludAkJCXdsZW47CisKKwl3c3RyID0gcGFsbG9jKChzdHJsZW4oc3RyaW5nKSAr IDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJd2xlbiA9IHBnX21iMndjaGFyX3dpdGhfbGVu KHN0cmluZywKKwkJCQkJCQkJd3N0ciwgc3RybGVuKHN0cmluZykpOworCisJciA9IHBnX3Jl Z2NvbXAocmUsIHdzdHIsIHdsZW4sIFJFR19BRFZBTkNFRCwgQ19DT0xMQVRJT05fT0lEKTsK KwlpZiAocikKKwl7CisJCWNoYXIJCWVycnN0clsxMDBdOworCisJCXBnX3JlZ2Vycm9yKHIs IHJlLCBlcnJzdHIsIHNpemVvZihlcnJzdHIpKTsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1JFR1VMQVJfRVhQUkVTU0lPTiksCisJCQkJIGVy cm1zZygiaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gXCIlc1wiOiAlcyIsCisJCQkJCQlz dHJpbmcsIGVycnN0ciksCisJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJh dGlvbiBmaWxlIFwiJXNcIiIsCisJCQkJCQkJbGluZV9udW0sIGZpbGVuYW1lKSkpOworCisJ CSplcnJfbXNnID0gcHNwcmludGYoImludmFsaWQgcmVndWxhciBleHByZXNzaW9uIFwiJXNc IjogJXMiLAorCQkJCQkJCXN0cmluZywgZXJyc3RyKTsKKworCQlwZnJlZSh3c3RyKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCXBmcmVlKHdzdHIpOworCXJldHVybiB0cnVlOworfQor CisvKgorICogUmV0dXJuIHdoZXRoZXIgIm1hdGNoIiBpcyBtYXRjaGluZyB0aGUgcmVndWxh ciBleHByZXNzaW9uICJyZSIgb3Igbm90LgorICovCitzdGF0aWMgYm9vbAordG9rZW5fcmVn ZXhlYyhjb25zdCBjaGFyICptYXRjaCwgcmVnZXhfdCAqcmUpCit7CisJcGdfd2NoYXIgICAq d21hdGNoc3RyOworCWludAkJCXdtYXRjaGxlbjsKKworCXdtYXRjaHN0ciA9IHBhbGxvYygo c3RybGVuKG1hdGNoKSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJd21hdGNobGVuID0g cGdfbWIyd2NoYXJfd2l0aF9sZW4obWF0Y2gsIHdtYXRjaHN0ciwgc3RybGVuKG1hdGNoKSk7 CisKKwlpZiAocGdfcmVnZXhlYyhyZSwgd21hdGNoc3RyLCB3bWF0Y2hsZW4sIDAsIE5VTEws IDAsIE5VTEwsIDApID09IFJFR19PS0FZKQorCXsKKwkJcGZyZWUod21hdGNoc3RyKTsKKwkJ cmV0dXJuIHRydWU7CisJfQorCisJcGZyZWUod21hdGNoc3RyKTsKKwlyZXR1cm4gZmFsc2U7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaGJhZnVuY3MuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jCmluZGV4IDllNTc5NDA3MWMuLmZkOTk1 ZTkxYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jCkBAIC0yNzQsMTAgKzI3NCw4 IEBAIGZpbGxfaGJhX2xpbmUoVHVwbGVzdG9yZXN0YXRlICp0dXBsZV9zdG9yZSwgVHVwbGVE ZXNjIHR1cGRlc2MsCiAJCXN3aXRjaCAoaGJhLT5pcF9jbXBfbWV0aG9kKQogCQl7CiAJCQlj YXNlIGlwQ21wTWFzazoKLQkJCQlpZiAoaGJhLT5ob3N0bmFtZSkKLQkJCQl7Ci0JCQkJCWFk ZHJzdHIgPSBoYmEtPmhvc3RuYW1lOwotCQkJCX0KKwkJCQlpZiAoaGJhLT50b2tfaG9zdG5h bWUuc3RyaW5nKQorCQkJCQlhZGRyc3RyID0gaGJhLT50b2tfaG9zdG5hbWUuc3RyaW5nOwog CQkJCWVsc2UKIAkJCQl7CiAJCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJw cS9oYmEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCmluZGV4IGQwNmRhODE4MDYuLjU5 NWQzYzVhNDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2xpYnBxL2hiYS5oCkBAIC03Nyw2ICs3NywxOSBAQCB0eXBlZGVmIGVudW0g Q2xpZW50Q2VydE5hbWUKIAljbGllbnRDZXJ0RE4KIH0gQ2xpZW50Q2VydE5hbWU7CiAKKy8q CisgKiBBIHNpbmdsZSBzdHJpbmcgdG9rZW4gbGV4ZWQgZnJvbSBhbiBhdXRoZW50aWNhdGlv biBjb25maWd1cmF0aW9uIGZpbGUKKyAqIChwZ19pZGVudC5jb25mIG9yIHBnX2hiYS5jb25m KSwgdG9nZXRoZXIgd2l0aCB3aGV0aGVyIHRoZSB0b2tlbiBoYXMKKyAqIGJlZW4gcXVvdGVk LiBJdCBtYXkgYWxzbyBjb250YWluIGEgbm9uIE5VTEwgcmVndWxhciBleHByZXNzaW9uIGlm IHRoZSBzdHJpbmcKKyAqIHN0YXJ0cyB3aXRoIGEgIi8iLgorICovCit0eXBlZGVmIHN0cnVj dCBBdXRoVG9rZW4KK3sKKwljaGFyCSAgICpzdHJpbmc7CisJYm9vbAkJcXVvdGVkOworCXJl Z2V4X3QgICAgKnJlZ2V4OworfSBBdXRoVG9rZW47CisKIHR5cGVkZWYgc3RydWN0IEhiYUxp bmUKIHsKIAlpbnQJCQlsaW5lbnVtYmVyOwpAQCAtODksNyArMTAyLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgSGJhTGluZQogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIG1hc2s7CiAJaW50CQkJ bWFza2xlbjsJCS8qIHplcm8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIG1hc2sgKi8KIAlJ UENvbXBhcmVNZXRob2QgaXBfY21wX21ldGhvZDsKLQljaGFyCSAgICpob3N0bmFtZTsKKwlB dXRoVG9rZW4JdG9rX2hvc3RuYW1lOwogCVVzZXJBdXRoCWF1dGhfbWV0aG9kOwogCWNoYXIJ ICAgKnVzZXJtYXA7CiAJY2hhcgkgICAqcGFtc2VydmljZTsKQEAgLTEzMiwxNyArMTQ1LDYg QEAgdHlwZWRlZiBzdHJ1Y3QgSWRlbnRMaW5lCiAJcmVnZXhfdAkJcmU7CiB9IElkZW50TGlu ZTsKIAotLyoKLSAqIEEgc2luZ2xlIHN0cmluZyB0b2tlbiBsZXhlZCBmcm9tIGFuIGF1dGhl bnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZQotICogKHBnX2lkZW50LmNvbmYgb3IgcGdf aGJhLmNvbmYpLCB0b2dldGhlciB3aXRoIHdoZXRoZXIgdGhlIHRva2VuIGhhcwotICogYmVl biBxdW90ZWQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IEF1dGhUb2tlbgotewotCWNoYXIJICAg KnN0cmluZzsKLQlib29sCQlxdW90ZWQ7Ci19IEF1dGhUb2tlbjsKLQogLyoKICAqIFRva2Vu aXplZEF1dGhMaW5lIHJlcHJlc2VudHMgb25lIGxpbmUgbGV4ZWQgZnJvbSBhbiBhdXRoZW50 aWNhdGlvbgogICogY29uZmlndXJhdGlvbiBmaWxlLiAgRWFjaCBpdGVtIGluIHRoZSAiZmll bGRzIiBsaXN0IGlzIGEgc3ViLWxpc3Qgb2YKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2F1dGhl bnRpY2F0aW9uL3QvMDAxX3Bhc3N3b3JkLnBsIGIvc3JjL3Rlc3QvYXV0aGVudGljYXRpb24v dC8wMDFfcGFzc3dvcmQucGwKaW5kZXggZWE2NjRkMThmNS4uMWM1NTlkZmJkYSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvYXV0aGVudGljYXRpb24vdC8wMDFfcGFzc3dvcmQucGwKKysrIGIv c3JjL3Rlc3QvYXV0aGVudGljYXRpb24vdC8wMDFfcGFzc3dvcmQucGwKQEAgLTgxLDYgKzgx LDE0IEBAICRub2RlLT5zYWZlX3BzcWwoCiAJIEdSQU5UIEFMTCBPTiBzeXN1c2VyX2RhdGEg VE8gbWQ1X3JvbGU7Iik7CiAkRU5WeyJQR1BBU1NXT1JEIn0gPSAncGFzcyc7CiAKKyMgQ3Jl YXRlIGEgcm9sZSB0aGF0IGNvbnRhaW5zIGEgY29tbWEgdG8gc3RyZXNzIHRoZSBwYXJzaW5n LgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7U0VUIHBhc3N3b3JkX2VuY3J5 cHRpb249J21kNSc7IENSRUFURSBST0xFICJtZDUscm9sZSIgTE9HSU4gUEFTU1dPUkQgJ3Bh c3MnO30KKyk7CisKKyMgQ3JlYXRlIGEgZGF0YWJhc2UgdG8gdGVzdCByZWd1bGFyIGV4cHJl c3Npb24uCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgZGF0YWJhc2Ug cmVnZXhfdGVzdGRiOyIpOworCiAjIEZvciAidHJ1c3QiIG1ldGhvZCwgYWxsIHVzZXJzIHNo b3VsZCBiZSBhYmxlIHRvIGNvbm5lY3QuIFRoZXNlIHVzZXJzIGFyZSBub3QKICMgY29uc2lk ZXJlZCB0byBiZSBhdXRoZW50aWNhdGVkLgogcmVzZXRfcGdfaGJhKCRub2RlLCAnYWxsJywg J2FsbCcsICd0cnVzdCcpOwpAQCAtMjAwLDYgKzIwOCwzOSBAQCBhcHBlbmRfdG9fZmlsZSgK IAogdGVzdF9jb25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScsICdwYXNzd29yZCBmcm9tIHBn cGFzcycsIDApOwogCisjIFRlc3Rpbmcgd2l0aCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHVz ZXJuYW1lLiBOb3RlIHRoYXQgdGhlIHRoaXJkIHJlZ2V4CisjIG1hdGNoZXMgaW4gdGhpcyBj YXNlLgorcmVzZXRfcGdfaGJhKCRub2RlLCAnYWxsJywgJy9eLipub21hdGNoLiokLCBiYWR1 c2VyLCAvXm1kLiokJywgJ3Bhc3N3b3JkJyk7Cit0ZXN0X2Nvbm4oJG5vZGUsICd1c2VyPW1k NV9yb2xlJywgJ3Bhc3N3b3JkLCBtYXRjaGluZyByZWdleHAgZm9yIHVzZXJuYW1lJywKKwkw KTsKKworIyBUaGUgdGhpcmQgcmVnZXggZG9lcyBub3QgbWF0Y2ggYW55bW9yZS4KK3Jlc2V0 X3BnX2hiYSgkbm9kZSwgJ2FsbCcsICcvXi4qbm9tYXRjaC4qJCwgYmFkdXNlciwgL15tX2Qu KiQnLCAncGFzc3dvcmQnKTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUnLAor CSdwYXNzd29yZCwgbm9uIG1hdGNoaW5nIHJlZ2V4cCBmb3IgdXNlcm5hbWUnLAorCTIsIGxv Z191bmxpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aGVudGljYXRlZDovXSk7CisKKyMgdGVz dCB3aXRoIGEgY29tbWEgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorcmVzZXRfcGdfaGJh KCRub2RlLCAnYWxsJywgJyIvXi4qNSwuKmUkIicsICdwYXNzd29yZCcpOwordGVzdF9jb25u KCRub2RlLCAndXNlcj1tZDUscm9sZScsICdwYXNzd29yZCcsICdtYXRjaGluZyByZWdleHAg Zm9yIHVzZXJuYW1lJywKKwkwKTsKKworIyBUZXN0aW5nIHdpdGggcmVndWxhciBleHByZXNz aW9uIGZvciBkYm5hbWUuIFRoZSB0aGlyZCByZWdleCBtYXRjaGVzLgorcmVzZXRfcGdfaGJh KCRub2RlLCAnL14uKm5vbWF0Y2guKiQsIGJhZGRiLCAvXnJlZ2V4X3QuKmIkJywgJ2FsbCcs CisJJ3Bhc3N3b3JkJyk7Cit0ZXN0X2Nvbm4oCisJJG5vZGUsICd1c2VyPW1kNV9yb2xlIGRi bmFtZT1yZWdleF90ZXN0ZGInLCAncGFzc3dvcmQsCisgICBtYXRjaGluZyByZWdleHAgZm9y IGRibmFtZScsIDApOworCisjIFRoZSB0aGlyZCByZWdleCBkb2VzIG5vdCBtYXRjaCBhbnlt b3JlLgorcmVzZXRfcGdfaGJhKCRub2RlLCAnL14uKm5vbWF0Y2guKiQsIGJhZGRiLCAvXnJl Z2V4X3QuKmJhJCcsCisJJ2FsbCcsICdwYXNzd29yZCcpOwordGVzdF9jb25uKAorCSRub2Rl LAorCSd1c2VyPW1kNV9yb2xlIGRibmFtZT1yZWdleF90ZXN0ZGInLAorCSdwYXNzd29yZCwg bm9uIG1hdGNoaW5nIHJlZ2V4cCBmb3IgZGJuYW1lJywKKwkyLCBsb2dfdW5saWtlID0+IFtx ci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0ZWQ6L10pOworCiB1bmxpbmsoJHBncGFzc2ZpbGUp OwogZGVsZXRlICRFTlZ7IlBHUEFTU0ZJTEUifTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv c3NsL3QvMDAyX3NjcmFtLnBsIGIvc3JjL3Rlc3Qvc3NsL3QvMDAyX3NjcmFtLnBsCmluZGV4 IGRlYWE0YWEwODYuLjQ3MWViM2UyNTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3NzbC90LzAw Ml9zY3JhbS5wbAorKysgYi9zcmMvdGVzdC9zc2wvdC8wMDJfc2NyYW0ucGwKQEAgLTIyLDcg KzIyLDggQEAgaWYgKCRFTlZ7d2l0aF9zc2x9IG5lICdvcGVuc3NsJykKIH0KIGVsc2lmICgk RU5We1BHX1RFU1RfRVhUUkF9ICF+IC9cYnNzbFxiLykKIHsKLQlwbGFuIHNraXBfYWxsID0+ ICdQb3RlbnRpYWxseSB1bnNhZmUgdGVzdCBTU0wgbm90IGVuYWJsZWQgaW4gUEdfVEVTVF9F WFRSQSc7CisJcGxhbiBza2lwX2FsbCA9PgorCSAgJ1BvdGVudGlhbGx5IHVuc2FmZSB0ZXN0 IFNTTCBub3QgZW5hYmxlZCBpbiBQR19URVNUX0VYVFJBJzsKIH0KIAogbXkgJHNzbF9zZXJ2 ZXIgPSBTU0w6OlNlcnZlci0+bmV3KCk7CkBAIC0zNyw2ICszOCwyMCBAQCBzdWIgc3dpdGNo X3NlcnZlcl9jZXJ0CiAJJHNzbF9zZXJ2ZXItPnN3aXRjaF9zZXJ2ZXJfY2VydChAXyk7CiB9 CiAKKyMgRGVsZXRlIHBnX2hiYS5jb25mIGZyb20gdGhlIGdpdmVuIG5vZGUsIGFkZCBhIG5l dyBlbnRyeSB0byBpdAorIyBhbmQgdGhlbiBleGVjdXRlIGEgcmVsb2FkIHRvIHJlZnJlc2gg aXQuCitzdWIgcmVzZXRfcGdfaGJhCit7CisJbXkgJG5vZGUgICAgID0gc2hpZnQ7CisJbXkg JGhvc3RuYW1lID0gc2hpZnQ7CisKKwl1bmxpbmsoJG5vZGUtPmRhdGFfZGlyIC4gJy9wZ19o YmEuY29uZicpOworCSMganVzdCBmb3IgdGVzdGluZyBwdXJwb3NlcywgdXNlIGEgY29udGlu dWF0aW9uIGxpbmUKKwkkbm9kZS0+YXBwZW5kX2NvbmYoJ3BnX2hiYS5jb25mJywgImhvc3Qg YWxsIGFsbCAkaG9zdG5hbWUgc2NyYW0tc2hhLTI1NiIpOworCSRub2RlLT5yZWxvYWQ7CisJ cmV0dXJuOworfQorCiAKICMgVGhpcyBpcyB0aGUgaG9zdG5hbWUgdXNlZCB0byBjb25uZWN0 IHRvIHRoZSBzZXJ2ZXIuCiBteSAkU0VSVkVSSE9TVEFERFIgPSAnMTI3LjAuMC4xJzsKQEAg LTEzNiw0ICsxNTEsMjUgQEAgJG5vZGUtPmNvbm5lY3Rfb2soCiAJCXFyL2Nvbm5lY3Rpb24g YXV0aGVudGljYXRlZDogaWRlbnRpdHk9InNzbHRlc3R1c2VyIiBtZXRob2Q9c2NyYW0tc2hh LTI1Ni8KIAldKTsKIAorIyBUZXN0aW5nIHdpdGggcmVndWxhciBleHByZXNzaW9uIGZvciBo b3N0bmFtZQorU0tJUDoKK3sKKwkjIEJlaW5nIGFibGUgdG8gZG8gYSByZXZlcnNlIGxvb2t1 cCBvZiBhIGhvc3RuYW1lIG9uIFdpbmRvd3MgZm9yIGxvY2FsaG9zdAorCSMgaXMgbm90IGd1 YXJhbnRlZWQgb24gYWxsIGVudmlyb25tZW50cyBieSBkZWZhdWx0LgorCSMgU28sIHNraXAg dGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0ZXN0IGZvciBob3N0bmFtZSBvbiBXaW5kb3dzLgor CXNraXAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaG9zdG5hbWUgbm90IHRlc3RlZCBvbiBX aW5kb3dzIiwgMgorCSAgaWYgKCR3aW5kb3dzX29zKTsKKworCSMgVGVzdCByZWd1bGFyIGV4 cHJlc3Npb24gb24gaG9zdG5hbWUsIHRoaXMgb25lIG1hdGNoZXMgYW55IGhvc3QuCisJcmVz ZXRfcGdfaGJhKCRub2RlLCAnL14uKiQnKTsKKwkkbm9kZS0+Y29ubmVjdF9vaygiJGNvbW1v bl9jb25uc3RyIHVzZXI9c3NsdGVzdHVzZXIiLAorCQkiQmFzaWMgU0NSQU0gYXV0aGVudGlj YXRpb24gd2l0aCBTU0wgbWF0Y2hpbmcgcmVnZXhwIG9uIGhvc3RuYW1lIik7CisJIyBUZXN0 IHJlZ3VsYXIgZXhwcmVzc2lvbiBvbiBob3N0bmFtZSwgdGhpcyBvbmUgZG9lcyBub3QgbWF0 Y2guCisJcmVzZXRfcGdfaGJhKCRub2RlLCAnL14kJyk7CisJJG5vZGUtPmNvbm5lY3RfZmFp bHMoCisJCSIkY29tbW9uX2Nvbm5zdHIgdXNlcj1zc2x0ZXN0dXNlciIsCisJCSJCYXNpYyBT Q1JBTSBhdXRoZW50aWNhdGlvbiB3aXRoIFNTTCBub24gbWF0Y2hpbmcgcmVnZXhwIG9uIGhv c3RuYW1lIiwKKwkJbG9nX2xpa2UgPT4gW3FyL25vIHBnX2hiYS5jb25mIGVudHJ5IGZvciBo b3N0L10pOworfQorCiBkb25lX3Rlc3RpbmcoKTsK --------------iORugA1AB3ATNywXu3oJGcQ5--