#include <tr_debug.h>
#include <tr_socket.h>
+#include <errno.h>
/**
* Open sockets on all interface addresses
return n_opened;
}
+/**
+ * Extract a string-formatted socket address from a struct sockaddr
+ *
+ * @param s
+ * @param dst pointer to allocated space of at least INET6_ADDRSLEN bytes
+ * @param dst_len size of space allocated at dst
+ * @return pointer to dst or null on error
+ */
+static const char *tr_sock_ip_address(struct sockaddr *s, char *dst, size_t dst_len)
+{
+ switch (s->sa_family) {
+ case AF_INET:
+ inet_ntop(AF_INET,
+ &(((struct sockaddr_in *)s)->sin_addr),
+ dst,
+ (socklen_t) dst_len);
+ break;
+
+ case AF_INET6:
+ inet_ntop(AF_INET6,
+ &(((struct sockaddr_in6 *)s)->sin6_addr),
+ dst,
+ (socklen_t) dst_len);
+ break;
+
+ default:
+ snprintf(dst, dst_len, "addr family %u", s->sa_family);
+ break;
+ }
+
+ return dst;
+}
+
+/**
+ * Accept a socket connection
+ *
+ * @param sock
+ * @return -1 on error, connection fd on success
+ */
+int tr_sock_accept(int sock)
+{
+ int conn = -1;
+ struct sockaddr_storage peeraddr;
+ socklen_t addr_len = sizeof(peeraddr);
+ char peeraddr_string[INET6_ADDRSTRLEN];
+ char err[80];
+
+ if (0 > (conn = accept(sock, (struct sockaddr *)&(peeraddr), &addr_len))) {
+ if (strerror_r(errno, err, sizeof(err)))
+ snprintf(err, sizeof(err), "errno = %d", errno);
+ tr_err("tr_sock_accept: Unable to accept connection: %s", err);
+ } else {
+ tr_notice("tr_sock_accept: Incoming connection on fd %d from %s",
+ conn,
+ tr_sock_ip_address((struct sockaddr *)&peeraddr,
+ peeraddr_string,
+ sizeof(peeraddr_string)));
+ }
+ return conn;
+}
#include <stdlib.h>
#include <poll.h> // for nfds_t
+#include <sys/socket.h>
nfds_t tr_sock_listen_all(unsigned int port, int *fd_out, nfds_t max_fd);
+int tr_sock_accept(int sock);
#endif //TRUST_ROUTER_TR_SOCKET_H
int conn=-1;
int pid=-1;
- if (0 > (conn = accept(listen, NULL, NULL))) {
- perror("Error from monitoring interface accept()");
+ if (0 > (conn = tr_sock_accept(listen))) {
+ tr_err("mons_accept: Error accepting connection");
return 1;
}
int pipe_fd[2];
struct tid_process tp = {0};
- if (0 > (conn = accept(listen, NULL, NULL))) {
- perror("Error from TIDS Server accept()");
+ if (0 > (conn = tr_sock_accept(listen))) {
+ tr_err("tids_accept: Error accepting connection");
return 1;
}
tr_debug("tr_trps_gss_handler()");
- if ((!client_name) || (!gss_name) || (!trps) || (!cfg_mgr)) {
+ if ((!client_name) || (!trps) || (!cfg_mgr)) {
tr_debug("tr_trps_gss_handler: Bad parameters.");
return -1;
}
tr_debug("tr_config_changed: freeing tr->mons->authorized_gss_names");
tr_gss_names_free(tr->mons->authorized_gss_names);
}
- tr->mons->authorized_gss_names = tr_gss_names_dup(tr->mons, new_cfg->internal->monitoring_credentials);
+ if (new_cfg->internal->monitoring_credentials != NULL) {
+ tr->mons->authorized_gss_names = tr_gss_names_dup(tr->mons, new_cfg->internal->monitoring_credentials);
+ } else {
+ tr->mons->authorized_gss_names = tr_gss_names_new(tr->mons);
+ }
if (tr->mons->authorized_gss_names == NULL) {
tr_err("tr_config_changed: Error configuring monitoring credentials");
}
#include <tr_debug.h>
#include <trp_internal.h>
+#include <tr_socket.h>
/* Threading note: mutex lock is only used for protecting get_status() and set_status().
* If needed, locking for other operations (notably adding/removing connections) must be managed
int conn_fd=-1;
TRP_CONNECTION *conn=NULL;
- conn_fd = accept(listen, NULL, NULL);
+ conn_fd = tr_sock_accept(listen);
if (0 > conn_fd) {
- tr_notice("trp_connection_accept: accept() returned error.");
+ tr_notice("trp_connection_accept: Error accepting connection.");
return NULL;
}
conn=trp_connection_new(mem_ctx);