[packages/ddclient] run as unprivileged user
glen
glen at pld-linux.org
Wed Sep 23 08:01:06 CEST 2015
commit c7c8689f57878ab6501f215a06f2d30ed85bced5
Author: Elan Ruusamäe <glen at delfi.ee>
Date: Wed Sep 23 08:45:38 2015 +0300
run as unprivileged user
config.patch | 11 +++++++----
ddclient.init | 10 ++++++----
ddclient.spec | 33 ++++++++++++++++++++++++++++++---
3 files changed, 43 insertions(+), 11 deletions(-)
---
diff --git a/ddclient.spec b/ddclient.spec
index 5413969..8ca46d2 100644
--- a/ddclient.spec
+++ b/ddclient.spec
@@ -18,7 +18,15 @@ Patch0: config.patch
URL: http://ddclient.sourceforge.net/
BuildRequires: rpm-perlprov
BuildRequires: rpmbuild(macros) >= 1.268
+Provides: group(ddclient)
+Provides: user(ddclient)
Requires(post,preun): /sbin/chkconfig
+Requires(postun): /usr/sbin/groupdel
+Requires(postun): /usr/sbin/userdel
+Requires(pre): /bin/id
+Requires(pre): /usr/bin/getgid
+Requires(pre): /usr/sbin/groupadd
+Requires(pre): /usr/sbin/useradd
Requires: rc-scripts
# for freedns: Digest::SHA1, IO::Socket::SSL
Suggests: perl-Digest-SHA1
@@ -28,6 +36,9 @@ Suggests: perl-JSON-Any
BuildArch: noarch
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+%define cachedir %{_localstatedir}/cache/ddclient
+%define rundir %{_localstatedir}/run/ddclient
+
%description
DDclient is a small full featured client with FULL DynDNS NIC2
support, requiring only Perl and no additional modules. It runs under
@@ -73,16 +84,23 @@ cp -p sample-etc_ddclient.conf %{name}.conf
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_sysconfdir}/ddclient,/etc/{rc.d/init.d,sysconfig,NetworkManager/dispatcher.d},%{_sbindir},%{_var}/cache/%{name}}
+install -d $RPM_BUILD_ROOT{%{_sysconfdir}/%{name},/etc/{rc.d/init.d,sysconfig,NetworkManager/dispatcher.d}} \
+ $RPM_BUILD_ROOT{%{_sbindir},%{cachedir},%{rundir}}
+
cp -p %{name}.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
install -p %{name} $RPM_BUILD_ROOT%{_sbindir}
install -p %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name}
cp -p %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/%{name}
install -p %{SOURCE3} $RPM_BUILD_ROOT/etc/NetworkManager/dispatcher.d/50-%{name}
+touch $RPM_BUILD_ROOT%{cachedir}/%{name}.cache
%clean
rm -rf $RPM_BUILD_ROOT
+%pre
+%groupadd -g 325 ddclient
+%useradd -u 525 -d /var/run/%{name} -g ddclient -c "ddclient user" ddclient
+
%post
/sbin/chkconfig --add %{name}
%service %{name} restart "%{name} daemon"
@@ -93,6 +111,12 @@ if [ "$1" = "0" ]; then
/sbin/chkconfig --del %{name}
fi
+%postun
+if [ "$1" = "0" ]; then
+ %userremove ddclient
+ %groupremove ddclient
+fi
+
%triggerpostun -- ddclient < 1:3.6.4
if [ -f /etc/ddclient.conf.rpmsave ]; then
echo "Moving config to new location /etc/ddclient"
@@ -106,8 +130,11 @@ fi
%doc ChangeLog Changelog.old README*
%attr(755,root,root) %{_sbindir}/ddclient
%dir %{_sysconfdir}/%{name}
-%attr(600,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/%{name}.conf
+%attr(640,root,ddclient) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/%{name}.conf
%attr(600,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/ddclient
%attr(754,root,root) /etc/rc.d/init.d/%{name}
-%dir %{_var}/cache/%{name}
%attr(755,root,root) /etc/NetworkManager/dispatcher.d/50-%{name}
+
+%dir %attr(770,root,ddclient) %{cachedir}
+%ghost %attr(600,ddclient,ddclient) %ghost %{cachedir}/%{name}.cache
+%dir %attr(770,root,ddclient) %{rundir}
diff --git a/config.patch b/config.patch
index b48d611..66ba3cd 100644
--- a/config.patch
+++ b/config.patch
@@ -1,11 +1,14 @@
---- ddclient-3.8.3/ddclient.conf 2015-09-23 08:29:05.051308301 +0300
-+++ ddclient-3.8.3/ddclient.conf 2015-05-30 12:37:38.000000000 +0300
-@@ -20,7 +20,7 @@
+--- ddclient-3.8.3/ddclient.conf 2015-05-30 12:37:38.000000000 +0300
++++ ddclient-3.8.3/ddclient.conf 2015-09-23 08:33:27.228276894 +0300
+@@ -20,9 +20,9 @@
######################################################################
daemon=300 # check every 300 seconds
syslog=yes # log update msgs to syslog
-mail=root # mail all msgs to root
+#mail=root # mail all msgs to root
mail-failure=root # mail failed update msgs to root
- pid=/var/run/ddclient.pid # record PID in file.
+-pid=/var/run/ddclient.pid # record PID in file.
++pid=/var/run/ddclient/ddclient.pid # record PID in file.
ssl=yes # use ssl-support. Works with
+ # ssl-library
+ # postscript=script # run script after updating. The
diff --git a/ddclient.init b/ddclient.init
index 8ba3ac6..3726da0 100755
--- a/ddclient.init
+++ b/ddclient.init
@@ -17,6 +17,8 @@
DDCLIENT_OPTIONS="-daemon 300"
[ -f /etc/sysconfig/ddclient ] && . /etc/sysconfig/ddclient
+pidfile=/var/run/ddclient/ddclient.pid
+
# Check that networking is up.
if is_yes "${NETWORKING}"; then
if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
@@ -35,7 +37,7 @@ start() {
fi
msg_starting "Dynamic DNS Client"
- daemon /usr/sbin/ddclient $DDCLIENT_OPTIONS
+ daemon --user ddclient /usr/sbin/ddclient $DDCLIENT_OPTIONS
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/ddclient
}
@@ -47,8 +49,8 @@ stop() {
fi
msg_stopping "Dynamic DNS Client"
- killproc ddclient
- rm -f /var/run/ddclient.pid /var/lock/subsys/ddclient >/dev/null 2>&1
+ killproc ddclient --pidfile $pidfile
+ rm -f $pidfile /var/lock/subsys/ddclient >/dev/null 2>&1
}
reload() {
@@ -80,7 +82,7 @@ case "$1" in
reload
;;
status)
- status ddclient
+ status --pidfile $pidfile ddclient
exit $?
;;
*)
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/ddclient.git/commitdiff/91cda60246362580eb17efdb7ad7e0c6c434307c
More information about the pld-cvs-commit
mailing list