# # # patch "keys.cc" # from [662fa2f3ad974c713b58a805d09361e07ada790f] # to [3d41f447c61f1d19eded21724749f4cd0017ef20] # # patch "ssh_agent.cc" # from [c13d81c9480ae21aaead5e32fa431d22e481bba9] # to [1b790d27a9caefc8a76fff8ef575eb7e20ea8362] # # patch "ssh_agent.hh" # from [6f8002a5f15d71de6f7599e18cd14b0e9fcbfc94] # to [5c18067baa0a83eacc09c22ddb48f287af87b23a] # ============================================================ --- keys.cc 662fa2f3ad974c713b58a805d09361e07ada790f +++ keys.cc 3d41f447c61f1d19eded21724749f4cd0017ef20 @@ -366,7 +366,6 @@ make_signature(app_state & app, if (app.opts.ssh_sign == "yes" || app.opts.ssh_sign == "check") { scoped_ptr a(new ssh_agent()); - a->connect(); vector ssh_keys = a->get_keys(); if (ssh_keys.size() <= 0) L(FL("make_signature: no rsa keys received from ssh-agent")); ============================================================ --- ssh_agent.cc c13d81c9480ae21aaead5e32fa431d22e481bba9 +++ ssh_agent.cc 1b790d27a9caefc8a76fff8ef575eb7e20ea8362 @@ -12,6 +12,7 @@ ssh_agent::ssh_agent() ssh_agent::ssh_agent() { + connect(); } void @@ -21,11 +22,14 @@ ssh_agent::connect() int sock; struct sockaddr_un sunaddr; + if (connected()) + return; + authsocket = getenv("SSH_AUTH_SOCK"); if (!authsocket) { - W(F("ssh_agent: connect: ssh-agent socket not found")); + L(FL("ssh_agent: connect: ssh-agent socket not found")); return; } @@ -50,6 +54,12 @@ ssh_agent::connect() stream = shared_ptr(new Stream(sock)); } +bool +ssh_agent::connected() +{ + return stream != NULL; +} + u32 ssh_agent::get_long(char const * buf) { @@ -183,7 +193,7 @@ ssh_agent::get_keys() vector const ssh_agent::get_keys() { - if (!stream) + if (!connected()) { L(FL("ssh_agent: get_keys: stream not initialized, no agent")); return keys; @@ -282,6 +292,8 @@ ssh_agent::sign_data(RSA_PublicKey const void ssh_agent::sign_data(RSA_PublicKey const & key, string const & data, string & out) { + E(connected(), F("ssh_agent: get_keys: attempted to sign data when not connected")); + L(FL("ssh_agent: sign_data: key e: %s, n: %s, data len: %i") % key.get_e() % key.get_n() % data.length()); string data_out; string key_buf; ============================================================ --- ssh_agent.hh 6f8002a5f15d71de6f7599e18cd14b0e9fcbfc94 +++ ssh_agent.hh 5c18067baa0a83eacc09c22ddb48f287af87b23a @@ -20,6 +20,7 @@ public: public: ssh_agent(); void connect(); + bool connected(); vector const get_keys(); void sign_data(RSA_PublicKey const & key, string const & data, string & out);