save a pointer to the currently connected audit server in the closure object

This commit is contained in:
Laszlo Orban
2020-01-06 13:36:08 +01:00
committed by Todd C. Miller
parent 7ceeca1eb0
commit de02745a3f
3 changed files with 29 additions and 3 deletions

View File

@@ -40,6 +40,8 @@
#include <signal.h>
#include <pwd.h>
#include <grp.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "sudoers.h"
#include "sudo_iolog.h"
@@ -586,17 +588,28 @@ static int
sudoers_io_open_remote(void)
{
int sock, ret = -1;
struct sudoers_string *connected_server = NULL;
debug_decl(sudoers_io_open_remote, SUDOERS_DEBUG_PLUGIN);
/* Connect to log server. */
sock = log_server_connect(iolog_details.log_servers,
&iolog_details.server_timeout);
&iolog_details.server_timeout, &connected_server);
if (sock == -1) {
/* TODO: support offline logs if server unreachable */
sudo_warnx(U_("unable to connect to log server"));
ret = -1;
goto done;
}
/* save the name of the server we are successfully connected to */
client_closure.host = connected_server;
struct sockaddr_in addr;
socklen_t addr_len = sizeof(addr);
getpeername(sock, (struct sockaddr *) &addr, &addr_len);
inet_ntop(addr.sin_family, &(addr.sin_addr), client_closure.ipaddr, INET6_ADDRSTRLEN);
if (!client_closure_fill(&client_closure, sock, &iolog_details, &sudoers_io)) {
close(sock);
ret = -1;