Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Apr 2009 16:40:13 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
To:        "freebsd-bluetooth@freebsd.org" <freebsd-bluetooth@freebsd.org>
Subject:   RFC: obexapp - virtual root folder for each device
Message-ID:  <bb4a86c70904131640n7cf471c0o7a56a43d722a90e1@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bb4a86c70904131640n7cf471c0o7a56a43d722a90e1>