Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:26679 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 78589 invoked by uid 1010); 20 Nov 2006 20:35:33 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 78574 invoked from network); 20 Nov 2006 20:35:33 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Nov 2006 20:35:33 -0000 Authentication-Results: pb1.pair.com smtp.mail=wolfshoehle@googlemail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=wolfshoehle@googlemail.com; sender-id=pass; domainkeys=good Received-SPF: pass (pb1.pair.com: domain googlemail.com designates 66.249.82.228 as permitted sender) DomainKey-Status: good X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: wolfshoehle@googlemail.com X-Host-Fingerprint: 66.249.82.228 wx-out-0506.google.com Linux 2.4/2.6 Received: from [66.249.82.228] ([66.249.82.228:19331] helo=wx-out-0506.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 30/66-33211-39112654 for ; Mon, 20 Nov 2006 15:35:33 -0500 Received: by wx-out-0506.google.com with SMTP id i27so2073880wxd for ; Mon, 20 Nov 2006 12:35:29 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=googlemail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=qRrQdQC4jAhoiosiTwQIpNtPGvP2BCiV7v8jUvAOzbCk0MScqULU/zl8ILSH60HMWbK8pxjhVDlcDG09S2qfKlKaTG3CvvsiEJ8i0kJdlDQEWAnqCE7mrea48X+4ngfrJU268GpfAp9qAg9XrlZREfCr/EBIexcVmtQ46uugD7k= Received: by 10.90.84.17 with SMTP id h17mr3881098agb.1164054927790; Mon, 20 Nov 2006 12:35:27 -0800 (PST) Received: by 10.90.93.12 with HTTP; Mon, 20 Nov 2006 12:35:26 -0800 (PST) Message-ID: <9bb5e33f0611201235m67639d8lcf4e40cf4fa8672b@mail.gmail.com> Date: Mon, 20 Nov 2006 21:35:27 +0100 To: "Wez Furlong" Cc: internals@lists.php.net In-Reply-To: <9bb5e33f0611171402u7ca7523ci382b3c07cf8e8815@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_79905_10969712.1164054927103" References: <9bb5e33f0611160505u2ac2b1dbt1b04feea4314331c@mail.gmail.com> <4e89b4260611160629o1855ed28pf37139f1576fa99b@mail.gmail.com> <9bb5e33f0611160721l6676cbe5ud0185127fad03402@mail.gmail.com> <9bb5e33f0611160745i4ef015e7i16933d7a4904a6ff@mail.gmail.com> <9bb5e33f0611160752g38cdc4acy92e0f72b9aee9c8b@mail.gmail.com> <4e89b4260611160840p19ad23acg100d9ce44655bd2c@mail.gmail.com> <9bb5e33f0611171402u7ca7523ci382b3c07cf8e8815@mail.gmail.com> Subject: Re: [PHP-DEV] Enable authorizer-feature in PDO_SQLITE From: wolfshoehle@googlemail.com ("Mario Wolff") ------=_Part_79905_10969712.1164054927103 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Any suggestions or meanings on it? Thanks, Mario 2006/11/17, Mario Wolff : > 2006/11/16, Wez Furlong : > > I think it would be better to pass in the pdo_dbh_t as the autharg to > > the C level callback and then use that to determine if any of the > > expensive work needs to be done in the callback. > > Saves the sqlite_set_authorizer recall in SetAuthorizer, Looks simpler > and cleaner. -> done > > > static int authorizer(....) > > { > > pdo_dbh_t *db; > > > > /* keep the current safemode / basedir checks "cheap" and fast */ > > if (existing safe_mode and open_base dir return SQLITE_DENY) { > > return SQLITE_DENY; > > } > > > > db = (pdo_dbh_t*)autharg; > > if (db->user_authorizer) { > > TSRMLS_FETCH(); > > What is this? I'm not familiar with the hole php-stuff, sorry! > Done by: > + pdo_dbh_t *dbh; > + pdo_sqlite_db_handle *H; > ... > + dbh=(pdo_dbh_t*)autharg; > + PDO_CONSTRUCT_CHECK; > + H = (pdo_sqlite_db_handle *)dbh->driver_data; > + > + if( H->user_authorizer ){ > > OK? > > > > ... > > > > free stuff > > } > > } > > > > You should take a look at how the pdo_sqlite_fci stuff works and adopt > > that for the authorizer callback, as it will help improve runtime > > performance there. > > Can't find usefull stuff to adopt. Can you hint me further? > > > It would also be best to register constants for the various SQLITE_XXX codes > > rather than creating strings and having the PHP code check against strings. > > This will also improve performance at runtime. > > I like talking parameters! But you are right, performance comes first! -> done > > > > Short test script: > Modified: > $data = array( 'one', 'two', 'three', 'four', 'five', 'six'); > $db = new PDO( 'sqlite::memory:'); > echo "register authorizer\n"; > $db->sqliteSetAuthorizer('auth'); > $db->exec( "CREATE TABLE strings( a)"); > $insert = $db->prepare( 'INSERT INTO strings VALUES ( ?)'); > foreach ( $data as $str) { > > $insert->execute( array( $str)); > } > $insert = null; > > if( $delete = $db->prepare( 'DELETE FROM strings where a=?')){ > if( $delete->execute(array( "six" ))){ > echo "delete done!\n"; > } > $delete = null; > }else{ > echo "delete not prepared\n"; > } > > echo "unregister authorizer\n"; > $db->sqliteSetAuthorizer(); > > if( $delete = $db->prepare( 'DELETE FROM strings where a=?')){ > if( $delete->execute(array( "six" ))){ > echo "delete done!\n"; > } > $delete = null; > }else{ > echo "delete not prepared\n"; > } > > function auth($type,$arga,$argb,$argc,$argd ){ > echo "$type\t$arga\t$argb\t$argc\t$argd\n"; > if( $type==SQLITE_DELETE ){ > return SQLITE_DENY; > } > return SQLITE_OK; > } > print_r( $db->query( 'SELECT sqlite_version( *);')->fetchAll( )); > print_r( $db->query( 'SELECT * from strings;')->fetchAll( )); > > ?> > > > > gives: > now: > register authorizer > 18 sqlite_master main > 2 strings main > 23 sqlite_master type main > 23 sqlite_master name main > 23 sqlite_master tbl_name main > 23 sqlite_master rootpage main > 23 sqlite_master sql main > 20 sqlite_master ROWID main > 20 sqlite_master name main > 20 sqlite_master rootpage main > 20 sqlite_master sql main > 20 sqlite_master tbl_name main > 18 strings main > 9 strings main > delete not prepared > unregister authorizer > delete done! > Array > ( > [0] => Array > ( > [sqlite_version( *)] => 3.3.7 > [0] => 3.3.7 > ) > > ) > Array > ( > [0] => Array > ( > [a] => one > [0] => one > ) > > [1] => Array > ( > [a] => two > [0] => two > ) > > [2] => Array > ( > [a] => three > [0] => three > ) > > [3] => Array > ( > [a] => four > [0] => four > ) > > [4] => Array > ( > [a] => five > [0] => five > ) > > ) > > Regards, > Mario > > > ------=_Part_79905_10969712.1164054927103 Content-Type: text/x-patch; name=pdo_sqlite.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_eun4zb2l Content-Disposition: attachment; filename="pdo_sqlite.diff" ZGlmZiAtdXIgcGhwLTUuMi4wL2V4dC9wZG9fc3FsaXRlL3Bkb19zcWxpdGUuYyBwaHAtNS4yLjAt bmV3L2V4dC9wZG9fc3FsaXRlL3Bkb19zcWxpdGUuYwotLS0gcGhwLTUuMi4wL2V4dC9wZG9fc3Fs aXRlL3Bkb19zcWxpdGUuYwkyMDA2LTAxLTAxIDEzOjUwOjEyLjAwMDAwMDAwMCArMDEwMAorKysg cGhwLTUuMi4wLW5ldy9leHQvcGRvX3NxbGl0ZS9wZG9fc3FsaXRlLmMJMjAwNi0xMS0xNiAyMTow MzozMy4wMDAwMDAwMDAgKzAxMDAKQEAgLTc3LDYgKzc3LDQyIEBACiAvKiB7e3sgUEhQX01JTklU X0ZVTkNUSU9OICovCiBQSFBfTUlOSVRfRlVOQ1RJT04ocGRvX3NxbGl0ZSkKIHsKKwlSRUdJU1RF Ul9MT05HX0NPTlNUQU5UKCJTUUxJVEVfQ09QWSIsICAgU1FMSVRFX0NPUFksIENPTlNUX1BFUlNJ U1RFTlQgfCBDT05TVF9DUyk7CisJUkVHSVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX0NSRUFU RV9JTkRFWCIsICAgU1FMSVRFX0NSRUFURV9JTkRFWCwgQ09OU1RfUEVSU0lTVEVOVCB8IENPTlNU X0NTKTsKKwlSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCJTUUxJVEVfQ1JFQVRFX1RBQkxFIiwgICBT UUxJVEVfQ1JFQVRFX1RBQkxFLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lT VEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCIsICAgICAgU1FMSVRF X0NSRUFURV9URU1QX0lOREVYLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lT VEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSIsICAgICAgU1FMSVRF X0NSRUFURV9URU1QX1RBQkxFLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lT VEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIiwgICAgU1FMSVRF X0NSRUFURV9URU1QX1RSSUdHRVIsIENPTlNUX1BFUlNJU1RFTlQgfCBDT05TVF9DUyk7CisJUkVH SVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX0NSRUFURV9URU1QX1ZJRVciLCAgICAgICBTUUxJ VEVfQ1JFQVRFX1RFTVBfVklFVywgQ09OU1RfUEVSU0lTVEVOVCB8IENPTlNUX0NTKTsKKwlSRUdJ U1RFUl9MT05HX0NPTlNUQU5UKCJTUUxJVEVfQ1JFQVRFX1RSSUdHRVIiLCBTUUxJVEVfQ1JFQVRF X1RSSUdHRVIsIENPTlNUX1BFUlNJU1RFTlQgfCBDT05TVF9DUyk7CisJUkVHSVNURVJfTE9OR19D T05TVEFOVCgiU1FMSVRFX0NSRUFURV9WSUVXIiwgICAgU1FMSVRFX0NSRUFURV9WSUVXLCBDT05T VF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElU RV9ERUxFVEUiLCBTUUxJVEVfREVMRVRFLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOwor CVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9EUk9QX0lOREVYIiwgICAgIFNRTElURV9E Uk9QX0lOREVYLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdf Q09OU1RBTlQoIlNRTElURV9EUk9QX1RBQkxFIiwgICAgIFNRTElURV9EUk9QX1RBQkxFLCBDT05T VF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElU RV9EUk9QX1RFTVBfSU5ERVgiLCAgICAgICAgU1FMSVRFX0RST1BfVEVNUF9JTkRFWCwgQ09OU1Rf UEVSU0lTVEVOVCB8IENPTlNUX0NTKTsKKwlSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCJTUUxJVEVf RFJPUF9URU1QX1RBQkxFIiwgICAgICAgIFNRTElURV9EUk9QX1RFTVBfVEFCTEUsIENPTlNUX1BF UlNJU1RFTlQgfCBDT05TVF9DUyk7CisJUkVHSVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX0RS T1BfVEVNUF9UUklHR0VSIiwgICAgICBTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIsIENPTlNUX1BF UlNJU1RFTlQgfCBDT05TVF9DUyk7CisJUkVHSVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX0RS T1BfVEVNUF9WSUVXIiwgU1FMSVRFX0RST1BfVEVNUF9WSUVXLCBDT05TVF9QRVJTSVNURU5UIHwg Q09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9EUk9QX1RSSUdHRVIi LCAgIFNRTElURV9EUk9QX1RSSUdHRVIsIENPTlNUX1BFUlNJU1RFTlQgfCBDT05TVF9DUyk7CisJ UkVHSVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX0RST1BfVklFVyIsICAgICAgU1FMSVRFX0RS T1BfVklFVywgQ09OU1RfUEVSU0lTVEVOVCB8IENPTlNUX0NTKTsKKwlSRUdJU1RFUl9MT05HX0NP TlNUQU5UKCJTUUxJVEVfSU5TRVJUIiwgU1FMSVRFX0lOU0VSVCwgQ09OU1RfUEVSU0lTVEVOVCB8 IENPTlNUX0NTKTsKKwlSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCJTUUxJVEVfUFJBR01BIiwgU1FM SVRFX1BSQUdNQSwgQ09OU1RfUEVSU0lTVEVOVCB8IENPTlNUX0NTKTsKKwlSRUdJU1RFUl9MT05H X0NPTlNUQU5UKCJTUUxJVEVfUkVBRCIsICAgU1FMSVRFX1JFQUQsIENPTlNUX1BFUlNJU1RFTlQg fCBDT05TVF9DUyk7CisJUkVHSVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX1NFTEVDVCIsIFNR TElURV9TRUxFQ1QsIENPTlNUX1BFUlNJU1RFTlQgfCBDT05TVF9DUyk7CisJUkVHSVNURVJfTE9O R19DT05TVEFOVCgiU1FMSVRFX1RSQU5TQUNUSU9OIiwgICAgU1FMSVRFX1RSQU5TQUNUSU9OLCBD T05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNR TElURV9VUERBVEUiLCBTUUxJVEVfVVBEQVRFLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1Mp OworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9BVFRBQ0giLCBTUUxJVEVfQVRUQUNI LCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQo IlNRTElURV9ERVRBQ0giLCBTUUxJVEVfREVUQUNILCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1Rf Q1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElURV9BTFRFUl9UQUJMRSIsICAgIFNR TElURV9BTFRFUl9UQUJMRSwgQ09OU1RfUEVSU0lTVEVOVCB8IENPTlNUX0NTKTsKKwlSRUdJU1RF Ul9MT05HX0NPTlNUQU5UKCJTUUxJVEVfUkVJTkRFWCIsICAgICAgICBTUUxJVEVfUkVJTkRFWCwg Q09OU1RfUEVSU0lTVEVOVCB8IENPTlNUX0NTKTsKKwlSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCJT UUxJVEVfQU5BTFlaRSIsICAgICAgICBTUUxJVEVfQU5BTFlaRSwgQ09OU1RfUEVSU0lTVEVOVCB8 IENPTlNUX0NTKTsKKwlSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCJTUUxJVEVfQ1JFQVRFX1ZUQUJM RSIsICBTUUxJVEVfQ1JFQVRFX1ZUQUJMRSwgQ09OU1RfUEVSU0lTVEVOVCB8IENPTlNUX0NTKTsK KwlSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCJTUUxJVEVfRFJPUF9WVEFCTEUiLCAgICBTUUxJVEVf RFJPUF9WVEFCTEUsIENPTlNUX1BFUlNJU1RFTlQgfCBDT05TVF9DUyk7CisJLy8gUkVHSVNURVJf TE9OR19DT05TVEFOVCgiU1FMSVRFX0ZVTkNUSU9OIiwgICAgICAgU1FMSVRFX0ZVTkNUSU9OLCBD T05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNR TElURV9PSyIsICAgICBTUUxJVEVfT0ssIENPTlNUX1BFUlNJU1RFTlQgfCBDT05TVF9DUyk7CisJ UkVHSVNURVJfTE9OR19DT05TVEFOVCgiU1FMSVRFX0RFTlkiLCAgIFNRTElURV9ERU5ZLCBDT05T VF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOworCVJFR0lTVEVSX0xPTkdfQ09OU1RBTlQoIlNRTElU RV9JR05PUkUiLCBTUUxJVEVfSUdOT1JFLCBDT05TVF9QRVJTSVNURU5UIHwgQ09OU1RfQ1MpOwor CiAJcmV0dXJuIHBocF9wZG9fcmVnaXN0ZXJfZHJpdmVyKCZwZG9fc3FsaXRlX2RyaXZlcik7CiB9 CiAvKiB9fX0gKi8KZGlmZiAtdXIgcGhwLTUuMi4wL2V4dC9wZG9fc3FsaXRlL3BocF9wZG9fc3Fs aXRlX2ludC5oIHBocC01LjIuMC1uZXcvZXh0L3Bkb19zcWxpdGUvcGhwX3Bkb19zcWxpdGVfaW50 LmgKLS0tIHBocC01LjIuMC9leHQvcGRvX3NxbGl0ZS9waHBfcGRvX3NxbGl0ZV9pbnQuaAkyMDA2 LTAxLTAxIDEzOjUwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcGhwLTUuMi4wLW5ldy9leHQvcGRv X3NxbGl0ZS9waHBfcGRvX3NxbGl0ZV9pbnQuaAkyMDA2LTExLTE2IDIwOjUxOjQyLjAwMDAwMDAw MCArMDEwMApAQCAtNDksNiArNDksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXNxbGl0ZTMgKmRi OwogCXBkb19zcWxpdGVfZXJyb3JfaW5mbyBlaW5mbzsKKyAgICB6dmFsICp1c2VyX2F1dGhvcml6 ZXI7CiAJc3RydWN0IHBkb19zcWxpdGVfZnVuYyAqZnVuY3M7CiB9IHBkb19zcWxpdGVfZGJfaGFu ZGxlOwogCmRpZmYgLXVyIHBocC01LjIuMC9leHQvcGRvX3NxbGl0ZS9zcWxpdGVfZHJpdmVyLmMg cGhwLTUuMi4wLW5ldy9leHQvcGRvX3NxbGl0ZS9zcWxpdGVfZHJpdmVyLmMKLS0tIHBocC01LjIu MC9leHQvcGRvX3NxbGl0ZS9zcWxpdGVfZHJpdmVyLmMJMjAwNi0wOS0xNiAyMDozMDowMy4wMDAw MDAwMDAgKzAyMDAKKysrIHBocC01LjIuMC1uZXcvZXh0L3Bkb19zcWxpdGUvc3FsaXRlX2RyaXZl ci5jCTIwMDYtMTEtMTcgMTA6MDU6MzAuNTUyNjEzMjU2ICswMTAwCkBAIC01OTMsOSArNTkzLDU5 IEBACiAJUkVUVVJOX0ZBTFNFOwogfQogLyogfX19ICovCisKKy8qIHt7eyBib29sIFNRTGl0ZTo6 c3FsaXRlU2V0QXV0aG9yaXplciggbWl4ZWQgY2FsbGJhY2sgKQorICAgUmVnaXN0ZXJzIGEgY2Fs bGJhY2sgZm9yIGF1dGhvcml6YXRpb24gd2l0aCB0aGUgc3FsaXRlIGRiIGhhbmRsZSAqLworc3Rh dGljIFBIUF9NRVRIT0QoU1FMaXRlLCBzcWxpdGVTZXRBdXRob3JpemVyKQoreworCXp2YWwgKnVz ZXJfYXV0aG9yaXplcj1OVUxMOyAKKwlzdHJ1Y3QgcGRvX3NxbGl0ZV9mdW5jICpmdW5jOworCXp2 YWwgKmNhbGxiYWNrPU5VTEw7CisJY2hhciAqY2JuYW1lID0gTlVMTDsKKwlwZG9fZGJoX3QgKmRi aDsKKwlwZG9fc3FsaXRlX2RiX2hhbmRsZSAqSDsKKwlpbnQgcmV0OworCisJaWYgKEZBSUxVUkUg PT0gemVuZF9wYXJzZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJ8eiIs CisJCQkmY2FsbGJhY2spKSB7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwlkYmggPSB6ZW5kX29i amVjdF9zdG9yZV9nZXRfb2JqZWN0KGdldFRoaXMoKSBUU1JNTFNfQ0MpOworCVBET19DT05TVFJV Q1RfQ0hFQ0s7CisJSCA9IChwZG9fc3FsaXRlX2RiX2hhbmRsZSAqKWRiaC0+ZHJpdmVyX2RhdGE7 CisKKwlpZiggY2FsbGJhY2s9PU5VTEwgKXsKKwkJaWYgKEgtPnVzZXJfYXV0aG9yaXplciE9TlVM TCl7CisJCQlGUkVFX1pWQUwoSC0+dXNlcl9hdXRob3JpemVyKTsKKwkJCUgtPnVzZXJfYXV0aG9y aXplcj1OVUxMOworCQl9CisJCVJFVFVSTl9UUlVFOworCX0KKwkKKwlpZiAoIXplbmRfaXNfY2Fs bGFibGUoY2FsbGJhY2ssIDAsICZjYm5hbWUpKSB7CisJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBU U1JNTFNfQ0MsIEVfV0FSTklORywgImZ1bmN0aW9uICclcycgaXMgbm90IGNhbGxhYmxlIiwgY2Ju YW1lKTsKKwkJZWZyZWUoY2JuYW1lKTsKKwkJUkVUVVJOX0ZBTFNFOworCX0KKwllZnJlZShjYm5h bWUpOworCQorCisJaWYgKEgtPnVzZXJfYXV0aG9yaXplciE9TlVMTCl7CisJCUZSRUVfWlZBTChI LT51c2VyX2F1dGhvcml6ZXIpOworCX0KKwkKKwlNQUtFX1NURF9aVkFMKHVzZXJfYXV0aG9yaXpl cik7CisJWlZBTF9TVFJJTkcodXNlcl9hdXRob3JpemVyLCBjYWxsYmFjay0+dmFsdWUuc3RyLnZh bCwgMSk7CisJSC0+dXNlcl9hdXRob3JpemVyPXVzZXJfYXV0aG9yaXplcjsKKwlSRVRVUk5fVFJV RTsKK30KKy8qIH19fSAqLworCiBzdGF0aWMgemVuZF9mdW5jdGlvbl9lbnRyeSBkYmhfbWV0aG9k c1tdID0gewogCVBIUF9NRShTUUxpdGUsIHNxbGl0ZUNyZWF0ZUZ1bmN0aW9uLCBOVUxMLCBaRU5E X0FDQ19QVUJMSUMpCiAJUEhQX01FKFNRTGl0ZSwgc3FsaXRlQ3JlYXRlQWdncmVnYXRlLCBOVUxM LCBaRU5EX0FDQ19QVUJMSUMpCisJUEhQX01FKFNRTGl0ZSwgc3FsaXRlU2V0QXV0aG9yaXplciwg TlVMTCwgWkVORF9BQ0NfUFVCTElDKQogCXtOVUxMLCBOVUxMLCBOVUxMfQogfTsKIApAQCAtNjE3 LDYgKzY2NywxMCBAQAogCSAqIHJlcXVlc3QgKi8KIAlpZiAoSCkgewogCQlwZG9fc3FsaXRlX2Ns ZWFudXBfY2FsbGJhY2tzKEggVFNSTUxTX0NDKTsKKwkJaWYoIEgtPnVzZXJfYXV0aG9yaXplciE9 MCApeworCQkJRlJFRV9aVkFMKEgtPnVzZXJfYXV0aG9yaXplcik7CisJCQlILT51c2VyX2F1dGhv cml6ZXI9TlVMTDsKKwkJfQogCX0KIH0KIApAQCAtNjYzLDMyICs3MTcsOTQgQEAKIHN0YXRpYyBp bnQgYXV0aG9yaXplcih2b2lkICphdXRoYXJnLCBpbnQgYWNjZXNzX3R5cGUsIGNvbnN0IGNoYXIg KmFyZzMsIGNvbnN0IGNoYXIgKmFyZzQsCiAJCWNvbnN0IGNoYXIgKmFyZzUsIGNvbnN0IGNoYXIg KmFyZzYpCiB7CisJcGRvX2RiaF90ICpkYmg7CisJcGRvX3NxbGl0ZV9kYl9oYW5kbGUgKkg7CisJ enZhbCAqY2FsbGJhY2s9TlVMTCwqemFjY2Vzc190eXBlLCp6YXJnMywqemFyZzQsKnphcmc1LCp6 YXJnNjsKKwlpbnQgcmV0dmFsPVNRTElURV9PSzsKIAljaGFyICpmaWxlbmFtZTsKLQlzd2l0Y2gg KGFjY2Vzc190eXBlKSB7Ci0JCWNhc2UgU1FMSVRFX0NPUFk6IHsKLQkJCVRTUk1MU19GRVRDSCgp OwotCQkJZmlsZW5hbWUgPSBtYWtlX2ZpbGVuYW1lX3NhZmUoYXJnNCBUU1JNTFNfQ0MpOwotCQkJ aWYgKCFmaWxlbmFtZSkgewotCQkJCXJldHVybiBTUUxJVEVfREVOWTsKKwlpZiAoUEcoc2FmZV9t b2RlKSB8fCAoUEcob3Blbl9iYXNlZGlyKSAmJiAqUEcob3Blbl9iYXNlZGlyKSkpIHsKKwkJc3dp dGNoIChhY2Nlc3NfdHlwZSkgeworCQkJY2FzZSBTUUxJVEVfQ09QWTogeworCQkJCVRTUk1MU19G RVRDSCgpOworCQkJCWZpbGVuYW1lID0gbWFrZV9maWxlbmFtZV9zYWZlKGFyZzQgVFNSTUxTX0ND KTsKKwkJCQlpZiAoIWZpbGVuYW1lKSB7CisJCQkJCXJldHVybiBTUUxJVEVfREVOWTsKKwkJCQl9 CisJCQkJZWZyZWUoZmlsZW5hbWUpOworCQkJfQorCQkJY2FzZSBTUUxJVEVfQVRUQUNIOiB7CisJ CQkJVFNSTUxTX0ZFVENIKCk7CisJCQkJZmlsZW5hbWUgPSBtYWtlX2ZpbGVuYW1lX3NhZmUoYXJn MyBUU1JNTFNfQ0MpOworCQkJCWlmICghZmlsZW5hbWUpIHsKKwkJCQkJcmV0dXJuIFNRTElURV9E RU5ZOworCQkJCX0KKwkJCQllZnJlZShmaWxlbmFtZSk7CiAJCQl9Ci0JCQllZnJlZShmaWxlbmFt ZSk7Ci0JCQlyZXR1cm4gU1FMSVRFX09LOwogCQl9Ci0KLQkJY2FzZSBTUUxJVEVfQVRUQUNIOiB7 Ci0JCQlUU1JNTFNfRkVUQ0goKTsKLQkJCWZpbGVuYW1lID0gbWFrZV9maWxlbmFtZV9zYWZlKGFy ZzMgVFNSTUxTX0NDKTsKLQkJCWlmICghZmlsZW5hbWUpIHsKLQkJCQlyZXR1cm4gU1FMSVRFX0RF Tlk7CisJfQorCWRiaD0ocGRvX2RiaF90KilhdXRoYXJnOworCVBET19DT05TVFJVQ1RfQ0hFQ0s7 CisJSCA9IChwZG9fc3FsaXRlX2RiX2hhbmRsZSAqKWRiaC0+ZHJpdmVyX2RhdGE7CisJCisJaWYo IEgtPnVzZXJfYXV0aG9yaXplciApeworCQljYWxsYmFjaz0oenZhbCopSC0+dXNlcl9hdXRob3Jp emVyOworCQl6dmFsICoqYXJnc1s1XTsKKwkJemVuZF9mY2FsbF9pbmZvX2NhY2hlIGZjaV9jYWNo ZSA9IGVtcHR5X2ZjYWxsX2luZm9fY2FjaGU7CisJCXp2YWwgKnJlc3VsdCA9IE5VTEw7CisJCXpl bmRfZmNhbGxfaW5mbyBmY2k7CisJCQorCQlNQUtFX1NURF9aVkFMKHphY2Nlc3NfdHlwZSk7CisJ CVpWQUxfTE9ORyh6YWNjZXNzX3R5cGUsYWNjZXNzX3R5cGUpOworCQlhcmdzWzBdPSZ6YWNjZXNz X3R5cGU7CisKKwkJTUFLRV9TVERfWlZBTCh6YXJnMyk7CisJCVpWQUxfU1RSSU5HKHphcmczLGFy ZzM/KGNoYXIqKWFyZzM6IiIsIDEpOworCQlhcmdzWzFdPSZ6YXJnMzsKKwkJCisJCU1BS0VfU1RE X1pWQUwoemFyZzQpOworCQlaVkFMX1NUUklORyh6YXJnNCxhcmc0PyhjaGFyKilhcmc0OiIiLCAx KTsKKwkJYXJnc1syXT0memFyZzQ7CisJCQorCQlNQUtFX1NURF9aVkFMKHphcmc1KTsKKwkJWlZB TF9TVFJJTkcoemFyZzUsYXJnNT8oY2hhciopYXJnNToiIiwgMSk7CisJCWFyZ3NbM109Jnphcmc1 OworCQkKKwkJTUFLRV9TVERfWlZBTCh6YXJnNik7CisJCVpWQUxfU1RSSU5HKHphcmc2LGFyZzY/ KGNoYXIqKWFyZzY6IiIsIDEpOworCQlhcmdzWzRdPSZ6YXJnNjsKKwkJCisJCWZjaS5zaXplID0g c2l6ZW9mKGZjaSk7CisJCWZjaS5mdW5jdGlvbl90YWJsZSA9IEVHKGZ1bmN0aW9uX3RhYmxlKTsK KwkJZmNpLmZ1bmN0aW9uX25hbWUgPSBjYWxsYmFjazsKKwkJZmNpLnN5bWJvbF90YWJsZSA9IE5V TEw7CisJCWZjaS5vYmplY3RfcHAgPSBOVUxMOworCQlmY2kucmV0dmFsX3B0cl9wdHIgPSAmcmVz dWx0OworCQlmY2kucGFyYW1fY291bnQgPSA1OworCQlmY2kucGFyYW1zID0gYXJnczsKKwkJZmNp Lm5vX3NlcGFyYXRpb24gPSAwOworCQkKKwkJaWYgKHplbmRfY2FsbF9mdW5jdGlvbigmZmNpLCAm ZmNpX2NhY2hlIFRTUk1MU19DQykgPT0gU1VDQ0VTUyAmJiByZXN1bHQpIHsKKwkJCWlmKCByZXN1 bHQtPnR5cGU9PUlTX0JPT0wgKXsKKwkJCQlyZXR2YWw9KHJlc3VsdC0+dmFsdWUubHZhbD09MCk7 CisJCQl9ZWxzZSBpZiggcmVzdWx0LT50eXBlPT1JU19MT05HICl7CisJCQkJcmV0dmFsPXJlc3Vs dC0+dmFsdWUubHZhbDsKKwkJCX1lbHNleworCQkJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JN TFNfQ0MsIEVfV0FSTklORywgImludmFsaWQgcmV0dXJuIGZyb20gYXV0aG9yaXplciwgbmVlZCBi b29sIG9yIGludCIpOworCQkJCXJldHZhbD1TUUxJVEVfREVOWTsKIAkJCX0KLQkJCWVmcmVlKGZp bGVuYW1lKTsKLQkJCXJldHVybiBTUUxJVEVfT0s7CisJCX0gZWxzZSB7CisJCQlwaHBfZXJyb3Jf ZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJBbiBlcnJvciBvY2N1cnJlZCB3aGls ZSBpbnZva2luZyB0aGUgcmVkdWN0aW9uIGNhbGxiYWNrIik7CisJCQlyZXR2YWw9U1FMSVRFX0RF Tlk7CiAJCX0KLQotCQlkZWZhdWx0OgotCQkJLyogYWNjZXNzIGFsbG93ZWQgKi8KLQkJCXJldHVy biBTUUxJVEVfT0s7CisJCQorCQlGUkVFX1pWQUwoemFjY2Vzc190eXBlKTsKKwkJRlJFRV9aVkFM KHphcmczKTsKKwkJRlJFRV9aVkFMKHphcmc0KTsKKwkJRlJFRV9aVkFMKHphcmc1KTsKKwkJRlJF RV9aVkFMKHphcmc2KTsKKwkJCiAJfQorCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQg cGRvX3NxbGl0ZV9oYW5kbGVfZmFjdG9yeShwZG9fZGJoX3QgKmRiaCwgenZhbCAqZHJpdmVyX29w dGlvbnMgVFNSTUxTX0RDKSAvKiB7e3sgKi8KQEAgLTcwMiw2ICs4MTgsNyBAQAogCQogCUgtPmVp bmZvLmVycmNvZGUgPSAwOwogCUgtPmVpbmZvLmVycm1zZyA9IE5VTEw7CisJSC0+dXNlcl9hdXRo b3JpemVyID0gTlVMTDsKIAlkYmgtPmRyaXZlcl9kYXRhID0gSDsKIAogCWZpbGVuYW1lID0gbWFr ZV9maWxlbmFtZV9zYWZlKGRiaC0+ZGF0YV9zb3VyY2UgVFNSTUxTX0NDKTsKQEAgLTcyMSw5ICs4 MzgsNyBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JaWYgKFBHKHNhZmVfbW9kZSkgfHwgKFBH KG9wZW5fYmFzZWRpcikgJiYgKlBHKG9wZW5fYmFzZWRpcikpKSB7Ci0JCXNxbGl0ZTNfc2V0X2F1 dGhvcml6ZXIoSC0+ZGIsIGF1dGhvcml6ZXIsIE5VTEwpOwotCX0KKwlzcWxpdGUzX3NldF9hdXRo b3JpemVyKEgtPmRiLCBhdXRob3JpemVyLCBkYmgpOwogCiAJaWYgKGRyaXZlcl9vcHRpb25zKSB7 CiAJCXRpbWVvdXQgPSBwZG9fYXR0cl9sdmFsKGRyaXZlcl9vcHRpb25zLCBQRE9fQVRUUl9USU1F T1VULCB0aW1lb3V0IFRTUk1MU19DQyk7Cg== ------=_Part_79905_10969712.1164054927103--