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 1okUMl-0001Wb-C6 for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Oct 2022 17:57:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1okUMj-0003oi-Qz for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Oct 2022 17:57:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1okUMj-0003oZ-CO for pgsql-hackers@lists.postgresql.org; Mon, 17 Oct 2022 17:57:29 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1okUMb-0002wA-N9 for pgsql-hackers@lists.postgresql.org; Mon, 17 Oct 2022 17:57:28 +0000 Received: by mail-wm1-x333.google.com with SMTP id y10so9169795wma.0 for ; Mon, 17 Oct 2022 10:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=/U1CohfwBKPMD56Ero0+QSfgVRxHzOcQ2lui1bzuguo=; b=btc7GD+rXl/M43IPA96e/c6FXGz1l2DLW4kM6bqrJrWI54GxJrHkW6+ZbXc5jpd9f9 EcPNFIcF5O2K3B/6xSlcdbfL6n8ULj6l8hiUZAgrj9uyP9NJsyG+6kY41oZNRX3ZZqfN ouC+dFCIyr3ZJIp6J6PcB3vjnml9n77P0QL4nmHAUvg9O5sKwlKrPrdG4VORyYxXjaSZ mPnBOekoqjDE1Ap0kK+Hh14cGFnXvbiUzzocHJYlkecWSGj/57lkSD2tYqQPdTXHlF+7 UTjNYX7nZalEbi/3yWRDkF55wdyz5OE0IEfaDGIhsFja1Oh/qe1YJjebfQMAIw41oMCd NMXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/U1CohfwBKPMD56Ero0+QSfgVRxHzOcQ2lui1bzuguo=; b=TgAbr+HMWhyjy06a0m1G5w+JBz8Ao5Tn0Gu4K+oh53GuN7678MDY2USkh5w/KbDaT+ tReaC4C5Y4PJb2pqbBPa5SL3gY88YyT9qzoU7uGr2hks8mME1SdRcXtqIDA5fz0NGP6g Np+tHXr3eKgJMtccEPvbbRJl8GMB8i8ZDOAvOs1ltP9m4NCqJRbKpcKIwzAhPUYumnWv rp41WRHexXvilpQJ0g8gj4xKs3yop8ZIfSqwrKSGrlvxrnNKkL6q5Aq+qGLuQ1DWpE2r afat1sORhtuvr5n2FsgeX53HqCEmnbvGBdH3h4ruFKr1YVA12s3zUeDEZKmd9X/F8kW/ EN0A== X-Gm-Message-State: ACrzQf3lhWilAqxWlkoTX8NGpgUHUkOb0gWgHZsRjxFeYlc0HVp/DFOP +K+1C+pM/VI6t2a3FAYIYnk= X-Google-Smtp-Source: AMsMyM4atRpdwuLnckOcOtawOvYsd/GBtFHYS8RnU/RhvoDrkytXgWTe5HK0ZHVDYZMKCEAzyjzYvw== X-Received: by 2002:a05:600c:54f2:b0:3c6:bd60:5390 with SMTP id jb18-20020a05600c54f200b003c6bd605390mr19969986wmb.206.1666029439588; Mon, 17 Oct 2022 10:57:19 -0700 (PDT) Received: from [10.95.69.136] ([54.239.6.177]) by smtp.gmail.com with ESMTPSA id iv20-20020a05600c549400b003b4c40378casm17805824wmb.39.2022.10.17.10.57.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Oct 2022 10:57:18 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------5nie5CXuIrArOxYaxm1vi5xM" Message-ID: Date: Mon, 17 Oct 2022 19:56:02 +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.3 Subject: Re: Patch proposal: make use of regular expressions for the username in pg_hba.conf Content-Language: en-US To: Michael Paquier Cc: Tom Lane , Jacob Champion , PostgreSQL Hackers References: <4177827.1662684400@sss.pgh.pa.us> <572017.1663646973@sss.pgh.pa.us> <607af3c9-e45d-3941-41a2-d21065d6594b@gmail.com> 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. --------------5nie5CXuIrArOxYaxm1vi5xM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 10/14/22 7:30 AM, Michael Paquier wrote: > On Wed, Oct 12, 2022 at 08:17:14AM +0200, Drouvot, Bertrand wrote: >> Indeed, ;-) > > > I have also looked > at make_auth_token(), and wondered if it could be possible to have this > routine compile the regexes. I think that it makes sense. > This approach would not stick with > pg_ident.conf though, as we validate the fields in each line when we > put our hands on ident_user and after the base validation of a line > (number of fields, etc.). I'm not sure to get the issue here with the proposed approach and pg_ident.conf. The new attached patch proposal is making use of make_auth_token() (through copy_auth_token()) in parse_ident_line(), do you see any issue? > > The logic in charge of compiling the regular expressions could be > consolidated more. The patch refactors the logic with > token_regcomp(), uses it for the user names (ident_user in > parse_ident_line() from pg_ident.conf), then extended to the hostnames > (single item) and the role/database names (list possible in these > cases). This approach looks right to me. Once we plug in an AuthItem > to IdentLine, token_regcomp could be changed so as it takes an > AuthToken in input Right, did it that way in the attached. > - Only one code path of hba.c should call pg_regcomp() (the patch does > that), and only one code path should call pg_regexec() (two code paths > of hba.c do that with the patch, as of the need to store matching > expression). This should minimize the areas where we call > pg_mb2wchar_with_len(), for one. Right. > About this last point, token_regexec() does not include > check_ident_usermap() in its logic, and it seems to me that it should. > The difference is with the expected regmatch_t structures, so > shouldn't token_regexec be extended with two arguments as of an array > of regmatch_t and the number of elements in the array? You are right, not using token_regexec() in check_ident_usermap() in the previous patch versions was not right. That's fixed in the attached, though the substitution (if any) is still outside of token_regexec(), do you think it should be part of it? (I think that makes sense to keep it outside of it as we wont use the substitution logic for roles, databases and hostname) > > The code could be split to tackle things step-by-step: > - One refactoring patch to introduce token_regcomp() and > token_regexec() Agree. Please find attached v1-0001-token_reg-functions.patch for this first step. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------5nie5CXuIrArOxYaxm1vi5xM Content-Type: text/plain; charset=UTF-8; name="v1-0001-token_reg-functions.patch" Content-Disposition: attachment; filename="v1-0001-token_reg-functions.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jIGIvc3JjL2JhY2tlbmQvbGli cHEvaGJhLmMKaW5kZXggNDYzNzQyNmQ2Mi4uZDllZjk4MTQxYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbGlicHEvaGJhLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKQEAg LTY2LDYgKzY2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgY2hlY2tfbmV0d29ya19kYXRhCiB9IGNo ZWNrX25ldHdvcmtfZGF0YTsKIAogCisjZGVmaW5lIHRva2VuX2lzX3JlZ2V4cCh0KQkodC0+ cmVnZXgpCiAjZGVmaW5lIHRva2VuX2lzX2tleXdvcmQodCwgaykJKCF0LT5xdW90ZWQgJiYg c3RyY21wKHQtPnN0cmluZywgaykgPT0gMCkKICNkZWZpbmUgdG9rZW5fbWF0Y2hlcyh0LCBr KSAgKHN0cmNtcCh0LT5zdHJpbmcsIGspID09IDApCiAKQEAgLTExNyw2ICsxMTgsOSBAQCBz dGF0aWMgTGlzdCAqdG9rZW5pemVfaW5jX2ZpbGUoTGlzdCAqdG9rZW5zLCBjb25zdCBjaGFy ICpvdXRlcl9maWxlbmFtZSwKIAkJCQkJCQkgICBjb25zdCBjaGFyICppbmNfZmlsZW5hbWUs IGludCBlbGV2ZWwsIGNoYXIgKiplcnJfbXNnKTsKIHN0YXRpYyBib29sIHBhcnNlX2hiYV9h dXRoX29wdChjaGFyICpuYW1lLCBjaGFyICp2YWwsIEhiYUxpbmUgKmhiYWxpbmUsCiAJCQkJ CQkJICAgaW50IGVsZXZlbCwgY2hhciAqKmVycl9tc2cpOworc3RhdGljIHZvaWQgdG9rZW5f cmVnY29tcChBdXRoVG9rZW4gKnRva2VuKTsKK3N0YXRpYyBpbnQJdG9rZW5fcmVnZXhlYyhj b25zdCBjaGFyICptYXRjaCwgcmVnZXhfdCAqcmUsIHNpemVfdCBubWF0Y2gsCisJCQkJCQkg IHJlZ21hdGNoX3QgcG1hdGNoW10pOwogCiAKIC8qCkBAIC0yNjcsMTEgKzI3MSwyMSBAQCBt YWtlX2F1dGhfdG9rZW4oY29uc3QgY2hhciAqdG9rZW4sIGJvb2wgcXVvdGVkKQogCiAJdG9r bGVuID0gc3RybGVuKHRva2VuKTsKIAkvKiB3ZSBjb3B5IHN0cmluZyBpbnRvIHNhbWUgcGFs bG9jIGJsb2NrIGFzIHRoZSBzdHJ1Y3QgKi8KLQlhdXRodG9rZW4gPSAoQXV0aFRva2VuICop IHBhbGxvYyhzaXplb2YoQXV0aFRva2VuKSArIHRva2xlbiArIDEpOworCWF1dGh0b2tlbiA9 IChBdXRoVG9rZW4gKikgcGFsbG9jMChzaXplb2YoQXV0aFRva2VuKSArIHRva2xlbiArIDEp OwogCWF1dGh0b2tlbi0+c3RyaW5nID0gKGNoYXIgKikgYXV0aHRva2VuICsgc2l6ZW9mKEF1 dGhUb2tlbik7CiAJYXV0aHRva2VuLT5xdW90ZWQgPSBxdW90ZWQ7CisJYXV0aHRva2VuLT5y ZWdjb21wX3JjID0gMDsKIAltZW1jcHkoYXV0aHRva2VuLT5zdHJpbmcsIHRva2VuLCB0b2ts ZW4gKyAxKTsKIAorCWlmIChhdXRodG9rZW4tPnN0cmluZ1swXSA9PSAnLycpCisJeworCQkv KgorCQkgKiBXaGVuIHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggYSBzbGFzaCwgdHJlYXQgaXQg YXMgYSByZWd1bGFyCisJCSAqIGV4cHJlc3Npb24uIFByZS1jb21waWxlIGl0LgorCQkgKi8K KwkJdG9rZW5fcmVnY29tcChhdXRodG9rZW4pOworCX0KKwogCXJldHVybiBhdXRodG9rZW47 CiB9CiAKQEAgLTIzMjYsNTIgKzIzNDAsMzkgQEAgcGFyc2VfaWRlbnRfbGluZShUb2tlbml6 ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJdG9rZW5zID0gbGZpcnN0KGZp ZWxkKTsKIAlJREVOVF9NVUxUSV9WQUxVRSh0b2tlbnMpOwogCXRva2VuID0gbGluaXRpYWwo dG9rZW5zKTsKLQlwYXJzZWRsaW5lLT5pZGVudF91c2VyID0gcHN0cmR1cCh0b2tlbi0+c3Ry aW5nKTsKIAotCS8qIEdldCB0aGUgUEcgcm9sZW5hbWUgdG9rZW4gKi8KLQlmaWVsZCA9IGxu ZXh0KHRva19saW5lLT5maWVsZHMsIGZpZWxkKTsKLQlJREVOVF9GSUVMRF9BQlNFTlQoZmll bGQpOwotCXRva2VucyA9IGxmaXJzdChmaWVsZCk7Ci0JSURFTlRfTVVMVElfVkFMVUUodG9r ZW5zKTsKLQl0b2tlbiA9IGxpbml0aWFsKHRva2Vucyk7Ci0JcGFyc2VkbGluZS0+cGdfcm9s ZSA9IHBzdHJkdXAodG9rZW4tPnN0cmluZyk7CisJLyogQ29weSB0aGUgaWRlbnQgdXNlciB0 b2tlbiAqLworCXBhcnNlZGxpbmUtPnRva2VuID0gY29weV9hdXRoX3Rva2VuKHRva2VuKTsK IAotCWlmIChwYXJzZWRsaW5lLT5pZGVudF91c2VyWzBdID09ICcvJykKKwlpZiAocGFyc2Vk bGluZS0+dG9rZW4tPnJlZ2NvbXBfcmMpCiAJewotCQkvKgotCQkgKiBXaGVuIHN5c3RlbSB1 c2VybmFtZSBzdGFydHMgd2l0aCBhIHNsYXNoLCB0cmVhdCBpdCBhcyBhIHJlZ3VsYXIKLQkJ ICogZXhwcmVzc2lvbi4gUHJlLWNvbXBpbGUgaXQuCi0JCSAqLwotCQlpbnQJCQlyOwotCQlw Z193Y2hhciAgICp3c3RyOwotCQlpbnQJCQl3bGVuOwotCi0JCXdzdHIgPSBwYWxsb2MoKHN0 cmxlbihwYXJzZWRsaW5lLT5pZGVudF91c2VyICsgMSkgKyAxKSAqIHNpemVvZihwZ193Y2hh cikpOwotCQl3bGVuID0gcGdfbWIyd2NoYXJfd2l0aF9sZW4ocGFyc2VkbGluZS0+aWRlbnRf dXNlciArIDEsCi0JCQkJCQkJCQl3c3RyLCBzdHJsZW4ocGFyc2VkbGluZS0+aWRlbnRfdXNl ciArIDEpKTsKKwkJY2hhcgkJZXJyc3RyWzEwMF07CiAKLQkJciA9IHBnX3JlZ2NvbXAoJnBh cnNlZGxpbmUtPnJlLCB3c3RyLCB3bGVuLCBSRUdfQURWQU5DRUQsIENfQ09MTEFUSU9OX09J RCk7Ci0JCWlmIChyKQotCQl7Ci0JCQljaGFyCQllcnJzdHJbMTAwXTsKKwkJQXNzZXJ0KHRv a2VuX2lzX3JlZ2V4cChwYXJzZWRsaW5lLT50b2tlbikpOwogCi0JCQlwZ19yZWdlcnJvcihy LCAmcGFyc2VkbGluZS0+cmUsIGVycnN0ciwgc2l6ZW9mKGVycnN0cikpOwotCQkJZXJlcG9y dChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9SRUdVTEFSX0VYUFJF U1NJT04pLAotCQkJCQkgZXJybXNnKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiVz XCI6ICVzIiwKLQkJCQkJCQlwYXJzZWRsaW5lLT5pZGVudF91c2VyICsgMSwgZXJyc3RyKSwK LQkJCQkJIGVycmNvbnRleHQoImxpbmUgJWQgb2YgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNc IiIsCisJCXBnX3JlZ2Vycm9yKHBhcnNlZGxpbmUtPnRva2VuLT5yZWdjb21wX3JjLCBwYXJz ZWRsaW5lLT50b2tlbi0+cmVnZXgsCisJCQkJCWVycnN0ciwgc2l6ZW9mKGVycnN0cikpOwor CQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUkVHVUxB Ul9FWFBSRVNTSU9OKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lv biBcIiVzXCI6ICVzIiwKKwkJCQkJCXBhcnNlZGxpbmUtPnRva2VuLT5zdHJpbmcgKyAxLCBl cnJzdHIpLAorCQkJCSBlcnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmls ZSBcIiVzXCIiLAogCQkJCQkJCWxpbmVfbnVtLCBJZGVudEZpbGVOYW1lKSkpOwogCi0JCQkq ZXJyX21zZyA9IHBzcHJpbnRmKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiVzXCI6 ICVzIiwKLQkJCQkJCQkJcGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEsIGVycnN0cik7CisJ CSplcnJfbXNnID0gcHNwcmludGYoImludmFsaWQgcmVndWxhciBleHByZXNzaW9uIFwiJXNc IjogJXMiLAorCQkJCQkJCXBhcnNlZGxpbmUtPnRva2VuLT5zdHJpbmcgKyAxLCBlcnJzdHIp OwogCi0JCQlwZnJlZSh3c3RyKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXBmcmVlKHdz dHIpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBHZXQgdGhlIFBHIHJvbGVuYW1lIHRv a2VuICovCisJZmllbGQgPSBsbmV4dCh0b2tfbGluZS0+ZmllbGRzLCBmaWVsZCk7CisJSURF TlRfRklFTERfQUJTRU5UKGZpZWxkKTsKKwl0b2tlbnMgPSBsZmlyc3QoZmllbGQpOworCUlE RU5UX01VTFRJX1ZBTFVFKHRva2Vucyk7CisJdG9rZW4gPSBsaW5pdGlhbCh0b2tlbnMpOwor CXBhcnNlZGxpbmUtPnBnX3JvbGUgPSBwc3RyZHVwKHRva2VuLT5zdHJpbmcpOworCiAJcmV0 dXJuIHBhcnNlZGxpbmU7CiB9CiAKQEAgLTIzOTQsMjUgKzIzOTUsMTkgQEAgY2hlY2tfaWRl bnRfdXNlcm1hcChJZGVudExpbmUgKmlkZW50TGluZSwgY29uc3QgY2hhciAqdXNlcm1hcF9u YW1lLAogCQlyZXR1cm47CiAKIAkvKiBNYXRjaD8gKi8KLQlpZiAoaWRlbnRMaW5lLT5pZGVu dF91c2VyWzBdID09ICcvJykKKwlpZiAodG9rZW5faXNfcmVnZXhwKGlkZW50TGluZS0+dG9r ZW4pKQogCXsKIAkJLyoKLQkJICogV2hlbiBzeXN0ZW0gdXNlcm5hbWUgc3RhcnRzIHdpdGgg YSBzbGFzaCwgdHJlYXQgaXQgYXMgYSByZWd1bGFyCi0JCSAqIGV4cHJlc3Npb24uIEluIHRo aXMgY2FzZSwgd2UgcHJvY2VzcyB0aGUgc3lzdGVtIHVzZXJuYW1lIGFzIGEKLQkJICogcmVn dWxhciBleHByZXNzaW9uIHRoYXQgcmV0dXJucyBleGFjdGx5IG9uZSBtYXRjaC4gVGhpcyBp cyByZXBsYWNlZAotCQkgKiBmb3IgXDEgaW4gdGhlIGRhdGFiYXNlIHVzZXJuYW1lIHN0cmlu ZywgaWYgcHJlc2VudC4KKwkJICogUHJvY2VzcyB0aGUgc3lzdGVtIHVzZXJuYW1lIGFzIGEg cmVndWxhciBleHByZXNzaW9uIHRoYXQgcmV0dXJucworCQkgKiBleGFjdGx5IG9uZSBtYXRj aC4gVGhpcyBpcyByZXBsYWNlZCBmb3IgXDEgaW4gdGhlIGRhdGFiYXNlIHVzZXJuYW1lCisJ CSAqIHN0cmluZywgaWYgcHJlc2VudC4KIAkJICovCiAJCWludAkJCXI7CiAJCXJlZ21hdGNo X3QJbWF0Y2hlc1syXTsKLQkJcGdfd2NoYXIgICAqd3N0cjsKLQkJaW50CQkJd2xlbjsKIAkJ Y2hhcgkgICAqb2ZzOwogCQljaGFyCSAgICpyZWdleHBfcGdyb2xlOwogCi0JCXdzdHIgPSBw YWxsb2MoKHN0cmxlbihpZGVudF91c2VyKSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7Ci0J CXdsZW4gPSBwZ19tYjJ3Y2hhcl93aXRoX2xlbihpZGVudF91c2VyLCB3c3RyLCBzdHJsZW4o aWRlbnRfdXNlcikpOwotCi0JCXIgPSBwZ19yZWdleGVjKCZpZGVudExpbmUtPnJlLCB3c3Ry LCB3bGVuLCAwLCBOVUxMLCAyLCBtYXRjaGVzLCAwKTsKKwkJciA9IHRva2VuX3JlZ2V4ZWMo aWRlbnRfdXNlciwgaWRlbnRMaW5lLT50b2tlbi0+cmVnZXgsIDIsIG1hdGNoZXMpOwogCQlp ZiAocikKIAkJewogCQkJY2hhcgkJZXJyc3RyWzEwMF07CkBAIC0yNDIwLDE4ICsyNDE1LDE1 IEBAIGNoZWNrX2lkZW50X3VzZXJtYXAoSWRlbnRMaW5lICppZGVudExpbmUsIGNvbnN0IGNo YXIgKnVzZXJtYXBfbmFtZSwKIAkJCWlmIChyICE9IFJFR19OT01BVENIKQogCQkJewogCQkJ CS8qIFJFR19OT01BVENIIGlzIG5vdCBhbiBlcnJvciwgZXZlcnl0aGluZyBlbHNlIGlzICov Ci0JCQkJcGdfcmVnZXJyb3IociwgJmlkZW50TGluZS0+cmUsIGVycnN0ciwgc2l6ZW9mKGVy cnN0cikpOworCQkJCXBnX3JlZ2Vycm9yKHIsIGlkZW50TGluZS0+dG9rZW4tPnJlZ2V4LCBl cnJzdHIsIHNpemVvZihlcnJzdHIpKTsKIAkJCQllcmVwb3J0KExPRywKIAkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9SRUdVTEFSX0VYUFJFU1NJT04pLAogCQkJCQkJIGVycm1z ZygicmVndWxhciBleHByZXNzaW9uIG1hdGNoIGZvciBcIiVzXCIgZmFpbGVkOiAlcyIsCi0J CQkJCQkJCWlkZW50TGluZS0+aWRlbnRfdXNlciArIDEsIGVycnN0cikpKTsKKwkJCQkJCQkJ aWRlbnRMaW5lLT50b2tlbi0+c3RyaW5nICsgMSwgZXJyc3RyKSkpOwogCQkJCSplcnJvcl9w ID0gdHJ1ZTsKIAkJCX0KLQotCQkJcGZyZWUod3N0cik7CiAJCQlyZXR1cm47CiAJCX0KLQkJ cGZyZWUod3N0cik7CiAKIAkJaWYgKChvZnMgPSBzdHJzdHIoaWRlbnRMaW5lLT5wZ19yb2xl LCAiXFwxIikpICE9IE5VTEwpCiAJCXsKQEAgLTI0NDMsNyArMjQzNSw3IEBAIGNoZWNrX2lk ZW50X3VzZXJtYXAoSWRlbnRMaW5lICppZGVudExpbmUsIGNvbnN0IGNoYXIgKnVzZXJtYXBf bmFtZSwKIAkJCQllcmVwb3J0KExPRywKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9SRUdVTEFSX0VYUFJFU1NJT04pLAogCQkJCQkJIGVycm1zZygicmVndWxhciBleHByZXNz aW9uIFwiJXNcIiBoYXMgbm8gc3ViZXhwcmVzc2lvbnMgYXMgcmVxdWVzdGVkIGJ5IGJhY2ty ZWZlcmVuY2UgaW4gXCIlc1wiIiwKLQkJCQkJCQkJaWRlbnRMaW5lLT5pZGVudF91c2VyICsg MSwgaWRlbnRMaW5lLT5wZ19yb2xlKSkpOworCQkJCQkJCQlpZGVudExpbmUtPnRva2VuLT5z dHJpbmcgKyAxLCBpZGVudExpbmUtPnBnX3JvbGUpKSk7CiAJCQkJKmVycm9yX3AgPSB0cnVl OwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTI0OTAsMTMgKzI0ODIsMTMgQEAgY2hlY2tfaWRl bnRfdXNlcm1hcChJZGVudExpbmUgKmlkZW50TGluZSwgY29uc3QgY2hhciAqdXNlcm1hcF9u YW1lLAogCQlpZiAoY2FzZV9pbnNlbnNpdGl2ZSkKIAkJewogCQkJaWYgKHBnX3N0cmNhc2Vj bXAoaWRlbnRMaW5lLT5wZ19yb2xlLCBwZ19yb2xlKSA9PSAwICYmCi0JCQkJcGdfc3RyY2Fz ZWNtcChpZGVudExpbmUtPmlkZW50X3VzZXIsIGlkZW50X3VzZXIpID09IDApCisJCQkJcGdf c3RyY2FzZWNtcChpZGVudExpbmUtPnRva2VuLT5zdHJpbmcsIGlkZW50X3VzZXIpID09IDAp CiAJCQkJKmZvdW5kX3AgPSB0cnVlOwogCQl9CiAJCWVsc2UKIAkJewogCQkJaWYgKHN0cmNt cChpZGVudExpbmUtPnBnX3JvbGUsIHBnX3JvbGUpID09IDAgJiYKLQkJCQlzdHJjbXAoaWRl bnRMaW5lLT5pZGVudF91c2VyLCBpZGVudF91c2VyKSA9PSAwKQorCQkJCXN0cmNtcChpZGVu dExpbmUtPnRva2VuLT5zdHJpbmcsIGlkZW50X3VzZXIpID09IDApCiAJCQkJKmZvdW5kX3Ag PSB0cnVlOwogCQl9CiAJfQpAQCAtMjY0Niw4ICsyNjM4LDggQEAgbG9hZF9pZGVudCh2b2lk KQogCQlmb3JlYWNoKHBhcnNlZF9saW5lX2NlbGwsIG5ld19wYXJzZWRfbGluZXMpCiAJCXsK IAkJCW5ld2xpbmUgPSAoSWRlbnRMaW5lICopIGxmaXJzdChwYXJzZWRfbGluZV9jZWxsKTsK LQkJCWlmIChuZXdsaW5lLT5pZGVudF91c2VyWzBdID09ICcvJykKLQkJCQlwZ19yZWdmcmVl KCZuZXdsaW5lLT5yZSk7CisJCQlpZiAodG9rZW5faXNfcmVnZXhwKG5ld2xpbmUtPnRva2Vu KSkKKwkJCQlwZ19yZWdmcmVlKG5ld2xpbmUtPnRva2VuLT5yZWdleCk7CiAJCX0KIAkJTWVt b3J5Q29udGV4dERlbGV0ZShpZGVudF9jb250ZXh0KTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAt MjY1OSw4ICsyNjUxLDggQEAgbG9hZF9pZGVudCh2b2lkKQogCQlmb3JlYWNoKHBhcnNlZF9s aW5lX2NlbGwsIHBhcnNlZF9pZGVudF9saW5lcykKIAkJewogCQkJbmV3bGluZSA9IChJZGVu dExpbmUgKikgbGZpcnN0KHBhcnNlZF9saW5lX2NlbGwpOwotCQkJaWYgKG5ld2xpbmUtPmlk ZW50X3VzZXJbMF0gPT0gJy8nKQotCQkJCXBnX3JlZ2ZyZWUoJm5ld2xpbmUtPnJlKTsKKwkJ CWlmICh0b2tlbl9pc19yZWdleHAobmV3bGluZS0+dG9rZW4pKQorCQkJCXBnX3JlZ2ZyZWUo bmV3bGluZS0+dG9rZW4tPnJlZ2V4KTsKIAkJfQogCX0KIAlpZiAocGFyc2VkX2lkZW50X2Nv bnRleHQgIT0gTlVMTCkKQEAgLTI3MDYsMyArMjY5OCw0MyBAQCBoYmFfYXV0aG5hbWUoVXNl ckF1dGggYXV0aF9tZXRob2QpCiAKIAlyZXR1cm4gVXNlckF1dGhOYW1lW2F1dGhfbWV0aG9k XTsKIH0KKworLyoKKyAqIENvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAicmUiIGFu ZCByZWdpc3RlciB0aGUgY29tcGlsYXRpb24gcmV0dXJuIGNvZGUKKyAqIGluIHRoZSB0b2tl biAoc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkZWNpZGUgd2hhdCBkbyB0byB3aXRoIGl0KS4K KyAqLworc3RhdGljIHZvaWQKK3Rva2VuX3JlZ2NvbXAoQXV0aFRva2VuICp0b2tlbikKK3sK KwlwZ193Y2hhciAgICp3c3RyOworCWludAkJCXdsZW47CisKKwl0b2tlbi0+cmVnZXggPSAo cmVnZXhfdCAqKSBwYWxsb2MwKHNpemVvZihyZWdleF90KSk7CisJd3N0ciA9IHBhbGxvYygo c3RybGVuKHRva2VuLT5zdHJpbmcgKyAxKSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJ d2xlbiA9IHBnX21iMndjaGFyX3dpdGhfbGVuKHRva2VuLT5zdHJpbmcgKyAxLAorCQkJCQkJ CQl3c3RyLCBzdHJsZW4odG9rZW4tPnN0cmluZyArIDEpKTsKKworCXRva2VuLT5yZWdjb21w X3JjID0gcGdfcmVnY29tcCh0b2tlbi0+cmVnZXgsIHdzdHIsIHdsZW4sIFJFR19BRFZBTkNF RCwKKwkJCQkJCQkJICAgQ19DT0xMQVRJT05fT0lEKTsKKworCXBmcmVlKHdzdHIpOworfQor CisvKgorICogUmV0dXJuIHRoZSBwZ19yZWdleGVjKCkncyByZXN1bHQuCisgKi8KK3N0YXRp YyBpbnQKK3Rva2VuX3JlZ2V4ZWMoY29uc3QgY2hhciAqbWF0Y2gsIHJlZ2V4X3QgKnJlLCBz aXplX3Qgbm1hdGNoLCByZWdtYXRjaF90IHBtYXRjaFtdKQoreworCXBnX3djaGFyICAgKndt YXRjaHN0cjsKKwlpbnQJCQl3bWF0Y2hsZW47CisJaW50CQkJcjsKKworCXdtYXRjaHN0ciA9 IHBhbGxvYygoc3RybGVuKG1hdGNoKSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJd21h dGNobGVuID0gcGdfbWIyd2NoYXJfd2l0aF9sZW4obWF0Y2gsIHdtYXRjaHN0ciwgc3RybGVu KG1hdGNoKSk7CisKKwlyID0gcGdfcmVnZXhlYyhyZSwgd21hdGNoc3RyLCB3bWF0Y2hsZW4s IDAsIE5VTEwsIG5tYXRjaCwgcG1hdGNoLCAwKTsKKworCXBmcmVlKHdtYXRjaHN0cik7CisJ cmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaGJhZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jCmluZGV4IDllNTc5NDA3 MWMuLjU0ZjRjZmQ3MTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9oYmFmdW5jcy5jCkBAIC00Njcs NyArNDY3LDcgQEAgZmlsbF9pZGVudF9saW5lKFR1cGxlc3RvcmVzdGF0ZSAqdHVwbGVfc3Rv cmUsIFR1cGxlRGVzYyB0dXBkZXNjLAogCWlmIChpZGVudCAhPSBOVUxMKQogCXsKIAkJdmFs dWVzW2luZGV4KytdID0gQ1N0cmluZ0dldFRleHREYXR1bShpZGVudC0+dXNlcm1hcCk7Ci0J CXZhbHVlc1tpbmRleCsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oaWRlbnQtPmlkZW50X3Vz ZXIpOworCQl2YWx1ZXNbaW5kZXgrK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGlkZW50LT50 b2tlbi0+c3RyaW5nKTsKIAkJdmFsdWVzW2luZGV4KytdID0gQ1N0cmluZ0dldFRleHREYXR1 bShpZGVudC0+cGdfcm9sZSk7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2xpYnBxL2hiYS5oIGIvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgKaW5kZXggZDA2ZGE4MTgw Ni4uMjdhYmQ1YmFjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgKKysr IGIvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmgKQEAgLTc3LDYgKzc3LDIwIEBAIHR5cGVkZWYg ZW51bSBDbGllbnRDZXJ0TmFtZQogCWNsaWVudENlcnRETgogfSBDbGllbnRDZXJ0TmFtZTsK IAorLyoKKyAqIEEgc2luZ2xlIHN0cmluZyB0b2tlbiBsZXhlZCBmcm9tIGFuIGF1dGhlbnRp Y2F0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZQorICogKHBnX2lkZW50LmNvbmYgb3IgcGdfaGJh LmNvbmYpLCB0b2dldGhlciB3aXRoIHdoZXRoZXIgdGhlIHRva2VuIGhhcworICogYmVlbiBx dW90ZWQuIEl0IG1heSBhbHNvIGNvbnRhaW4gYSBub24gTlVMTCByZWd1bGFyIGV4cHJlc3Np b24gaWYgdGhlIHN0cmluZworICogc3RhcnRzIHdpdGggYSAiLyIuLCB0b2dldGhlciB3aXRo IHRoZSByZWdleCBjb21waWxhdGlvbiByZXR1cm4gY29kZS4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgQXV0aFRva2VuCit7CisJY2hhcgkgICAqc3RyaW5nOworCWJvb2wJCXF1b3RlZDsKKwly ZWdleF90ICAgICpyZWdleDsKKwlpbnQJCQlyZWdjb21wX3JjOworfSBBdXRoVG9rZW47CisK IHR5cGVkZWYgc3RydWN0IEhiYUxpbmUKIHsKIAlpbnQJCQlsaW5lbnVtYmVyOwpAQCAtMTI3 LDIyICsxNDEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSWRlbnRMaW5lCiAJaW50CQkJbGluZW51 bWJlcjsKIAogCWNoYXIJICAgKnVzZXJtYXA7Ci0JY2hhcgkgICAqaWRlbnRfdXNlcjsKIAlj aGFyCSAgICpwZ19yb2xlOwotCXJlZ2V4X3QJCXJlOworCUF1dGhUb2tlbiAgKnRva2VuOwog fSBJZGVudExpbmU7CiAKLS8qCi0gKiBBIHNpbmdsZSBzdHJpbmcgdG9rZW4gbGV4ZWQgZnJv bSBhbiBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uIGZpbGUKLSAqIChwZ19pZGVudC5j b25mIG9yIHBnX2hiYS5jb25mKSwgdG9nZXRoZXIgd2l0aCB3aGV0aGVyIHRoZSB0b2tlbiBo YXMKLSAqIGJlZW4gcXVvdGVkLgotICovCi10eXBlZGVmIHN0cnVjdCBBdXRoVG9rZW4KLXsK LQljaGFyCSAgICpzdHJpbmc7Ci0JYm9vbAkJcXVvdGVkOwotfSBBdXRoVG9rZW47Ci0KIC8q CiAgKiBUb2tlbml6ZWRBdXRoTGluZSByZXByZXNlbnRzIG9uZSBsaW5lIGxleGVkIGZyb20g YW4gYXV0aGVudGljYXRpb24KICAqIGNvbmZpZ3VyYXRpb24gZmlsZS4gIEVhY2ggaXRlbSBp biB0aGUgImZpZWxkcyIgbGlzdCBpcyBhIHN1Yi1saXN0IG9mCg== --------------5nie5CXuIrArOxYaxm1vi5xM--