From mboxrd@z Thu Jan 1 00:00:00 1970 From: Holger Kiehl Subject: Sending commands via an ssh connection Date: Wed, 16 Apr 2003 20:13:35 +0000 (GMT) Sender: linux-c-programming-owner@vger.kernel.org Message-ID: Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="646811178-83582322-1050524015=:18820" Return-path: List-Id: To: linux-c-programming@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --646811178-83582322-1050524015=:18820 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello I am trying to write an ssh client to send some commands to a remote host via ssh. But for reasons unknown to me, this client does not want to work correctly. It seems that the remote side does not always get the commands, so I assume there must be something wrong with my pty communication handling. The reason why I use a pty device is because I want this client to be called by some daemon and ssh needs one to enter the password. I have attached the source code of my client, maybe someone can tell me what I am doing wrong. Thanks, Holger -- --646811178-83582322-1050524015=:18820 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="sshcmd.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="sshcmd.c" I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5j bHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5j bHVkZSA8c3lzL3RpbWUuaD4NCiNpbmNsdWRlIDxzeXMvd2FpdC5oPg0KI2lu Y2x1ZGUgPHN5cy9zdGF0Lmg+DQojaW5jbHVkZSA8c2lnbmFsLmg+DQojaW5j bHVkZSA8dGVybWlvcy5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1 ZGUgPGZjbnRsLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCg0KDQovKiBFeHRl cm5hbCBnbG9iYWwgdmFyaWFibGVzICovDQpjaGFyICAgICAgICAgICAgICAg ICAgbXNnX3N0cls0MDk2XTsNCmxvbmcgICAgICAgICAgICAgICAgICB0cmFu c2Zlcl90aW1lb3V0ID0gMTBMOw0KDQovKiBMb2NhbCBnbG9iYWwgdmFyaWFi bGVzICovDQpzdGF0aWMgaW50ICAgICAgICAgICAgY3RybF9mZCA9IC0xOw0K c3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7DQoNCi8qIExvY2FsIGZ1 bmN0aW9uIHByb3RvdHlwZXMuICovDQpzdGF0aWMgaW50ICAgICAgICAgICAg Z2V0X3JlcGx5KHZvaWQpLA0KICAgICAgICAgICAgICAgICAgICAgIHB0eW1f b3BlbihjaGFyICopLA0KICAgICAgICAgICAgICAgICAgICAgIHB0eXNfb3Bl bihjaGFyICopLA0KICAgICAgICAgICAgICAgICAgICAgIHNzaF9jb25uZWN0 KGNoYXIgKiwgY2hhciAqLCBjaGFyICopLA0KICAgICAgICAgICAgICAgICAg ICAgIHR0eV9yYXcoaW50KTsNCnN0YXRpYyBzaXplX3QgICAgICAgICBwaXBl X3dyaXRlKGludCwgY2hhciAqLCBzaXplX3QpOw0Kc3RhdGljIHZvaWQgICAg ICAgICAgIHNjcF9xdWl0KHZvaWQpOw0KDQojZGVmaW5lIElOQ09SUkVDVCAt MQ0KI2RlZmluZSBTVUNDRVNTICAgMA0KDQovKiQkJCQkJCQkJCQkJCQkJCQk JCQkJCQkJCQkJCQkIG1haW4oKSAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk JCQkJCQkJCQkKi8NCmludA0KbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQ0Kew0KICAgaW50ICBjbWRfbGVuZ3RoLA0KICAgICAgICBzdGF0dXM7DQog ICBjaGFyICpjbWQ7DQoNCiAgIGlmIChhcmdjICE9IDUpDQogICB7DQogICAg ICAodm9pZClmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8aG9zdD4gPHVz ZXI+IDxwYXNzd2Q+IDxjbWQ+XG4iLCBhcmd2WzBdKTsNCiAgICAgIGV4aXQo MSk7DQogICB9DQogICAodm9pZClmcHJpbnRmKHN0ZG91dCwgIi0tPiBDb25u ZWN0aW5nLi4uXG4iKTsNCiAgIGlmICgoc3RhdHVzID0gc3NoX2Nvbm5lY3Qo YXJndlsxXSwgYXJndlsyXSwgYXJndlszXSkpID09IElOQ09SUkVDVCkNCiAg IHsNCiAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLCAiRVJST1I6IEZhaWxl ZCB0byBtYWtlIHNzaCBjb25uZWN0aW9uICglZCkgOiAlc1xuIiwNCiAgICAg ICAgICAgICAgICAgICAgc3RhdHVzLCBtc2dfc3RyKTsNCiAgICAgIGV4aXQo MSk7DQogICB9DQogICAodm9pZClmcHJpbnRmKHN0ZG91dCwgIiAtLSBDb25u ZWN0ZWQgOiAlc1xuIiwgbXNnX3N0cik7DQogICBpZiAoKHN0YXR1cyA9IGdl dF9yZXBseSgpKSAhPSBTVUNDRVNTKQ0KICAgew0KICAgICAgKHZvaWQpZnBy aW50ZihzdGRlcnIsICJFUlJPUjogRmFpbGVkIHRvIHJlYWQgcHJvbXB0ICgl ZCkgOiAlc1xuIiwNCiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBtc2df c3RyKTsNCiAgICAgIGV4aXQoMSk7DQogICB9DQogICAodm9pZClmcHJpbnRm KHN0ZG91dCwgIi0tPiBTZW5kaW5nIGNvbW1hbmQgOiAlcyAuLi5cbiIsIGFy Z3ZbNF0pOw0KICAgY21kX2xlbmd0aCA9IHN0cmxlbihhcmd2WzRdKTsNCiAg IGlmICgoY21kID0gbWFsbG9jKGNtZF9sZW5ndGggKyAxKSkgPT0gTlVMTCkN CiAgIHsNCiAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLCAiRVJST1I6IG1h bGxvYygpIGVycm9yIDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAg ICBleGl0KDEpOw0KICAgfQ0KICAgY21kW2NtZF9sZW5ndGhdID0gJ1xuJzsN CiAgIGlmICgoc3RhdHVzID0gcGlwZV93cml0ZShjdHJsX2ZkLCBhcmd2WzRd LCBjbWRfbGVuZ3RoICsgMSkpICE9IGNtZF9sZW5ndGggKyAxKQ0KICAgew0K ICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsDQogICAgICAgICAgICAgICAg ICAgICJFUlJPUjogRmFpbGVkIHRvIHdyaXRlKCkgY29tbWFuZCB0byBwaXBl IFslZF0gOiAlc1xuIiwNCiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBz dHJlcnJvcihlcnJubykpOw0KICAgfQ0KICAgaWYgKChzdGF0dXMgPSBnZXRf cmVwbHkoKSkgIT0gU1VDQ0VTUykNCiAgIHsNCiAgICAgICh2b2lkKWZwcmlu dGYoc3RkZXJyLCAiRVJST1I6IEZhaWxlZCB0byByZWFkIHByb21wdCAoJWQp IDogJXNcbiIsDQogICAgICAgICAgICAgICAgICAgIHN0YXR1cywgbXNnX3N0 cik7DQogICAgICBleGl0KDEpOw0KICAgfQ0KICAgc2NwX3F1aXQoKTsNCg0K ICAgZXhpdCgwKTsNCn0NCg0KDQovKisrKysrKysrKysrKysrKysrKysrKysr KysrKysrIHNzaF9jb25uZWN0KCkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKi8NCnN0YXRpYyBpbnQNCnNzaF9jb25uZWN0KGNoYXIgKmhvc3QsIGNo YXIgKnVzZXIsIGNoYXIgKnBhc3N3ZCkNCnsNCiAgIGludCAgZmRtLCBsZW4s IHN0YXR1cywgcGlwZV9mZFsyXTsNCiAgIGNoYXIgcHRzX25hbWVbMTFdLCAq cHRyOw0KDQogICBpZiAoKGZkbSA9IHB0eW1fb3BlbihwdHNfbmFtZSkpIDwg MCkNCiAgIHsNCiAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLCAiRVJST1I6 IHB0eW1fb3BlbigpIGVycm9yLlxuIik7DQogICAgICByZXR1cm4oSU5DT1JS RUNUKTsNCiAgIH0NCg0KICAgLyogUHJlcGFyZSBwaXBlcyBmb3IgcGFyZW50 L2NoaWxkIHN5bmNocm9uaXphdGlvbi4gKi8NCiAgIGlmIChwaXBlKHBpcGVf ZmQpID09IC0xKQ0KICAgew0KICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIs ICJFUlJPUjogcGlwZSgpIGVycm9yIDogJXNcbiIsIHN0cmVycm9yKGVycm5v KSk7DQogICAgICBzdGF0dXMgPSBJTkNPUlJFQ1Q7DQogICB9DQogICBlbHNl DQogICB7DQogICAgICBwaWRfdCBjdHJsX3BpZDsNCg0KICAgICAgaWYgKChj dHJsX3BpZCA9IGZvcmsoKSkgPT0gMCkgIC8qIENoaWxkIHByb2Nlc3MgKi8N CiAgICAgIHsNCiAgICAgICAgIGNoYXIgKmFyZ3NbNV0sIGR1bW15Ow0KICAg ICAgICAgaW50ICBmZHM7DQoNCiAgICAgICAgIHNldHNpZCgpOw0KICAgICAg ICAgaWYgKChmZHMgPSBwdHlzX29wZW4ocHRzX25hbWUpKSA8IDApDQogICAg ICAgICB7DQogICAgICAgICAgICAodm9pZClmcHJpbnRmKHN0ZGVyciwgIkVS Uk9SOiBwdHlzX29wZW4oKSBlcnJvci5cbiIpOw0KICAgICAgICAgICAgKHZv aWQpY2xvc2UoZmRtKTsNCiAgICAgICAgICAgIHJldHVybihJTkNPUlJFQ1Qp Ow0KICAgICAgICAgfQ0KICAgICAgICAgKHZvaWQpY2xvc2UoZmRtKTsNCiAg ICAgICAgICh2b2lkKXR0eV9yYXcoZmRzKTsNCg0KICAgICAgICAgLyogU3lu Y2hyb25pemUgd2l0aCBwYXJlbnQuICovDQogICAgICAgICAodm9pZCljbG9z ZShwaXBlX2ZkWzFdKTsNCiAgICAgICAgIGlmIChyZWFkKHBpcGVfZmRbMF0s ICZkdW1teSwgMSkgIT0gMSkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICh2 b2lkKWNsb3NlKHBpcGVfZmRbMF0pOw0KICAgICAgICAgICAgKHZvaWQpZnBy aW50ZihzdGRlcnIsICJFUlJPUjogcmVhZCgpIGVycm9yIDogJXNcbiIsIHN0 cmVycm9yKGVycm5vKSk7DQogICAgICAgICAgICByZXR1cm4oSU5DT1JSRUNU KTsNCiAgICAgICAgIH0NCiAgICAgICAgICh2b2lkKWNsb3NlKHBpcGVfZmRb MF0pOw0KDQogICAgICAgICBkdXAyKGZkcywgU1RESU5fRklMRU5PKTsNCiAg ICAgICAgIGR1cDIoZmRzLCBTVERPVVRfRklMRU5PKTsNCiAgICAgICAgIGR1 cDIoZmRzLCBTVERFUlJfRklMRU5PKTsNCiAgICAgICAgIGlmIChmZHMgPiAy KQ0KICAgICAgICAgew0KICAgICAgICAgICAgY2xvc2UoZmRzKTsNCiAgICAg ICAgIH0NCg0KICAgICAgICAgYXJnc1swXSA9ICJzc2giOw0KICAgICAgICAg YXJnc1sxXSA9ICItbCI7DQogICAgICAgICBhcmdzWzJdID0gdXNlcjsNCiAg ICAgICAgIGFyZ3NbM10gPSBob3N0Ow0KICAgICAgICAgYXJnc1s0XSA9IE5V TEw7DQogICAgICAgICAodm9pZClleGVjdnAoInNzaCIsIGFyZ3MpOw0KICAg ICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICJFUlJPUjogZXhlY3ZwKCkg ZXJyb3IgOiAlc1xuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJy b3IoZXJybm8pKTsNCiAgICAgICAgIF9leGl0KElOQ09SUkVDVCk7DQogICAg ICB9DQogICAgICBlbHNlIGlmIChjdHJsX3BpZCA+IDApIC8qIFBhcmVudCBw cm9jZXNzLiAqLw0KICAgICAgICAgICB7DQogICAgICAgICAgICAgICh2b2lk KXR0eV9yYXcoZmRtKTsNCiAgICAgICAgICAgICAgY3RybF9mZCA9IGZkbTsN Cg0KICAgICAgICAgICAgICAvKiBTeW5jaHJvbml6ZSB3aXRoIGNoaWxkLiAq Lw0KICAgICAgICAgICAgICAodm9pZCljbG9zZShwaXBlX2ZkWzBdKTsNCiAg ICAgICAgICAgICAgaWYgKHBpcGVfd3JpdGUocGlwZV9mZFsxXSwgIiIsIDEp ICE9IDEpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgKHZv aWQpZnByaW50ZihzdGRlcnIsICJFUlJPUjogd3JpdGUoKSBlcnJvciA6ICVz XG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9y KGVycm5vKSk7DQogICAgICAgICAgICAgICAgICh2b2lkKWNsb3NlKHBpcGVf ZmRbMV0pOw0KICAgICAgICAgICAgICAgICByZXR1cm4oSU5DT1JSRUNUKTsN CiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAodm9pZCljbG9zZShw aXBlX2ZkWzFdKTsNCg0KICAgICAgICAgICAgICBpZiAoKHN0YXR1cyA9IGdl dF9yZXBseSgpKSA9PSBTVUNDRVNTKQ0KICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgIGlmIChzdHJzdHIobXNnX3N0ciwgImFzc3dvcmQ6Iikg IT0gTlVMTCkNCiAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg ICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHBhc3N3ZCkgKyAxOw0KICAg ICAgICAgICAgICAgICAgICBjaGFyICAgKnN0cl9wYXNzd2Q7DQoNCiAgICAg ICAgICAgICAgICAgICAgaWYgKChzdHJfcGFzc3dkID0gbWFsbG9jKGxlbmd0 aCkpID09IE5VTEwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICJtYWxsb2Mo KSBlcnJvclxuIik7DQogICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg KHZvaWQpbWVtY3B5KHN0cl9wYXNzd2QsIHBhc3N3ZCwgbGVuZ3RoIC0gMSk7 DQogICAgICAgICAgICAgICAgICAgIHN0cl9wYXNzd2RbbGVuZ3RoIC0gMV0g PSAnXG4nOw0KICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyA9IHBp cGVfd3JpdGUoY3RybF9mZCwgc3RyX3Bhc3N3ZCwgbGVuZ3RoKSkgIT0gbGVu Z3RoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg ICAgICAgIGlmIChlcnJubyAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKWZwcmludGYo c3RkZXJyLCAiRVJST1I6IHBpcGVfd3JpdGUoKSBlcnJvciAoJWQpIDogJXNc biIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhdHVzLCBzdHJlcnJvcihlcnJubykpOw0KICAgICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IElOQ09S UkVDVDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg ICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgICAgICAgaWYgKChzdGF0dXMgPSBnZXRfcmVwbHkoKSkgIT0gU1VD Q0VTUykNCiAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAgICAgICAgICAodm9pZClmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBn ZXRfcmVweSgpIGVycm9yXG4iKTsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdHVzID0gSU5DT1JSRUNUOw0KICAgICAgICAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSU5DT1JSRUNUOw0KICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICh2 b2lkKWZwcmludGYoc3RkZXJyLCAiRVJST1I6IGdldF9yZXBseSgpIGVycm9y ICglZCkuXG4iLCBzdGF0dXMpOw0KICAgICAgICAgICAgICB9DQogICAgICAg ICAgIH0NCiAgICAgICAgICAgZWxzZSAvKiBGYWlsZWQgdG8gZm9yaygpLiAq Lw0KICAgICAgICAgICB7DQogICAgICAgICAgICAgICh2b2lkKWZwcmludGYo c3RkZXJyLCAiRVJST1I6IGZvcmsoKSBlcnJvciA6ICVzXG4iLCBzdHJlcnJv cihlcnJubykpOw0KICAgICAgICAgICAgICBzdGF0dXMgPSBJTkNPUlJFQ1Q7 DQogICAgICAgICAgIH0NCiAgIH0NCiAgIHJldHVybihzdGF0dXMpOw0KfQ0K DQoNCi8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgc2NwX3F1aXQo KSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLw0Kdm9pZA0Kc2Nw X3F1aXQodm9pZCkNCnsNCiAgIGlmIChjdHJsX2ZkICE9IC0xKQ0KICAgew0K ICAgICAgaW50ICBzdGF0dXM7DQogICAgICBjaGFyIGNtZFs1XTsNCg0KICAg ICAgKHZvaWQpZnByaW50ZihzdGRvdXQsIA0KICAgICAgICAgICAgICAgICAg ICAiLS0+IFNlbmRpbmcgZXhpdCBvbiBjb250cm9sIGNvbm5lY3Rpb24uXG4i KTsNCiAgICAgIGNtZFswXSA9ICdlJzsgY21kWzFdID0gJ3gnOyBjbWRbMl0g PSAnaSc7IGNtZFszXSA9ICd0JzsgY21kWzRdID0gJ1xuJzsNCiAgICAgIGlm ICgoc3RhdHVzID0gcGlwZV93cml0ZShjdHJsX2ZkLCBjbWQsIDUpKSAhPSA1 KQ0KICAgICAgew0KICAgICAgICAgY21kWzRdID0gJ1wwJzsNCiAgICAgICAg ICh2b2lkKWZwcmludGYoc3RkZXJyLA0KICAgICAgICAgICAgICAgICAgICAg ICAiRVJST1I6IEZhaWxlZCB0byB3cml0ZSgpIGNvbW1hbmQgdG8gcGlwZSBb JWRdIDogJXNcbiIsDQogICAgICAgICAgICAgICAgICAgICAgIGNtZCwgc3Rh dHVzLCBzdHJlcnJvcihlcnJubykpOw0KICAgICAgICAgc3RhdHVzID0gSU5D T1JSRUNUOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAg ICAgaWYgKChzdGF0dXMgPSBnZXRfcmVwbHkoKSkgIT0gU1VDQ0VTUykNCiAg ICAgICAgIHsNCiAgICAgICAgICAgICh2b2lkKWZwcmludGYoc3RkZXJyLCAi RVJST1I6IEZhaWxlZCB0byByZWFkIHJlcGx5IFslZF1cbiIsIHN0YXR1cyk7 DQogICAgICAgICB9DQogICAgICB9DQogICAgICAodm9pZCljbG9zZShjdHJs X2ZkKTsNCiAgICAgIGN0cmxfZmQgPSAtMTsNCiAgIH0NCiAgIHJldHVybjsN Cn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBpcGVf d3JpdGUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCnN0YXRp YyBzaXplX3QNCnBpcGVfd3JpdGUoaW50IGZkLCBjaGFyICpidWYsIHNpemVf dCBjb3VudCkNCnsNCiAgIGlmIChmZCAhPSAtMSkNCiAgIHsNCiAgICAgIGlu dCAgICBzdGF0dXM7DQogICAgICBmZF9zZXQgd3NldDsNCg0KICAgICAgLyog SW5pdGlhbGlzZSBkZXNjcmlwdG9yIHNldCAqLw0KICAgICAgRkRfWkVSTygm d3NldCk7DQogICAgICBGRF9TRVQoZmQsICZ3c2V0KTsNCiAgICAgIHRpbWVv dXQudHZfdXNlYyA9IDBMOw0KICAgICAgdGltZW91dC50dl9zZWMgPSB0cmFu c2Zlcl90aW1lb3V0Ow0KDQogICAgICAvKiBXYWl0IGZvciBtZXNzYWdlIHgg c2Vjb25kcyBhbmQgdGhlbiBjb250aW51ZS4gKi8NCiAgICAgIHN0YXR1cyA9 IHNlbGVjdChmZCArIDEsIE5VTEwsICZ3c2V0LCBOVUxMLCAmdGltZW91dCk7 DQogICAgICBpZiAoc3RhdHVzID09IDApDQogICAgICB7DQogICAgICAgICAv KiBUaW1lb3V0IGhhcyBhcnJpdmVkLiAqLw0KICAgICAgICAgKHZvaWQpZnBy aW50ZihzdGRlcnIsICJUaGVyZSBpcyBubyByZXBseSBmcm9tIHBpcGUsIGZh aWxlZCB0byBzZW5kIGNvbW1hbmQgJXNcbi4iLCBidWYpOw0KICAgICAgfQ0K ICAgICAgZWxzZSBpZiAoRkRfSVNTRVQoZmQsICZ3c2V0KSkNCiAgICAgICAg ICAgew0KICAgICAgICAgICAgICByZXR1cm4od3JpdGUoZmQsIGJ1ZiwgY291 bnQpKTsNCiAgICAgICAgICAgfQ0KICAgICAgICAgICBlbHNlDQogICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICJF UlJPUjogc2VsZWN0KCkgZXJyb3IgOiAlc1xuIiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOw0KICAgICAgICAgICB9 DQogICB9DQogICBlcnJubyA9IDA7DQogICByZXR1cm4oSU5DT1JSRUNUKTsN Cn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdldF9y ZXBseSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCnN0YXRp YyBpbnQNCmdldF9yZXBseSh2b2lkKQ0Kew0KICAgaW50ICAgIHN0YXR1czsN CiAgIGZkX3NldCByc2V0Ow0KDQogICBGRF9aRVJPKCZyc2V0KTsNCiAgIEZE X1NFVChjdHJsX2ZkLCAmcnNldCk7DQogICB0aW1lb3V0LnR2X3VzZWMgPSAw TDsNCiAgIHRpbWVvdXQudHZfc2VjID0gdHJhbnNmZXJfdGltZW91dDsNCg0K ICAgc3RhdHVzID0gc2VsZWN0KGN0cmxfZmQgKyAxLCAmcnNldCwgTlVMTCwg TlVMTCwgJnRpbWVvdXQpOw0KICAgaWYgKHN0YXR1cyA9PSAwKQ0KICAgew0K ICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIsICJFUlJPUjogc2VsZWN0KCkg dGltZW91dC5cbiIpOw0KICAgfQ0KICAgZWxzZSBpZiAoRkRfSVNTRVQoY3Ry bF9mZCwgJnJzZXQpKQ0KICAgICAgICB7DQogICAgICAgICAgIGlmICgoc3Rh dHVzID0gcmVhZChjdHJsX2ZkLCBtc2dfc3RyLCA0MDk2KSkgPCAwKQ0KICAg ICAgICAgICB7DQogICAgICAgICAgICAgICh2b2lkKWZwcmludGYoc3RkZXJy LCAiRVJST1I6IHJlYWQoKSBlcnJvciA6ICVzXG4iLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7DQogICAgICAgICAg IH0NCiAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICB7DQogICAgICAgICAg ICAgIG1zZ19zdHJbc3RhdHVzXSA9ICdcMCc7DQogICAgICAgICAgICAgIGlm IChzdGF0dXMgPT0gMCkNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAodm9pZClmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBPdGhlciBzaWRl IGNsb3NlZCB0aGUgcGlwZS5cbiIpOw0KICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICBjaGFyICpwdHIgPSBtc2dfc3RyOw0KDQogICAgICAgICAgICAgICAg IHdoaWxlICgqcHRyKQ0KICAgICAgICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgICAgIGlmICgqcHRyID09ICdcbicpDQogICAgICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9ICcgJzsNCiAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBwdHIr KzsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBpZiAo c3RhdHVzID09IDEpDQogICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgICAgKHZvaWQpZnByaW50ZihzdGRvdXQsICI8LS0gZ2V0X3JlcGx5 KCkgcmVhZGluZyBPTkUgQnl0ZSAlZFxuIiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50KW1zZ19zdHJbMF0pOw0KICAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgICAgICAodm9pZClmcHJpbnRmKHN0 ZG91dCwgIjwtLSBnZXRfcmVwbHkoKSByZWFkaW5nICVkIEJ5dGVzIDogJXNc biIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz LCBtc2dfc3RyKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgICByZXR1cm4oU1VDQ0VTUyk7DQogICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0K ICAgICAgICAgICAodm9pZClmcHJpbnRmKHN0ZGVyciwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAiRVJST1I6IHNlbGVjdCgpIGVycm9yIDogJXNcbiIs IHN0cmVycm9yKGVycm5vKSk7DQogICAgICAgIH0NCiAgIHJldHVybihJTkNP UlJFQ1QpOw0KfQ0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gcHR5bV9vcGVuKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q Lw0Kc3RhdGljIGludA0KcHR5bV9vcGVuKGNoYXIgKnB0c19uYW1lKQ0Kew0K ICAgaW50ICBmZDsNCiAgIGNoYXIgKnBvczEsICpwb3MyOw0KDQogICAodm9p ZClzdHJjcHkocHRzX25hbWUsICIvZGV2L3B0eVhZIik7DQogICBmb3IgKHBv czEgPSAicHFyc3R1dnd4eXpQUVJTVCI7ICpwb3MxICE9ICdcMCc7IHBvczEr KykNCiAgIHsNCiAgICAgIHB0c19uYW1lWzhdID0gKnBvczE7DQogICAgICBm b3IgKHBvczIgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7ICpwb3MyICE9ICdcMCc7 IHBvczIrKykNCiAgICAgIHsNCiAgICAgICAgIHB0c19uYW1lWzldID0gKnBv czI7DQogICAgICAgICBpZiAoKGZkID0gb3BlbihwdHNfbmFtZSwgT19SRFdS KSkgPT0gLTEpDQogICAgICAgICB7DQogICAgICAgICAgICBpZiAoZXJybm8g PT0gRU5PRU5UKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgcmV0 dXJuICgtMSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgIHB0c19uYW1lWzVdID0g J3QnOw0KICAgICAgICAgcmV0dXJuKGZkKTsNCiAgICAgIH0NCiAgIH0NCiAg IHJldHVybigtMSk7DQp9DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSBwdHlzX29wZW4oKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovDQpzdGF0aWMgaW50DQpwdHlzX29wZW4oY2hhciAqcHRzX25hbWUp DQp7DQogICBpbnQgZmRzOw0KDQogICBpZiAoKGZkcyA9IG9wZW4ocHRzX25h bWUsIE9fUkRXUikpIDwgMCkNCiAgIHsNCiAgICAgIHJldHVybigtMSk7DQog ICB9DQojaWYgZGVmaW5lZChUSU9DU0NUVFkpICYmICFkZWZpbmVkKENJQkFV RCkNCiAgIGlmIChpb2N0bChmZHMsIFRJT0NTQ1RUWSwgKGNoYXIgKikgMCkg PCAwKQ0KICAgew0KICAgICAgKHZvaWQpY2xvc2UoZmRzKTsNCiAgICAgIHJl dHVybigtMSk7DQogICB9DQojZW5kaWYNCiAgIHJldHVybihmZHMpOw0KfQ0K DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHR0eV9yYXco KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0Kc3RhdGljIGlu dA0KdHR5X3JhdyhpbnQgZmQpDQp7DQogICBzdHJ1Y3QgdGVybWlvcyBidWY7 DQoNCiAgIGlmICh0Y2dldGF0dHIoZmQsICZidWYpIDwgMCkNCiAgIHsNCiAg ICAgIHJldHVybigtMSk7DQogICB9DQogICBidWYuY19sZmxhZyAmPSB+KEVD SE8gfCBJQ0FOT04gfCBJRVhURU4gfCBJU0lHKTsNCiAgIGJ1Zi5jX2lmbGFn ICY9IH4oQlJLSU5UIHwgSUNSTkwgfCBJTlBDSyB8IElTVFJJUCB8IElYT04p Ow0KICAgYnVmLmNfY2ZsYWcgJj0gfihDU0laRSB8IFBBUkVOQik7DQogICBi dWYuY19jZmxhZyB8PSBDUzg7DQogICBidWYuY19vZmxhZyAmPSB+KE9QT1NU KTsNCiAgIGJ1Zi5jX2NjW1ZNSU5dID0gMTsNCiAgIGJ1Zi5jX2NjW1ZUSU1F XSA9IDA7DQogICBpZiAodGNzZXRhdHRyKGZkLCBUQ1NBTk9XLCAmYnVmKSA8 IDApDQogICB7DQogICAgICByZXR1cm4oLTEpOw0KICAgfQ0KICAgcmV0dXJu KDApOw0KfQ0K --646811178-83582322-1050524015=:18820--