diff --git a/src/tcpconns.c b/src/tcpconns.c
index f716a10334b7fbf2c339c16de137940b712782aa..8f40be6f786b13d901c4ee5847580c0a01db270e 100644 (file)
--- a/src/tcpconns.c
+++ b/src/tcpconns.c
#if KERNEL_LINUX
# include <asm/types.h>
#if KERNEL_LINUX
# include <asm/types.h>
-/* sys/socket.h is necessary to compile when using netlink on older systems. */
-# include <sys/socket.h>
# include <linux/netlink.h>
#if HAVE_LINUX_INET_DIAG_H
# include <linux/inet_diag.h>
#endif
# include <linux/netlink.h>
#if HAVE_LINUX_INET_DIAG_H
# include <linux/inet_diag.h>
#endif
-# include <sys/socket.h>
# include <arpa/inet.h>
/* #endif KERNEL_LINUX */
# include <arpa/inet.h>
/* #endif KERNEL_LINUX */
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
#if HAVE_NET_IF_H
# include <net/if.h>
#endif
#if HAVE_NET_IF_H
# include <net/if.h>
#endif
/* This is for OpenBSD and NetBSD. */
#elif HAVE_LIBKVM_NLIST
# include <sys/queue.h>
/* This is for OpenBSD and NetBSD. */
#elif HAVE_LIBKVM_NLIST
# include <sys/queue.h>
-# include <sys/socket.h>
# include <net/route.h>
# include <netinet/in.h>
# include <netinet/in_systm.h>
# include <net/route.h>
# include <netinet/in.h>
# include <netinet/in_systm.h>
/* If this entry was created while reading the files (ant not when handling
* the configuration) remove it now. */
if ((pe->flags & (PORT_COLLECT_LOCAL
/* If this entry was created while reading the files (ant not when handling
* the configuration) remove it now. */
if ((pe->flags & (PORT_COLLECT_LOCAL
- | PORT_COLLECT_REMOTE
- | PORT_IS_LISTENING)) == 0)
+ | PORT_COLLECT_REMOTE
+ | PORT_IS_LISTENING)) == 0)
{
port_entry_t *next = pe->next;
DEBUG ("tcpconns plugin: Removing temporary entry "
{
port_entry_t *next = pe->next;
DEBUG ("tcpconns plugin: Removing temporary entry "
- "for listening port %"PRIu16, pe->port);
+ "for listening port %"PRIu16, pe->port);
if (prev == NULL)
if (prev == NULL)
- port_list_head = next;
+ port_list_head = next;
else
else
- prev->next = next;
+ prev->next = next;
sfree (pe);
pe = next;
sfree (pe);
pe = next;
memset (pe->count_remote, '\0', sizeof (pe->count_remote));
pe->flags &= ~PORT_IS_LISTENING;
memset (pe->count_remote, '\0', sizeof (pe->count_remote));
pe->flags &= ~PORT_IS_LISTENING;
+ prev = pe;
pe = pe->next;
}
} /* void conn_reset_port_entry */
pe = pe->next;
}
} /* void conn_reset_port_entry */
static int conn_read (void)
{
struct inpcbtable table;
static int conn_read (void)
{
struct inpcbtable table;
-#ifdef __OpenBSD__ || __NetBSD_Version__ > 699002700
+#if !defined(__OpenBSD__) && (defined(__NetBSD_Version__) && __NetBSD_Version__ <= 699002700)
struct inpcb *head;
#endif
struct inpcb *next;
struct inpcb *head;
#endif
struct inpcb *next;
if (status != 0)
return (-1);
if (status != 0)
return (-1);
-#ifdef __OpenBSD__ || __NetBSD_Version__ > 699002700
+#if defined(__OpenBSD__) || (defined(__NetBSD_Version__) && __NetBSD_Version__ > 699002700)
/* inpt_queue is a TAILQ on OpenBSD */
/* Get the first pcb */
next = (struct inpcb *)TAILQ_FIRST (&table.inpt_queue);
/* inpt_queue is a TAILQ on OpenBSD */
/* Get the first pcb */
next = (struct inpcb *)TAILQ_FIRST (&table.inpt_queue);
#endif
{
/* Read the pcb pointed to by `next' into `inpcb' */
#endif
{
/* Read the pcb pointed to by `next' into `inpcb' */
- kread ((u_long) next, &inpcb, sizeof (inpcb));
+ status = kread ((u_long) next, &inpcb, sizeof (inpcb));
+ if (status != 0)
+ return (-1);
/* Advance `next' */
/* Advance `next' */
-#ifdef __OpenBSD__ || __NetBSD_Version__ > 699002700
+#if defined(__OpenBSD__) || (defined(__NetBSD_Version__) && __NetBSD_Version__ > 699002700)
/* inpt_queue is a TAILQ on OpenBSD */
next = (struct inpcb *)TAILQ_NEXT (&inpcb, inp_queue);
#else
/* inpt_queue is a TAILQ on OpenBSD */
next = (struct inpcb *)TAILQ_NEXT (&inpcb, inp_queue);
#else
continue;
#endif
continue;
#endif
- kread ((u_long) inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb));
+ status = kread ((u_long) inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb));
+ if (status != 0)
+ return (-1);
conn_handle_ports (ntohs(inpcb.inp_lport), ntohs(inpcb.inp_fport), tcpcb.t_state);
} /* while (next != head) */
conn_handle_ports (ntohs(inpcb.inp_lport), ntohs(inpcb.inp_fport), tcpcb.t_state);
} /* while (next != head) */