diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644
index e69de29..0000000
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b8c81a2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/apcupsd-*.tar.gz
+/apcupsd-*.src.rpm
+/apcupsd-*/
+/results_*/
diff --git a/99-apcupsd-xfer-glitch.patch b/99-apcupsd-xfer-glitch.patch
new file mode 100644
index 0000000..2b2898d
--- /dev/null
+++ b/99-apcupsd-xfer-glitch.patch
@@ -0,0 +1,61 @@
+diff -aruN apcupsd-3.14.14.orig/src/drivers/usb/usb.c apcupsd-3.14.14/src/drivers/usb/usb.c
+--- apcupsd-3.14.14.orig/src/drivers/usb/usb.c 2024-02-24 20:22:42.007641242 +0100
++++ apcupsd-3.14.14/src/drivers/usb/usb.c 2024-02-24 20:23:03.824987965 +0100
+@@ -42,7 +42,9 @@
+ UpsDriver(ups),
+ _quirk_old_backups_pro(false),
+ _prev_time((struct timeval){0}),
+- _bpcnt(0)
++ _bpcnt(0),
++ _bacnt(0),
++ _brcnt(0)
+ {
+ }
+
+@@ -410,8 +412,13 @@
+ break;
+
+ case CI_NeedReplacement:
+- if (uval->iValue)
+- _ups->set_replacebatt(uval->iValue);
++ if (uval->iValue) {
++ if (_brcnt++) {
++ _ups->set_replacebatt(uval->iValue);
++ }
++ } else {
++ _brcnt = 0;
++ }
+ Dmsg(200, "ReplaceBatt=%d\n", uval->iValue);
+ break;
+
+@@ -569,11 +576,15 @@
+ * delayed. C'est la vie.
+ */
+ if (uval->iValue) {
+- if (_bpcnt++)
++ if (_bpcnt++) {
++ _bacnt = 0;
+ _ups->set_battpresent();
++ }
+ } else {
+- _bpcnt = 0;
+- _ups->clear_battpresent();
++ if (_bacnt++) {
++ _bpcnt = 0;
++ _ups->clear_battpresent();
++ }
+ }
+ Dmsg(200, "BatteryPresent=%d\n", uval->iValue);
+ break;
+diff -aruN apcupsd-3.14.14.orig/src/drivers/usb/usb.h apcupsd-3.14.14/src/drivers/usb/usb.h
+--- apcupsd-3.14.14.orig/src/drivers/usb/usb.h 2024-02-24 20:22:42.007641242 +0100
++++ apcupsd-3.14.14/src/drivers/usb/usb.h 2024-02-24 20:23:01.754956355 +0100
+@@ -86,6 +86,8 @@
+ bool _quirk_old_backups_pro;
+ struct timeval _prev_time;
+ int _bpcnt;
++ int _bacnt;
++ int _brcnt;
+ };
+
+ /* Max rate to update volatile data */
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 92bb57a..0000000
--- a/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-# Makefile for source rpm: apcupsd
-# $Id$
-NAME := apcupsd
-SPECFILE = $(firstword $(wildcard *.spec))
-
-define find-makefile-common
-for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
-endef
-
-MAKEFILE_COMMON := $(shell $(find-makefile-common))
-
-ifeq ($(MAKEFILE_COMMON),)
-# attept a checkout
-define checkout-makefile-common
-test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
-endef
-
-MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
-endif
-
-include $(MAKEFILE_COMMON)
diff --git a/apcupsd-3.14.1-cloexec.patch b/apcupsd-3.14.1-cloexec.patch
new file mode 100644
index 0000000..2ab9c1f
--- /dev/null
+++ b/apcupsd-3.14.1-cloexec.patch
@@ -0,0 +1,48 @@
+--- apcupsd-3.14.1/src/apcnis.c.cloexec 2006-08-13 11:00:15.000000000 -0600
++++ apcupsd-3.14.1/src/apcnis.c 2007-08-01 16:26:35.000000000 -0600
+@@ -155,6 +155,9 @@
+ sleep(5 * 60);
+ }
+
++ /* Close the socket on exec - avoid leaked file descriptors */
++ fcntl(sockfd, F_SETFD, FD_CLOEXEC);
++
+ /* Reuse old sockets */
+ #ifndef HAVE_MINGW
+ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void*)&turnon, sizeof(turnon)) < 0) {
+--- apcupsd-3.14.1/src/apcupsd.c.cloexec 2006-09-23 11:42:47.000000000 -0600
++++ apcupsd-3.14.1/src/apcupsd.c 2007-08-01 16:27:14.000000000 -0600
+@@ -280,6 +280,9 @@
+ if (ups->event_fd < 0) {
+ log_event(ups, LOG_WARNING, "Could not open events file %s: %s\n",
+ ups->eventfile, strerror(errno));
++ } else {
++ /* Close the file on exec - avoid leaked file descriptors */
++ fcntl(ups->event_fd, F_SETFD, FD_CLOEXEC);
+ }
+ }
+
+--- apcupsd-3.14.1/src/drivers/usb/linux/linux-usb.c.cloexec 2007-08-01 16:30:28.000000000 -0600
++++ apcupsd-3.14.1/src/drivers/usb/linux/linux-usb.c 2007-08-01 16:42:55.000000000 -0600
+@@ -182,8 +182,11 @@
+ /* Retry 10 times */
+ for (i = 0; i < 10; i++) {
+ my_data->fd = open_device(ups->device, ups);
+- if (my_data->fd != -1)
++ if (my_data->fd != -1) {
++ /* Close the device on exec - avoid leaked file descriptors */
++ fcntl(my_data->fd, F_SETFD, FD_CLOEXEC);
+ return 1;
++ }
+ sleep(1);
+ }
+
+@@ -206,6 +209,8 @@
+ asnprintf(devname, sizeof(devname), "%s%d", hiddev[j], k);
+ my_data->fd = open_device(devname, ups);
+ if (my_data->fd != -1) {
++ /* Close the device on exec - avoid leaked file descriptors */
++ fcntl(my_data->fd, F_SETFD, FD_CLOEXEC);
+ /* Successful open, save device name and return */
+ astrncpy(ups->device, devname, sizeof(ups->device));
+ return 1;
diff --git a/apcupsd-3.14.3-init.patch b/apcupsd-3.14.3-init.patch
new file mode 100644
index 0000000..388af70
--- /dev/null
+++ b/apcupsd-3.14.3-init.patch
@@ -0,0 +1,46 @@
+diff -up apcupsd-3.14.5/platforms/redhat/apcupsd.in.init apcupsd-3.14.5/platforms/redhat/apcupsd.in
+--- apcupsd-3.14.5/platforms/redhat/apcupsd.in.init 2008-11-01 16:03:26.000000000 +0100
++++ apcupsd-3.14.5/platforms/redhat/apcupsd.in 2009-01-22 10:58:00.429886991 +0100
+@@ -3,9 +3,19 @@
+ # apcupsd This shell script takes care of starting and stopping
+ # the apcupsd UPS monitoring daemon.
+ #
+-# chkconfig: 2345 60 99
++# chkconfig: - 60 99
+ # description: apcupsd monitors power and takes action if necessary
+ #
++### BEGIN INIT INFO
++# Provides: apcupsd
++# Required-Start: $syslog $local_fs
++# Required-Stop: $syslog $local_fs
++# Default-Start:
++# Default-Stop: 0 1 6
++# Short-Description: apcupsd daemon
++# Description: APC UPS Power Control Daemon for Linux
++### END INIT INFO
++
+ APCPID=@PIDDIR@/apcupsd.pid
+
+ # Source function libarary
+@@ -30,9 +40,11 @@ case "$1" in
+ ;;
+ restart|force-reload)
+ $0 stop
+- sleep 15
+ $0 start
+ ;;
++ condrestart)
++ [ -f @LOCKDIR@/subsys/apcupsd ] && $0 restart || :
++ ;;
+ reload)
+ echo "$0: reload not implemented"
+ exit 3
+@@ -48,7 +60,7 @@ case "$1" in
+ fi
+ ;;
+ *)
+- echo "Usage: $0 {start|stop|restart|status}"
++ echo "Usage: $0 {start|stop|restart|condrestart|status}"
+ exit 1
+ ;;
+ esac
diff --git a/apcupsd-3.14.4-shutdown.patch b/apcupsd-3.14.4-shutdown.patch
new file mode 100644
index 0000000..17671f0
--- /dev/null
+++ b/apcupsd-3.14.4-shutdown.patch
@@ -0,0 +1,19 @@
+This is needed to properly halt the machine without powering it down.
+
+See:
+ https://bugzilla.redhat.com/show_bug.cgi?id=348701
+ https://bugzilla.redhat.com/show_bug.cgi?id=1442577
+
+
+diff -up apcupsd-3.14.4/platforms/apccontrol.in.shutdown apcupsd-3.14.4/platforms/apccontrol.in
+--- apcupsd-3.14.4/platforms/apccontrol.in.shutdown 2008-05-28 09:15:47.000000000 +0200
++++ apcupsd-3.14.4/platforms/apccontrol.in 2008-05-28 09:16:04.000000000 +0200
+@@ -104,7 +104,7 @@ case "$1" in
+ ;;
+ doshutdown)
+ echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
+- ${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
++ ${SHUTDOWN} -h -H now "apcupsd UPS ${2} initiated shutdown"
+ ;;
+ annoyme)
+ echo "Power problems with UPS ${2}. Please logoff." | ${WALL}
diff --git a/apcupsd-3.14.9-fixgui.patch b/apcupsd-3.14.9-fixgui.patch
new file mode 100644
index 0000000..79551a1
--- /dev/null
+++ b/apcupsd-3.14.9-fixgui.patch
@@ -0,0 +1,158 @@
+--- apcupsd-3.14.9/src/gapcmon/gapcmon.c.timeout 2008-09-16 06:58:20.000000000 +0200
++++ apcupsd-3.14.9/src/gapcmon/gapcmon.c 2011-10-12 20:10:52.986362156 +0200
+@@ -179,6 +179,54 @@ struct hostent * gethostname_re
+ */
+ static gboolean lg_graph_debug = FALSE;
+
++static GSList *timeout_list = NULL;
++
++static inline timeout_t * new_timeout(guint id, timeout_type_t type, void *data) {
++ timeout_t *timeout = (timeout_t *) malloc(sizeof(timeout_t));
++
++ timeout->id = id;
++ timeout->type = type;
++ timeout->data = data;
++ return timeout;
++}
++
++/* callback will check if timeout is associated with window
++ * which is about to be destroyed and it will call g_source_remove
++ * in order to prevent the callback associated with timeout to be executed
++ */
++static void remove_timeout(gpointer tmo, gpointer data) {
++ timeout_t * timeout = (timeout_t *) tmo;
++ PGAPC_MONITOR monitor = (PGAPC_MONITOR) data;
++ int delete_timeout = 0;
++
++ if (timeout == NULL) {
++ return;
++ }
++
++ switch (timeout->type) {
++ case GRAPH:
++ if (timeout->data == (void *) monitor->phs.plg) {
++ delete_timeout = 1;
++ }
++ break;
++ case MONITOR:
++ if (timeout->data == (void *) monitor) {
++ delete_timeout = 1;
++ }
++ break;
++
++ case HISTORY:
++ if (timeout->data == (void *) &(monitor->phs)) {
++ delete_timeout = 1;
++ }
++ break;
++ }
++
++ if (delete_timeout) {
++ g_source_remove(timeout->id);
++ timeout_list = g_slist_remove(timeout_list, (gconstpointer) timeout);
++ }
++}
+
+ /* ************************************************************************* */
+
+@@ -1376,8 +1424,8 @@ static gint lg_graph_configure_event_cb
+ plg->x_range.i_minor_inc = plg->plot_box.width / plg->x_range.i_num_minor;
+ plg->x_range.i_major_inc = plg->plot_box.width / plg->x_range.i_num_major;
+
+- g_timeout_add (250, (GSourceFunc) lg_graph_draw, plg);
+-
++ guint tid = g_timeout_add (250, (GSourceFunc) lg_graph_draw, plg);
++ timeout_list = g_slist_append(timeout_list, new_timeout(tid, GRAPH, (void *) plg));
+ return TRUE;
+ }
+
+@@ -1745,7 +1793,8 @@ static gboolean cb_monitor_automatic_ref
+ return FALSE; /* stop timers */
+
+ if (pm->b_timer_control) {
+- g_timeout_add(100, (GSourceFunc) cb_monitor_refresh_control, pm);
++ guint tid = g_timeout_add(100, (GSourceFunc) cb_monitor_refresh_control, pm);
++ timeout_list = g_slist_append(timeout_list, new_timeout(tid, MONITOR, (void *) pm));
+ return FALSE;
+ }
+
+@@ -4543,9 +4592,9 @@ static void cb_monitor_interface_button_
+ }
+
+ g_async_queue_push(pm->q_network, pm);
+- g_timeout_add(GAPC_REFRESH_FACTOR_ONE_TIME,
++ guint tid = g_timeout_add(GAPC_REFRESH_FACTOR_ONE_TIME,
+ (GSourceFunc) cb_monitor_dedicated_one_time_refresh, pm);
+-
++ timeout_list = g_slist_append(timeout_list, new_timeout(tid, MONITOR, (void *) pm));
+ return;
+ }
+
+@@ -5174,6 +5223,9 @@ static void cb_monitor_interface_destroy
+ g_source_remove(pm->tid_automatic_refresh);
+ }
+
++ /* iterate through list of timers and remove all timers associated with this monitor */
++ g_slist_foreach(timeout_list, remove_timeout, (gpointer) pm);
++
+ if (pm->tid_thread_qwork != NULL) {
+ pm->b_thread_stop = TRUE;
+ g_async_queue_push(pm->q_network, pm);
+@@ -5537,9 +5589,9 @@ static gint gapc_monitor_history_page(PG
+
+ /* collect one right away */
+ pphs->b_startup = TRUE;
+- g_timeout_add((guint) (pm->d_refresh * GAPC_REFRESH_FACTOR_1K + 75),
++ guint tid = g_timeout_add((guint) (pm->d_refresh * GAPC_REFRESH_FACTOR_1K + 75),
+ (GSourceFunc) cb_util_line_chart_refresh, pphs);
+-
++ timeout_list = g_slist_append(timeout_list, new_timeout(tid, HISTORY, (void *) pphs));
+ return i_page;
+ }
+
+@@ -5565,7 +5617,8 @@ static gboolean cb_util_line_chart_refre
+ return FALSE;
+
+ if (pm->b_graph_control) {
+- g_timeout_add(100, (GSourceFunc) cb_util_line_chart_refresh_control, pm);
++ guint tid = g_timeout_add(100, (GSourceFunc) cb_util_line_chart_refresh_control, pm);
++ timeout_list = g_slist_append(timeout_list, new_timeout(tid, MONITOR, (void *) pm));
+ return FALSE;
+ }
+
+@@ -6392,6 +6445,7 @@ extern int main(int argc, char *argv[])
+ PGAPC_CONFIG pcfg = NULL;
+ GtkWidget *window = NULL;
+
++ timeout_list = g_slist_alloc();
+ /*
+ * Initialize GLib thread support, and GTK
+ */
+@@ -6435,5 +6489,6 @@ extern int main(int argc, char *argv[])
+ gdk_flush();
+ gdk_threads_leave();
+
++ g_slist_free(timeout_list);
+ return (0);
+ }
+--- apcupsd-3.14.9/src/gapcmon/gapcmon.h 2011-10-12 20:12:54.584317583 +0200
++++ apcupsd-3.14.9/src/gapcmon/gapcmon.h.timeout 2011-10-12 20:14:10.965669911 +0200
+@@ -403,6 +403,18 @@ typedef struct _System_Control_Data {
+
+ } GAPC_CONFIG, *PGAPC_CONFIG;
+
++typedef enum {
++ GRAPH,
++ MONITOR,
++ HISTORY
++} timeout_type_t;
++
++typedef struct {
++ guint id;
++ timeout_type_t type;
++ void *data;
++} timeout_t;
++
+ /* ************************************************************************* */
+
+ #define GAPC_GLOSSARY "GAPCMON\n \
diff --git a/apcupsd-httpd.conf b/apcupsd-httpd.conf
new file mode 100644
index 0000000..26a5191
--- /dev/null
+++ b/apcupsd-httpd.conf
@@ -0,0 +1,32 @@
+#
+# apcupsd configuration file for Apache Web server
+#
+
+# files are off the documentroot of Web server
+Alias /apcupsd /var/www/apcupsd
+
+ AddHandler cgi-script cgi pl
+ Options ExecCGI
+
+
+#
+# Allow only local access at default
+# Change the ".example.com" to match your domain or modify
+# access rights to your needs to enable remote access also.
+#
+
+ DirectoryIndex upsstats.cgi
+ AllowOverride None
+ Options ExecCGI Indexes
+
+ # Apache 2.4
+ Require local
+
+
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+ Allow from 127.0.0.1
+ Allow from ::1
+
+
diff --git a/apcupsd.logrotate b/apcupsd.logrotate
new file mode 100644
index 0000000..0bfef2a
--- /dev/null
+++ b/apcupsd.logrotate
@@ -0,0 +1,5 @@
+/var/log/apcupsd.events {
+ missingok
+ copytruncate
+ notifempty
+}
diff --git a/apcupsd.service b/apcupsd.service
new file mode 100644
index 0000000..2e199ff
--- /dev/null
+++ b/apcupsd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=APC UPS Power Control Daemon for Linux
+After=syslog.target
+After=network-online.target
+
+[Service]
+ExecStartPre=-/bin/rm -f /etc/apcupsd/powerfail
+ExecStart=/usr/bin/apcupsd -b -f /etc/apcupsd/apcupsd.conf
+KillMode=process
+
+[Install]
+WantedBy=multi-user.target
diff --git a/apcupsd.spec b/apcupsd.spec
new file mode 100644
index 0000000..dde0ac9
--- /dev/null
+++ b/apcupsd.spec
@@ -0,0 +1,537 @@
+# A change in RPM 4.15 causes the make_build macro to misbuild this package.
+# See https://github.com/rpm-software-management/rpm/issues/798
+%global _make_verbose %nil
+
+Name: apcupsd
+Version: 3.14.14
+Release: 40%{?dist}
+Summary: APC UPS Power Control Daemon
+
+License: GPL-2.0-only
+URL: http://www.apcupsd.com
+Source0: https://downloads.sourceforge.net/apcupsd/apcupsd-%version.tar.gz
+Source1: apcupsd.service
+Source2: apcupsd_shutdown
+Source3: apcupsd-httpd.conf
+Source4: apcupsd.logrotate
+Source5: apcupsd64x64.png
+
+# fix crash in gui, rhbz#578276
+Patch0: apcupsd-3.14.9-fixgui.patch
+# Halt without powering off, rhbz#1442577
+Patch1: apcupsd-3.14.4-shutdown.patch
+# Fix format-security error so we can enable the checks
+Patch2: patch-format-security
+Patch3: disable_nologin.patch
+# fixes "increasing NUMXFERS" bug:
+# https://sourceforge.net/p/apcupsd/mailman/apcupsd-users/thread/ad9afb27-30f9-443f-a9fb-982c41ad1325%40okazoo.eu/
+# https://www.reddit.com/r/homelab/comments/1c3eo9n/apcupsd_and_proxmox_frequent_battery_disconnected/
+# patch source: https://sourceforge.net/p/apcupsd/mailman/message/58741334/
+Patch4: 99-apcupsd-xfer-glitch.patch
+
+BuildRequires: gcc-c++
+BuildRequires: glibc-devel, gd-devel
+%if %{defined fedora} || (%{defined rhel} && 0%{?rhel} > 9)
+BuildRequires: libusb-compat-0.1-devel
+%endif
+%if (%{defined rhel} && 0%{?rhel} <= 9)
+BuildRequires: libusb-devel
+%endif
+BuildRequires: net-snmp-devel,
+BuildRequires: gtk2-devel, GConf2-devel, desktop-file-utils
+# /sbin/shutdown is required to be present when building
+# Somehow in F36 systemd is installed in mock but not in koji
+BuildRequires: systemd
+# This is part of util-linux in Fedora, but on EL7 it's in sysvinit-tools.
+BuildRequires: /usr/bin/wall
+BuildRequires: make
+Requires: /bin/mail /usr/bin/wall
+%{?systemd_requires}
+
+%description
+Apcupsd can be used for controlling most APC UPSes. During a
+power failure, apcupsd will inform the users about the power
+failure and that a shutdown may occur. If power is not restored,
+a system shutdown will follow when the battery is exausted, a
+timeout (seconds) expires, or the battery runtime expires based
+on internal APC calculations determined by power consumption
+rates. If the power is restored before one of the above shutdown
+conditions is met, apcupsd will inform users about this fact.
+Some features depend on what UPS model you have (simple or smart).
+
+
+%package cgi
+Summary: Web interface for apcupsd
+Requires: apcupsd = %version-%release
+Requires: httpd
+
+%description cgi
+A CGI interface to the APC UPS monitoring daemon.
+
+
+%package gui
+Summary: GUI interface for apcupsd
+Requires: apcupsd = %version-%release
+
+%description gui
+A GUI interface to the APC UPS monitoring daemon.
+
+
+%prep
+%autosetup -p1
+
+# Override the provided platform makefile
+printf 'install:\n\techo skipped\n' > platforms/redhat/Makefile
+
+%build
+%configure \
+ --sysconfdir="/etc/apcupsd" \
+ --with-cgi-bin="/var/www/apcupsd" \
+ --sbindir=%{_bindir} \
+ --enable-cgi \
+ --enable-pthreads \
+ --enable-net \
+ --enable-apcsmart \
+ --enable-dumb \
+ --enable-net-snmp \
+ --enable-snmp \
+ --enable-usb \
+ --enable-modbus-usb \
+ --enable-gapcmon \
+ --enable-pcnet \
+ --with-serial-dev= \
+ --with-upstype=usb \
+ --with-upscable=usb \
+ --with-lock-dir=/var/lock \
+ APCUPSD_MAIL=/bin/mail
+%make_build
+
+%install
+mkdir -p %buildroot/var/www/apcupsd
+%make_install
+install -m744 platforms/apccontrol \
+ %buildroot/etc/apcupsd/apccontrol
+
+install -p -D -m0644 %SOURCE1 %buildroot/lib/systemd/system/apcupsd.service
+install -p -D -m0755 %SOURCE2 %buildroot/lib/systemd/system-shutdown/apcupsd_shutdown
+install -p -D -m0644 %SOURCE3 %buildroot/etc/httpd/conf.d/apcupsd.conf
+install -p -D -m0644 %SOURCE4 %buildroot/etc/logrotate.d/apcupsd
+install -p -D -m0644 %SOURCE5 %buildroot/usr/share/pixmaps/apcupsd64x64.png
+
+desktop-file-install \
+ --vendor="fedora" \
+ --dir=%buildroot/usr/share/applications \
+ --set-icon=apcupsd64x64 \
+ --delete-original \
+ %buildroot/usr/share/applications/gapcmon.desktop
+
+# Cleanup for later %%doc processing
+chmod -x examples/*.c
+rm examples/*.in
+
+%files
+%license COPYING
+%doc ChangeLog examples ReleaseNotes
+%dir /etc/apcupsd
+/lib/systemd/system/apcupsd.service
+/lib/systemd/system-shutdown/apcupsd_shutdown
+%config(noreplace) /etc/apcupsd/apcupsd.conf
+%attr(0755,root,root) /etc/apcupsd/apccontrol
+%config(noreplace) /etc/apcupsd/changeme
+%config(noreplace) /etc/apcupsd/commfailure
+%config(noreplace) /etc/apcupsd/commok
+%config(noreplace) /etc/apcupsd/offbattery
+%config(noreplace) /etc/apcupsd/onbattery
+%config(noreplace) /etc/logrotate.d/apcupsd
+/usr/share/hal/fdi/policy/20thirdparty/80-apcupsd-ups-policy.fdi
+%{_bindir}/apcaccess
+%{_bindir}/apctest
+%{_bindir}/apcupsd
+%exclude %{_bindir}/smtp
+
+%{_mandir}/*/*
+
+%files cgi
+%config(noreplace) /etc/apcupsd/apcupsd.css
+%config(noreplace) /etc/httpd/conf.d/apcupsd.conf
+%config(noreplace) /etc/apcupsd/hosts.conf
+%config(noreplace) /etc/apcupsd/multimon.conf
+/var/www/apcupsd/
+
+%files gui
+/usr/bin/gapcmon
+/usr/share/applications/*gapcmon.desktop
+/usr/share/pixmaps/apcupsd.png
+/usr/share/pixmaps/apcupsd64x64.png
+/usr/share/pixmaps/charging.png
+/usr/share/pixmaps/gapc_prefs.png
+/usr/share/pixmaps/onbatt.png
+/usr/share/pixmaps/online.png
+/usr/share/pixmaps/unplugged.png
+
+
+%post
+%systemd_post apcupsd.service
+
+%preun
+%systemd_preun apcupsd.service
+
+%postun
+%systemd_postun_with_restart apcupsd.service
+
+
+%changelog
+* Fri Jan 16 2026 Fedora Release Engineering - 3.14.14-40
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
+
+* Wed Jul 23 2025 Fedora Release Engineering - 3.14.14-39
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+
+* Thu May 22 2025 Gwyn Ciesla - 3.14.14-38
+- Don't ship /usr/bin/smtp, not used, conflicts with opensmtpd.
+
+* Fri May 09 2025 Gwyn Ciesla - 3.14.14-37
+- Move binaries from sbin to bin, 2365293.
+
+* Wed Apr 23 2025 Davide Cavalca - 3.14.14-36
+- Fix libusb conditional to make it build on EPEL 10
+ Fixes: RHBZ#2337139
+
+* Wed Apr 09 2025 Germano Massullo - 3.14.14-35
+- Adds 99-apcupsd-xfer-glitch.patch
+
+* Thu Jan 16 2025 Fedora Release Engineering - 3.14.14-34
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
+
+* Fri Nov 08 2024 Germano Massullo - 3.14.14-33
+- Adds distinction between Fedora and EL <= 9 for BuildRequires: libusb
+
+* Fri Nov 08 2024 Germano Massullo - 3.14.14-32
+- release bump
+
+* Fri Nov 08 2024 Germano Massullo - 3.14.14-31
+- Adds disable_nologin.patch
+
+* Sun Jan 07 2024 Germano Massullo - 3.14.14-30
+- disables apcupsd-3.14.4-shutdown.patch
+
+* Wed Jul 19 2023 Fedora Release Engineering - 3.14.14-29
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Wed Jan 18 2023 Fedora Release Engineering - 3.14.14-28
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Tue Aug 02 2022 Jason L Tibbitts III - 3.14.14-27
+- Depend on libusb-compat-0.1-devel to avoid build breakage.
+
+* Wed Jul 20 2022 Fedora Release Engineering - 3.14.14-26
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Tue Jan 25 2022 Jason L Tibbitts III - 3.14.14-25
+- Explicitly require systemd at build time to ensure that /sbin/shutdown is
+ present.
+
+* Wed Jan 19 2022 Fedora Release Engineering - 3.14.14-24
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Wed Jul 21 2021 Fedora Release Engineering - 3.14.14-23
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Sat Jan 30 2021 Jason L Tibbitts III - 3.14.14-22
+- Fix build on F33+.
+- Allow build with format-security checking enabled.
+
+* Tue Jan 26 2021 Fedora Release Engineering - 3.14.14-21
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Sat Aug 01 2020 Fedora Release Engineering - 3.14.14-20
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering - 3.14.14-19
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jun 08 2020 Germano Massullo - 3.14.14-18
+- Replaced BuildRequires: gnome-vfs2 with BuildRequires: GConf2-devel More infos at https://bugzilla.redhat.com/show_bug.cgi?id=1745727#c5
+
+* Tue Jan 28 2020 Fedora Release Engineering - 3.14.14-17
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Jul 24 2019 Jason L Tibbitts III - 3.14.14-16
+- Workaround change in RPM 4.15 which breaks the build.
+
+* Wed Jul 24 2019 Fedora Release Engineering - 3.14.14-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Thu Jan 31 2019 Fedora Release Engineering - 3.14.14-14
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Mon Dec 03 2018 Jason L Tibbitts III - 3.14.14-13
+- Fix broken zero-size icon.
+
+* Thu Jul 12 2018 Fedora Release Engineering - 3.14.14-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Thu May 17 2018 Jason L Tibbitts III - 3.14.14-11
+- Add KillMode=process to the systemd unit.
+
+* Mon Mar 26 2018 Till Maas - 3.14.14-10
+- rebuilt to drop tcp_wrappers dependency
+ https://bugzilla.redhat.com/show_bug.cgi?id=1518751
+- remove tcp_wrappers support
+
+* Wed Feb 07 2018 Fedora Release Engineering - 3.14.14-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Thu Jan 25 2018 Jason L Tibbitts III - 3.14.14-8
+- Use proper systemd dependencies.
+
+* Wed Aug 02 2017 Fedora Release Engineering - 3.14.14-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering - 3.14.14-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Mon Apr 17 2017 Jason L Tibbitts III - 3.14.14-5
+- Reinstate patch to call shutdown with -H to halt instead of powering down.
+
+* Fri Mar 24 2017 Jason L Tibbitts III - 3.14.14-4
+- Depend on /usr/bin/wall to accommodate EL7.
+
+* Fri Feb 10 2017 Fedora Release Engineering - 3.14.14-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Jun 22 2016 Jason L Tibbitts III - 3.14.14-2
+- Clean up the spec a bit.
+- Stop adding the unit file and shutdown script in a patch and just included
+ them as sources instead.
+- Have the unit go after network-online.target instead of network.target.
+- Remove apcupsd-3.14.4-shutdown.patch. Both the old and the new commands to
+ exactly the same thing for me (halt but not power down) on my test machines.
+
+* Thu Jun 02 2016 Michal Hlavinka - 3.14.14-1
+- updated to 3.14.14
+
+* Wed Feb 03 2016 Fedora Release Engineering - 3.14.13-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Mon Nov 23 2015 Michal Hlavinka - 3.14.13-4
+- fix apcaccess crash if apcupsd is not running (#1236367,#1197383)
+- enabled modbus-usb (#1195071)
+- add bigger icon (#1157532)
+
+* Wed Jun 17 2015 Fedora Release Engineering - 3.14.13-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Sat May 02 2015 Kalev Lember - 3.14.13-2
+- Rebuilt for GCC 5 C++11 ABI change
+
+* Tue Feb 03 2015 Michal Hlavinka - 3.14.13-1
+- apcupsd updated to 3.14.13
+
+* Fri Aug 15 2014 Fedora Release Engineering - 3.14.12-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sat Jun 07 2014 Fedora Release Engineering - 3.14.12-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Mon Mar 31 2014 Michal Hlavinka - 3.14.12-1
+- apcupsd updated to 3.14.12
+- force lock dir to /var/lock (#1064099)
+
+* Mon Feb 17 2014 Michal Hlavinka - 3.14.11-1
+- apcupsd updated to 3.14.11
+
+* Tue Jan 21 2014 Michal Hlavinka - 3.14.10-14
+- reduce amount of debug messages (#1053324)
+
+* Wed Aug 14 2013 Michal Hlavinka - 3.14.10-13
+- fix aarch64 support (#925007)
+
+* Sat Aug 03 2013 Fedora Release Engineering - 3.14.10-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Tue Jun 11 2013 Remi Collet - 3.14.10-11
+- rebuild for new GD 2.1.0
+
+* Fri May 17 2013 Michal Hlavinka - 3.14.10-10
+- make executables hardened (#955341)
+
+* Thu Feb 14 2013 Toshio Kuratomi - 3.14.10-9
+- Remove --vendor flag to desktop-file-install on F19+
+
+* Tue Feb 05 2013 Michal Hlavinka - 3.14.10-8
+- remove obsolete documentation
+
+* Tue Oct 30 2012 Michal Hlavinka - 3.14.10-7
+- fix configuration for httpd 2.4 (#871361)
+
+* Fri Aug 24 2012 Michal Hlavinka - 3.14.10-6
+- scriptlets replaced with new systemd macros (#851227)
+
+* Wed Jul 18 2012 Fedora Release Engineering - 3.14.10-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Mon Feb 13 2012 Michal Hlavinka - 3.14.10-4
+- start after network is up (#789191)
+
+* Thu Jan 12 2012 Fedora Release Engineering - 3.14.10-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Mon Dec 19 2011 Michal Hlavinka - 3.14.10-2
+- remove powerfail flag on boot (#768684)
+
+* Mon Dec 12 2011 Michal Hlavinka - 3.14.10-1
+- apcupsd updated to 3.14.10
+- fix MODEL vs. APCMODEL confusion. Remove APCMODEL and rename old MODEL
+ aka 'mode' to DRIVER.
+
+* Thu Oct 20 2011 Michal Hlavinka - 3.14.9-2
+- fix crash in gui (#578276), patch by Michal Sekletar
+
+* Mon Jul 25 2011 Michal Hlavinka - 3.14.9-1
+- apcupsd updated to 3.14.9
+
+* Fri Jul 08 2011 Michal Hlavinka - 3.14.8-9
+- rebuilt for net-snmp update
+
+* Thu Jun 16 2011 Michal Hlavinka - 3.14.8-8
+- move from SysV init script to systemd service file
+
+* Wed Feb 09 2011 Michal Hlavinka - 3.14.9-7
+- add readme file to doc explaining needed configuration of halt script
+
+* Mon Feb 07 2011 Fedora Release Engineering - 3.14.8-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Thu Dec 02 2010 Michal Hlavinka - 3.14.8-5
+- do not attempt to invoke directory as a script (#659219)
+
+* Fri Nov 05 2010 Michal Hlavinka - 3.14.8-4
+- rebuilt for library update
+
+* Wed Sep 29 2010 jkeating - 3.14.8-3
+- Rebuilt for gcc bug 634757
+
+* Wed Sep 22 2010 Michal Hlavinka - 3.14.8-2
+- fix c++ code linking (FTBFS) (#631288)
+
+* Mon Jan 18 2010 Michal Hlavinka - 3.14.8-1
+- updated to 3.14.8
+
+* Fri Sep 18 2009 Michal Hlavinka - 3.14.7-3
+- fix building with new net-snmp version
+
+* Fri Aug 21 2009 Tomas Mraz - 3.14.7-2
+- rebuilt with new openssl
+
+* Mon Aug 03 2009 Michal Hlavinka - 3.14.7-1
+- updated to 3.14.7
+
+* Fri Jul 24 2009 Fedora Release Engineering - 3.14.6-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Mon May 18 2009 Michal Hlavinka - 3.14.6-1
+- update to 3.14.6
+
+* Tue Feb 24 2009 Michal Hlavinka - 3.14.5-3
+- fix build with gcc 4.4
+
+* Mon Feb 23 2009 Fedora Release Engineering - 3.14.5-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Thu Jan 22 2009 Michal Hlavinka - 3.14.5-1
+- update to 3.14.5
+
+* Thu Jan 15 2009 Tomas Mraz - 3.14.4-3
+- rebuild with new openssl
+
+* Fri Jun 06 2008 Tomas Smetana - 3.14.4-2
+- drop useless build requirements
+- fix #448637 - hosts.conf and multimon.conf should be in apcupsd-cgi
+- move binaries to /sbin (related #346271)
+
+* Wed May 28 2008 Tomas Smetana - 3.14.4-1
+- new upstream version
+
+* Tue Feb 12 2008 Tomas Smetana - 3.14.3-2.1
+- rebuild (gcc-4.3)
+
+* Wed Jan 30 2008 Tomas Smetana - 3.14.3-2
+- fix #348701 - apcupsd control script does not invoke shutdown properly
+
+* Wed Jan 23 2008 Tomas Smetana - 3.14.3-1
+- Update to 3.14.3
+
+* Wed Oct 10 2007 - Orion Poplawski - 3.14.2-1
+- Update to 3.14.2, remove upstreamed patches
+
+* Wed Aug 1 2007 - Orion Poplawski - 3.14.1-3
+- Add patch to close open file descriptors (bug #247162)
+- Stop/restart service as needed on removal/upgrade
+
+* Mon Jun 04 2007 - Orion Poplawski - 3.14.1-2
+- Add patch for linux USB UPS detection (bug #245864)
+
+* Tue May 29 2007 - Orion Poplawski - 3.14.1-1
+- Update to 3.14.1
+
+* Mon Apr 23 2007 - Orion Poplawski - 3.14.0-2
+- Fix init script for LSB compliance (bug #237532)
+
+* Mon Feb 12 2007 - Orion Poplawski - 3.14.0-1
+- Update to 3.14.0
+
+* Fri Jan 5 2007 - Orion Poplawski - 3.13.9-2
+- Mark everything in /etc/apcupsd noreplace
+- Change BR to tcp_wrappers-devel
+
+* Thu Nov 30 2006 - Orion Poplawski - 3.13.9-1
+- Update to 3.13.9, add gui package
+
+* Mon Oct 9 2006 - Orion Poplawski - 3.12.4-3
+- Fix /etc/httpd/conf.d/apcupsd.conf so DirectoryIndex works (bug #209952).
+ Patch from Clive Messer (clive@vacuumtube.org.uk)
+
+* Tue Aug 29 2006 - Orion Poplawski - 3.12.4-2
+- Rebuild for FC6
+
+* Mon Aug 21 2006 - Orion Poplawski - 3.12.4-1
+- Update to 3.12.4
+
+* Tue Jan 10 2006 - Orion Poplawski - 3.12.2-1
+- Update to 3.12.2
+- Don't strip binaries
+
+* Tue Jan 10 2006 - Orion Poplawski - 3.12.1-1
+- Update to 3.12.1
+
+* Wed Jan 4 2006 - Orion Poplawski - 3.12.0-1
+- Update to 3.12.0
+
+* Tue Jan 3 2006 - Orion Poplawski - 3.10.18-7
+- Rebuild
+
+* Wed Dec 21 2005 - Orion Poplawski - 3.10.18-6
+- Rebuild
+
+* Wed Nov 16 2005 - Orion Poplawski - 3.10.18-5
+- Bump for new openssl
+
+* Fri Nov 4 2005 - Orion Poplawski - 3.10.18-4
+- Add logrotate script for /var/log/apcupsd.events
+- Add apache configuration script and change cgi directory to
+ /var/www/apcupsd
+- Compile in snmp, net-snmp, powerflute, nls, add tcp_wrappers support
+
+* Mon Oct 17 2005 - Orion Poplawski - 3.10.18-3
+- Removed %%{_smp_mflags} from make, broke builds
+- Patch init file to not start automatically and add reload
+- Mark css file config
+- Require /sbin/chkconfig
+
+* Mon Oct 17 2005 - Orion Poplawski - 3.10.18-2
+- Add %%defattr to -cgi package
+
+* Wed Aug 17 2005 - Orion Poplawski - 3.10.18-1
+- Initial Fedora Version
diff --git a/apcupsd64x64.png b/apcupsd64x64.png
new file mode 100644
index 0000000..ed65f35
Binary files /dev/null and b/apcupsd64x64.png differ
diff --git a/apcupsd_shutdown b/apcupsd_shutdown
new file mode 100644
index 0000000..4eff1ed
--- /dev/null
+++ b/apcupsd_shutdown
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# See if this is a powerfail situation.
+if [ -f /etc/apcupsd/powerfail ]; then
+ echo
+ echo "APCUPSD will now power off the UPS"
+ echo
+ /etc/apcupsd/apccontrol killpower
+fi
diff --git a/disable_nologin.patch b/disable_nologin.patch
new file mode 100644
index 0000000..81fefc7
--- /dev/null
+++ b/disable_nologin.patch
@@ -0,0 +1,18 @@
+diff -urNr apcupsd-3.14.14-orig/src/action.c apcupsd-3.14.14/src/action.c
+--- apcupsd-3.14.14-orig/src/action.c 2015-03-20 04:59:41.000000000 +0100
++++ apcupsd-3.14.14/src/action.c 2024-11-08 16:48:46.095910557 +0100
+@@ -189,13 +189,7 @@
+
+ static void prohibit_logins(UPSINFO *ups)
+ {
+- if (ups->nologin_file)
+- return; /* already done */
+-
+- logonfail(ups, 0);
+- ups->nologin_file = true;
+-
+- log_event(ups, LOG_ALERT, "User logins prohibited");
++ return;
+ }
+
+ static void do_shutdown(UPSINFO *ups, int cmdtype)
diff --git a/patch-format-security b/patch-format-security
new file mode 100644
index 0000000..d919a3c
--- /dev/null
+++ b/patch-format-security
@@ -0,0 +1,13 @@
+diff --git a/src/gapcmon/gapcmon.c b/src/gapcmon/gapcmon.c
+index 40bf29d..111fe1f 100644
+--- a/src/gapcmon/gapcmon.c
++++ b/src/gapcmon/gapcmon.c
+@@ -2938,7 +2938,7 @@ static void gapc_util_log_app_msg(gchar * pch_func, gchar * pch_topic,
+
+ pch = g_strdup_printf("%s(%s) emsg=%s", pch_func, pch_topic, pch_emsg);
+
+- g_message(pch);
++ g_message("%s", pch);
+
+ g_free(pch);
+
diff --git a/rpmlint.cf b/rpmlint.cf
new file mode 100644
index 0000000..8f28374
--- /dev/null
+++ b/rpmlint.cf
@@ -0,0 +1,3 @@
+setOption('NetworkEnabled', False)
+addFilter('hardcoded-library-path in %buildroot/lib/systemd')
+addFilter('hardcoded-library-path in /lib/systemd')
diff --git a/sources b/sources
index e69de29..4cc7ee2 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+cc8f5ced77f38906a274787acb9bc980 apcupsd-3.14.14.tar.gz