version 1.126, 2020/10/29 02:52:43 |
version 1.127, 2021/01/26 00:46:17 |
|
|
return 0; |
return 0; |
} |
} |
|
|
|
/* Communicate with agent: sent request, read and decode status reply */ |
|
static int |
|
ssh_request_reply_decode(int sock, struct sshbuf *request) |
|
{ |
|
struct sshbuf *reply; |
|
int r; |
|
u_char type; |
|
|
|
if ((reply = sshbuf_new()) == NULL) |
|
return SSH_ERR_ALLOC_FAIL; |
|
if ((r = ssh_request_reply(sock, request, reply)) != 0 || |
|
(r = sshbuf_get_u8(reply, &type)) != 0 || |
|
(r = decode_reply(type)) != 0) |
|
goto out; |
|
/* success */ |
|
r = 0; |
|
out: |
|
sshbuf_free(reply); |
|
return r; |
|
} |
|
|
/* |
/* |
* Closes the agent socket if it should be closed (depends on how it was |
* Closes the agent socket if it should be closed (depends on how it was |
* obtained). The argument must have been returned by |
* obtained). The argument must have been returned by |
|
|
if ((msg = sshbuf_new()) == NULL) |
if ((msg = sshbuf_new()) == NULL) |
return SSH_ERR_ALLOC_FAIL; |
return SSH_ERR_ALLOC_FAIL; |
if ((r = sshbuf_put_u8(msg, type)) != 0 || |
if ((r = sshbuf_put_u8(msg, type)) != 0 || |
(r = sshbuf_put_cstring(msg, password)) != 0) |
(r = sshbuf_put_cstring(msg, password)) != 0 || |
|
(r = ssh_request_reply_decode(sock, msg)) != 0) |
goto out; |
goto out; |
if ((r = ssh_request_reply(sock, msg, msg)) != 0) |
/* success */ |
goto out; |
r = 0; |
if ((r = sshbuf_get_u8(msg, &type)) != 0) |
|
goto out; |
|
r = decode_reply(type); |
|
out: |
out: |
sshbuf_free(msg); |
sshbuf_free(msg); |
return r; |
return r; |
|
|
(r = encode_constraints(msg, life, confirm, maxsign, |
(r = encode_constraints(msg, life, confirm, maxsign, |
provider)) != 0) |
provider)) != 0) |
goto out; |
goto out; |
if ((r = ssh_request_reply(sock, msg, msg)) != 0) |
if ((r = ssh_request_reply_decode(sock, msg)) != 0) |
goto out; |
goto out; |
if ((r = sshbuf_get_u8(msg, &type)) != 0) |
/* success */ |
goto out; |
r = 0; |
r = decode_reply(type); |
|
out: |
out: |
sshbuf_free(msg); |
sshbuf_free(msg); |
return r; |
return r; |
|
|
{ |
{ |
struct sshbuf *msg; |
struct sshbuf *msg; |
int r; |
int r; |
u_char type, *blob = NULL; |
u_char *blob = NULL; |
size_t blen; |
size_t blen; |
|
|
if ((msg = sshbuf_new()) == NULL) |
if ((msg = sshbuf_new()) == NULL) |
|
|
r = SSH_ERR_INVALID_ARGUMENT; |
r = SSH_ERR_INVALID_ARGUMENT; |
goto out; |
goto out; |
} |
} |
if ((r = ssh_request_reply(sock, msg, msg)) != 0) |
if ((r = ssh_request_reply_decode(sock, msg)) != 0) |
goto out; |
goto out; |
if ((r = sshbuf_get_u8(msg, &type)) != 0) |
/* success */ |
goto out; |
r = 0; |
r = decode_reply(type); |
|
out: |
out: |
if (blob != NULL) |
if (blob != NULL) |
freezero(blob, blen); |
freezero(blob, blen); |
|
|
if (constrained && |
if (constrained && |
(r = encode_constraints(msg, life, confirm, 0, NULL)) != 0) |
(r = encode_constraints(msg, life, confirm, 0, NULL)) != 0) |
goto out; |
goto out; |
if ((r = ssh_request_reply(sock, msg, msg)) != 0) |
if ((r = ssh_request_reply_decode(sock, msg)) != 0) |
goto out; |
goto out; |
if ((r = sshbuf_get_u8(msg, &type)) != 0) |
/* success */ |
goto out; |
r = 0; |
r = decode_reply(type); |
|
out: |
out: |
sshbuf_free(msg); |
sshbuf_free(msg); |
return r; |
return r; |
|
|
return SSH_ERR_ALLOC_FAIL; |
return SSH_ERR_ALLOC_FAIL; |
if ((r = sshbuf_put_u8(msg, type)) != 0) |
if ((r = sshbuf_put_u8(msg, type)) != 0) |
goto out; |
goto out; |
if ((r = ssh_request_reply(sock, msg, msg)) != 0) |
if ((r = ssh_request_reply_decode(sock, msg)) != 0) |
goto out; |
goto out; |
if ((r = sshbuf_get_u8(msg, &type)) != 0) |
/* success */ |
goto out; |
r = 0; |
r = decode_reply(type); |
|
out: |
out: |
sshbuf_free(msg); |
sshbuf_free(msg); |
return r; |
return r; |