Skip to content

Commit 5e8acf7

Browse files
committed
Use autotools path variables instead of hardcoded paths
All paths were hardcoded (e.g. /etc/fapolicyd/, /var/lib/fapolicyd, /run/fapolicyd/), which meant building with the default prefix (--prefix=/usr/local) resulted in binaries that still looked for config and state in /etc and /var. This is a common developer workflow when building and testing upstream without RPM packaging. - paths.h: replace hardcoded paths with SYSCONFDIR, LOCALSTATEDIR, RUNSTATEDIR, DATADIR defines passed via CFLAGS - trust-file.h: remove duplicate TRUST_FILE_PATH/TRUST_DIR_PATH, include paths.h - fagenrules, fapolicyd.service, fapolicyd-tmpfiles.conf: convert to .in templates with @sysconfdir@, @runstatedir@, @sbindir@, @localstatedir@ substitution - configure.ac: fix systemdsystemunitdir NONE expansion bug, add --with-systemdsystemunitdir - database.c: create trust database directory at startup if missing, with proper ownership (uid/gid from config) - fapolicyd.c: include pidfile path in error message - database.c: include data_dir path in mdb_env_open error message - Move fapolicyd-rpm-loader from bin to libexec (BINARYDIR renamed to LIBEXECDIR). The loader is an internal helper spawned by the daemon, not a user-facing executable. Co-developed-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e2d52cd commit 5e8acf7

14 files changed

Lines changed: 73 additions & 51 deletions

configure.ac

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,11 @@ AS_HELP_STRING([--enable-stress],
209209
use_stress=$enableval,use_stress=no)
210210
AM_CONDITIONAL(WITH_STRESS, test x$use_stress = xyes)
211211

212-
dnl FIXME some day pass this on the command line
213-
def_systemdsystemunitdir=${prefix}/lib/systemd/system
214-
AC_SUBST([systemdsystemunitdir], [$def_systemdsystemunitdir])
212+
AC_ARG_WITH([systemdsystemunitdir],
213+
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [systemd system unit directory]),
214+
[systemdsystemunitdir=$withval],
215+
[systemdsystemunitdir=\${prefix}/lib/systemd/system])
216+
AC_SUBST([systemdsystemunitdir])
215217

216218
echo .
217219
echo Checking for required header files

fapolicyd.spec

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ popd
122122

123123
%install
124124
%make_install
125-
install -p -m 644 -D init/%{name}-tmpfiles.conf %{buildroot}/%{_tmpfilesdir}/%{name}.conf
126125
mkdir -p %{buildroot}/%{_localstatedir}/lib/%{name}
127126
mkdir -p %{buildroot}/run/%{name}
128127
mkdir -p %{buildroot}%{_sysconfdir}/%{name}/trust.d
@@ -249,11 +248,11 @@ fi
249248
%config(noreplace) %attr(644,root,%{name}) %{_sysconfdir}/%{name}/%{name}.trust
250249
%ghost %attr(644,root,%{name}) %{_sysconfdir}/%{name}/compiled.rules
251250
%attr(644,root,root) %{_unitdir}/%{name}.service
252-
%attr(644,root,root) %{_tmpfilesdir}/%{name}.conf
251+
%attr(644,root,root) %{_tmpfilesdir}/%{name}-tmpfiles.conf
253252
%attr(755,root,root) %{_sbindir}/%{name}
254253
%attr(755,root,root) %{_sbindir}/%{name}-cli
255254
%attr(755,root,root) %{_sbindir}/%{name}-perf-test
256-
%attr(755,root,root) %{_bindir}/%{name}-rpm-loader
255+
%attr(755,root,root) %{_libexecdir}/%{name}-rpm-loader
257256
%attr(755,root,root) %{_sbindir}/fagenrules
258257
%attr(644,root,root) %{_mandir}/man8/*
259258
%attr(644,root,root) %{_mandir}/man5/*

init/Makefile.am

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
EXTRA_DIST = \
2-
fapolicyd.service \
2+
fapolicyd.service.in \
33
fapolicyd.conf \
44
fapolicyd-filter.conf \
55
fapolicyd.trust \
6-
fapolicyd-tmpfiles.conf \
6+
fapolicyd-tmpfiles.conf.in \
77
fapolicyd-magic \
88
fapolicyd.bash_completion \
9-
fagenrules
9+
fagenrules.in
1010

1111
fapolicyddir = $(sysconfdir)/fapolicyd
1212

@@ -16,16 +16,29 @@ dist_fapolicyd_DATA = \
1616
fapolicyd.trust
1717

1818
systemdservicedir = $(systemdsystemunitdir)
19-
dist_systemdservice_DATA = fapolicyd.service
19+
systemdservice_DATA = fapolicyd.service
2020

2121
sbin_SCRIPTS = fagenrules
2222

23+
fagenrules: fagenrules.in Makefile
24+
$(SED) -e 's|[@]sysconfdir[@]|$(sysconfdir)|g' $< > $@
25+
chmod 755 $@
26+
27+
fapolicyd-tmpfiles.conf: fapolicyd-tmpfiles.conf.in Makefile
28+
$(SED) -e 's|[@]runstatedir[@]|$(runstatedir)|g' -e 's|[@]localstatedir[@]|$(localstatedir)|g' -e 's|[@]sysconfdir[@]|$(sysconfdir)|g' $< > $@
29+
30+
fapolicyd.service: fapolicyd.service.in Makefile
31+
$(SED) -e 's|[@]runstatedir[@]|$(runstatedir)|g' -e 's|[@]sbindir[@]|$(sbindir)|g' $< > $@
32+
33+
tmpfilesdir = $(prefix)/lib/tmpfiles.d
34+
tmpfiles_DATA = fapolicyd-tmpfiles.conf
35+
2336
completiondir = $(sysconfdir)/bash_completion.d/
2437
dist_completion_DATA = fapolicyd.bash_completion
2538

2639
MAGIC = fapolicyd-magic.mgc
2740
pkgdata_DATA = ${MAGIC}
28-
CLEANFILES = ${MAGIC}
41+
CLEANFILES = ${MAGIC} fagenrules fapolicyd.service fapolicyd-tmpfiles.conf
2942

3043
${MAGIC}: $(EXTRA_DIST)
3144
file -C -m ${top_srcdir}/init/fapolicyd-magic

init/fagenrules renamed to init/fagenrules.in

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#!/bin/sh
22

33
# Script to concatenate rules files found in a base fapolicyd rules directory
4-
# to form a single /etc/fapolicyd/compiled.rules file suitable for loading
4+
# to form a single @sysconfdir@/fapolicyd/compiled.rules file suitable for loading
55
# into the daemon
66

77
# When forming the interim rules file, both empty lines and comment
88
# lines (starting with # or <whitespace>#) are stripped as the source files
99
# are processed.
1010
#
1111
# Having formed the interim rules file, the script checks if the file is empty
12-
# or is identical to the existing /etc/fapolicyd/compiled.rules and if either
12+
# or is identical to the existing @sysconfdir@/fapolicyd/compiled.rules and if either
1313
# of these cases are true, it does not replace the existing file.
1414
#
1515

@@ -25,9 +25,9 @@
2525
# Suffix for previous fapolicyd.rules file if this script replaces it.
2626
# The file is left in the destination directory with suffix with $ASuffix
2727

28-
OldDestinationFile=/etc/fapolicyd/fapolicyd.rules
29-
DestinationFile=/etc/fapolicyd/compiled.rules
30-
SourceRulesDir=/etc/fapolicyd/rules.d
28+
OldDestinationFile=@sysconfdir@/fapolicyd/fapolicyd.rules
29+
DestinationFile=@sysconfdir@/fapolicyd/compiled.rules
30+
SourceRulesDir=@sysconfdir@/fapolicyd/rules.d
3131
TmpRules=$(mktemp /tmp/farules.XXXXXXXX)
3232
ASuffix="prev"
3333
OnlyCheck=0

init/fapolicyd-tmpfiles.conf

Lines changed: 0 additions & 3 deletions
This file was deleted.

init/fapolicyd-tmpfiles.conf.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
d @runstatedir@/fapolicyd 0770 root fapolicyd -
2+
d @localstatedir@/lib/fapolicyd 770 root fapolicyd -
3+
Z @sysconfdir@/fapolicyd - root fapolicyd -
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ Documentation=man:fapolicyd(8)
1313
[Service]
1414
OOMScoreAdjust=-1000
1515
Type=forking
16-
RuntimeDirectory=fapolicyd
17-
PIDFile=/run/fapolicyd.pid
18-
ExecStartPre=/usr/sbin/fagenrules
19-
ExecStart=/usr/sbin/fapolicyd
16+
PIDFile=@runstatedir@/fapolicyd.pid
17+
ExecStartPre=@sbindir@/fagenrules
18+
ExecStart=@sbindir@/fapolicyd
2019
Restart=on-abnormal
2120

2221
[Install]

src/Makefile.am

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ endif
1414

1515
lib_LTLIBRARIES= libfapolicyd.la
1616

17-
fapolicyd_CFLAGS = -std=gnu11 -fPIE -DPIE -pthread -g -W -Wall -Wshadow -Wundef -Wno-unused-result -Wno-unused-parameter -D_GNU_SOURCE
17+
fapolicyd_CFLAGS = -std=gnu11 -fPIE -DPIE -pthread -g -W -Wall -Wshadow -Wundef -Wno-unused-result -Wno-unused-parameter -D_GNU_SOURCE -DSYSCONFDIR='"$(sysconfdir)"' -DLOCALSTATEDIR='"$(localstatedir)"' -DRUNSTATEDIR='"$(runstatedir)"' -DDATADIR='"$(datadir)"'
1818
fapolicyd_LDFLAGS = -pie -Wl,-z,relro -Wl,-z,now -static
1919
fapolicyd_LDADD = libfapolicyd.la
2020

@@ -105,12 +105,12 @@ if WITH_RPM
105105
libfapolicyd_la_SOURCES += \
106106
library/rpm-backend.c
107107

108-
bin_PROGRAMS = fapolicyd-rpm-loader
108+
libexec_PROGRAMS = fapolicyd-rpm-loader
109109

110110
fapolicyd_rpm_loader_SOURCES = \
111111
handler/fapolicyd-rpm-loader.c
112112

113-
fapolicyd_CFLAGS += -DBINARYDIR='"$(bindir)"'
113+
fapolicyd_CFLAGS += -DLIBEXECDIR='"$(libexecdir)"'
114114
fapolicyd_rpm_loader_CFLAGS = $(fapolicyd_CFLAGS)
115115
fapolicyd_rpm_loader_LDFLAGS = $(fapolicyd_LDFLAGS)
116116
fapolicyd_rpm_loader_LDADD = libfapolicyd.la

src/daemon/fapolicyd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,8 +592,8 @@ static int write_pid_file(void)
592592
}
593593
pidfd = open(pidfile, O_CREAT | O_TRUNC | O_NOFOLLOW | O_WRONLY, 0644);
594594
if (pidfd < 0) {
595-
msg(LOG_ERR, "Unable to create pidfile (%s)",
596-
strerror(errno));
595+
msg(LOG_ERR, "Unable to create pidfile %s (%s)",
596+
pidfile, strerror(errno));
597597
return 1;
598598
}
599599
if (write(pidfd, val, (unsigned int)len) != len) {

src/library/database.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2530,7 +2530,8 @@ static int init_db_with_generations(const conf_t *config,
25302530

25312531
rc = mdb_env_open(env, data_dir, flags, 0660);
25322532
if (rc) {
2533-
msg(LOG_ERR, "env_open error: %s", mdb_strerror(rc));
2533+
msg(LOG_ERR, "env_open error on %s: %s", data_dir,
2534+
mdb_strerror(rc));
25342535
/* Clean up environment on failure */
25352536
mdb_env_close(env);
25362537
env = NULL;
@@ -4621,6 +4622,16 @@ int init_database(conf_t *config)
46214622
int rc;
46224623

46234624
msg(LOG_INFO, "Initializing the trust database");
4625+
4626+
if (mkdir(data_dir, 0770) == 0) {
4627+
chmod(data_dir, 0770);
4628+
chown(data_dir, config->uid, config->gid);
4629+
} else if (errno != EEXIST) {
4630+
msg(LOG_ERR, "Failed to create trust database directory %s (%s)",
4631+
data_dir, strerror(errno));
4632+
return 1;
4633+
}
4634+
46244635
startup_compaction_target_mb = 0;
46254636
startup_compaction_fallback_mb = 0;
46264637

0 commit comments

Comments
 (0)