Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

Commit

Permalink
add make flag for systemd compat
Browse files Browse the repository at this point in the history
add file without path parsing
  • Loading branch information
cromerc committed Apr 8, 2018
1 parent 8233d9a commit d514ec7
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 67 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
man/*.5
man/*.8
man/*.html
openrc/opensysusers.initd
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
BINPROGS = sysusers systemd-sysusers
LIBS = common.sh
CONFFILES = test/*
PREFIX = /usr/local
Expand All @@ -12,9 +11,16 @@ CONFMODE = 0644
DOCMODE = 0644
INSTALL = install
MAKE = make
SYSTEMDCOMPAT = TRUE
ifeq ($(SYSTEMDCOMPAT),TRUE)
BINPROGS = systemd-sysusers
else
BINPROGS = opensysusers
endif

all:
+$(MAKE) INSTALL=$(INSTALL) DOCMODE=$(DOCMODE) MANDIR=$(MANDIR) DOCDIR=$(DOCDIR) PREFIX=$(PREFIX) DESTDIR=$(DESTDIR) -C man
sed -e "s|@BINFILE@|$(BINPROGS)|" openrc/opensysusers.initd.in | tee openrc/opensysusers.initd

clean:
+$(MAKE) INSTALL=$(INSTALL) DOCMODE=$(DOCMODE) MANDIR=$(MANDIR) DOCDIR=$(DOCDIR) PREFIX=$(PREFIX) DESTDIR=$(DESTDIR) -C man clean
Expand All @@ -24,7 +30,6 @@ install:
$(INSTALL) -m $(BINMODE) $(BINPROGS) $(DESTDIR)$(PREFIX)$(BINDIR)
$(INSTALL) -d $(DESTDIR)$(PREFIX)$(LIBDIR)/opensysusers
$(INSTALL) -m $(BINMODE) $(LIBS) $(DESTDIR)$(PREFIX)$(LIBDIR)/opensysusers
for prog in ${BINPROGS}; do sed -e "s|@BINDIR@|$(PREFIX)$(BINDIR)|" -i $(DESTDIR)$(PREFIX)$(BINDIR)/$$prog; done
for prog in ${BINPROGS}; do sed -e "s|@LIBDIR@|$(PREFIX)$(LIBDIR)|" -i $(DESTDIR)$(PREFIX)$(BINDIR)/$$prog; done
+$(MAKE) INSTALL=$(INSTALL) DOCMODE=$(DOCMODE) MANDIR=$(MANDIR) DOCDIR=$(DOCDIR) PREFIX=$(PREFIX) DESTDIR=$(DESTDIR) -C man install

Expand Down
38 changes: 37 additions & 1 deletion common.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/bin/bash
# Copyright (c) 2018 Chris Cromer
# Copyright (c) 2012 Gentoo Foundation
# Released under the 2-clause BSD license.
#
# Common functions and variables needed by opensysusers
Expand Down Expand Up @@ -151,5 +152,40 @@ parse_string() {
esac
}

# this part is based on OpenRC's opentmpfiles
# Build a list of sorted unique basenames
# directories declared later in the sysusers_d array will override earlier
# directories, on a per file basename basis.
# `/etc/sysusers.d/foo.conf' supersedes `/usr/lib/sysusers.d/foo.conf'.
# `/run/sysusers.d/foo.conf' will always be read after `/etc/sysusers.d/bar.conf'

get_conf_files() {
for dir in ${sysusers_dirs}; do
[ -d "${dir}" ] && for file in "${dir}"/*.conf; do
[ "${replace}" != '' ] && [ "${dir}" == "$(dirname ${replace})" ] && [ "${file##*/}" == "${replace##*/}" ] && continue
[ -f "${file}" ] && sysusers_basenames="${sysusers_basenames}\n${file##*/}"
done
done
FILES="$(printf "${sysusers_basenames}\n" | sort -u )"
}

get_conf_paths() {
for b in ${FILES}; do
real_f=''
for d in ${sysusers_dirs}; do
[ "${replace}" != '' ] && [ "${d}" == "$(dirname ${replace})" ] && [ "${b}" == "${replace##*/}" ] && continue
f=${d}/${b}
[ -f "${f}" ] && real_f="${f}"
done
[ -f "${real_f}" ] && sysusers_d="${sysusers_d} ${real_f}"
done
}

error=0
FILES=''
sysusers_basenames=''
sysusers_d=''
replace=''

sysusers_dirs="${root}/usr/lib/sysusers.d ${root}/run/sysusers.d ${root}/etc/sysusers.d"
sysusersver='0.4.2'
sysusersver='0.4.3'
3 changes: 1 addition & 2 deletions openrc/opensysusers.initd → openrc/opensysusers.initd.in
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#!/sbin/openrc-run
# Copyright (c) 2017 - 2018 Chris Cromer
# Copyright 1999-2012 Gentoo Foundation
# Released under the 2-clause BSD license.

description="Set up sysusers.d entries"
Expand All @@ -13,6 +12,6 @@ depend()
start()
{
ebegin "Setting up sysusers.d entries"
sysusers
@BINFILE@
eend $?
}
16 changes: 16 additions & 0 deletions opensysusers
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh
# Copyright (c) 2017 - 2018 Chris Cromer
# Released under the 2-clause BSD license.
#
# This is an implementation of sysusers.d spec without systemd command

source @LIBDIR@/opensysusers/common.sh

get_conf_files
get_conf_paths

for file in ${sysusers_d}; do
parse_file ${file}
done

exit ${error}
45 changes: 30 additions & 15 deletions systemd-sysusers
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,11 @@ if [ $? -ne 0 ]; then
exit 1;
fi

systemd=1
arguments=()
replace=''
replace_file=''
replace_dir=''
version=0
inline=0
error=0
root=''
replace=''
eval set -- "${TEMP}"
Expand Down Expand Up @@ -74,34 +72,51 @@ source @LIBDIR@/opensysusers/common.sh

if [ ${version} -eq 1 ]; then
echo "${sysusersver}"
exit 0;
exit ${error};
fi

if [ ${#args[@]} -eq 0 ]; then
source @BINDIR@/sysusers
exit 0;
get_conf_files
get_conf_paths

for file in ${sysusers_d}; do
parse_file ${file}
done
exit ${error};
fi

if [ ${inline} -eq 0 ]; then
for file in "${args[@]}"; do
[ ${file} == '--' ] && continue
if [ ${file:0:1} != "/" ]; then
file="/${file}"
fi
parse_file "${file}"
for dir in ${sysusers_dirs}; do
if [ -f "${dir}/${file}" ]; then
parse_file "${dir}/${file}"
break
fi
done
done
if [ "${replace}" != '' ]; then
source @BINDIR@/sysusers
get_conf_files
get_conf_paths

for file in ${sysusers_d}; do
parse_file ${file}
done
fi
exit 0;
exit ${error};
else
for string in "${args[@]}"; do
parse_string "${string}"
done
if [ "${replace}" != '' ]; then
source @BINDIR@/sysusers
get_conf_files
get_conf_paths

for file in ${sysusers_d}; do
parse_file ${file}
done
fi
exit 0;
exit ${error};
fi

exit 0;
exit ${error};
47 changes: 0 additions & 47 deletions sysusers

This file was deleted.

0 comments on commit d514ec7

Please sign in to comment.