mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-11 18:50:28 +09:00
pcap: Reformat ssh_pcap_context_connect()
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
41
src/pcap.c
41
src/pcap.c
@@ -303,33 +303,56 @@ void ssh_pcap_context_set_file(ssh_pcap_context ctx, ssh_pcap_file pcap){
|
|||||||
/** @internal
|
/** @internal
|
||||||
* @brief sets the IP and port parameters in the connection
|
* @brief sets the IP and port parameters in the connection
|
||||||
*/
|
*/
|
||||||
static int ssh_pcap_context_connect(ssh_pcap_context ctx){
|
static int ssh_pcap_context_connect(ssh_pcap_context ctx)
|
||||||
|
{
|
||||||
ssh_session session=ctx->session;
|
ssh_session session=ctx->session;
|
||||||
struct sockaddr_in local, remote;
|
struct sockaddr_in local, remote;
|
||||||
socket_t fd;
|
socket_t fd;
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
if(session==NULL)
|
int rc;
|
||||||
|
|
||||||
|
if (session == NULL) {
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
if(session->socket==NULL)
|
}
|
||||||
|
|
||||||
|
if (session->socket == NULL) {
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
fd = ssh_socket_get_fd(session->socket);
|
fd = ssh_socket_get_fd(session->socket);
|
||||||
|
|
||||||
/* TODO: adapt for windows */
|
/* TODO: adapt for windows */
|
||||||
if(fd<0)
|
if (fd < 0) {
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
len = sizeof(local);
|
len = sizeof(local);
|
||||||
if(getsockname(fd,(struct sockaddr *)&local,&len)<0){
|
rc = getsockname(fd, (struct sockaddr *)&local, &len);
|
||||||
ssh_set_error(session,SSH_REQUEST_DENIED,"Getting local IP address: %s",strerror(errno));
|
if (rc < 0) {
|
||||||
|
ssh_set_error(session,
|
||||||
|
SSH_REQUEST_DENIED,
|
||||||
|
"Getting local IP address: %s",
|
||||||
|
strerror(errno));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = sizeof(remote);
|
len = sizeof(remote);
|
||||||
if(getpeername(fd,(struct sockaddr *)&remote,&len)<0){
|
rc = getpeername(fd, (struct sockaddr *)&remote, &len);
|
||||||
ssh_set_error(session,SSH_REQUEST_DENIED,"Getting remote IP address: %s",strerror(errno));
|
if (rc < 0) {
|
||||||
|
ssh_set_error(session,
|
||||||
|
SSH_REQUEST_DENIED,
|
||||||
|
"Getting remote IP address: %s",
|
||||||
|
strerror(errno));
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (local.sin_family != AF_INET) {
|
if (local.sin_family != AF_INET) {
|
||||||
ssh_set_error(session,SSH_REQUEST_DENIED,"Only IPv4 supported for pcap logging");
|
ssh_set_error(session,
|
||||||
|
SSH_REQUEST_DENIED,
|
||||||
|
"Only IPv4 supported for pcap logging");
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&ctx->ipsource, &local.sin_addr, sizeof(ctx->ipsource));
|
memcpy(&ctx->ipsource, &local.sin_addr, sizeof(ctx->ipsource));
|
||||||
memcpy(&ctx->ipdest, &remote.sin_addr, sizeof(ctx->ipdest));
|
memcpy(&ctx->ipdest, &remote.sin_addr, sizeof(ctx->ipdest));
|
||||||
memcpy(&ctx->portsource, &local.sin_port, sizeof(ctx->portsource));
|
memcpy(&ctx->portsource, &local.sin_port, sizeof(ctx->portsource));
|
||||||
|
|||||||
Reference in New Issue
Block a user