aboutsummaryrefslogtreecommitdiffstats
path: root/activate-localuser.sh
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2018-01-19 14:58:27 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2018-10-26 13:31:56 +0200
commitd2d9e83bd9bdc3a091d6b9f1ccaec012fba2f0f4 (patch)
tree8d1ba496b809f6baf62ba2864756b417f4a3e1a7 /activate-localuser.sh
parenta248d2827dcfc35b894013299dc2486d4a37db0b (diff)
`nss-localuser` is a plugin for the GNU Name Service Switch (NSS) functionality of the GNU C Library (`glibc`) providing host name resolution for *"localuser"* family of virtual hostnames. The delivered NSS service defines one virtual host of name `localuser` that resolves to an IP address of the localhost loopback that integrates user ID. Change-Id: I2a33dc23518ce3f4581f5c37df9476dbbc58f262 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'activate-localuser.sh')
-rwxr-xr-xactivate-localuser.sh44
1 files changed, 44 insertions, 0 deletions
diff --git a/activate-localuser.sh b/activate-localuser.sh
new file mode 100755
index 0000000..8f40116
--- /dev/null
+++ b/activate-localuser.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+action=$(echo ${1:-status} | tr '[a-z]' '[A-Z]')
+file=${2:-/etc/nsswitch.conf}
+
+# compute activated value
+activated=false
+if grep -q '^hosts:.*\<localuser\>' "${file}" 2>/dev/null; then
+ activated=true
+fi
+
+# compute activate value
+case ${action} in
+ ON|YES|TRUE|1) activate=true;;
+ OFF|NO|FALSE|0) activate=false;;
+ QUERY|TEST|CHECK|STATUS) ${activated} && echo ON || echo OFF; exit 0;;
+ *) echo "Bad command: $1" >&2; exit 1;;
+esac
+
+# exit if already set as desired
+[ "${activate}" = "${activated}" ] && exit 0
+
+# process
+if ${activate}; then
+ sedcmd='/^hosts:/s/hosts:[ \t]*/&localuser /'
+else
+ sedcmd='/^hosts:/s/localuser *//'
+fi
+if ! cp "${file}" "${file}~"; then
+ echo "Can't save file ${file} to ${file}~" >&2
+ exit 1
+fi
+if ! grep -q '^hosts:' "${file}"; then
+ if ! echo >> "${file}" || ! echo "hosts: " >> "${file}"; then
+ echo "Can't add host: to ${file}" >&2
+ cp "${file}~" "${file}" && rm "${file}~"
+ exit 1
+ fi
+fi
+if ! sed -i "${sedcmd}" "${file}"; then
+ echo "Can't process ${file}" >&2
+ cp "${file}~" "${file}" && rm "${file}~"
+ exit 1
+fi