Quellcode durchsuchen

Qnetd: Log client in IP address:port format

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Jan Friesse vor 9 Jahren
Ursprung
Commit
4c2e99af67

+ 4 - 4
qdevices/qnetd-client-algo-timer.c

@@ -57,8 +57,8 @@ qnetd_client_algo_timer_callback(void *data1, void *data2)
 	    &send_vote, &result_vote);
 	    &send_vote, &result_vote);
 
 
 	if (reply_error_code != TLV_REPLY_ERROR_CODE_NO_ERROR) {
 	if (reply_error_code != TLV_REPLY_ERROR_CODE_NO_ERROR) {
-		qnetd_log(LOG_ERR, "Algorithm for client %p returned error code. "
-		    "Sending error reply.", client);
+		qnetd_log(LOG_ERR, "Algorithm for client %s returned error code. "
+		    "Sending error reply.", client->addr_str);
 
 
 		if (qnetd_client_send_err(client, 0, 0, reply_error_code) != 0) {
 		if (qnetd_client_send_err(client, 0, 0, reply_error_code) != 0) {
 			client->schedule_disconnect = 1;
 			client->schedule_disconnect = 1;
@@ -67,8 +67,8 @@ qnetd_client_algo_timer_callback(void *data1, void *data2)
 
 
 		return (0);
 		return (0);
 	} else {
 	} else {
-		qnetd_log(LOG_DEBUG, "Algorithm for client %p decided to %s timer and %s vote "
-		    "with value %s", client,
+		qnetd_log(LOG_DEBUG, "Algorithm for client %s decided to %s timer and %s vote "
+		    "with value %s", client->addr_str,
 		    (reschedule_timer ? "reschedule" : "not reschedule"),
 		    (reschedule_timer ? "reschedule" : "not reschedule"),
 		    (send_vote ? "send" : "not send"),
 		    (send_vote ? "send" : "not send"),
 		    tlv_vote_to_str(result_vote));
 		    tlv_vote_to_str(result_vote));

+ 3 - 2
qdevices/qnetd-client-list.c

@@ -50,6 +50,7 @@ qnetd_client_list_init(struct qnetd_client_list *client_list)
 
 
 struct qnetd_client *
 struct qnetd_client *
 qnetd_client_list_add(struct qnetd_client_list *client_list, PRFileDesc *sock, PRNetAddr *addr,
 qnetd_client_list_add(struct qnetd_client_list *client_list, PRFileDesc *sock, PRNetAddr *addr,
+    char *addr_str,
     size_t max_receive_size, size_t max_send_buffers, size_t max_send_size,
     size_t max_receive_size, size_t max_send_buffers, size_t max_send_size,
     struct timer_list *main_timer_list)
     struct timer_list *main_timer_list)
 {
 {
@@ -60,8 +61,8 @@ qnetd_client_list_add(struct qnetd_client_list *client_list, PRFileDesc *sock, P
 		return (NULL);
 		return (NULL);
 	}
 	}
 
 
-	qnetd_client_init(client, sock, addr, max_receive_size, max_send_buffers, max_send_size,
-	    main_timer_list);
+	qnetd_client_init(client, sock, addr, addr_str, max_receive_size, max_send_buffers,
+	    max_send_size, main_timer_list);
 
 
 	TAILQ_INSERT_TAIL(client_list, client, entries);
 	TAILQ_INSERT_TAIL(client_list, client, entries);
 
 

+ 2 - 2
qdevices/qnetd-client-list.h

@@ -49,8 +49,8 @@ TAILQ_HEAD(qnetd_client_list, qnetd_client);
 extern void			 qnetd_client_list_init(struct qnetd_client_list *client_list);
 extern void			 qnetd_client_list_init(struct qnetd_client_list *client_list);
 
 
 extern struct qnetd_client	*qnetd_client_list_add(struct qnetd_client_list *client_list,
 extern struct qnetd_client	*qnetd_client_list_add(struct qnetd_client_list *client_list,
-    PRFileDesc *sock, PRNetAddr *addr, size_t max_receive_size, size_t max_send_buffers,
-    size_t max_send_size, struct timer_list *main_timer_list);
+    PRFileDesc *sock, PRNetAddr *addr, char *addr_str, size_t max_receive_size,
+    size_t max_send_buffers, size_t max_send_size, struct timer_list *main_timer_list);
 
 
 extern void			 qnetd_client_list_free(struct qnetd_client_list *client_list);
 extern void			 qnetd_client_list_free(struct qnetd_client_list *client_list);
 
 

+ 36 - 10
qdevices/qnetd-client-net.c

@@ -42,6 +42,9 @@
 #include "qnetd-client-send.h"
 #include "qnetd-client-send.h"
 #include "qnetd-client-msg-received.h"
 #include "qnetd-client-msg-received.h"
 
 
+#define CLIENT_ADDR_STR_LEN_COLON_PORT	(1 + 5 + 1)
+#define CLIENT_ADDR_STR_LEN		(INET6_ADDRSTRLEN + CLIENT_ADDR_STR_LEN_COLON_PORT)
+
 static int
 static int
 qnetd_client_net_write_finished(struct qnetd_instance *instance, struct qnetd_client *client)
 qnetd_client_net_write_finished(struct qnetd_instance *instance, struct qnetd_client *client)
 {
 {
@@ -182,6 +185,12 @@ qnetd_client_net_accept(struct qnetd_instance *instance)
 	PRNetAddr client_addr;
 	PRNetAddr client_addr;
 	PRFileDesc *client_socket;
 	PRFileDesc *client_socket;
 	struct qnetd_client *client;
 	struct qnetd_client *client;
+	char *client_addr_str;
+	int res_err;
+
+	client_addr_str = NULL;
+
+	res_err = -1;
 
 
         if ((client_socket = PR_Accept(instance->server.socket, &client_addr,
         if ((client_socket = PR_Accept(instance->server.socket, &client_addr,
 	    PR_INTERVAL_NO_TIMEOUT)) == NULL) {
 	    PR_INTERVAL_NO_TIMEOUT)) == NULL) {
@@ -191,31 +200,48 @@ qnetd_client_net_accept(struct qnetd_instance *instance)
 
 
 	if (nss_sock_set_non_blocking(client_socket) != 0) {
 	if (nss_sock_set_non_blocking(client_socket) != 0) {
 		qnetd_log_nss(LOG_ERR, "Can't set client socket to non blocking mode");
 		qnetd_log_nss(LOG_ERR, "Can't set client socket to non blocking mode");
-
-		PR_Close(client_socket);
-
-		return (-1);
+		goto exit_close;
 	}
 	}
 
 
 	if (instance->max_clients != 0 &&
 	if (instance->max_clients != 0 &&
 	    qnetd_client_list_no_clients(&instance->clients) >= instance->max_clients) {
 	    qnetd_client_list_no_clients(&instance->clients) >= instance->max_clients) {
 		qnetd_log(LOG_ERR, "Maximum clients reached. Not accepting connection");
 		qnetd_log(LOG_ERR, "Maximum clients reached. Not accepting connection");
+		goto exit_close;
+	}
 
 
-		PR_Close(client_socket);
+	client_addr_str = malloc(CLIENT_ADDR_STR_LEN);
+	if (client_addr_str == NULL) {
+		qnetd_log(LOG_ERR, "Can't alloc client addr str memory. Not accepting connection");
+		goto exit_close;
+	}
 
 
-		return (-1);
+	if (PR_NetAddrToString(&client_addr, client_addr_str, CLIENT_ADDR_STR_LEN) != PR_SUCCESS) {
+		qnetd_log_nss(LOG_ERR, "Can't convert client address to string. Not accepting connection");
+		goto exit_close;
+	}
+
+	if (snprintf(client_addr_str + strlen(client_addr_str),
+	    CLIENT_ADDR_STR_LEN_COLON_PORT, ":%"PRIu16,
+	    ntohs(client_addr.ipv6.port)) >= CLIENT_ADDR_STR_LEN_COLON_PORT) {
+		qnetd_log(LOG_ERR, "Can't store port to client addr str. Not accepting connection");
+		goto exit_close;
 	}
 	}
 
 
 	client = qnetd_client_list_add(&instance->clients, client_socket, &client_addr,
 	client = qnetd_client_list_add(&instance->clients, client_socket, &client_addr,
+	    client_addr_str,
 	    instance->max_client_receive_size, instance->max_client_send_buffers,
 	    instance->max_client_receive_size, instance->max_client_send_buffers,
 	    instance->max_client_send_size, &instance->main_timer_list);
 	    instance->max_client_send_size, &instance->main_timer_list);
 	if (client == NULL) {
 	if (client == NULL) {
 		qnetd_log(LOG_ERR, "Can't add client to list");
 		qnetd_log(LOG_ERR, "Can't add client to list");
-
-		PR_Close(client_socket);
-
-		return (-2);
+		res_err = -2;
+		goto exit_close;
 	}
 	}
 
 
 	return (0);
 	return (0);
+
+exit_close:
+	free(client_addr_str);
+	PR_Close(client_socket);
+
+	return (res_err);
 }
 }

+ 3 - 0
qdevices/qnetd-client.c

@@ -41,12 +41,14 @@
 
 
 void
 void
 qnetd_client_init(struct qnetd_client *client, PRFileDesc *sock, PRNetAddr *addr,
 qnetd_client_init(struct qnetd_client *client, PRFileDesc *sock, PRNetAddr *addr,
+    char *addr_str,
     size_t max_receive_size, size_t max_send_buffers, size_t max_send_size,
     size_t max_receive_size, size_t max_send_buffers, size_t max_send_size,
     struct timer_list *main_timer_list)
     struct timer_list *main_timer_list)
 {
 {
 
 
 	memset(client, 0, sizeof(*client));
 	memset(client, 0, sizeof(*client));
 	client->socket = sock;
 	client->socket = sock;
+	client->addr_str = addr_str;
 	memcpy(&client->addr, addr, sizeof(*addr));
 	memcpy(&client->addr, addr, sizeof(*addr));
 	dynar_init(&client->receive_buffer, max_receive_size);
 	dynar_init(&client->receive_buffer, max_receive_size);
 	send_buffer_list_init(&client->send_buffer_list, max_send_buffers, max_send_size);
 	send_buffer_list_init(&client->send_buffer_list, max_send_buffers, max_send_size);
@@ -61,6 +63,7 @@ qnetd_client_destroy(struct qnetd_client *client)
 {
 {
 
 
 	free(client->cluster_name);
 	free(client->cluster_name);
+	free(client->addr_str);
 	node_list_free(&client->last_quorum_node_list);
 	node_list_free(&client->last_quorum_node_list);
 	node_list_free(&client->last_membership_node_list);
 	node_list_free(&client->last_membership_node_list);
 	node_list_free(&client->configuration_node_list);
 	node_list_free(&client->configuration_node_list);

+ 3 - 2
qdevices/qnetd-client.h

@@ -53,6 +53,7 @@ extern "C" {
 struct qnetd_client {
 struct qnetd_client {
 	PRFileDesc *socket;
 	PRFileDesc *socket;
 	PRNetAddr addr;
 	PRNetAddr addr;
+	char *addr_str;
 	struct dynar receive_buffer;
 	struct dynar receive_buffer;
 	struct send_buffer_list send_buffer_list;
 	struct send_buffer_list send_buffer_list;
 	size_t msg_already_received_bytes;
 	size_t msg_already_received_bytes;
@@ -87,8 +88,8 @@ struct qnetd_client {
 };
 };
 
 
 extern void		qnetd_client_init(struct qnetd_client *client, PRFileDesc *sock,
 extern void		qnetd_client_init(struct qnetd_client *client, PRFileDesc *sock,
-    PRNetAddr *addr, size_t max_receive_size, size_t max_send_buffers, size_t max_send_size,
-    struct timer_list *main_timer_list);
+    PRNetAddr *addr, char *addr_str, size_t max_receive_size, size_t max_send_buffers,
+    size_t max_send_size, struct timer_list *main_timer_list);
 
 
 extern void		qnetd_client_destroy(struct qnetd_client *client);
 extern void		qnetd_client_destroy(struct qnetd_client *client);
 
 

+ 2 - 2
qdevices/qnetd-dpd-timer.c

@@ -52,9 +52,9 @@ qnetd_dpd_timer_cb(void *data1, void *data2)
 
 
 		if (client->dpd_time_since_last_check > (client->heartbeat_interval * 2)) {
 		if (client->dpd_time_since_last_check > (client->heartbeat_interval * 2)) {
 			if (!client->dpd_msg_received_since_last_check) {
 			if (!client->dpd_msg_received_since_last_check) {
-				qnetd_log(LOG_WARNING, "Client %p doesn't sent any message during "
+				qnetd_log(LOG_WARNING, "Client %s doesn't sent any message during "
 				    "%"PRIu32"ms. Disconnecting",
 				    "%"PRIu32"ms. Disconnecting",
-				    client, client->dpd_time_since_last_check);
+				    client->addr_str, client->dpd_time_since_last_check);
 
 
 				client->schedule_disconnect = 1;
 				client->schedule_disconnect = 1;
 			} else {
 			} else {

+ 20 - 17
qdevices/qnetd-log-debug.c

@@ -43,8 +43,8 @@ qnetd_log_debug_dump_cluster(struct qnetd_cluster *cluster)
 
 
 	qnetd_log(LOG_DEBUG, "  cluster dump:");
 	qnetd_log(LOG_DEBUG, "  cluster dump:");
 	TAILQ_FOREACH(client, &cluster->client_list, cluster_entries) {
 	TAILQ_FOREACH(client, &cluster->client_list, cluster_entries) {
-		qnetd_log(LOG_DEBUG, "    client = %p, node_id = "UTILS_PRI_NODE_ID,
-		    client, client->node_id);
+		qnetd_log(LOG_DEBUG, "    client = %s, node_id = "UTILS_PRI_NODE_ID,
+		    client->addr_str, client->node_id);
 	}
 	}
 }
 }
 
 
@@ -59,6 +59,7 @@ qnetd_log_debug_new_client_connected(struct qnetd_client *client)
 	    client->tls_peer_certificate_verified);
 	    client->tls_peer_certificate_verified);
 	qnetd_log(LOG_DEBUG, "  node_id = "UTILS_PRI_NODE_ID, client->node_id);
 	qnetd_log(LOG_DEBUG, "  node_id = "UTILS_PRI_NODE_ID, client->node_id);
 	qnetd_log(LOG_DEBUG, "  pointer = %p", client);
 	qnetd_log(LOG_DEBUG, "  pointer = %p", client);
+	qnetd_log(LOG_DEBUG, "  addr_str = %s", client->addr_str);
 
 
 	qnetd_log_debug_dump_cluster(client->cluster);
 	qnetd_log_debug_dump_cluster(client->cluster);
 }
 }
@@ -83,8 +84,8 @@ qnetd_log_debug_config_node_list_received(struct qnetd_client *client,
     const struct node_list *nodes, int initial)
     const struct node_list *nodes, int initial)
 {
 {
 
 
-	qnetd_log(LOG_DEBUG, "Client %p (cluster %s, node_id "UTILS_PRI_NODE_ID") "
-	    "sent %s node list.", client, client->cluster_name, client->node_id,
+	qnetd_log(LOG_DEBUG, "Client %s (cluster %s, node_id "UTILS_PRI_NODE_ID") "
+	    "sent %s node list.", client->addr_str, client->cluster_name, client->node_id,
 	    (initial ? "initial" : "changed"));
 	    (initial ? "initial" : "changed"));
 
 
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
@@ -101,8 +102,8 @@ qnetd_log_debug_membership_node_list_received(struct qnetd_client *client,
     uint32_t msg_seq_num, const struct tlv_ring_id *ring_id,
     uint32_t msg_seq_num, const struct tlv_ring_id *ring_id,
     const struct node_list *nodes)
     const struct node_list *nodes)
 {
 {
-	qnetd_log(LOG_DEBUG, "Client %p (cluster %s, node_id "UTILS_PRI_NODE_ID") "
-	    "sent membership node list.", client, client->cluster_name, client->node_id);
+	qnetd_log(LOG_DEBUG, "Client %s (cluster %s, node_id "UTILS_PRI_NODE_ID") "
+	    "sent membership node list.", client->addr_str, client->cluster_name, client->node_id);
 
 
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 
 
@@ -116,8 +117,8 @@ qnetd_log_debug_quorum_node_list_received(struct qnetd_client *client,
     uint32_t msg_seq_num, enum tlv_quorate quorate, const struct node_list *nodes)
     uint32_t msg_seq_num, enum tlv_quorate quorate, const struct node_list *nodes)
 {
 {
 
 
-	qnetd_log(LOG_DEBUG, "Client %p (cluster %s, node_id "UTILS_PRI_NODE_ID") "
-	    "sent quorum node list.", client, client->cluster_name, client->node_id);
+	qnetd_log(LOG_DEBUG, "Client %s (cluster %s, node_id "UTILS_PRI_NODE_ID") "
+	    "sent quorum node list.", client->addr_str, client->cluster_name, client->node_id);
 
 
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  quorate = %u", quorate);
 	qnetd_log(LOG_DEBUG, "  quorate = %u", quorate);
@@ -129,17 +130,18 @@ void
 qnetd_log_debug_client_disconnect(struct qnetd_client *client, int server_going_down)
 qnetd_log_debug_client_disconnect(struct qnetd_client *client, int server_going_down)
 {
 {
 
 
-	qnetd_log(LOG_DEBUG, "Client %p (init_received %u, cluster %s, node_id "
-	    UTILS_PRI_NODE_ID") disconnect%s", client, client->init_received, client->cluster_name,
-	    client->node_id, (server_going_down ? " (server is going down)" : ""));
+	qnetd_log(LOG_DEBUG, "Client %s (init_received %u, cluster %s, node_id "
+	    UTILS_PRI_NODE_ID") disconnect%s", client->addr_str, client->init_received,
+	    client->cluster_name, client->node_id,
+	    (server_going_down ? " (server is going down)" : ""));
 }
 }
 
 
 void
 void
 qnetd_log_debug_ask_for_vote_received(struct qnetd_client *client, uint32_t msg_seq_num)
 qnetd_log_debug_ask_for_vote_received(struct qnetd_client *client, uint32_t msg_seq_num)
 {
 {
 
 
-	qnetd_log(LOG_DEBUG, "Client %p (cluster %s, node_id "UTILS_PRI_NODE_ID") "
-	    "asked for a vote", client, client->cluster_name, client->node_id);
+	qnetd_log(LOG_DEBUG, "Client %s (cluster %s, node_id "UTILS_PRI_NODE_ID") "
+	    "asked for a vote", client->addr_str, client->cluster_name, client->node_id);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 }
 }
 
 
@@ -147,8 +149,9 @@ void
 qnetd_log_debug_vote_info_reply_received(struct qnetd_client *client, uint32_t msg_seq_num)
 qnetd_log_debug_vote_info_reply_received(struct qnetd_client *client, uint32_t msg_seq_num)
 {
 {
 
 
-	qnetd_log(LOG_DEBUG, "Client %p (cluster %s, node_id "UTILS_PRI_NODE_ID") "
-	    "replied back to vote info message", client, client->cluster_name, client->node_id);
+	qnetd_log(LOG_DEBUG, "Client %s (cluster %s, node_id "UTILS_PRI_NODE_ID") "
+	    "replied back to vote info message", client->addr_str, client->cluster_name,
+	    client->node_id);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 }
 }
 
 
@@ -156,8 +159,8 @@ void
 qnetd_log_debug_send_vote_info(struct qnetd_client *client, uint32_t msg_seq_num, enum tlv_vote vote)
 qnetd_log_debug_send_vote_info(struct qnetd_client *client, uint32_t msg_seq_num, enum tlv_vote vote)
 {
 {
 
 
-	qnetd_log(LOG_DEBUG, "Sending vote info to client %p (cluster %s, node_id "UTILS_PRI_NODE_ID") ",
-	    client, client->cluster_name, client->node_id);
+	qnetd_log(LOG_DEBUG, "Sending vote info to client %s (cluster %s, node_id "UTILS_PRI_NODE_ID") ",
+	    client->addr_str, client->cluster_name, client->node_id);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  msg seq num "UTILS_PRI_MSG_SEQ, msg_seq_num);
 	qnetd_log(LOG_DEBUG, "  vote %s", tlv_vote_to_str(vote));
 	qnetd_log(LOG_DEBUG, "  vote %s", tlv_vote_to_str(vote));
 }
 }