diff options
author | Matt Johnston <matt@ucc.asn.au> | 2011-04-07 12:30:20 +0000 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2011-04-07 12:30:20 +0000 |
commit | eef35883b7d70b0371ebcd89fd6f541ed7202df7 (patch) | |
tree | 43b82b04907ba3e06b3bdbe29eb4982ab5e57528 /cli-agentfwd.c | |
parent | 8028e078152e4ab7d9d22cbdab56d9f00588574a (diff) |
Tidy error handling and get rid of some commented out code
--HG--
extra : convert_revision : beb6fc766123135d5ae455ff7ad6b48d85386f62
Diffstat (limited to 'cli-agentfwd.c')
-rw-r--r-- | cli-agentfwd.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/cli-agentfwd.c b/cli-agentfwd.c index 44cf0af..c9ce833 100644 --- a/cli-agentfwd.c +++ b/cli-agentfwd.c @@ -258,8 +258,8 @@ void cli_load_agent_keys(m_list *ret_list) { void agent_buf_sign(buffer *sigblob, sign_key *key, const unsigned char *data, unsigned int len) { - buffer *request_data = buf_new(MAX_PUBKEY_SIZE + len + 12); - buffer *response; + buffer *request_data = NULL; + buffer *response = NULL; unsigned int keylen, siglen; int packet_type; @@ -269,19 +269,14 @@ void agent_buf_sign(buffer *sigblob, sign_key *key, string data uint32 flags */ - /* We write the key, then figure how long it was and write that */ - //buf_putint(request_data, 0); + request_data = buf_new(MAX_PUBKEY_SIZE + len + 12); buf_put_pub_key(request_data, key, key->type); keylen = request_data->len - 4; - //buf_setpos(request_data, 0); - //buf_putint(request_data, keylen); - //buf_setpos(request_data, request_data->len); buf_putstring(request_data, data, len); buf_putint(request_data, 0); response = agent_request(SSH2_AGENTC_SIGN_REQUEST, request_data); - buf_free(request_data); if (!response) { goto fail; @@ -298,14 +293,21 @@ void agent_buf_sign(buffer *sigblob, sign_key *key, */ siglen = buf_getint(response); buf_putbytes(sigblob, buf_getptr(response, siglen), siglen); - buf_free(response); + goto cleanup; - return; fail: /* XXX don't fail badly here. instead propagate a failure code back up to the cli auth pubkey code, and just remove this key from the list of ones to try. */ dropbear_exit("Agent failed signing key"); + +cleanup: + if (request_data) { + buf_free(request_data); + } + if (response) { + buf_free(response); + } } #endif |