diff --git a/pandora_console/extras/mr/60.sql b/pandora_console/extras/mr/60.sql index f90ee39683..7be8a0b4ef 100644 --- a/pandora_console/extras/mr/60.sql +++ b/pandora_console/extras/mr/60.sql @@ -11,6 +11,8 @@ ALTER TABLE `tagent_custom_fields` ADD `is_link_enabled` TINYINT(1) NOT NULL DEF ALTER TABLE `tevent_filter` ADD COLUMN `owner_user` TEXT; ALTER TABLE `tevent_filter` ADD COLUMN `not_search` INT NOT NULL DEFAULT 0; +ALTER TABLE `tusuario` MODIFY COLUMN `password` VARCHAR(60) DEFAULT NULL; + update `tmodule_inventory` set `code`='IyEvdXNyL2Jpbi9wZXJsCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcGFuZG9yYV9jcHUucGwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDb3B5cmlnaHQgKGMpIDIwMDggUmFtb24gTm92b2EsIHJub3ZvYUBhcnRpY2EuZXMKIyAgICAgICAgICAgKGMpIDIwMDgtMjAyMSBBcnRpY2EgU29sdWNpb25lcyBUZWNub2xvZ2ljYXMgUy5MCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgSFRNTDo6RW50aXRpZXMgKCk7CgojIENoZWNrIGZvciB3bWljCm15ICR3bWlfY2xpZW50ID0gIi91c3IvYmluL3BhbmRvcmF3bWljIjsKCnVubGVzcygtZSAkd21pX2NsaWVudCkgewoJcHJpbnQgIltlcnJvcl0gJHdtaV9jbGllbnQgbm90IGZvdW5kLlxuIjsKCWV4aXQgMTsKfQoKaWYgKCQjQVJHViAhPSAyKSB7CglwcmludCAiVXNhZ2U6ICQwIDx0YXJnZXQgaXA+IDx1c2VybmFtZT4gPHBhc3N3b3JkPlxuIjsKCWV4aXQgMTsKfQoKbXkgJHRhcmdldF9pcCA9ICRBUkdWWzBdOwpteSAkdXNlcm5hbWUgPSAkQVJHVlsxXTsKbXkgJHBhc3N3b3JkID0gJEFSR1ZbMl07CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNVQiBydW5fcXVlcnkgKCR3cWxfcXVlcnkpCiMgUnVucyB0aGUgZ2l2ZW4gV1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYW4gYXJyYXkgb2YgaGFzaGVzLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgcnVuX3F1ZXJ5IHsKCW15ICR3cWxfcXVlcnkgPSAkX1swXTsKCW15IEByZXN1bHQgPSB7fTsKCgkkd3FsX3F1ZXJ5ID1+ICdzLyIvXCcvZyc7CgoJIyBSdW4gdGhlIERDT00vV01JIGNsaWVudAoJbXkgJG91dHB1dCA9IGAkd21pX2NsaWVudCAtVSAnJHVzZXJuYW1lJyUnJHBhc3N3b3JkJyAvLyR0YXJnZXRfaXAgXCIkd3FsX3F1ZXJ5XCIgMj4vZGV2L251bGxgOwoKCW15IEBsaW5lcyA9IHNwbGl0KC9cbi8sICRvdXRwdXQpOwoJIyBIZWFkZXIsIGRlc2NyaXB0aW9uLCByZXN1bHRzCglpZiAoJCNsaW5lcyA8IDIpIHsKCQlleGl0IDE7Cgl9CgoJIyBEcm9wIHRoZSBoZWFkZXIKCXNoaWZ0IChAbGluZXMpOwoJCgkjIEdldCBjb2x1bW4gbmFtZXMKCW15IEBjb2x1bW5fbmFtZXMgPSBzcGxpdCgvXHwvLCBzaGlmdCAoQGxpbmVzKSk7CgoJIyBHZXQgcm93IGRhdGEKCW15ICRpZHggPSAwOwoJZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjbGluZXM7ICRpKyspIHsKCgkJIyBDaGVjayBmb3IgZXJyb3JzCgkJaWYgKCRsaW5lc1skaV0gPX4gbS9eRVJST1IvKSB7CgkJCWV4aXQgMTsKCQl9CgoJCSMgQmxhY2sgbGlzdAoJCWlmICgkbGluZXNbJGldID1+IG0vRmlsZSAxLykgewoJCQluZXh0OwoJCX0KCgkJbXkgQGNvbHVtbiA9IHNwbGl0KC9cfC8sICRsaW5lc1skaV0pOwoJCWZvciAobXkgJGogPSAwOyAkaiA8PSAkI2NvbHVtbl9uYW1lczsgJGorKykgewoJCQlpZiAoISBkZWZpbmVkKCRjb2x1bW5bJGpdKSkgewoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICIiOwoJCQl9CgkJCWVsc2UgewoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICRjb2x1bW5bJGpdOwoJCQl9CgkJfQoJCQoJCSRpZHgrKzsKCX0KCQoJcmV0dXJuIEByZXN1bHQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU1VCIHByaW50X21vZHVsZWRhdGEgKCRtb2R1bGVfaXRlbSwgJG1vZHVsZV9kYXRhLCAKIyAkbW9kdWxlX2Rlc2NyaXB0aW9uLCBAZGF0YSkKIyBQcmludHMgYSBtb2R1bGVkYXRhIFhNTCB0YWcuICRtb2R1bGVfaXRlbSwgJG1vZHVsZV9kYXRhIGFuZAojICRtb2R1bGVfZGVzY3JpcHRpb24gYXJlIHVzZWQgdG8gaW5kZXggdGhlIGl0ZW0sIGRhdGEgYW5kIGRlc2NyaXB0aW9uCiMgWE1MIHRhZ3MgcmVzcGVjdGl2ZWx5LgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgcHJpbnRfbW9kdWxlZGF0YSB7CglteSAkbW9kdWxlX2l0ZW0gPSAkX1swXTsKCW15ICRtb2R1bGVfZGF0YSA9ICRfWzFdOwoJbXkgJG1vZHVsZV9kZXNjcmlwdGlvbiA9ICRfWzJdOwoJbXkgQGRhdGEgPSBAeyRfWzNdfTsKCW15ICRyZXN1bHQ7CgoJZm9yZWFjaCBteSAkZWxlbWVudCAoQGRhdGEpIHsKCQkKCQkkcmVzdWx0ID0gJyc7CgoJCSMgSXRlbQoJCWlmIChkZWZpbmVkKCRlbGVtZW50LT57JG1vZHVsZV9pdGVtfSkpIHsKCQkJJHJlc3VsdCAuPSAkZWxlbWVudC0+eyRtb2R1bGVfaXRlbX0gLiAiOyI7CgkJfQoKCQkjIERhdGEKCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGF0YX0pKSB7CgkJCSRyZXN1bHQgLj0gJGVsZW1lbnQtPnskbW9kdWxlX2RhdGF9IC4gIiBNaHo7IjsKCQl9CgoJCSMgRGVzY3JpcHRpb24KCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGVzY3JpcHRpb259KSkgewoJCQkkcmVzdWx0IC49ICRlbGVtZW50LT57JG1vZHVsZV9kZXNjcmlwdGlvbn0gLiAiOyI7CgkJfQoKCQlwcmludCAkcmVzdWx0IC4gIlxuIjsJCgl9Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTWFpbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKbXkgQHJlc3VsdCA9IHJ1bl9xdWVyeSgiU0VMRUNUIE5hbWUsIE1heENsb2NrU3BlZWQsIERlc2NyaXB0aW9uIEZST00gV2luMzJfUHJvY2Vzc29yIik7CnByaW50X21vZHVsZWRhdGEgKCJOYW1lIiwgIk1heENsb2NrU3BlZWQiLCAiRGVzY3JpcHRpb24iLCBcQHJlc3VsdCk7CmV4aXQgMDsK' where `code`='IyEvdXNyL2Jpbi9wZXJsDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBwYW5kb3JhX2NwdS5wbA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQ29weXJpZ2h0IChjKSAyMDA4IFJhbW9uIE5vdm9hLCBybm92b2FAYXJ0aWNhLmVzDQojICAgICAgICAgICAoYykgMjAwOCBBcnRpY2EgU29sdWNpb25lcyBUZWNub2xvZ2ljYXMgUy5MDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KdXNlIHN0cmljdDsNCnVzZSB3YXJuaW5nczsNCg0KdXNlIEZpbGU6OkJhc2VuYW1lOw0KdXNlIEhUTUw6OkVudGl0aWVzICgpOw0KDQojIENoZWNrIGZvciB3bWljDQpteSAkd21pX2NsaWVudCA9ICJ3bWljIjsNCmlmIChzeXN0ZW0oIiR3bWlfY2xpZW50ID4gL2Rldi9udWxsIDI+JjEiKSAhPSAyNTYpIHsNCglwcmludCAiW2Vycm9yXSAkd21pX2NsaWVudCBub3QgZm91bmQuXG4iOw0KCWV4aXQgMTsNCn0NCg0KaWYgKCQjQVJHViAhPSAyKSB7DQoJcHJpbnQgIlVzYWdlOiAkMCA8dGFyZ2V0IGlwPiA8dXNlcm5hbWU+IDxwYXNzd29yZD5cbiI7DQoJZXhpdCAxOw0KfQ0KDQpteSAkdGFyZ2V0X2lwID0gJEFSR1ZbMF07DQpteSAkdXNlcm5hbWUgPSAkQVJHVlsxXTsNCm15ICRwYXNzd29yZCA9ICRBUkdWWzJdOw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBTVUIgcnVuX3F1ZXJ5ICgkd3FsX3F1ZXJ5KQ0KIyBSdW5zIHRoZSBnaXZlbiBXUUwgcXVlcnkgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhbiBhcnJheSBvZiBoYXNoZXMuDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0Kc3ViIHJ1bl9xdWVyeSB7DQoJbXkgJHdxbF9xdWVyeSA9ICRfWzBdOw0KCW15IEByZXN1bHQgPSB7fTsNCg0KCSR3cWxfcXVlcnkgPX4gJ3MvIi9cJy9nJzsNCg0KCSMgUnVuIHRoZSBEQ09NL1dNSSBjbGllbnQNCglteSAkb3V0cHV0ID0gYCR3bWlfY2xpZW50IC1VICckdXNlcm5hbWUnJSckcGFzc3dvcmQnIC8vJHRhcmdldF9pcCBcIiR3cWxfcXVlcnlcIiAyPi9kZXYvbnVsbGA7DQoNCglteSBAbGluZXMgPSBzcGxpdCgvXG4vLCAkb3V0cHV0KTsNCgkjIEhlYWRlciwgZGVzY3JpcHRpb24sIHJlc3VsdHMNCglpZiAoJCNsaW5lcyA8IDIpIHsNCgkJZXhpdCAxOw0KCX0NCg0KCSMgRHJvcCB0aGUgaGVhZGVyDQoJc2hpZnQgKEBsaW5lcyk7DQoJDQoJIyBHZXQgY29sdW1uIG5hbWVzDQoJbXkgQGNvbHVtbl9uYW1lcyA9IHNwbGl0KC9cfC8sIHNoaWZ0IChAbGluZXMpKTsNCg0KCSMgR2V0IHJvdyBkYXRhDQoJbXkgJGlkeCA9IDA7DQoJZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjbGluZXM7ICRpKyspIHsNCg0KCQkjIENoZWNrIGZvciBlcnJvcnMNCgkJaWYgKCRsaW5lc1skaV0gPX4gbS9eRVJST1IvKSB7DQoJCQlleGl0IDE7DQoJCX0NCg0KCQkjIEJsYWNrIGxpc3QNCgkJaWYgKCRsaW5lc1skaV0gPX4gbS9GaWxlIDEvKSB7DQoJCQluZXh0Ow0KCQl9DQoNCgkJbXkgQGNvbHVtbiA9IHNwbGl0KC9cfC8sICRsaW5lc1skaV0pOw0KCQlmb3IgKG15ICRqID0gMDsgJGogPD0gJCNjb2x1bW5fbmFtZXM7ICRqKyspIHsNCgkJCWlmICghIGRlZmluZWQoJGNvbHVtblskal0pKSB7DQoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICIiOw0KCQkJfQ0KCQkJZWxzZSB7DQoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICRjb2x1bW5bJGpdOw0KCQkJfQ0KCQl9DQoJCQ0KCQkkaWR4Kys7DQoJfQ0KCQ0KCXJldHVybiBAcmVzdWx0Ow0KfQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBTVUIgcHJpbnRfbW9kdWxlZGF0YSAoJG1vZHVsZV9pdGVtLCAkbW9kdWxlX2RhdGEsIA0KIyAkbW9kdWxlX2Rlc2NyaXB0aW9uLCBAZGF0YSkNCiMgUHJpbnRzIGEgbW9kdWxlZGF0YSBYTUwgdGFnLiAkbW9kdWxlX2l0ZW0sICRtb2R1bGVfZGF0YSBhbmQNCiMgJG1vZHVsZV9kZXNjcmlwdGlvbiBhcmUgdXNlZCB0byBpbmRleCB0aGUgaXRlbSwgZGF0YSBhbmQgZGVzY3JpcHRpb24NCiMgWE1MIHRhZ3MgcmVzcGVjdGl2ZWx5Lg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN1YiBwcmludF9tb2R1bGVkYXRhIHsNCglteSAkbW9kdWxlX2l0ZW0gPSAkX1swXTsNCglteSAkbW9kdWxlX2RhdGEgPSAkX1sxXTsNCglteSAkbW9kdWxlX2Rlc2NyaXB0aW9uID0gJF9bMl07DQoJbXkgQGRhdGEgPSBAeyRfWzNdfTsNCglteSAkcmVzdWx0Ow0KDQoJZm9yZWFjaCBteSAkZWxlbWVudCAoQGRhdGEpIHsNCgkJDQoJCSRyZXN1bHQgPSAnJzsNCg0KCQkjIEl0ZW0NCgkJaWYgKGRlZmluZWQoJGVsZW1lbnQtPnskbW9kdWxlX2l0ZW19KSkgew0KCQkJJHJlc3VsdCAuPSAkZWxlbWVudC0+eyRtb2R1bGVfaXRlbX0gLiAiOyI7DQoJCX0NCg0KCQkjIERhdGENCgkJaWYgKGRlZmluZWQoJGVsZW1lbnQtPnskbW9kdWxlX2RhdGF9KSkgew0KCQkJJHJlc3VsdCAuPSAkZWxlbWVudC0+eyRtb2R1bGVfZGF0YX0gLiAiIE1oejsiOw0KCQl9DQoNCgkJIyBEZXNjcmlwdGlvbg0KCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGVzY3JpcHRpb259KSkgew0KCQkJJHJlc3VsdCAuPSAkZWxlbWVudC0+eyRtb2R1bGVfZGVzY3JpcHRpb259IC4gIjsiOw0KCQl9DQoNCgkJcHJpbnQgJHJlc3VsdCAuICJcbiI7CQ0KCX0NCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgTWFpbg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KbXkgQHJlc3VsdCA9IHJ1bl9xdWVyeSgiU0VMRUNUIE5hbWUsIE1heENsb2NrU3BlZWQsIERlc2NyaXB0aW9uIEZST00gV2luMzJfUHJvY2Vzc29yIik7DQpwcmludF9tb2R1bGVkYXRhICgiTmFtZSIsICJNYXhDbG9ja1NwZWVkIiwgIkRlc2NyaXB0aW9uIiwgXEByZXN1bHQpOw0KZXhpdCAwOw0K' and `name` = 'CPU' and `id_module_inventory`=2; update `tmodule_inventory` set `code`='IyEvdXNyL2Jpbi9wZXJsCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcGFuZG9yYV9yYW0ucGwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDb3B5cmlnaHQgKGMpIDIwMDggUmFtb24gTm92b2EsIHJub3ZvYUBhcnRpY2EuZXMKIyAgICAgICAgICAgKGMpIDIwMDgtMjAyMSBBcnRpY2EgU29sdWNpb25lcyBUZWNub2xvZ2ljYXMgUy5MCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgSFRNTDo6RW50aXRpZXMgKCk7CgojIENoZWNrIGZvciB3bWljCm15ICR3bWlfY2xpZW50ID0gIi91c3IvYmluL3BhbmRvcmF3bWljIjsKCnVubGVzcygtZSAkd21pX2NsaWVudCkgewoJcHJpbnQgIltlcnJvcl0gJHdtaV9jbGllbnQgbm90IGZvdW5kLlxuIjsKCWV4aXQgMTsKfQoKaWYgKCQjQVJHViAhPSAyKSB7CglwcmludCAiVXNhZ2U6ICQwIDx0YXJnZXQgaXA+IDx1c2VybmFtZT4gPHBhc3N3b3JkPlxuIjsKCWV4aXQgMTsKfQoKbXkgJHRhcmdldF9pcCA9ICRBUkdWWzBdOwpteSAkdXNlcm5hbWUgPSAkQVJHVlsxXTsKbXkgJHBhc3N3b3JkID0gJEFSR1ZbMl07CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNVQiBydW5fcXVlcnkgKCR3cWxfcXVlcnkpCiMgUnVucyB0aGUgZ2l2ZW4gV1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYW4gYXJyYXkgb2YgaGFzaGVzLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgcnVuX3F1ZXJ5IHsKCW15ICR3cWxfcXVlcnkgPSAkX1swXTsKCW15IEByZXN1bHQgPSB7fTsKCgkkd3FsX3F1ZXJ5ID1+ICdzLyIvXCcvZyc7CgoJIyBSdW4gdGhlIERDT00vV01JIGNsaWVudAoJbXkgJG91dHB1dCA9IGAkd21pX2NsaWVudCAtVSAnJHVzZXJuYW1lJyUnJHBhc3N3b3JkJyAvLyR0YXJnZXRfaXAgXCIkd3FsX3F1ZXJ5XCIgMj4vZGV2L251bGxgOwoKCW15IEBsaW5lcyA9IHNwbGl0KC9cbi8sICRvdXRwdXQpOwoJIyBIZWFkZXIsIGRlc2NyaXB0aW9uLCByZXN1bHRzCglpZiAoJCNsaW5lcyA8IDIpIHsKCQlleGl0IDE7Cgl9CgoJIyBEcm9wIHRoZSBoZWFkZXIKCXNoaWZ0IChAbGluZXMpOwoJCgkjIEdldCBjb2x1bW4gbmFtZXMKCW15IEBjb2x1bW5fbmFtZXMgPSBzcGxpdCgvXHwvLCBzaGlmdCAoQGxpbmVzKSk7CgoJIyBHZXQgcm93IGRhdGEKCW15ICRpZHggPSAwOwoJZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjbGluZXM7ICRpKyspIHsKCgkJIyBDaGVjayBmb3IgZXJyb3JzCgkJaWYgKCRsaW5lc1skaV0gPX4gbS9eRVJST1IvKSB7CgkJCWV4aXQgMTsKCQl9CgoJCSMgQmxhY2sgbGlzdAoJCWlmICgkbGluZXNbJGldID1+IG0vRmlsZSAxLykgewoJCQluZXh0OwoJCX0KCgkJbXkgQGNvbHVtbiA9IHNwbGl0KC9cfC8sICRsaW5lc1skaV0pOwoJCWZvciAobXkgJGogPSAwOyAkaiA8PSAkI2NvbHVtbl9uYW1lczsgJGorKykgewoJCQlpZiAoISBkZWZpbmVkKCRjb2x1bW5bJGpdKSkgewoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICIiOwoJCQl9CgkJCWVsc2UgewoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICRjb2x1bW5bJGpdOwoJCQl9CgkJfQoJCQoJCSRpZHgrKzsKCX0KCQoJcmV0dXJuIEByZXN1bHQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU1VCIHByaW50X21vZHVsZWRhdGEgKCRtb2R1bGVfaXRlbSwgJG1vZHVsZV9kYXRhLCAKIyAkbW9kdWxlX2Rlc2NyaXB0aW9uLCBAZGF0YSkKIyBQcmludHMgYSBtb2R1bGVkYXRhIFhNTCB0YWcuICRtb2R1bGVfaXRlbSwgJG1vZHVsZV9kYXRhIGFuZAojICRtb2R1bGVfZGVzY3JpcHRpb24gYXJlIHVzZWQgdG8gaW5kZXggdGhlIGl0ZW0sIGRhdGEgYW5kIGRlc2NyaXB0aW9uCiMgWE1MIHRhZ3MgcmVzcGVjdGl2ZWx5LgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgcHJpbnRfbW9kdWxlZGF0YSB7CglteSAkbW9kdWxlX2l0ZW0gPSAkX1swXTsKCW15ICRtb2R1bGVfZGF0YSA9ICRfWzFdOwoJbXkgJG1vZHVsZV9kZXNjcmlwdGlvbiA9ICRfWzJdOwoJbXkgQGRhdGEgPSBAeyRfWzNdfTsKCW15ICRyZXN1bHQ7CgoJZm9yZWFjaCBteSAkZWxlbWVudCAoQGRhdGEpIHsKCQkKCQkkcmVzdWx0ID0gJyc7CgoJCSMgSXRlbQoJCWlmIChkZWZpbmVkKCRlbGVtZW50LT57JG1vZHVsZV9pdGVtfSkpIHsKCQkJJHJlc3VsdCAuPSAkZWxlbWVudC0+eyRtb2R1bGVfaXRlbX0gLiAnOyc7CgkJfQoKCQkjIERhdGEKCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGF0YX0pKSB7CgkJCSRyZXN1bHQgLj0gJyAnIC4gc3ByaW50ZigiJS4xZiIsICRlbGVtZW50LT57JG1vZHVsZV9kYXRhfSAvIDEwNDg1NzYpIC4gIiBNQnl0ZXM7IjsKCQl9CgoJCSMgRGVzY3JpcHRpb24KCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGVzY3JpcHRpb259KSkgewoJCQkkcmVzdWx0IC49ICRlbGVtZW50LT57JG1vZHVsZV9kZXNjcmlwdGlvbn07CgkJfQoKCQlwcmludCAkcmVzdWx0IC4gIlxuIjsJCgl9Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTWFpbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKbXkgQHJlc3VsdCA9IHJ1bl9xdWVyeSgiU0VMRUNUIFRhZywgQ2FwYWNpdHksIE5hbWUgRlJPTSBXaW4zMl9QaHlzaWNhbE1lbW9yeSIpOwpwcmludF9tb2R1bGVkYXRhICgiVGFnIiwgIkNhcGFjaXR5IiwgIk5hbWUiLCBcQHJlc3VsdCk7CmV4aXQgMDsK' where `code`='IyEvdXNyL2Jpbi9wZXJsCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcGFuZG9yYV9yYW0ucGwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDb3B5cmlnaHQgKGMpIDIwMDggUmFtb24gTm92b2EsIHJub3ZvYUBhcnRpY2EuZXMKIyAgICAgICAgICAgKGMpIDIwMDggQXJ0aWNhIFNvbHVjaW9uZXMgVGVjbm9sb2dpY2FzIFMuTAojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEhUTUw6OkVudGl0aWVzICgpOwoKIyBDaGVjayBmb3Igd21pYwpteSAkd21pX2NsaWVudCA9ICJ3bWljIjsKaWYgKHN5c3RlbSgiJHdtaV9jbGllbnQgPiAvZGV2L251bGwgMj4mMSIpICE9IDI1NikgewoJcHJpbnQgIltlcnJvcl0gJHdtaV9jbGllbnQgbm90IGZvdW5kLlxuIjsKCWV4aXQgMTsKfQoKaWYgKCQjQVJHViAhPSAyKSB7CglwcmludCAiVXNhZ2U6ICQwIDx0YXJnZXQgaXA+IDx1c2VybmFtZT4gPHBhc3N3b3JkPlxuIjsKCWV4aXQgMTsKfQoKbXkgJHRhcmdldF9pcCA9ICRBUkdWWzBdOwpteSAkdXNlcm5hbWUgPSAkQVJHVlsxXTsKbXkgJHBhc3N3b3JkID0gJEFSR1ZbMl07CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNVQiBydW5fcXVlcnkgKCR3cWxfcXVlcnkpCiMgUnVucyB0aGUgZ2l2ZW4gV1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYW4gYXJyYXkgb2YgaGFzaGVzLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgcnVuX3F1ZXJ5IHsKCW15ICR3cWxfcXVlcnkgPSAkX1swXTsKCW15IEByZXN1bHQgPSB7fTsKCgkkd3FsX3F1ZXJ5ID1+ICdzLyIvXCcvZyc7CgoJIyBSdW4gdGhlIERDT00vV01JIGNsaWVudAoJbXkgJG91dHB1dCA9IGAkd21pX2NsaWVudCAtVSAnJHVzZXJuYW1lJyUnJHBhc3N3b3JkJyAvLyR0YXJnZXRfaXAgXCIkd3FsX3F1ZXJ5XCIgMj4vZGV2L251bGxgOwoKCW15IEBsaW5lcyA9IHNwbGl0KC9cbi8sICRvdXRwdXQpOwoJIyBIZWFkZXIsIGRlc2NyaXB0aW9uLCByZXN1bHRzCglpZiAoJCNsaW5lcyA8IDIpIHsKCQlleGl0IDE7Cgl9CgoJIyBEcm9wIHRoZSBoZWFkZXIKCXNoaWZ0IChAbGluZXMpOwoJCgkjIEdldCBjb2x1bW4gbmFtZXMKCW15IEBjb2x1bW5fbmFtZXMgPSBzcGxpdCgvXHwvLCBzaGlmdCAoQGxpbmVzKSk7CgoJIyBHZXQgcm93IGRhdGEKCW15ICRpZHggPSAwOwoJZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjbGluZXM7ICRpKyspIHsKCgkJIyBDaGVjayBmb3IgZXJyb3JzCgkJaWYgKCRsaW5lc1skaV0gPX4gbS9eRVJST1IvKSB7CgkJCWV4aXQgMTsKCQl9CgoJCSMgQmxhY2sgbGlzdAoJCWlmICgkbGluZXNbJGldID1+IG0vRmlsZSAxLykgewoJCQluZXh0OwoJCX0KCgkJbXkgQGNvbHVtbiA9IHNwbGl0KC9cfC8sICRsaW5lc1skaV0pOwoJCWZvciAobXkgJGogPSAwOyAkaiA8PSAkI2NvbHVtbl9uYW1lczsgJGorKykgewoJCQlpZiAoISBkZWZpbmVkKCRjb2x1bW5bJGpdKSkgewoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICIiOwoJCQl9CgkJCWVsc2UgewoJCQkJJHJlc3VsdFskaWR4XS0+eyRjb2x1bW5fbmFtZXNbJGpdfSA9ICRjb2x1bW5bJGpdOwoJCQl9CgkJfQoJCQoJCSRpZHgrKzsKCX0KCQoJcmV0dXJuIEByZXN1bHQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU1VCIHByaW50X21vZHVsZWRhdGEgKCRtb2R1bGVfaXRlbSwgJG1vZHVsZV9kYXRhLCAKIyAkbW9kdWxlX2Rlc2NyaXB0aW9uLCBAZGF0YSkKIyBQcmludHMgYSBtb2R1bGVkYXRhIFhNTCB0YWcuICRtb2R1bGVfaXRlbSwgJG1vZHVsZV9kYXRhIGFuZAojICRtb2R1bGVfZGVzY3JpcHRpb24gYXJlIHVzZWQgdG8gaW5kZXggdGhlIGl0ZW0sIGRhdGEgYW5kIGRlc2NyaXB0aW9uCiMgWE1MIHRhZ3MgcmVzcGVjdGl2ZWx5LgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgcHJpbnRfbW9kdWxlZGF0YSB7CglteSAkbW9kdWxlX2l0ZW0gPSAkX1swXTsKCW15ICRtb2R1bGVfZGF0YSA9ICRfWzFdOwoJbXkgJG1vZHVsZV9kZXNjcmlwdGlvbiA9ICRfWzJdOwoJbXkgQGRhdGEgPSBAeyRfWzNdfTsKCW15ICRyZXN1bHQ7CgoJZm9yZWFjaCBteSAkZWxlbWVudCAoQGRhdGEpIHsKCQkKCQkkcmVzdWx0ID0gJyc7CgoJCSMgSXRlbQoJCWlmIChkZWZpbmVkKCRlbGVtZW50LT57JG1vZHVsZV9pdGVtfSkpIHsKCQkJJHJlc3VsdCAuPSAkZWxlbWVudC0+eyRtb2R1bGVfaXRlbX0gLiAnOyc7CgkJfQoKCQkjIERhdGEKCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGF0YX0pKSB7CgkJCSRyZXN1bHQgLj0gJyAnIC4gc3ByaW50ZigiJS4xZiIsICRlbGVtZW50LT57JG1vZHVsZV9kYXRhfSAvIDEwNDg1NzYpIC4gIiBNQnl0ZXM7IjsKCQl9CgoJCSMgRGVzY3JpcHRpb24KCQlpZiAoZGVmaW5lZCgkZWxlbWVudC0+eyRtb2R1bGVfZGVzY3JpcHRpb259KSkgewoJCQkkcmVzdWx0IC49ICRlbGVtZW50LT57JG1vZHVsZV9kZXNjcmlwdGlvbn07CgkJfQoKCQlwcmludCAkcmVzdWx0IC4gIlxuIjsJCgl9Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTWFpbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKbXkgQHJlc3VsdCA9IHJ1bl9xdWVyeSgiU0VMRUNUIERldmljZUxvY2F0b3IsIENhcGFjaXR5LCBTcGVlZCBGUk9NIFdpbjMyX1BoeXNpY2FsTWVtb3J5Iik7CnByaW50X21vZHVsZWRhdGEgKCJEZXZpY2VMb2NhdG9yIiwgIkNhcGFjaXR5IiwgIlNwZWVkIiwgXEByZXN1bHQpOwpleGl0IDA7Cg==' and `name` = 'RAM' and `id_module_inventory`=4; diff --git a/pandora_console/include/auth/mysql.php b/pandora_console/include/auth/mysql.php index 8725f0f819..618696069b 100644 --- a/pandora_console/include/auth/mysql.php +++ b/pandora_console/include/auth/mysql.php @@ -213,10 +213,16 @@ function process_user_login_local($login, $pass, $api=false) $row = db_get_row_sql($sql); - // Check that row exists, that password is not empty and that password is the same hash - if ($row !== false && $row['password'] !== md5('') - && $row['password'] == md5($pass) - ) { + // Perform password check whether it is MD5-hashed (old hashing) or Bcrypt-hashed. + if (strlen($row['password']) === 32) { + // MD5. + $credentials_check = $row !== false && $row['password'] !== md5('') && $row['password'] == md5($pass); + } else { + // Bcrypt. + $credentials_check = password_verify($pass, $row['password']); + } + + if ($credentials_check === true) { // Login OK // Nick could be uppercase or lowercase (select in MySQL // is not case sensitive) @@ -231,6 +237,11 @@ function process_user_login_local($login, $pass, $api=false) return false; } + // Override password to use Bcrypt encryption. + if (strlen($row['password']) === 32) { + update_user_password($login, $pass); + } + return $row['id_user']; } else { if (!user_can_login($login)) { @@ -656,7 +667,7 @@ function create_user($id_user, $password, $user_info) { $values = $user_info; $values['id_user'] = $id_user; - $values['password'] = md5($password); + $values['password'] = password_hash($password, PASSWORD_BCRYPT); $values['last_connect'] = 0; $values['registered'] = get_system_time(); @@ -747,7 +758,7 @@ function delete_user(string $id_user) /** - * Update the password in MD5 for user pass as id_user with + * Update the password using BCRYPT algorithm for specific id_user passing * password in plain text. * * @param string $user User ID. @@ -766,7 +777,7 @@ function update_user_password(string $user, string $password_new) if (isset($config['auth']) === true && $config['auth'] === 'pandora') { $sql = sprintf( - "UPDATE tusuario SET password = '".md5($password_new)."', last_pass_change = '".date('Y-m-d H:i:s', get_system_time())."' WHERE id_user = '".$user."'" + "UPDATE tusuario SET password = '".password_hash($password_new, PASSWORD_BCRYPT)."', last_pass_change = '".date('Y-m-d H:i:s', get_system_time())."' WHERE id_user = '".$user."'" ); $connection = mysql_connect_db( @@ -786,7 +797,7 @@ function update_user_password(string $user, string $password_new) return db_process_sql_update( 'tusuario', [ - 'password' => md5($password_new), + 'password' => password_hash($password_new, PASSWORD_BCRYPT), 'last_pass_change' => date('Y/m/d H:i:s', get_system_time()), ], ['id_user' => $user] @@ -1050,7 +1061,7 @@ function create_user_and_permisions_ldap( $values['id_user'] = $id_user; if ($config['ldap_save_password'] || $config['ad_save_password']) { - $values['password'] = md5($password); + $values['password'] = password_hash($password, PASSWORD_BCRYPT); } $values['last_connect'] = 0; @@ -1482,9 +1493,9 @@ function change_local_user_pass_ldap($id_user, $password) $local_user_pass = db_get_value_filter('password', 'tusuario', ['id_user' => $id_user]); $return = false; - if (md5($password) !== $local_user_pass) { + if (password_hash($password, PASSWORD_BCRYPT) !== $local_user_pass) { $values_update = []; - $values_update['password'] = md5($password); + $values_update['password'] = password_hash($password, PASSWORD_BCRYPT); $return = db_process_sql_update('tusuario', $values_update, ['id_user' => $id_user]); } diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index fd51f8f529..cc7cea5dff 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1275,7 +1275,7 @@ CREATE TABLE IF NOT EXISTS `tusuario` ( `firstname` VARCHAR(255) NOT NULL, `lastname` VARCHAR(255) NOT NULL, `middlename` VARCHAR(255) NOT NULL, - `password` VARCHAR(45) DEFAULT NULL, + `password` VARCHAR(60) DEFAULT NULL, `comments` VARCHAR(200) DEFAULT NULL, `last_connect` BIGINT NOT NULL DEFAULT 0, `registered` BIGINT NOT NULL DEFAULT 0, diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index f295fd91ee..4f77b09c6c 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -345,7 +345,7 @@ INSERT INTO `tmodule_inventory` (`id_module_inventory`, `id_os`, `name`, `descri -- Dumping data for table `tusuario` -- INSERT INTO `tusuario` (`id_user`, `fullname`, `firstname`, `lastname`, `middlename`, `password`, `comments`, `last_connect`, `registered`, `email`, `phone`, `is_admin`, `language`, `block_size`, `section`, `data_section`, `metaconsole_access`, `local_user`) VALUES -('admin', 'Pandora', 'Pandora', 'Admin', '', '1da7ee7d45b96d0e1f45ee4ee23da560', 'Admin Pandora', 1232642121, 0, 'admin@example.com', '555-555-5555', 1, 'default', 0, 'Default', '', 'advanced', 1); +('admin', 'Pandora', 'Pandora', 'Admin', '', '$2y$10$Wv/xoxjI2VAkthJhk/PzeeGIhBKYU/K.TMgUdmW7fEP2NQkdWlB9K', 'Admin Pandora', 1232642121, 0, 'admin@example.com', '555-555-5555', 1, 'default', 0, 'Default', '', 'advanced', 1); -- -- Dumping data for table `tusuario_perfil`