Niels Thykier:
Hi,
I have seen the following pattern in multiple packages, where we use
`setcap` to replace a setuid (or setgid) mode with a capability. I think
it is about time that we get proper packaging helper support for it.
[...]
Best regards,
Niels
[...]
Hi
Thanks for the feedback so far. :)
I have ended up with the snippet below, which includes:
1) Use of `dpkg-divert --truename` to make the code work the same even
if the command has been diverted (seen in iputils-ping's setcap
script).
2) Use of `${DPKG_ROOT}` as suggested by Helmut.
# Snippet source: debputy (translate-capabilities)
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [
"$1" = "abort-remove" ]; then
if command -v setcap > /dev/null; then
# Triggered by: packages.dh-debputy.transformations[0].path-metadata <Search
for: /usr/bin/dh_debputy>
_TPATH=$(dpkg-divert --truename /usr/bin/dh_debputy)
if setcap cap_net_raw+ep "${DPKG_ROOT}${_TPATH}"; then
chmod a-s "${DPKG_ROOT}${_TPATH}"
echo "Successfully applied capabilities cap_net_raw+ep on ${_TPATH}"
else
echo "The setcap failed to processes cap_net_raw+ep on ${_TPATH}; falling back to
no capability support" >&2
fi
unset _TPATH
else
echo "The setcap utility is not installed available; falling back to no capability
support" >&2
fi
fi
The use of `/usr/bin/dh_debputy` and related capability was just a value
for the sake of testing the code.
Best regards,
Niels