client: use sockaddr_to_string()

Removed the sockaddr_to_tmp_string() hack, use
the new function sockaddr_to_string() instead.
This commit is contained in:
Max Kellermann 2009-02-28 15:20:35 +01:00
parent e085deb944
commit 5c10d2ded7
3 changed files with 9 additions and 47 deletions

View File

@ -20,6 +20,7 @@
#include "command.h" #include "command.h"
#include "conf.h" #include "conf.h"
#include "listen.h" #include "listen.h"
#include "socket_util.h"
#include "permission.h" #include "permission.h"
#include "event_pipe.h" #include "event_pipe.h"
#include "idle.h" #include "idle.h"
@ -250,51 +251,10 @@ static void client_close(struct client *client)
g_free(client); g_free(client);
} }
static const char * void client_new(int fd, const struct sockaddr *sa, size_t sa_length, int uid)
sockaddr_to_tmp_string(const struct sockaddr *addr)
{
const char *hostname;
switch (addr->sa_family) {
#ifdef HAVE_TCP
case AF_INET:
hostname = (const char *)inet_ntoa(((const struct sockaddr_in *)
addr)->sin_addr);
if (!hostname)
hostname = "error getting ipv4 address";
break;
#ifdef HAVE_IPV6
case AF_INET6:
{
static char host[INET6_ADDRSTRLEN + 1];
memset(host, 0, INET6_ADDRSTRLEN + 1);
if (inet_ntop(AF_INET6, (const void *)
&(((const struct sockaddr_in6 *)addr)->
sin6_addr), host,
INET6_ADDRSTRLEN)) {
hostname = (const char *)host;
} else {
hostname = "error getting ipv6 address";
}
}
break;
#endif
#endif /* HAVE_TCP */
#ifdef HAVE_UN
case AF_UNIX:
hostname = "local connection";
break;
#endif /* HAVE_UN */
default:
hostname = "unknown";
}
return hostname;
}
void client_new(int fd, const struct sockaddr *addr, int uid)
{ {
struct client *client; struct client *client;
char *remote;
if (num_clients >= client_max_connections) { if (num_clients >= client_max_connections) {
g_warning("Max Connections Reached!"); g_warning("Max Connections Reached!");
@ -308,9 +268,11 @@ void client_new(int fd, const struct sockaddr *addr, int uid)
client_init(client, fd); client_init(client, fd);
client->uid = uid; client->uid = uid;
remote = sockaddr_to_string(sa, sa_length, NULL);
g_log(G_LOG_DOMAIN, LOG_LEVEL_SECURE, g_log(G_LOG_DOMAIN, LOG_LEVEL_SECURE,
"[%u] opened from %s", client->num, "[%u] opened from %s", client->num, remote);
sockaddr_to_tmp_string(addr)); g_free(remote);
} }
static int client_process_line(struct client *client, char *line) static int client_process_line(struct client *client, char *line)

View File

@ -30,7 +30,7 @@ struct sockaddr;
void client_manager_init(void); void client_manager_init(void);
void client_manager_deinit(void); void client_manager_deinit(void);
void client_new(int fd, const struct sockaddr *addr, int uid); void client_new(int fd, const struct sockaddr *sa, size_t sa_length, int uid);
bool client_is_expired(const struct client *client); bool client_is_expired(const struct client *client);

View File

@ -455,7 +455,7 @@ listen_in_event(G_GNUC_UNUSED GIOChannel *source,
if (fd >= 0) { if (fd >= 0) {
set_nonblocking(fd); set_nonblocking(fd);
client_new(fd, &sockAddr, get_remote_uid(fd)); client_new(fd, &sockAddr, socklen, get_remote_uid(fd));
} else if (fd < 0 && errno != EINTR) { } else if (fd < 0 && errno != EINTR) {
g_warning("Problems accept()'ing"); g_warning("Problems accept()'ing");
} }