diff --git a/rpmbuild/SOURCES/addrwatch-fix-dbreconnect.patch b/rpmbuild/SOURCES/addrwatch-fix-dbreconnect.patch new file mode 100644 index 0000000..d3c4dfc --- /dev/null +++ b/rpmbuild/SOURCES/addrwatch-fix-dbreconnect.patch @@ -0,0 +1,14 @@ +diff --git a/src/addrwatch_mysql.c b/src/addrwatch_mysql.c +index 389153f..b4ed760 100644 +--- a/src/addrwatch_mysql.c ++++ b/src/addrwatch_mysql.c +@@ -232,7 +232,7 @@ void db_disconnect(struct ctx_s *data) + data->dbh = NULL; + } + +-inline void db_reconnect(struct ctx_s *data) { ++static inline void db_reconnect(struct ctx_s *data) { + while (1) { + if (data->dbh) + db_disconnect(data); + diff --git a/rpmbuild/SOURCES/addrwatch-strsignal.patch b/rpmbuild/SOURCES/addrwatch-strsignal.patch new file mode 100644 index 0000000..e729c90 --- /dev/null +++ b/rpmbuild/SOURCES/addrwatch-strsignal.patch @@ -0,0 +1,36 @@ +diff --git a/configure.ac b/configure.ac +index e70edc2..5d8b716 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -58,9 +58,6 @@ AC_CHECK_HEADERS([arpa/inet.h netinet/in.h stdint.h stdlib.h syslog.h unistd.h]) + # Checks for typedefs, structures, and compiler characteristics. + AC_C_INLINE + AC_TYPE_PID_T +-AC_CHECK_DECLS([sys_siglist], [], [ +- AC_MSG_ERROR([Unable to find sys_siglist declaration.]) +-], [[#include ]]) + AC_TYPE_UINT32_T + AC_TYPE_UINT16_T + AC_TYPE_UINT8_T +diff --git a/src/addrwatch.c b/src/addrwatch.c +index 139dd3b..d208fad 100644 +--- a/src/addrwatch.c ++++ b/src/addrwatch.c +@@ -327,7 +327,7 @@ void reload_cb(evutil_socket_t fd, short events, void *arg) + void reload_cb(int fd, short events, void *arg) + #endif + { +- log_msg(LOG_DEBUG, "Received signal (%d), %s", fd, sys_siglist[fd]); ++ log_msg(LOG_DEBUG, "Received signal (%d), %s", fd, strsignal(fd)); + log_msg(LOG_DEBUG, "Reopening output files"); + + output_flatfile_reload(); +@@ -341,7 +341,7 @@ void stop_cb(evutil_socket_t fd, short events, void *arg) + void stop_cb(int fd, short events, void *arg) + #endif + { +- log_msg(LOG_DEBUG, "Received signal (%d), %s", fd, sys_siglist[fd]); ++ log_msg(LOG_DEBUG, "Received signal (%d), %s", fd, strsignal(fd)); + #if HAVE_LIBEVENT2 + event_base_loopbreak(cfg.eb); + #else diff --git a/rpmbuild/SOURCES/addrwatch.service b/rpmbuild/SOURCES/addrwatch.service new file mode 100644 index 0000000..ce95848 --- /dev/null +++ b/rpmbuild/SOURCES/addrwatch.service @@ -0,0 +1,14 @@ +[Unit] +Description=A tool for IPv4/IPv6 and ethernet address pairing monitoring +Documentation=man:addrwatch(8) https://github.com/fln/addrwatch +After=network.target + +[Service] +EnvironmentFile=-/etc/sysconfig/addrwatch +Type=simple +ExecStart=/usr/bin/addrwatch -u $ADDRWATCH_USERNAME $ADDRWATCH_ARGS +Restart=on-failure + +[Install] +WantedBy=multi-user.target + diff --git a/rpmbuild/SOURCES/addrwatch.sysconfig b/rpmbuild/SOURCES/addrwatch.sysconfig new file mode 100644 index 0000000..86db784 --- /dev/null +++ b/rpmbuild/SOURCES/addrwatch.sysconfig @@ -0,0 +1,7 @@ +# +# specify extra Arguments to addrwatch +ADDRWATCH_ARGS="-s /var/lib/addrwatch/addrwatch.sqlite" + +# drop priviliges at boot +ADDRWATCH_USERNAME="addrwatch" + diff --git a/rpmbuild/SPECS/addrwatch.spec b/rpmbuild/SPECS/addrwatch.spec new file mode 100644 index 0000000..9d78ac1 --- /dev/null +++ b/rpmbuild/SPECS/addrwatch.spec @@ -0,0 +1,84 @@ +%global _hardened_build 1 + +Name: addrwatch +Version: 1.0.1 +Release: 8%{?dist} +Summary: Monitoring IPv4/IPv6 and Ethernet address pairings + +License: GPLv3 +URL: https://github.com/fln/addrwatch +Source0: %{url}/fln/addrwatch/releases/download/v%{version}/%{name}-%{version}.tar.gz +Source1: %{name}.service +Source2: %{name}.sysconfig +# https://github.com/fln/addrwatch/issues/11 +Patch0: addrwatch-fix-dbreconnect.patch +Patch1: addrwatch-strsignal.patch + +%{?systemd_requires} +BuildRequires: libpcap-devel, libevent-devel, systemd, sqlite-devel, gcc +BuildRequires: autoconf automake +Requires(pre): shadow-utils + + +%description +It main purpose is to monitor network and log discovered Ethernet/IP pairings. + +Main features of addrwatch: + + * IPv4 and IPv6 address monitoring + * Monitoring multiple network interfaces with one daemon + * Monitoring of VLAN tagged (802.1Q) packets. + * Output to std-out, plain text file, syslog, sqlite3 db, MySQL db + * IP address usage history preserving output/logging + +Addrwatch is extremely useful in networks with IPv6 auto configuration (RFC4862) +enabled. It allows to track IPv6 addresses of hosts using IPv6 privacy +extensions (RFC4941). + +%prep +%autosetup -p1 +#%setup -q +#%patch0 -p1 + +%build +autoreconf -fiv +%configure --enable-sqlite3 +%make_build + +%install +%make_install +mkdir -p %{buildroot}%{_unitdir}/ +install -p -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/ +mkdir -p %{buildroot}%{_sysconfdir}/sysconfig/ +install -p -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/addrwatch +mkdir -p %{buildroot}/var/lib/addrwatch + +%files +%{_bindir}/addrwatch +%{_bindir}/addrwatch_stdout +%{_bindir}/addrwatch_syslog +%{_mandir}/man8/addrwatch.8* +%{_unitdir}/addrwatch.service +%config(noreplace) %{_sysconfdir}/sysconfig/addrwatch +%license COPYING +%attr(-, addrwatch, addrwatch) /var/lib/addrwatch + +%pre +getent group %{name} >/dev/null || groupadd -r %{name} +getent passwd %{name} >/dev/null || \ + useradd -r -g %{name} -d /var/lib/%{name} -s /sbin/nologin \ + -c "network neighborhoud watch" %{name} +exit 0 + +%post +%systemd_post %{name}.service + +%preun +%systemd_preun %{name}.service + +%postun +%systemd_postun_with_restart %{name}.service + +%changelog + +