[PATCH] auditd - TTY support for audisp-prelude

Matteo Sessa <[email protected]> Fri, 17 Jun 2011 16:34:43 +0200 (CEST)
Newsgroups gmane.comp.security.ids.prelude.devel
Message-ID <[email protected]>
--=_4cbd6d4b-44d0-4563-83c6-130598736494
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Hi all,

Attached is a patch for auditd to add support for TTY audits ( pam_tty_audit session module ) to audisp-prelude.

Alerts are reported with:
alert.classification.text = "Keylogger"
alert.assessment.impact.severity = LOW

and actual keystrokes carried on alert.additional_data.

Attached you will find also a basic python commandline script to query keylogger data from prelude database.

Hope it helps.

Matteo Sessa 
IT Systems Administrator 
D.B.M. srl 
Via Enrico Noe, 23
20133 Milano (MI), Italy
Landline: (+39) 02-266005-21
Mobile: (+39) 334-6220662


--=_4cbd6d4b-44d0-4563-83c6-130598736494
Content-Type: text/x-patch; name=audisp-prelude-tty.patch
Content-Disposition: attachment; filename=audisp-prelude-tty.patch
Content-Transfer-Encoding: base64

ZGlmZiAtcnVwIGF1ZGl0LTEuNy4xOC9hdWRpc3AvcGx1Z2lucy9wcmVsdWRlL2F1ZGlzcC1wcmVs
dWRlLmMgYXVkaXQtMS43LjE4LWJhL2F1ZGlzcC9wbHVnaW5zL3ByZWx1ZGUvYXVkaXNwLXByZWx1
ZGUuYwotLS0gYXVkaXQtMS43LjE4L2F1ZGlzcC9wbHVnaW5zL3ByZWx1ZGUvYXVkaXNwLXByZWx1
ZGUuYwkyMDEwLTA5LTE5IDIxOjU1OjA3LjAwMDAwMDAwMCArMDIwMAorKysgYXVkaXQtMS43LjE4
LWJhL2F1ZGlzcC9wbHVnaW5zL3ByZWx1ZGUvYXVkaXNwLXByZWx1ZGUuYwkyMDExLTA0LTI4IDEw
OjQ1OjIwLjAwMDAwMDAwMCArMDIwMApAQCAtNDQsNyArNDQsNyBAQAogdHlwZWRlZiBlbnVtIHsg
QVNfTE9HSU4sIEFTX01BWF9MT0dJTl9GQUlMLCBBU19NQVhfTE9HSU5fU0VTUywgQVNfQUJFTkQs
CiAJQVNfUFJPTSwgQVNfTUFDX1NUQVQsIEFTX0xPR0lOX0xPQ0FUSU9OLCBBU19MT0dJTl9USU1F
LCBBU19NQUMsCiAJQVNfQVVUSCwgQVNfV0FUQ0hFRF9MT0dJTiwgQVNfV0FUQ0hFRF9GSUxFLCBB
U19XQVRDSEVEX0VYRUMsIEFTX01LX0VYRSwKLQlBU19NTUFQMCwgQVNfV0FUQ0hFRF9TWVNDQUxM
LCBBU19UT1RBTCB9IGFzX2Rlc2NyaXB0aW9uX3Q7CisJQVNfTU1BUDAsIEFTX1dBVENIRURfU1lT
Q0FMTCwgQVNfVFRZLCBBU19UT1RBTCB9IGFzX2Rlc2NyaXB0aW9uX3Q7CiBjb25zdCBjaGFyICph
c3Nlc3NtZW50X2Rlc2NyaXB0aW9uW0FTX1RPVEFMXSA9IHsKICAiQSB1c2VyIGhhcyBhdHRlbXB0
ZWQgdG8gbG9naW4iLAogICJUaGUgbWF4aW11bSBhbGxvd2VkIGxvZ2luIGZhaWx1cmVzIGZvciB0
aGlzIGFjY291bnQgaGFzIGJlZW4gcmVhY2hlZC4gVGhpcyBjb3VsZCBiZSBhbiBhdHRlbXB0IHRv
IGdhaW4gYWNjZXNzIHRvIHRoZSBhY2NvdW50IGJ5IHNvbWVvbmUgb3RoZXIgdGhhbiB0aGUgcmVh
bCBhY2NvdW50IGhvbGRlci4iLApAQCAtNjEsNyArNjEsOCBAQCBjb25zdCBjaGFyICphc3Nlc3Nt
ZW50X2Rlc2NyaXB0aW9uW0FTX1RPCiAgIkEgdXNlciBoYXMgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUg
YSBwcm9ncmFtIHRoYXQgaXMgYmVpbmcgd2F0Y2hlZC4iLAogICJBIHVzZXIgaGFzIGF0dGVtcHRl
ZCB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIiwKICAiQSBwcm9ncmFtIGhhcyBhdHRl
bXB0ZWQgbW1hcCBhIGZpeGVkIG1lbW9yeSBwYWdlIGF0IGFuIGFkZHJlc3Mgc29tZXRpbWVzIHVz
ZWQgYXMgcGFydCBvZiBhIGtlcm5lbCBleHBsb2l0IiwKLSAiQSB1c2VyIGhhcyBydW4gYSBjb21t
YW5kIHRoYXQgaXNzdWVkIGEgd2F0Y2hlZCBzeXNjYWxsIgorICJBIHVzZXIgaGFzIHJ1biBhIGNv
bW1hbmQgdGhhdCBpc3N1ZWQgYSB3YXRjaGVkIHN5c2NhbGwiLAorICJBIHVzZXIgaGFzIGVudGVy
ZWQga2V5c3Ryb2tlcyBvbiBhIHRlcm1pbmFsIgogfTsKIHR5cGVkZWYgZW51bSB7IE1fTk9STUFM
LCBNX1RFU1QgfSBvdXRwdXRfdDsKIHR5cGVkZWYgZW51bSB7IFdfTk8sIFdfRklMRSwgV19FWEVD
LCBXX01LX0VYRSB9IHdhdGNoZWRfdDsKQEAgLTE5ODEsNiArMTk4Miw4MyBAQCBzdGF0aWMgdm9p
ZCBoYW5kbGVfd2F0Y2hlZF9zeXNjYWxscyhhdXBhCiAJfQogfQogCitzdGF0aWMgaW50IHR0eV9h
bGVydChhdXBhcnNlX3N0YXRlX3QgKmF1LCBpZG1lZl9tZXNzYWdlX3QgKmlkbWVmLAorCQlpZG1l
Zl9hbGVydF90ICphbGVydCkKK3sKKwlpbnQgcmV0OworCisJaWRtZWZfc291cmNlX3QgKnNvdXJj
ZTsKKwlpZG1lZl91c2VyX3QgKnN1c2VyOworCWlkbWVmX3VzZXJfaWRfdCAqdXNlcl9pZDsKKwlp
ZG1lZl9pbXBhY3RfdHlwZV90IGltcGFjdF90eXBlOworICAgIGlkbWVmX2Fzc2Vzc21lbnRfdCAq
YXNzZXNzbWVudDsKKwlpZG1lZl9pbXBhY3RfdCAqaW1wYWN0OworCWlkbWVmX2ltcGFjdF9zZXZl
cml0eV90IHNldmVyaXR5OworCXByZWx1ZGVfc3RyaW5nX3QgKnN0cjsKKwlpZG1lZl9pbXBhY3Rf
Y29tcGxldGlvbl90IGNvbXBsZXRpb24gPSBJRE1FRl9JTVBBQ1RfQ09NUExFVElPTl9FUlJPUjsK
KworCS8qIEZpbGwgaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV2ZW50J3Mgc291cmNlICovCisJ
cmV0ID0gaWRtZWZfYWxlcnRfbmV3X3NvdXJjZShhbGVydCwgJnNvdXJjZSwgLTEpOworCVBSRUxV
REVfRkFJTF9DSEVDSzsKKworCXJldCA9IGlkbWVmX3NvdXJjZV9uZXdfdXNlcihzb3VyY2UsICZz
dXNlcik7CisJUFJFTFVERV9GQUlMX0NIRUNLOworCWlkbWVmX3VzZXJfc2V0X2NhdGVnb3J5KHN1
c2VyLCBJRE1FRl9VU0VSX0NBVEVHT1JZX0FQUExJQ0FUSU9OKTsKKwlyZXQgPSBpZG1lZl91c2Vy
X25ld191c2VyX2lkKHN1c2VyLCAmdXNlcl9pZCwgMCk7CQorCVBSRUxVREVfRkFJTF9DSEVDSzsK
KwlpZG1lZl91c2VyX2lkX3NldF90eXBlKHVzZXJfaWQsIElETUVGX1VTRVJfSURfVFlQRV9PUklH
SU5BTF9VU0VSKTsKKwlyZXQgPSBnZXRfbG9naW51aWRfaW5mbyhhdSwgdXNlcl9pZCk7CisJUFJF
TFVERV9GQUlMX0NIRUNLOworCisJcmV0ID0gZ2V0X3R0eV9pbmZvKGF1LCB1c2VyX2lkKTsKKwlQ
UkVMVURFX0ZBSUxfQ0hFQ0s7CisKKwlyZXQgPSBnZXRfY29tbV9pbmZvKGF1LCBzb3VyY2UsIE5V
TEwpOworCVBSRUxVREVfRkFJTF9DSEVDSzsKKworCXJldCA9IGFkZF9leGVjdmVfZGF0YShhdSwg
YWxlcnQpOworCVBSRUxVREVfRkFJTF9DSEVDSzsKKworCXJldCA9IGFkZF9zZXJpYWxfbnVtYmVy
X2RhdGEoYXUsIGFsZXJ0KTsKKwlQUkVMVURFX0ZBSUxfQ0hFQ0s7CisKKwkvKiBEZXNjcmliZSBl
dmVudCAqLworCXJldCA9IHNldF9jbGFzc2lmaWNhdGlvbihhbGVydCwgIktleWxvZ2dlciIpOwor
CVBSRUxVREVfRkFJTF9DSEVDSzsKKworCS8qIEFzc2VzcyBpbXBhY3QgKi8KKwlpZiAoZ2V0X2xv
Z2ludWlkKGF1KSA9PSAwKQorCQlpbXBhY3RfdHlwZSA9IElETUVGX0lNUEFDVF9UWVBFX0FETUlO
OworCWVsc2UKKwkJaW1wYWN0X3R5cGUgPSBJRE1FRl9JTVBBQ1RfVFlQRV9VU0VSOworCS8vIEFk
anVzdCB0aGUgcmF0aW5nIG9uIEFWQydzIGJhc2VkIG9uIGlmIHRoZXkgc3VjY2VlZGVkIG9yIG5v
dAorCWNvbXBsZXRpb24gPSBJRE1FRl9JTVBBQ1RfQ09NUExFVElPTl9TVUNDRUVERUQ7CisJc2V2
ZXJpdHkgPSBJRE1FRl9JTVBBQ1RfU0VWRVJJVFlfTE9XOworCQorCXJldCA9IGlkbWVmX2FsZXJ0
X25ld19hc3Nlc3NtZW50KGFsZXJ0LCAmYXNzZXNzbWVudCk7CisJUFJFTFVERV9GQUlMX0NIRUNL
OworCXJldCA9IGlkbWVmX2Fzc2Vzc21lbnRfbmV3X2ltcGFjdChhc3Nlc3NtZW50LCAmaW1wYWN0
KTsKKwlQUkVMVURFX0ZBSUxfQ0hFQ0s7CisJaWRtZWZfaW1wYWN0X3NldF9zZXZlcml0eShpbXBh
Y3QsIHNldmVyaXR5KTsKKwlQUkVMVURFX0ZBSUxfQ0hFQ0s7CisJaWRtZWZfaW1wYWN0X3NldF90
eXBlKGltcGFjdCwgaW1wYWN0X3R5cGUpOworCVBSRUxVREVfRkFJTF9DSEVDSzsKKwlyZXQgPSBp
ZG1lZl9pbXBhY3RfbmV3X2Rlc2NyaXB0aW9uKGltcGFjdCwgJnN0cik7CisJUFJFTFVERV9GQUlM
X0NIRUNLOworCXByZWx1ZGVfc3RyaW5nX3NldF9yZWYoc3RyLCBhc3Nlc3NtZW50X2Rlc2NyaXB0
aW9uW0FTX1dBVENIRURfRVhFQ10pOworCVBSRUxVREVfRkFJTF9DSEVDSzsKKworCXNlbmRfaWRt
ZWYoY2xpZW50LCBpZG1lZik7CisJaWRtZWZfbWVzc2FnZV9kZXN0cm95KGlkbWVmKTsKKworICAg
ICAgICByZXR1cm4gMDsKKworIGVycjoKKwlzeXNsb2coTE9HX0VSUiwgIndhdGNoZWRfZXhlY19h
bGVydDogSURNRUYgZXJyb3I6ICVzLlxuIiwgCisJCXByZWx1ZGVfc3RyZXJyb3IocmV0KSk7Cisg
ICAgICAgIGlkbWVmX21lc3NhZ2VfZGVzdHJveShpZG1lZik7CisgICAgICAgIHJldHVybiAtMTsK
K30KIHN0YXRpYyB2b2lkIGhhbmRsZV9ldmVudChhdXBhcnNlX3N0YXRlX3QgKmF1LAogCQlhdXBh
cnNlX2NiX2V2ZW50X3QgY2JfZXZlbnRfdHlwZSwgdm9pZCAqdXNlcl9kYXRhKQogewpAQCAtMjEy
OSw2ICsyMjA3LDE1IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ldmVudChhdXBhcnNlX3N0YXRlX3QK
IAkJCQkvLyBUaGUgcHJldmlvdXMgY2FsbCBtb3ZlcyB0aGUgY3VycmVudCByZWNvcmQKIAkJCQlh
dXBhcnNlX2dvdG9fcmVjb3JkX251bShhdSwgbnVtKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgQVVE
SVRfVFRZOgorCQkJCWlmIChjb25maWcudHR5ID09IEVfTk8pCisJCQkJCWJyZWFrOworCQkJCWlm
IChjb25maWcudHR5X2FjdCAhPSBBX0lETUVGKQorCQkJCQlicmVhazsKKwkJCQlpZiAobmV3X2Fs
ZXJ0X2NvbW1vbihhdSwgJmlkbWVmLCAmYWxlcnQpID49IDApeworCQkJCQl0dHlfYWxlcnQoYXUs
IGlkbWVmLCBhbGVydCk7CisJCQkJfQorCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlicmVh
azsKIAkJfQpkaWZmIC1ydXAgYXVkaXQtMS43LjE4L2F1ZGlzcC9wbHVnaW5zL3ByZWx1ZGUvYXVk
aXNwLXByZWx1ZGUuY29uZiBhdWRpdC0xLjcuMTgtYmEvYXVkaXNwL3BsdWdpbnMvcHJlbHVkZS9h
dWRpc3AtcHJlbHVkZS5jb25mCi0tLSBhdWRpdC0xLjcuMTgvYXVkaXNwL3BsdWdpbnMvcHJlbHVk
ZS9hdWRpc3AtcHJlbHVkZS5jb25mCTIwMTAtMDktMTkgMjE6NTU6MDcuMDAwMDAwMDAwICswMjAw
CisrKyBhdWRpdC0xLjcuMTgtYmEvYXVkaXNwL3BsdWdpbnMvcHJlbHVkZS9hdWRpc3AtcHJlbHVk
ZS5jb25mCTIwMTEtMDYtMTcgMTI6MTk6MTMuMDAwMDAwMDAwICswMjAwCkBAIC01NiwzICs1Niw2
IEBAIHdhdGNoZWRfZXhlY19hY3Rpb24gPSBpZG1lZgogZGV0ZWN0X3dhdGNoZWRfbWtfZXhlID0g
eWVzCiB3YXRjaGVkX21rX2V4ZV9hY3Rpb24gPSBpZG1lZgogCitkZXRlY3RfdHR5ID0geWVzCit0
dHlfYWN0aW9uID0gaWRtZWYKKwpPbmx5IGluIGF1ZGl0LTEuNy4xOC1iYS9hdWRpc3AvcGx1Z2lu
cy9wcmVsdWRlOiAuYXVkaXNwLXByZWx1ZGUuYy5zd28KT25seSBpbiBhdWRpdC0xLjcuMTgtYmEv
YXVkaXNwL3BsdWdpbnMvcHJlbHVkZTogbGlicHJlbHVkZWRiLTEuMC4wCmRpZmYgLXJ1cCBhdWRp
dC0xLjcuMTgvYXVkaXNwL3BsdWdpbnMvcHJlbHVkZS9wcmVsdWRlLWNvbmZpZy5jIGF1ZGl0LTEu
Ny4xOC1iYS9hdWRpc3AvcGx1Z2lucy9wcmVsdWRlL3ByZWx1ZGUtY29uZmlnLmMKLS0tIGF1ZGl0
LTEuNy4xOC9hdWRpc3AvcGx1Z2lucy9wcmVsdWRlL3ByZWx1ZGUtY29uZmlnLmMJMjAxMC0wOS0x
OSAyMTo1NTowNy4wMDAwMDAwMDAgKzAyMDAKKysrIGF1ZGl0LTEuNy4xOC1iYS9hdWRpc3AvcGx1
Z2lucy9wcmVsdWRlL3ByZWx1ZGUtY29uZmlnLmMJMjAxMS0wNC0yOCAxMDo0NToyNy4wMDAwMDAw
MDAgKzAyMDAKQEAgLTEyMiw2ICsxMjIsMTAgQEAgc3RhdGljIGludCB3YXRjaGVkX21rX2V4ZV9w
YXJzZXIoc3RydWN0IAogCQlwcmVsdWRlX2NvbmZfdCAqY29uZmlnKTsKIHN0YXRpYyBpbnQgd2F0
Y2hlZF9ta19leGVfYWN0X3BhcnNlcihzdHJ1Y3QgbnZfcGFpciAqbnYsIGludCBsaW5lLCAKIAkJ
cHJlbHVkZV9jb25mX3QgKmNvbmZpZyk7CitzdGF0aWMgaW50IHR0eV9wYXJzZXIoc3RydWN0IG52
X3BhaXIgKm52LCBpbnQgbGluZSwgCisJCXByZWx1ZGVfY29uZl90ICpjb25maWcpOworc3RhdGlj
IGludCB0dHlfYWN0X3BhcnNlcihzdHJ1Y3QgbnZfcGFpciAqbnYsIGludCBsaW5lLCAKKwkJcHJl
bHVkZV9jb25mX3QgKmNvbmZpZyk7CiBzdGF0aWMgaW50IHNhbml0eV9jaGVjayhwcmVsdWRlX2Nv
bmZfdCAqY29uZmlnLCBjb25zdCBjaGFyICpmaWxlKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBr
d19wYWlyIGtleXdvcmRzW10gPSAKQEAgLTE1OCw2ICsxNjIsOCBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IGt3X3BhaXIga2V5d29yZHNbXSA9CiAgIHsid2F0Y2hlZF9leGVjX2FjdGlvbiIsICAgICAg
ICB3YXRjaGVkX2V4ZWNfYWN0X3BhcnNlciwJMCB9LAogICB7ImRldGVjdF93YXRjaGVkX21rX2V4
ZSIsICAgICAgd2F0Y2hlZF9ta19leGVfcGFyc2VyLAkJMCB9LAogICB7IndhdGNoZWRfbWtfZXhl
X2FjdGlvbiIsICAgICAgd2F0Y2hlZF9ta19leGVfYWN0X3BhcnNlciwJMCB9LAorICB7ImRldGVj
dF90dHkiLCAgICAgICAgICAgICAgICAgdHR5X3BhcnNlciwJCTAgfSwKKyAgeyJ0dHlfYWN0aW9u
IiwgICAgICAgICAgICAgICAgIHR0eV9hY3RfcGFyc2VyLAkwIH0sCiAgIHsgTlVMTCwgICAgICAg
ICAgICAgTlVMTCB9CiB9OwogCkBAIC0yMTUsNiArMjIxLDggQEAgdm9pZCBjbGVhcl9jb25maWco
cHJlbHVkZV9jb25mX3QgKmNvbmZpZwogCWNvbmZpZy0+d2F0Y2hlZF9leGVjX2FjdCA9IEFfSURN
RUY7CiAJY29uZmlnLT53YXRjaGVkX21rX2V4ZSA9IEVfWUVTOwogCWNvbmZpZy0+d2F0Y2hlZF9t
a19leGVfYWN0ID0gQV9JRE1FRjsKKwljb25maWctPnR0eSA9IEVfWUVTOworCWNvbmZpZy0+dHR5
X2FjdCA9IEFfSURNRUY7CiAJaWxpc3RfY3JlYXRlKCZjb25maWctPndhdGNoZWRfYWNjb3VudHMp
OwogfQogCkBAIC03OTAsNiArNzk4LDIzIEBAIHN0YXRpYyBpbnQgd2F0Y2hlZF9ta19leGVfYWN0
X3BhcnNlcihzdHIKICAgICAgICAgcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgdHR5X3BhcnNl
cihzdHJ1Y3QgbnZfcGFpciAqbnYsIGludCBsaW5lLAorCXByZWx1ZGVfY29uZl90ICpjb25maWcp
Cit7CisJaWYgKGxvb2t1cF9lbmFibGVyKG52LT52YWx1ZSwgJmNvbmZpZy0+dHR5KSA9PSAwKQor
CQlyZXR1cm4gMDsKKyAgICAgICAgc3lzbG9nKExPR19FUlIsICJPcHRpb24gJXMgbm90IGZvdW5k
IC0gbGluZSAlZCIsIG52LT52YWx1ZSwgbGluZSk7CisgICAgICAgIHJldHVybiAxOworfQorCitz
dGF0aWMgaW50IHR0eV9hY3RfcGFyc2VyKHN0cnVjdCBudl9wYWlyICpudiwgaW50IGxpbmUsCisJ
cHJlbHVkZV9jb25mX3QgKmNvbmZpZykKK3sKKwlpZiAobG9va3VwX2FjdGlvbihudi0+dmFsdWUs
ICZjb25maWctPnR0eV9hY3QpID09IDApCisJCXJldHVybiAwOworICAgICAgICBzeXNsb2coTE9H
X0VSUiwgIk9wdGlvbiAlcyBub3QgZm91bmQgLSBsaW5lICVkIiwgbnYtPnZhbHVlLCBsaW5lKTsK
KyAgICAgICAgcmV0dXJuIDE7Cit9CiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB3ZSBk
byB0aGUgaW50ZWdyYXRlZCBjaGVjayBvZiB0aGUgYXVkaXNwZCBjb25maWcKICAqIG9wdGlvbnMu
IEF0IHRoaXMgcG9pbnQsIGFsbCBmaWVsZHMgaGF2ZSBiZWVuIHJlYWQuIFJldHVybnMgMCBpZiBu
bwpkaWZmIC1ydXAgYXVkaXQtMS43LjE4L2F1ZGlzcC9wbHVnaW5zL3ByZWx1ZGUvcHJlbHVkZS1j
b25maWcuaCBhdWRpdC0xLjcuMTgtYmEvYXVkaXNwL3BsdWdpbnMvcHJlbHVkZS9wcmVsdWRlLWNv
bmZpZy5oCi0tLSBhdWRpdC0xLjcuMTgvYXVkaXNwL3BsdWdpbnMvcHJlbHVkZS9wcmVsdWRlLWNv
bmZpZy5oCTIwMTAtMDktMTkgMjE6NTU6MDcuMDAwMDAwMDAwICswMjAwCisrKyBhdWRpdC0xLjcu
MTgtYmEvYXVkaXNwL3BsdWdpbnMvcHJlbHVkZS9wcmVsdWRlLWNvbmZpZy5oCTIwMTEtMDQtMjcg
MTI6MzQ6MjEuMDAwMDAwMDAwICswMjAwCkBAIC02NCw2ICs2NCw4IEBAIHR5cGVkZWYgc3RydWN0
IHByZWx1ZGVfY29uZgogCWFjdGlvbl90IHdhdGNoZWRfZXhlY19hY3Q7CiAJZW5hYmxlX3Qgd2F0
Y2hlZF9ta19leGU7CiAJYWN0aW9uX3Qgd2F0Y2hlZF9ta19leGVfYWN0OworCWVuYWJsZV90IHR0
eTsKKwlhY3Rpb25fdCB0dHlfYWN0OwogfSBwcmVsdWRlX2NvbmZfdDsKIAogdm9pZCBjbGVhcl9j
b25maWcocHJlbHVkZV9jb25mX3QgKmNvbmZpZyk7Cg==

--=_4cbd6d4b-44d0-4563-83c6-130598736494
Content-Type: text/x-python; name=preludetty.py
Content-Disposition: attachment; filename=preludetty.py
Content-Transfer-Encoding: base64

IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBzeXMKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCB0
aW1lCmZyb20gY2dpIGltcG9ydCBlc2NhcGUKZnJvbSBwcmV0dHl0YWJsZSBpbXBvcnQgUHJldHR5
VGFibGUKZnJvbSBwcmV3aWtrYSBpbXBvcnQgSURNRUZEYXRhYmFzZQpmcm9tIHByZXdpa2thIGlt
cG9ydCBDb25maWcKZnJvbSBwcmVsdWRlZGIgaW1wb3J0ICoKZnJvbSBwcmVsdWRlIGltcG9ydCAq
CgpjbGFzcyBTdG9yZURhdGUoYXJncGFyc2UuQWN0aW9uKToKCWRlZiBfX2luaXRfXyhzZWxmLG9w
dGlvbl9zdHJpbmdzLGRlc3QsIG5hcmdzPU5vbmUsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9Tm9uZSwg
dHlwZT1Ob25lLCBjaG9pY2VzPU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBoZWxwPU5vbmUsIG1ldGF2
YXI9Tm9uZSk6CgkJYXJncGFyc2UuQWN0aW9uLl9faW5pdF9fKHNlbGYsIG9wdGlvbl9zdHJpbmdz
PW9wdGlvbl9zdHJpbmdzLCBkZXN0PWRlc3QsIG5hcmdzPW5hcmdzLCBjb25zdD1jb25zdCwgZGVm
YXVsdD1kZWZhdWx0LCB0eXBlPXR5cGUsCgkJCQkJY2hvaWNlcz1jaG9pY2VzLCByZXF1aXJlZD1y
ZXF1aXJlZCwgaGVscD1oZWxwLCBtZXRhdmFyPW1ldGF2YXIgKQoJZGVmIF9fY2FsbF9fKHNlbGYs
IHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CgkJdGltZV9i
ZWdpbiA9IHRpbWUuc3RycHRpbWUodmFsdWVzLCAiJVktJW0tJWQgJUg6JU06JVMiKQoJCXNldGF0
dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIHRpbWVfYmVnaW4pCgpjbGFzcyBQcmVsdWRlS2V5bG9n
Z2VyOgoJcGFyc2VkX2FyZ3MgPSBOb25lCglkZWYgX19pbml0X18oc2VsZixhcmdzKToKCQlzZWxm
LnBhcnNlQXJncyhhcmdzKQoKCWRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6CgkJcGFyc2VyID0g
YXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQoJCXBhcnNlci5hZGRfYXJndW1lbnQoJy11JywgJy0t
dXNlcicsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ndXNlcicsIGRlZmF1bHQ9W10sIGhlbHA9J1Nw
ZWNpZmljIHVzZXIgdG8gcXVlcnksIHJlcGVhdCBmb3IgbXVsdGlwbGUgdXNlcnMnICkKCQlwYXJz
ZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZyb20tdGltZScsIGRlc3Q9J3RpbWVfYmVnaW4nLCBh
Y3Rpb249U3RvcmVEYXRlLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1NwZWNpZnkgc3RhcnQgdGltZSBm
b3IgcXVlcnlpbmcnKQoJCXBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdG8tdGltZScsIGRl
c3Q9J3RpbWVfZW5kJywgYWN0aW9uPVN0b3JlRGF0ZSwgZGVmYXVsdD1Ob25lLCBoZWxwPSdTcGVj
aWZ5IGVuZCB0aW1lIGZvciBxdWVyeWluZycpCgkJcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4nLCAn
LS1ub2RlJywgZGVzdD0nbm9kZScsIGFjdGlvbj0nYXBwZW5kJywgZGVmYXVsdD1bXSwgaGVscD0n
U3BlY2lmaWMgbm9kZSB0byBxdWVyeSwgcmVwZWF0IGZvciBtdWx0aXBsZSBub2RlcycpCgkJcGFy
c2VyLmFkZF9hcmd1bWVudCgnLS1odG1sJywgZGVzdD0nb3V0cHV0X2h0bWwnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdUcmlnZ2VyIEhUTUwgb3V0cHV0JykKCQl0
cnk6CgkJCXNlbGYucGFyc2VkX2FyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCgkJZXhjZXB0IFZh
bHVlRXJyb3I6CgkJCXN5cy5zdGRlcnIud3JpdGUoJ0ludmFsaWQgZGF0ZXRpbWUgZm9ybWF0LCBm
b3JtYXQgaXMgIllZWVktTU0tREQgaGg6bW06c3MiXG4nKQoJCQlzeXMuZXhpdCgtMikKCglkZWYg
YnVpbGRDcml0ZXJpYShzZWxmKToKCQljcml0ZXJpYT0iYWxlcnQuY2xhc3NpZmljYXRpb24udGV4
dCA9IFwiS2V5bG9nZ2VyXCIiCgkJaWYgKCBzZWxmLnBhcnNlZF9hcmdzLnRpbWVfYmVnaW4gaXMg
bm90IE5vbmUgKToKCQkJc3RydGltZSA9IHRpbWUuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVT
Iiwgc2VsZi5wYXJzZWRfYXJncy50aW1lX2JlZ2luICkKCQkJY3JpdGVyaWEgPSBjcml0ZXJpYSAr
ICcgJiYgYWxlcnQuZGV0ZWN0X3RpbWUgPj0gIicgKyBzdHJ0aW1lICsgJyInCgkJaWYgKCBzZWxm
LnBhcnNlZF9hcmdzLnRpbWVfZW5kIGlzIG5vdCBOb25lICk6CgkJCXN0cnRpbWUgPSB0aW1lLnN0
cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIsIHNlbGYucGFyc2VkX2FyZ3MudGltZV9lbmQgKQoJ
CQljcml0ZXJpYSA9IGNyaXRlcmlhICsgJyAmJiBhbGVydC5kZXRlY3RfdGltZSA8PSAiJyArIHN0
cnRpbWUgKyAnIicKCgkJdXNlcnNfY3JpdGVyaWEgPSBbXQoJCWZvciB1c2VyIGluIHNlbGYucGFy
c2VkX2FyZ3MudXNlcjoKCQkJdXNlcnNfY3JpdGVyaWEuYXBwZW5kKCdhbGVydC5zb3VyY2UoLTEp
LnVzZXIudXNlcl9pZCgtMSkubmFtZSA9PSAiJyArIHVzZXIgKyAnIicpCgkJaWYgKGxlbih1c2Vy
c19jcml0ZXJpYSkgIT0gMCk6CgkJCWNyaXRlcmlhID0gY3JpdGVyaWEgKyAnICYmICggJyArICcg
fHwgJy5qb2luKHVzZXJzX2NyaXRlcmlhKSArICcgKScKCgkJbm9kZXNfY3JpdGVyaWEgPSBbXQoJ
CWZvciBub2RlIGluIHNlbGYucGFyc2VkX2FyZ3Mubm9kZToKCQkJbm9kZXNfY3JpdGVyaWEuYXBw
ZW5kKCdhbGVydC5hbmFseXplcigtMSkubm9kZS5uYW1lID09ICInICsgbm9kZSArICciJykKCQlp
ZiAobGVuKG5vZGVzX2NyaXRlcmlhKSAhPSAwKToKCQkJY3JpdGVyaWEgPSBjcml0ZXJpYSArICcg
JiYgKCAnICsgJyB8fCAnLmpvaW4obm9kZXNfY3JpdGVyaWEpICsgJyApJwoJCXJldHVybiBjcml0
ZXJpYQoJCQkKCWRlZiBtYWluKHNlbGYpOgoJCWNyaXRlcmlhID0gc2VsZi5idWlsZENyaXRlcmlh
KCkKCQljb25maWcgPSBDb25maWcuQ29uZmlnKE5vbmUpCgkJcHJlbHVkZWRiX2luaXQoKQoJCWlk
bWVmX2RiID0gSURNRUZEYXRhYmFzZS5JRE1FRkRhdGFiYXNlKGNvbmZpZy5pZG1lZl9kYXRhYmFz
ZSkKCQlteV9zZWxlY3Rpb24gPSBwcmVsdWRlZGJfcGF0aF9zZWxlY3Rpb25fbmV3KCkKCQlyZXMg
PSBpZG1lZl9kYi5nZXRWYWx1ZXMoWwoJCQkiYWxlcnQuZGV0ZWN0X3RpbWUiLAoJCQkiYWxlcnQu
YW5hbHl6ZXIoLTEpLm5vZGUubmFtZSIsCgkJCSJhbGVydC5zb3VyY2UoLTEpLnVzZXIudXNlcl9p
ZCgtMSkubmFtZSIsCgkJCSJhbGVydC5zb3VyY2UoLTEpLnVzZXIudXNlcl9pZCgtMSkubnVtYmVy
IiwKCQkJImFsZXJ0LnNvdXJjZSgtMSkucHJvY2Vzcy5uYW1lIiwKCQkJImFsZXJ0LnNvdXJjZSgt
MSkucHJvY2Vzcy5waWQiLAoJCQkiYWxlcnQuYWRkaXRpb25hbF9kYXRhKDApLmRhdGEiCgkJCV0s
Y3JpdGVyaWEpCgkJeCA9IFByZXR0eVRhYmxlKFsnVGltZScsJ05vZGUnLCdVc2VyKHBpZCknLCdQ
cm9jZXNzKHBpZCknLCdLZXlzdHJva2VzJ10pCgkJeC5zZXRfZmllbGRfYWxpZ24oIktleXN0cm9r
ZXMiLCAibCIpCgkJeC5zZXRfcGFkZGluZ193aWR0aCgxKQoJCWZvciByZWNvcmQgaW4gcmVzOgoJ
CQlkZXRlY3RfdGltZT1yZWNvcmRbMF0KCQkJbm9kZV9uYW1lPXJlY29yZFsxXQoJCQl1c2VyX2lk
PXJlY29yZFsyXQoJCQl1c2VyX3BpZD1yZWNvcmRbM10KCQkJcHJvY2Vzc19uYW1lPXJlY29yZFs0
XQoJCQlwcm9jZXNzX3BpZD1yZWNvcmRbNV0KCQkJa2V5c3Ryb2tlcz1yZWNvcmRbNl0KCQkJeC5h
ZGRfcm93KFtkZXRlY3RfdGltZSwgbm9kZV9uYW1lLCB1c2VyX2lkKycoJytzdHIodXNlcl9waWQp
KycpJywgcHJvY2Vzc19uYW1lKycoJytzdHIocHJvY2Vzc19waWQpKycpJywga2V5c3Ryb2tlc10p
CgkJCSNwcmludCAiJXNcdCVzXHQlcyglcylcdCVzKCVzKVx0JXMiICUgKCBkZXRlY3RfdGltZSwg
bm9kZV9uYW1lLCB1c2VyX2lkLCB1c2VyX3BpZCwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCwg
a2V5c3Ryb2tlcykKCQlpZiAoIHNlbGYucGFyc2VkX2FyZ3Mub3V0cHV0X2h0bWwgKToKCQkJcHJp
bnQgJzxodG1sPjxoZWFkPjx0aXRsZT5QcmVsdWRlIGtleWxvZ2dlciByZXBvcnQ8L3RpdGxlPjwv
aGVhZD48Ym9keT4nCgkJCXByaW50ICc8c3Ryb25nPkNyaXRlcmlhOiA8L3N0cm9uZz48cCBzdHls
ZT0iZm9udC1mYW1pbHk6IGZpeGVkc3lzLCBtb25vc3BhY2UiPicgKyBlc2NhcGUoY3JpdGVyaWEp
ICsgJzwvcD48YnI+PGJyPicKCQkJeC5wcmludF9odG1sKCkKCQkJcHJpbnQgJzwvYm9keT48L2h0
bWw+JwoJCWVsc2U6CgkJCXByaW50ICJDcml0ZXJpYTogIiArIGNyaXRlcmlhCgkJCXgucHJpbnR0
KCkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CglzeXMuZXhpdChQcmVsdWRlS2V5bG9nZ2Vy
KHN5cy5hcmd2KS5tYWluKCkpCgoKCg==

--=_4cbd6d4b-44d0-4563-83c6-130598736494
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Prelude-devel site list
[email protected]
http://lists.prelude-technologies.com/mailman/listinfo/prelude-devel
--=_4cbd6d4b-44d0-4563-83c6-130598736494--