diff options
Diffstat (limited to 'input/packet/ulogd_inppkt_UNIXSOCK.c')
-rw-r--r-- | input/packet/ulogd_inppkt_UNIXSOCK.c | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/input/packet/ulogd_inppkt_UNIXSOCK.c b/input/packet/ulogd_inppkt_UNIXSOCK.c index 39944bf..f1d1534 100644 --- a/input/packet/ulogd_inppkt_UNIXSOCK.c +++ b/input/packet/ulogd_inppkt_UNIXSOCK.c @@ -18,6 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <inttypes.h> #include <unistd.h> #include <stdlib.h> #include <netinet/ether.h> @@ -370,7 +371,7 @@ struct ulogd_unixsock_option_t { static int handle_packet(struct ulogd_pluginstance *upi, struct ulogd_unixsock_packet_t *pkt, uint16_t total_len) { char *data = NULL; - struct iphdr *ip; + unsigned int ip_version = pkt->payload.version; struct ulogd_key *ret = upi->output.keys; uint8_t oob_family; uint16_t payload_len; @@ -386,22 +387,22 @@ static int handle_packet(struct ulogd_pluginstance *upi, struct ulogd_unixsock_p payload_len = ntohs(pkt->payload_length); - ip = &pkt->payload; - if (ip->version == 4) + if (ip_version == 4) oob_family = AF_INET; - else if (ip->version == 6) + else if (ip_version == 6) oob_family = AF_INET6; - else oob_family = 0; + else + oob_family = 0; okey_set_u8(&ret[UNIXSOCK_KEY_OOB_FAMILY], oob_family); - okey_set_ptr(&ret[UNIXSOCK_KEY_RAW_PCKT], ip); + okey_set_ptr(&ret[UNIXSOCK_KEY_RAW_PCKT], &pkt->payload); okey_set_u32(&ret[UNIXSOCK_KEY_RAW_PCKTLEN], payload_len); /* options */ if (total_len > payload_len + sizeof(uint16_t)) { /* option starts at the next aligned address after the payload */ new_offset = USOCK_ALIGN(payload_len); - options_start = (void*)ip + new_offset; + options_start = (void*)&pkt->payload + new_offset; data = options_start; total_len -= (options_start - (char*)pkt); @@ -459,7 +460,7 @@ static int handle_packet(struct ulogd_pluginstance *upi, struct ulogd_unixsock_p "ulogd2: unknown option %d\n", option_number); break; - }; + } } } @@ -473,35 +474,31 @@ static int handle_packet(struct ulogd_pluginstance *upi, struct ulogd_unixsock_p static int _create_unix_socket(const char *unix_path) { + struct sockaddr_un server_sock = { .sun_family = AF_UNIX }; int ret = -1; - struct sockaddr_un server_sock; int s; - struct stat st_dummy; - s = socket(AF_UNIX, SOCK_STREAM, 0); - if (s < 0) { + if (strlen(unix_path) >= sizeof(server_sock.sun_path)) { ulogd_log(ULOGD_ERROR, - "ulogd2: could not create unix socket\n"); + "ulogd2: unix socket path '%s' too long\n", + unix_path); return -1; } - server_sock.sun_family = AF_UNIX; - strncpy(server_sock.sun_path, unix_path, sizeof(server_sock.sun_path)); - server_sock.sun_path[sizeof(server_sock.sun_path)-1] = '\0'; + strcpy(server_sock.sun_path, unix_path); - if (stat(unix_path, &st_dummy) == 0 && st_dummy.st_size > 0) { + s = socket(AF_UNIX, SOCK_STREAM, 0); + if (s < 0) { ulogd_log(ULOGD_ERROR, - "ulogd2: unix socket \'%s\' already exists\n", - unix_path); - close(s); + "ulogd2: could not create unix socket\n"); return -1; } ret = bind(s, (struct sockaddr *)&server_sock, sizeof(server_sock)); if (ret < 0) { ulogd_log(ULOGD_ERROR, - "ulogd2: could not bind to unix socket \'%s\'\n", - server_sock.sun_path); + "ulogd2: could not bind to unix socket '%s'\n", + server_sock.sun_path); close(s); return -1; } @@ -509,8 +506,8 @@ static int _create_unix_socket(const char *unix_path) ret = listen(s, 10); if (ret < 0) { ulogd_log(ULOGD_ERROR, - "ulogd2: could not bind to unix socket \'%s\'\n", - server_sock.sun_path); + "ulogd2: could not listen to unix socket '%s'\n", + server_sock.sun_path); close(s); return -1; } @@ -632,9 +629,9 @@ static int unixsock_instance_read_cb(int fd, unsigned int what, void *param) packet_sig = ntohl(unixsock_packet->marker); if (packet_sig != ULOGD_SOCKET_MARK) { ulogd_log(ULOGD_ERROR, - "ulogd2: invalid packet marked received " - "(read %lx, expected %lx), closing socket.\n", - packet_sig, ULOGD_SOCKET_MARK); + "ulogd2: invalid packet marked received " + "(read %" PRIx32 ", expected %" PRIx32 "), closing socket.\n", + packet_sig, ULOGD_SOCKET_MARK); _disconnect_client(ui); return -1; @@ -663,13 +660,13 @@ static int unixsock_instance_read_cb(int fd, unsigned int what, void *param) } } else { - ulogd_log(ULOGD_DEBUG, " We have %d bytes, but need %d. Requesting more\n", - ui->unixsock_buf_avail, needed_len + sizeof(uint32_t)); + ulogd_log(ULOGD_DEBUG, " We have %u bytes, but need %zu. Requesting more\n", + ui->unixsock_buf_avail, needed_len + sizeof(uint32_t)); return 0; } /* handle_packet has shifted data in buffer */ - }; + } return 0; } |