From owner-freebsd-bluetooth@FreeBSD.ORG Mon Apr 13 23:40:14 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 583EE1065672 for ; Mon, 13 Apr 2009 23:40:14 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from mail-gx0-f172.google.com (mail-gx0-f172.google.com [209.85.217.172]) by mx1.freebsd.org (Postfix) with ESMTP id 0B9258FC1D for ; Mon, 13 Apr 2009 23:40:13 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by gxk20 with SMTP id 20so151571gxk.19 for ; Mon, 13 Apr 2009 16:40:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=Gx3BLNc/jGKo24jO8pBSBBNsoxtilm/f8sS033vT1oU=; b=xariknjCXiymQ0gsHHopQTak1Wza6o3glL2edOyJUzzoF0sJK+N+Vsb4riZzDILnEl hEEKEF8gEHdV7pn7nLo/Ej90db+YtNQTKCj84eRG6GZhx6078DLI4ppn0R8tn3P13T/B 2HugsC//3J/GPDlQwIDZ/UydtMge1kyYAMWsA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=uramEd8Ec+XtLAZH/5WckKuGd4wjSfCNQAUw5rgkFeHN7H5VuaHm0xQ+6fZbIYo2lM QqTmdViFWVzzdCtH+qx3D7mvOxV/gVpv9d0wD0YZuZkfxMC58RZ9vNMvWqbX+cFyBvzv 6bzZevMEIcLOsMlgOmSJuyiYBhKLeShe7msCA= MIME-Version: 1.0 Received: by 10.90.88.16 with SMTP id l16mr8945979agb.112.1239666013350; Mon, 13 Apr 2009 16:40:13 -0700 (PDT) Date: Mon, 13 Apr 2009 16:40:13 -0700 Message-ID: From: Maksim Yevmenkin To: "freebsd-bluetooth@freebsd.org" Content-Type: multipart/mixed; boundary=0016361648b35dad720467783cb8 Subject: RFC: obexapp - virtual root folder for each device X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2009 23:40:14 -0000 --0016361648b35dad720467783cb8 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit dear freebsd-bluetooth@ users, please find attached patch to obexapp port that add new feature of virtualizing root folder for each client device. this work was inspired by and based work done by 'mi' < mi -plus- thun -at- aldan -dot- algebra -dot- com> background various bluetooth obex profiles do not have notion of user credentials. that could be very inconvenient when multiple client devices want to store data on the same obex sever. the example that was given to me by 'mi' is when two people (say, wife and husband) want to back up their complete phone books onto the same server. the problem is that most devices use some well known name, such as phonebook.vcf and there is no obvious way to override it. how does it work obexapp now has new options '-R' that would turn new feature on. first, default root folder is set as it was before (see man page '-r' option). when client is connected, client's bd_addr is resolved to a human readable name via bt_gethostbyaddr(3) call. if bd_addr is resolved then obexapp will check for the subdirectory, under current root, with the resolved name. if name was not resolved or resolution has failed, then obexapp will look for a subdirectory that matches client's bd_addr, i.e. '01:02:03:04:05:06'. if that fails, then obexapp will look for "default" subdirectory. if later fails as well, connection is terminated. if virtual root is found, obexapp will chroot(2) into it. possible setup - create 'obex' user and 'obex' group - create '/var/spool/obex' (or whatever you want for default root) owned by 'obex' user/group - user 'foo' creates ~/private directory under his home directory with 0700 permissions - admin setups 'obex' directory under foo's ~/private/ directory with 0770 permissions, this directory is owned by 'obex' user. group is set to foo's group - admin setups symlink in /var/spool/obex/ called 'foo_cell' that points to ~foo/private/obex - admin adds entry in the /etc/bluetooth/hosts file to assign 'foo_cell' foo's cell phone bd_addr - admin run obexapp server as 'obexapp -s -r /var/spool/obex -R -u obex -C 1' every time foo's uses cell phone to send data to the obex server, the data will end up in foo's ~/private/obex directory. please give it a try and let me know it works. thanks, max --0016361648b35dad720467783cb8 Content-Type: text/plain; charset=US-ASCII; name="obexapp-uid3.diff.txt" Content-Disposition: attachment; filename="obexapp-uid3.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fthsl3j00 SW5kZXg6IG1haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvdXNyL2xvY2FsL2N2cy9wb3J0cy9v YmV4YXBwL21haW4uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC11IC1yMS4xMyBt YWluLmMKLS0tIG1haW4uYwkyMyBBcHIgMjAwNyAxODoyOToxOCAtMDAwMAkxLjEzCisrKyBtYWlu LmMJMTMgQXByIDIwMDkgMjE6MjU6MDggLTAwMDAKQEAgLTY1LDcgKzY1LDcgQEAKIHsKIAlzdHJ1 Y3Qgc2lnYWN0aW9uCXNhOwogCWNoYXIJCQkqZXAgPSBOVUxMLCAqcHJpX25hbWUgPSBOVUxMOwot CWludAkJCW4sIHNlcnZpY2UsIG5vbmludGVyYWN0aXZlOworCWludAkJCW4sIHNlcnZpY2UsIG5v bmludGVyYWN0aXZlLCBkZXRhY2g7CiAJY29udGV4dF90CQljb250ZXh0OwogCW9iZXhfY3RyYW5z X3QJCWN1c3RmdW5jOwogCkBAIC04Myw3ICs4Myw3IEBACiAJLyogUHJlcGFyZSBjb250ZXh0ICov CiAJbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YoY29udGV4dCkpOwogCWNvbnRleHQudGZkID0g Y29udGV4dC5zZmQgPSAtMTsKLQljb250ZXh0LmRldGFjaCA9IDE7CisJZGV0YWNoID0gMTsKIAog CWNvbnRleHQubHNfc2l6ZSA9IE9CRVhBUFBfQlVGRkVSX1NJWkU7CiAJaWYgKChjb250ZXh0Lmxz ID0gKGNoYXIgKikgbWFsbG9jKGNvbnRleHQubHNfc2l6ZSkpID09IE5VTEwpCkBAIC0xMTksNyAr MTE5LDcgQEAKIAogCS8qIFByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KIAlzZXJ2aWNl ID0gbm9uaW50ZXJhY3RpdmUgPSAwOwotCXdoaWxlICgobiA9IGdldG9wdChhcmdjLCBhcmd2LCAi YTpBOmNDOmREZmhsOm06bnI6U3N1OiIpKSAhPSAtMSkgeworCXdoaWxlICgobiA9IGdldG9wdChh cmdjLCBhcmd2LCAiYTpBOmNDOmREZmhsOm06bnI6UnNTdToiKSkgIT0gLTEpIHsKIAkJc3dpdGNo IChuKSB7CiAJCWNhc2UgJ2EnOgogCQkJaWYgKCFidF9hdG9uKG9wdGFyZywgJmNvbnRleHQucmFk ZHIpKSB7CkBAIC0xODAsNyArMTgwLDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ2QnOiAvKiBk byBub3QgZGV0YWNoIHNlcnZlciAqLwotCQkJY29udGV4dC5kZXRhY2ggPSAwOworCQkJZGV0YWNo ID0gMDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ0QnOiAvKiB1c2Ugc3RkaW4vc3Rkb3V0ICovCkBA IC0yMTcsNiArMjE3LDExIEBACiAJCQkJZXJyKDEsICJDb3VsZCBub3QgcmVhbHBhdGgoJXMpIiwg b3B0YXJnKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgJ1InOiAvKiB2aXJ0dWFsaXplIHJvb3QgZm9y IGVhY2ggZGV2aWNlICovCisJCQljb250ZXh0LnZyb290ID0gMTsKKwkJCWNvbnRleHQuc2VjdXJl ID0gMTsKKwkJCWJyZWFrOworCiAJCWNhc2UgJ3MnOiAvKiBzZXJ2ZXIgKi8KIAkJCWlmIChub25p bnRlcmFjdGl2ZSkKIAkJCQl1c2FnZShiYXNlbmFtZShhcmd2WzBdKSk7CkBAIC0yNjksMjMgKzI3 NCwxMCBAQAogCWxvZ19vcGVuKCJvYmV4YXBwIiwgcHJpX25hbWUsIDApOwogCiAJLyogRGV0YWNo IHNlcnZlciAoaWYgcmVxdWlyZWQpICovCi0JaWYgKGNvbnRleHQuc2VydmVyICYmIGNvbnRleHQu ZGV0YWNoKSB7Ci0JCXBpZF90CXBpZCA9IGZvcmsoKTsKLQotCQlpZiAocGlkID09IChwaWRfdCkg LTEpIHsKLQkJCWxvZ19lcnIoIiVzKCk6IENvdWxkIG5vdCBmb3JrLiAlcyAoJWQpIiwKLQkJCQlf X2Z1bmNfXywgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7Ci0JCQlleGl0KDEpOwotCQl9Ci0KLQkJ aWYgKHBpZCAhPSAwKQotCQkJZXhpdCgwKTsKLQotCQlpZiAoZGFlbW9uKDAsIDApIDwgMCkgewot CQkJbG9nX2VycigiJXMoKTogQ291bGQgbm90IGRhZW1vbi4gJXMgKCVkKSIsCi0JCQkJX19mdW5j X18sIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwotCQkJZXhpdCgxKTsKLQkJfQorCWlmIChjb250 ZXh0LnNlcnZlciAmJiBkZXRhY2ggJiYgZGFlbW9uKDAsIDApIDwgMCkgeworCQlsb2dfZXJyKCIl cygpOiBDb3VsZCBub3QgZGFlbW9uLiAlcyAoJWQpIiwKKwkJCV9fZnVuY19fLCBzdHJlcnJvcihl cnJubyksIGVycm5vKTsKKwkJZXhpdCgxKTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIE9CRVggKi8K SW5kZXg6IG9iZXhhcHAuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvdXNyL2xvY2FsL2N2cy9wb3J0 cy9vYmV4YXBwL29iZXhhcHAuMSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC11IC1y MS4xNSBvYmV4YXBwLjEKLS0tIG9iZXhhcHAuMQkyMSBNYXkgMjAwNyAxNTo1NTozNSAtMDAwMAkx LjE1CisrKyBvYmV4YXBwLjEJMTMgQXByIDIwMDkgMjM6MTU6MDMgLTAwMDAKQEAgLTU0LDcgKzU0 LDcgQEAKIC5BciBwYXJhbWV0ZXJzCiAuTm0KIC5GbCBzCi0uT3AgRmwgZERTaAorLk9wIEZsIGRE U1JoCiAuT3AgRmwgQSBBciBCRF9BRERSCiAuRmwgQyBBciBjaGFubmVsCiAuT3AgRmwgbSBBciBN VFUKQEAgLTE5Myw2ICsxOTMsMTIgQEAKIERlZmF1bHRzIHRvIHRoZSBtYXhpbXVtIHN1cHBvcnRl ZCB2YWx1ZS4KIC5JdCBGbCBuIAogV29yayBpbiB0aGUgbm9uLWludGVyYWN0aXZlIGNsaWVudCBt b2RlLgorLkl0IEZsIFIKK1ZpcnR1YWxpemUgcm9vdCBmb2xkZXIgZm9yIGVhY2ggY2xpZW50IGRl dmljZSBpbiBzZXJ2ZXIgbW9kZS4KK1dpbGwgYXV0b21hdGljYWxseSB0dXJuIG9uIHNlY3VyZSBt b2RlLCBpLmUuCisuRmwgUworb3B0aW9uLgorUGxlYXNlIHJlYWQgc2VjdGlvbiBiZWxvdyBmb3Ig YSBjb21wbGV0ZSBkZXNjcmlwdGlvbi4KIC5JdCBGbCByIEFyIHBhdGgKIFNwZWNpZnkgcm9vdCBm b2xkZXIuCiBEZWZhdWx0IHJvb3QgZm9sZGVyIGluIHRoZSBzZXJ2ZXIgbW9kZSBpcwpAQCAtMjE2 LDYgKzIyMiw0MyBAQAogVGhlIHZhbHVlIHNwZWNpZmllZCBtYXkgYmUgZWl0aGVyIGEgdXNlcm5h bWUgb3IgYSBudW1lcmljIHVzZXIgaWQuCiBUaGlzIG9ubHkgd29ya3MgaWYgc2VydmVyIHdhcyBz dGFydGVkIGFzIHJvb3QuCiAuRWwKKy5TaCBWSVJUVUFMIFJPT1QgRk9MREVSUworV2hlbiBhY2Nl cHRpbmcgY29ubmVjdGlvbnMgaW4gc2VydmVyIG1vZGUsIAorLk5tCit3aWxsIGF0dGVtcHQgdG8g ZmluZCBhIHN1YmRpcmVjdG9yeSB0aGF0IHdvdWxkIGFjdCBhcyBhIHZpcnR1YWwgcm9vdAorZm9s ZGVyIGZvciB0aGUgY29ubmVjdGluZyBkZXZpY2UuCitWaXJ0dWFsIHJvb3QgZm9sZGVycyBtdXN0 IHJlc2lkZSB1bmRlciBkZWZhdWx0IHJvb3QgZm9sZGVyIHdoaWNoIGlzIHNldAord2l0aAorLkZs IHIKK29wdGlvbi4KK1RoZSBydWxlcyBhcmUgYXMgZm9sbG93czoKKy5CbCAtZW51bSAtb2Zmc2V0 IGluZGVudCAtY29tcGFjdAorLkl0CisuTm0KK3dpbGwgdHJ5IHRvIHJlc29sdmUgY29ubmVjdGlu ZyBkZXZpY2UncyBCRF9BRERSIHVzaW5nCisuWHIgYnRfZ2V0aG9zdGJ5YWRkciAzCitjYWxsIGFu ZCBjaGVjayBmb3IgYSBzdWJkaXJlY3RvcnkgdGhhdCBtYXRjaGVzIHJlc29sdmVkIG5hbWUgKGlm IGFueSk7CisuSXQKKy5ObQord2lsbCBjaGVjayBmb3IgYSBzdWJkaXJlY3RvcnkgdGhhdCBtYXRj aGVzIGNvbm5lY3RpbmcgZGV2aWNlJ3MgQkRfQUREUjsKKy5JdAorLk5tCit3aWxsIGNoZWNrIGZv ciBhIHN1YmRpcmVjdG9yeSwgbmFtZWQKKy5EcSBkZWZhdWx0IDsKKy5FbAorSWYgbm9uZSBvZiB0 aGUgYWJvdmUgbWF0Y2hlcywgdGhlbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50IGlzIHRl cm1pbmF0ZWQuCitPdGhlcndpc2UsCisuTm0KK3dpbGwgY2hhbmdlIGRlZmF1bHQgcm9vdCBmb2xk ZXIgdGhlIHRoZSBmb3VuZCBzdWJkaXJlY3RvcnkuCitUaGlzIGFsbG93cyB0aGUgc2FtZSBzeXN0 ZW0gdG8gaW50ZWxsaWdlbnRseSBkaXN0aW5ndWlzaCBkaWZmZXJlbnQKK2NsaWVudCBkZXZpY2Vz IGFzIGJlbG9uZ2luZyB0byBkaWZmZXJlbnQgdXNlcnMuCitBbiBhZG1pbmlzdHJhdG9yIGNhbiBz ZXQgdXAgdGhlIHN1YmRpcmVjdG9yaWVzIGZvcgora25vd24gZGV2aWNlcyB1bmRlcgorLlBhIC92 YXIvc3Bvb2wvb2JleAorKG9yIHdoZXJldmVyLCBzZWUKKy5GbCByCitvcHRpb24pIGZvciBlYWNo IHVzZXIsIG9yIGV2ZW4gYXMgc3ltbGlua3MgdG8gZWFjaCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkK KyhvciBhIHN1YmRpcmVjdG9yeSB0aGVyZW9mKS4KIC5TaCBMT0NBTEUgU1VQUE9SVAogVGhlCiAu Tm0KQEAgLTMyNSw2ICszNjgsMTMgQEAKIC5EdiBBTlkKIGFkZHJlc3MgYW5kIFJGQ09NTSBjaGFu bmVsCiAuTGkgMSAuCisuSXQgbG4gLXMgQXIgL2hvbWUvd2FsbGFieSBBciAvdmFyL3Nwb29sL29i ZXgvMDA6MDE6MDI6MDM6MDQ6MDUKKy5JdCBjaG93biAtaCB3YWxsYWJ5IEFyIC92YXIvc3Bvb2wv b2JleC8wMDowMTowMjowMzowNDowNQorV2hlbmV2ZXIgdGhlIGRldmljZSB3aXRoIEJEX0FERFIg b2YgMDA6MDE6MDI6MDM6MDQ6MDUgY29ubmVjdHMsCisuTm0KK3J1bm5pbmcgaW4gc2VydmVyIG1v ZGUgd2lsbCBzd2l0Y2ggdG8gdXNlciBJRAorLkFyIHdhbGxhYnkKK2FuZCB1c2UgdGhlaXIgaG9t ZSBkaXJlY3RvcnkgYXMgdGhlIHRvcC1sZXZlbCBmb3IgdGhlIGNvbm5lY3Rpb24uIAogLkVsCiAu U3MgTGV2ZWwgMSBJbmZvcm1hdGlvbiBBY2Nlc3MKIFRoZSBmaXJzdCBsZXZlbCBpbnZvbHZlcyB0 aGUgYmFzaWMgYWJpbGl0eSB0byBwdXQgYW4gb2JqZWN0IChzdWNoIGFzIGEgdkNhcmQpCkluZGV4 OiBvYmV4YXBwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9jdnMvcG9ydHMvb2Jl eGFwcC9vYmV4YXBwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1yMS45IG9i ZXhhcHAuaAotLS0gb2JleGFwcC5oCTIzIEFwciAyMDA3IDE4OjI5OjE4IC0wMDAwCTEuOQorKysg b2JleGFwcC5oCTEzIEFwciAyMDA5IDIxOjIyOjI5IC0wMDAwCkBAIC04Nyw4ICs4Nyw4IEBACiAJ dW5zaWduZWQJCSBzZXJ2ZXIgICAgIDogMTsgLyogc2VydmVyIG1vZGU/ICovCiAJdW5zaWduZWQJ CSBzZWN1cmUgICAgIDogMTsgLyogc2VjdXJlIG1vZGU/ICovCiAJdW5zaWduZWQJCSBkb25lICAg ICAgIDogMTsgLyogZG9uZT8gKi8KLQl1bnNpZ25lZAkJIGRldGFjaCAgICAgOiAxOyAvKiBkZXRh Y2ggc2VydmVyPyAqLwogCXVuc2lnbmVkIAkJIGZicyAgICAgICAgOiAxOyAvKiBGb2xkZXIgQnJv d3NpbmcgU2VydmljZSAqLworCXVuc2lnbmVkCQkgdnJvb3QJICAgIDogMTsgLyogdmlydHVhbGl6 ZSBkZXZpY2UncyByb290ICovCiAJdW5zaWduZWQJCSByZXNlcnZlZCAgIDogMjsKIAogCS8qIGxv Y2FsIFNEUCBzZXNzaW9uIChzZXJ2ZXIgb25seSkgKi8KSW5kZXg6IHNlcnZlci5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC91c3IvbG9jYWwvY3ZzL3BvcnRzL29iZXhhcHAvc2VydmVyLmMsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcjEuMTEgc2VydmVyLmMKLS0tIHNlcnZlci5j CTkgQXByIDIwMDkgMjM6MTY6MzEgLTAwMDAJMS4xMQorKysgc2VydmVyLmMJMTMgQXByIDIwMDkg MjM6MTA6MzEgLTAwMDAKQEAgLTEsNiArMSw4IEBACiAvKgogICogc2VydmVyLmMKLSAqCisgKi8K KworLyotCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtp bkB5YWhvby5jb20+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTg5LDYgKzkxLDEx IEBACiBzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0CWxzX3BhcmVudF9mb2xkZXIgPQogCSI8cGFy ZW50LWZvbGRlci8+XG4iOwogCitzdGF0aWMgaW50IG9iZXhhcHBfc2VydmVyX3NldF9yb290CisJ CShjb250ZXh0X3AgY29udGV4dCk7CitzdGF0aWMgaW50IG9iZXhhcHBfc2VydmVyX3NldF9kZXZp Y2Vfcm9vdAorCQkoY29udGV4dF9wIGNvbnRleHQpOworCiAvKiBPQkVYIHJlcXVlc3QgaGFuZGxl cnMgKi8KIHN0YXRpYyBvYmV4YXBwX3JlcXVlc3RfaGFuZGxlcl90CW9iZXhhcHBfc2VydmVyX3Jl cXVlc3RfY29ubmVjdDsKIHN0YXRpYyBvYmV4YXBwX3JlcXVlc3RfaGFuZGxlcl90CW9iZXhhcHBf c2VydmVyX3JlcXVlc3RfZGlzY29ubmVjdDsKQEAgLTExNCw3ICsxMjEsNiBAQAogb2JleGFwcF9z ZXJ2ZXIob2JleF90ICpoYW5kbGUpCiB7CiAJY29udGV4dF9wCQkgY29udGV4dCA9IChjb250ZXh0 X3ApIE9CRVhfR2V0VXNlckRhdGEoaGFuZGxlKTsKLQlzdHJ1Y3QgcGFzc3dkCQkqcHcgPSBOVUxM OwogCWludAkJCSBlcnJvciA9IC0xOwogCXN0cnVjdCBzb2NrYWRkcl9yZmNvbW0JIGFkZHI7CiAK QEAgLTEzMSwyNiArMTM3LDYgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChjb250ZXh0LT51 c2VyICE9IE5VTEwpIHsKLQkJaWYgKGF0b2koY29udGV4dC0+dXNlcikgIT0gMCkKLQkJCXB3ID0g Z2V0cHd1aWQoYXRvaShjb250ZXh0LT51c2VyKSk7Ci0JCWVsc2UKLQkJCXB3ID0gZ2V0cHduYW0o Y29udGV4dC0+dXNlcik7Ci0KLQkJaWYgKHB3ID09IE5VTEwpIHsKLQkJCWxvZ19lcnIoIiVzKCk6 IFVua25vd24gdXNlciAlcyIsIF9fZnVuY19fLCAKLQkJCQljb250ZXh0LT51c2VyKTsKLQkJCWdv dG8gZG9uZTsKLQkJfQotCX0KLQotCWlmIChjb250ZXh0LT5yb290WzBdID09ICdcMCcpIHsKLQkJ aWYgKHB3ID09IE5VTEwpCi0JCQlzdHJsY3B5KGNvbnRleHQtPnJvb3QsIE9CRVhBUFBfUk9PVF9E SVIsIFBBVEhfTUFYKTsKLQkJZWxzZQotCQkJc3RybGNweShjb250ZXh0LT5yb290LCBwdy0+cHdf ZGlyLCBQQVRIX01BWCk7Ci0JfQotCiAJbG9nX2luZm8oIiVzOiBTdGFydGluZyBPQkVYIHNlcnZl ciIsIF9fZnVuY19fKTsKIAogCWlmIChPQkVYX1NldFRyYW5zcG9ydE1UVShoYW5kbGUsIGNvbnRl eHQtPm10dSwgY29udGV4dC0+bXR1KSA8IDApIHsKQEAgLTE2Miw3ICsxNDgsNyBAQAogCWFkZHIu cmZjb21tX2xlbiA9IHNpemVvZihhZGRyKTsKIAlhZGRyLnJmY29tbV9mYW1pbHkgPSBBRl9CTFVF VE9PVEg7CiAJYWRkci5yZmNvbW1fY2hhbm5lbCA9IGNvbnRleHQtPmNoYW5uZWw7Ci0JbWVtY3B5 KCZhZGRyLnJmY29tbV9iZGFkZHIsICZjb250ZXh0LT5yYWRkciwgc2l6ZW9mKGNvbnRleHQtPnJh ZGRyKSk7CisJbWVtY3B5KCZhZGRyLnJmY29tbV9iZGFkZHIsICZjb250ZXh0LT5sYWRkciwgc2l6 ZW9mKGNvbnRleHQtPmxhZGRyKSk7CiAKIAlpZiAoT0JFWF9TZXJ2ZXJSZWdpc3RlcihoYW5kbGUs IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsCiAJCQlzaXplb2YoYWRkcikpIDwgMCkgewpAQCAt MTcwLDQwICsxNTYsOCBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGdldHVpZCgpID09IDAp IHsKLQkJaWYgKGNvbnRleHQtPnNlY3VyZSkgewotCQkJaWYgKGNocm9vdChjb250ZXh0LT5yb290 KSA8IDApIHsKLQkJCQlsb2dfZXJyKCIlcygpOiBDb3VsZCBub3QgY2hyb290KCVzKS4gJXMgKCVk KSIsCi0JCQkJCV9fZnVuY19fLCBjb250ZXh0LT5yb290LAotCQkJCQlzdHJlcnJvcihlcnJubyks IGVycm5vKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0KLQkJCXN0cmxjcHkoY29udGV4dC0+cm9v dCwgIi8iLCBQQVRIX01BWCk7Ci0JCX0KLQotCQlpZiAocHcgIT0gTlVMTCkgewotCQkJaWYgKHNl dGdpZChwdy0+cHdfZ2lkKSA8IDApIHsKLQkJCQlsb2dfZXJyKCIlcygpOiBDb3VsZCBub3Qgc2V0 Z2lkKCVkKS4gJXMgKCVkKSIsCi0JCQkJCV9fZnVuY19fLCBwdy0+cHdfZ2lkLCBzdHJlcnJvcihl cnJubyksCi0JCQkJCWVycm5vKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0KLQkJCWlmIChzZXR1 aWQocHctPnB3X3VpZCkgPCAwKSB7Ci0JCQkJbG9nX2VycigiJXMoKTogQ291bGQgbm90IHNldHVp ZCglZCkuICVzICglZCkiLAotCQkJCQlfX2Z1bmNfXywgcHctPnB3X3VpZCwgc3RyZXJyb3IoZXJy bm8pLAotCQkJCQllcnJubyk7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQl9Ci0JfQotCi0JaWYg KGNoZGlyKGNvbnRleHQtPnJvb3QpIDwgMCkgewotCQlsb2dfZXJyKCIlcygpOiBDb3VsZCBub3Qg Y2hkaXIoJXMpLiAlcyAoJWQpIiwKLQkJCV9fZnVuY19fLCBjb250ZXh0LT5yb290LCBzdHJlcnJv cihlcnJubyksIGVycm5vKTsKKwlpZiAob2JleGFwcF9zZXJ2ZXJfc2V0X3Jvb3QoY29udGV4dCkg PCAwKQogCQlnb3RvIGRvbmU7Ci0JfQogCiAJbG9nX2RlYnVnKCIlcygpOiBFbnRlcmluZyBldmVu dCBwcm9jZXNzaW5nIGxvb3AuLi4iLCBfX2Z1bmNfXyk7CiAKQEAgLTIyNyw2ICsxODEsMTU1IEBA CiB9IC8qIG9iZXhhcHBfc2VydmVyICovCiAKIC8qCisgKiBTZXQgc2VydmVyIHJvb3QKKyAqLwor CitpbnQKK29iZXhhcHBfc2VydmVyX3NldF9yb290KGNvbnRleHRfcCBjb250ZXh0KQoreworCXN0 cnVjdCBwYXNzd2QJKnB3OworCWNoYXIJCSplcDsKKwl1aWRfdAkJdWlkOworCisJaWYgKGNvbnRl eHQtPnVzZXIgIT0gTlVMTCkgeworCQl1aWQgPSBzdHJ0b3VsKGNvbnRleHQtPnVzZXIsICZlcCwg MTApOworCQlpZiAoKmVwICE9ICdcMCcpCisJCQlwdyA9IGdldHB3bmFtKGNvbnRleHQtPnVzZXIp OworCQllbHNlCisJCQlwdyA9IGdldHB3dWlkKHVpZCk7CisKKwkJaWYgKHB3ID09IE5VTEwpIHsK KwkJCWxvZ19lcnIoIiVzKCk6IFVua25vd24gdXNlciAlcyIsCisJCQkJX19mdW5jX18sIGNvbnRl eHQtPnVzZXIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQlsb2dfZGVidWcoIiVzKCk6IFJl cXVlc3RlZCB0byBydW4gYXMgJyVzJyB1aWQ9JWQsIGdpZD0lZCIsCisJCQlfX2Z1bmNfXywgY29u dGV4dC0+dXNlciwgcHctPnB3X3VpZCwgcHctPnB3X2dpZCk7CisJfSBlbHNlCisJCXB3ID0gTlVM TDsKKworCS8qIFNldCBkZWZhdWx0IHJvb3QgKi8KKwlpZiAoY29udGV4dC0+cm9vdFswXSA9PSAn XDAnKSB7CisJCWlmIChwdyA9PSBOVUxMKQorCQkJc3RybGNweShjb250ZXh0LT5yb290LCBPQkVY QVBQX1JPT1RfRElSLCBQQVRIX01BWCk7CisJCWVsc2UKKwkJCXN0cmxjcHkoY29udGV4dC0+cm9v dCwgcHctPnB3X2RpciwgUEFUSF9NQVgpOworCX0KKworCWlmIChjaGRpcihjb250ZXh0LT5yb290 KSA8IDApIHsKKwkJbG9nX2VycigiJXMoKTogQ291bGQgbm90IGNoZGlyKCVzKS4gJXMgKCVkKSIs CisJCQlfX2Z1bmNfXywgY29udGV4dC0+cm9vdCwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisJ CXJldHVybiAoLTEpOworCX0KKworCS8qIFNldCBkZXZpY2Ugc3BlY2lmaWMgcm9vdCAqLworCWlm IChjb250ZXh0LT52cm9vdCAmJiBvYmV4YXBwX3NlcnZlcl9zZXRfZGV2aWNlX3Jvb3QoY29udGV4 dCkgPD0gMCkKKwkJcmV0dXJuICgtMSk7CisKKwlsb2dfZGVidWcoIiVzKCk6IFVzaW5nIHJvb3Qg JXMiLCBfX2Z1bmNfXywgY29udGV4dC0+cm9vdCk7CisKKwlpZiAoY29udGV4dC0+c2VjdXJlKSB7 CisJCWlmIChjaHJvb3QoY29udGV4dC0+cm9vdCkgPCAwKSB7CisJCQlsb2dfZXJyKCIlcygpOiBD b3VsZCBub3QgY2hyb290KCVzKS4gJXMgKCVkKSIsCisJCQkJX19mdW5jX18sIGNvbnRleHQtPnJv b3QsCisJCQkJc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQor CisJCXN0cmxjcHkoY29udGV4dC0+cm9vdCwgIi8iLCBQQVRIX01BWCk7CisKKwkJbG9nX2RlYnVn KCIlcygpOiBTZWN1cmUgbW9kZSBlbmFibGVkIiwgX19mdW5jX18pOworCX0KKworCWlmIChwdyAh PSBOVUxMKSB7CisJCWlmIChzZXRnaWQocHctPnB3X2dpZCkgPCAwKSB7CisJCQlsb2dfZXJyKCIl cygpOiBDb3VsZCBub3Qgc2V0Z2lkKCVkKS4gJXMgKCVkKSIsCisJCQkJX19mdW5jX18sIHB3LT5w d19naWQsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwor CQlpZiAoc2V0dWlkKHB3LT5wd191aWQpIDwgMCkgeworCQkJbG9nX2VycigiJXMoKTogQ291bGQg bm90IHNldHVpZCglZCkuICVzICglZCkiLAorCQkJCV9fZnVuY19fLCBwdy0+cHdfdWlkLCBzdHJl cnJvcihlcnJubyksIGVycm5vKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJbG9nX2RlYnVn KCIlcygpOiBSdW5uaW5nIGFzIHVpZD0lZCwgZ2lkPSVkIiwKKwkJCV9fZnVuY19fLCBnZXR1aWQo KSwgZ2V0Z2lkKCkpOworCX0KKworCXJldHVybiAoMCk7Cit9IC8qIG9iZXhhcHBfc2VydmVyX3Nl dF9yb290ICovCisKKy8qCisgKiBTZXQgZGV2aWNlIHNwZWNpZmljIHNlcnZlciByb290CisgKi8K Kworc3RhdGljIGludAorb2JleGFwcF9zZXJ2ZXJfc2V0X2RldmljZV9yb290KGNvbnRleHRfcCBj b250ZXh0KQoreworCWNoYXIgY29uc3QJKnJvb3RbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9Owor CXN0cnVjdCBob3N0ZW50CSpoZTsKKwlzdHJ1Y3Qgc3RhdAlzYjsKKwlpbnQJCW47CisKKwluID0g MDsKKworCWhlID0gYnRfZ2V0aG9zdGJ5YWRkcigoY2hhciBjb25zdCAqKSAmY29udGV4dC0+cmFk ZHIsCisJCQlzaXplb2YoYmRhZGRyX3QpLCBBRl9CTFVFVE9PVEgpOworCWlmIChoZSAhPSBOVUxM KQorCQlyb290W24gKytdID0gKGNoYXIgY29uc3QgKikgaGUtPmhfbmFtZTsKKworCXJvb3RbbiAr K10gPSBidF9udG9hKCZjb250ZXh0LT5yYWRkciwgTlVMTCk7CisKKwlyb290W24gKytdID0gImRl ZmF1bHQiOworCisJZm9yIChuID0gMDsgbiA8IDM7IG4gKyspIHsKKwkJaWYgKHJvb3Rbbl0gPT0g TlVMTCkKKwkJCWJyZWFrOworCisJCWxvZ19kZWJ1ZygiJXMoKTogQ2hlY2tpbmcgZm9yICVzLyVz IHN1YmRpcmVjdG9yeSIsCisJCQlfX2Z1bmNfXywgY29udGV4dC0+cm9vdCwgcm9vdFtuXSk7CisK KwkJaWYgKHN0YXQocm9vdFtuXSwgJnNiKSA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQp CisJCQkJY29udGludWU7CisKKwkJCWxvZ19lcnIoIiVzKCk6IENvdWxkIG5vdCBsc3RhdCglcy8l cykuICVzICglZCkiLAorCQkJCV9fZnVuY19fLCBjb250ZXh0LT5yb290LCByb290W25dLAorCQkJ CXN0cmVycm9yKGVycm5vKSwgZXJybm8pOworCisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCisJCWlm ICghU19JU0RJUihzYi5zdF9tb2RlKSkgeworCQkJbG9nX2RlYnVnKCIlcygpOiBJZ25vcmluZyAl cy8lcy4gTm90IGEgZGlyZWN0b3J5IiwKKwkJCQlfX2Z1bmNfXywgY29udGV4dC0+cm9vdCwgcm9v dFtuXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmxjYXQoY29udGV4dC0+cm9vdCwgIi8i LCBQQVRIX01BWCk7CisJCXN0cmxjYXQoY29udGV4dC0+cm9vdCwgcm9vdFtuXSwgUEFUSF9NQVgp OworCisJCWlmIChjaGRpcihyb290W25dKSA8IDApIHsKKwkJCWxvZ19lcnIoIiVzKCk6IENvdWxk IG5vdCBjaGRpciglcykuICVzICglZCkiLAorCQkJCV9fZnVuY19fLCBjb250ZXh0LT5yb290LCBz dHJlcnJvcihlcnJubyksCisJCQkJZXJybm8pOworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQly ZXR1cm4gKDEpOworCX0KKworCWxvZ19ub3RpY2UoIiVzKCk6IENvdWxkIG5vdCBzZXQgZGV2aWNl IHNwZWNpZmljIHJvb3QgZm9yIHRoZSBkZXZpY2UgIiBcCisJCSJiZGFkZHIgJXMgKCVzKSIsIF9f ZnVuY19fLCByb290WzFdLAorCQlyb290WzBdPyByb290WzBdIDogIi1uby1uYW1lLSIpOworCisJ cmV0dXJuICgwKTsKK30gLyogb2JleGFwcF9zZXJ2ZXJfc2V0X2RldmljZV9yb290ICovCisKKy8q CiAgKiBQcm9jZXNzIE9CRVhfRVZfUkVRSElOVCBldmVudAogICovCiAKQEAgLTU2NSw2ICs2Njgs MTUgQEAKIAkJCX0KIAkJfQogCisJCWlmIChjaG1vZChjb250ZXh0LT50ZW1wLCBTX0lSVVNSfFNf SVdVU1J8U19JUkdSUHxTX0lXR1JQKSA8IDApIHsKKwkJCWxvZ19lcnIoIiVzKCk6IENvdWxkIG5v dCBjaG1vZCglcykuICVzICglZCkiLAorCQkJCV9fZnVuY19fLCBjb250ZXh0LT50ZW1wLAorCQkJ CXN0cmVycm9yKGVycm5vKSwgZXJybm8pOworCisJCQljb2RlcyA9IG9iZXhhcHBfdXRpbF9lcnJu bzJyZXNwb25zZShlcnJubyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwogCQlpZiAocmVuYW1lKGNv bnRleHQtPnRlbXAsIGNvbnRleHQtPmZpbGUpIDwgMCkgewogCQkJbG9nX2VycigiJXMoKTogQ291 bGQgbm90IHJlbmFtZSglcywgJXMpLiAlcyAoJWQpIiwKIAkJCQlfX2Z1bmNfXywgY29udGV4dC0+ dGVtcCwKSW5kZXg6IHRyYW5zcG9ydC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC91c3IvbG9jYWwv Y3ZzL3BvcnRzL29iZXhhcHAvdHJhbnNwb3J0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMK ZGlmZiAtdSAtcjEuMTMgdHJhbnNwb3J0LmMKLS0tIHRyYW5zcG9ydC5jCTIxIE1heSAyMDA3IDE1 OjU1OjM1IC0wMDAwCTEuMTMKKysrIHRyYW5zcG9ydC5jCTEwIEFwciAyMDA5IDE4OjI2OjA4IC0w MDAwCkBAIC0yODAsNiArMjgwLDkgQEAKIAkJCQlyZXR1cm4gKC0xKTsKIAkJCX0KIAorCQkJbWVt Y3B5KCZjb250ZXh0LT5yYWRkciwgJmFkZHIucmZjb21tX2JkYWRkciwKKwkJCQlzaXplb2YoY29u dGV4dC0+cmFkZHIpKTsKKwogCQkJcmV0dXJuICgxKTsKIAkJfQogCkluZGV4OiB1dGlsLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9jdnMvcG9ydHMvb2JleGFwcC91dGlsLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcjEuMTQgdXRpbC5jCi0tLSB1dGlsLmMJ MTAgQXByIDIwMDkgMTc6MjY6MDMgLTAwMDAJMS4xNAorKysgdXRpbC5jCTEwIEFwciAyMDA5IDE4 OjA1OjIzIC0wMDAwCkBAIC00MjUsOSArNDI1LDcgQEAKIAkgKiBzdHJpbmcsIHNvIGFsd2F5cyBw YXNzIGEgY29weS4KIAkgKi8KIAotCXN0cm5jcHkobiwgbmFtZSwgc2l6ZW9mKG4pKTsKLQluW3Np emVvZihuKSAtIDFdID0gJ1wwJzsKLQorCXN0cmxjcHkobiwgbmFtZSwgc2l6ZW9mKG4pKTsKIAlz bnByaW50Zih0ZW1wLCB0ZW1wX3NpemUsICIlcy9YWFhYWFhYWCIsIGRpcm5hbWUobikpOwogCiAJ cmV0dXJuIChta3N0ZW1wKHRlbXApKTsK --0016361648b35dad720467783cb8--