Blame SOURCES/0023-Better-authorization-scripts.-Again.patch

0ac9f2
From 31560e2784722b986b8a73cc28e3510870180b07 Mon Sep 17 00:00:00 2001
0ac9f2
From: Peter Jones <pjones@redhat.com>
0ac9f2
Date: Tue, 8 Aug 2017 15:44:44 -0400
0ac9f2
Subject: [PATCH 23/29] Better authorization scripts.  Again.
0ac9f2
0ac9f2
Signed-off-by: Peter Jones <pjones@redhat.com>
0ac9f2
---
0ac9f2
 src/Makefile                | 12 ++++++----
0ac9f2
 src/pesign-authorize        | 56 +++++++++++++++++++++++++++++++++++++++++++++
0ac9f2
 src/pesign-authorize-groups | 30 ------------------------
0ac9f2
 src/pesign-authorize-users  | 30 ------------------------
0ac9f2
 src/pesign.service.in       |  3 +--
0ac9f2
 src/pesign.sysvinit.in      |  3 +--
0ac9f2
 6 files changed, 65 insertions(+), 69 deletions(-)
0ac9f2
 create mode 100755 src/pesign-authorize
0ac9f2
 delete mode 100644 src/pesign-authorize-groups
0ac9f2
 delete mode 100644 src/pesign-authorize-users
0ac9f2
0ac9f2
diff --git a/src/Makefile b/src/Makefile
0ac9f2
index 654b792..84ad130 100644
0ac9f2
--- a/src/Makefile
0ac9f2
+++ b/src/Makefile
0ac9f2
@@ -7,7 +7,7 @@ include $(TOPDIR)/Make.defaults
0ac9f2
 
0ac9f2
 BINTARGETS=authvar client efikeygen efisiglist pesigcheck pesign
0ac9f2
 SVCTARGETS=pesign.sysvinit pesign.service
0ac9f2
-TARGETS=$(BINTARGETS) $(SVCTARGETS)
0ac9f2
+TARGETS=$(BINTARGETS) $(SVCTARGETS) pesign-users pesign-groups
0ac9f2
 
0ac9f2
 all : deps $(TARGETS)
0ac9f2
 
0ac9f2
@@ -65,6 +65,9 @@ install_sysvinit: pesign.sysvinit
0ac9f2
 	$(INSTALL) -d -m 755 $(INSTALLROOT)/etc/rc.d/init.d/
0ac9f2
 	$(INSTALL) -m 755 pesign.sysvinit $(INSTALLROOT)/etc/rc.d/init.d/pesign
0ac9f2
 
0ac9f2
+pesign-users pesign-groups :
0ac9f2
+	echo pesign > $@
0ac9f2
+
0ac9f2
 install :
0ac9f2
 	$(INSTALL) -d -m 700 $(INSTALLROOT)/etc/pki/pesign/
0ac9f2
 	$(INSTALL) -d -m 700 $(INSTALLROOT)/etc/pki/pesign-rh-test/
0ac9f2
@@ -88,10 +91,9 @@ install :
0ac9f2
 	$(INSTALL) -d -m 755 $(INSTALLROOT)/etc/rpm/
0ac9f2
 	$(INSTALL) -m 644 macros.pesign $(INSTALLROOT)/etc/rpm/
0ac9f2
 	$(INSTALL) -d -m 755 $(INSTALLROOT)$(libexecdir)/pesign/
0ac9f2
-	$(INSTALL) -m 750 pesign-authorize-users $(INSTALLROOT)$(libexecdir)/pesign/
0ac9f2
-	$(INSTALL) -m 750 pesign-authorize-groups $(INSTALLROOT)$(libexecdir)/pesign/
0ac9f2
+	$(INSTALL) -m 750 pesign-authorize $(INSTALLROOT)$(libexecdir)/pesign/
0ac9f2
 	$(INSTALL) -d -m 700 $(INSTALLROOT)/etc/pesign
0ac9f2
-	$(INSTALL) -m 600 /dev/null $(INSTALLROOT)/etc/pesign/users
0ac9f2
-	$(INSTALL) -m 600 /dev/null $(INSTALLROOT)/etc/pesign/groups
0ac9f2
+	$(INSTALL) -m 600 pesign-users $(INSTALLROOT)/etc/pesign/users
0ac9f2
+	$(INSTALL) -m 600 pesign-groups $(INSTALLROOT)/etc/pesign/groups
0ac9f2
 
0ac9f2
 .PHONY: all deps clean install
0ac9f2
diff --git a/src/pesign-authorize b/src/pesign-authorize
0ac9f2
new file mode 100755
0ac9f2
index 0000000..a496f60
0ac9f2
--- /dev/null
0ac9f2
+++ b/src/pesign-authorize
0ac9f2
@@ -0,0 +1,56 @@
0ac9f2
+#!/bin/bash
0ac9f2
+set -e
0ac9f2
+set -u
0ac9f2
+
0ac9f2
+#
0ac9f2
+# With /run/pesign/socket on tmpfs, a simple way of restoring the
0ac9f2
+# acls for specific users is useful
0ac9f2
+#
0ac9f2
+#  Compare to: http://infrastructure.fedoraproject.org/cgit/ansible.git/tree/roles/bkernel/tasks/main.yml?id=17198dadebf59d8090b7ed621bc8ab22152d2eb6
0ac9f2
+#
0ac9f2
+
0ac9f2
+# License: GPLv2
0ac9f2
+declare -a fileusers=()
0ac9f2
+declare -a dirusers=()
0ac9f2
+for user in $(cat /etc/pesign/users); do
0ac9f2
+	dirusers[${#dirusers[@]}]=-m
0ac9f2
+	dirusers[${#dirusers[@]}]="u:$user:rwx"
0ac9f2
+	fileusers[${#fileusers[@]}]=-m
0ac9f2
+	fileusers[${#fileusers[@]}]="u:$user:rw"
0ac9f2
+done
0ac9f2
+
0ac9f2
+declare -a filegroups=()
0ac9f2
+declare -a dirgroups=()
0ac9f2
+for group in $(cat /etc/pesign/groups); do
0ac9f2
+	dirgroups[${#dirgroups[@]}]=-m
0ac9f2
+	dirgroups[${#dirgroups[@]}]="g:$group:rwx"
0ac9f2
+	filegroups[${#filegroups[@]}]=-m
0ac9f2
+	filegroups[${#filegroups[@]}]="g:$group:rw"
0ac9f2
+done
0ac9f2
+
0ac9f2
+update_subdir() {
0ac9f2
+	subdir=$1 && shift
0ac9f2
+
0ac9f2
+	setfacl -bk "${subdir}"
0ac9f2
+	setfacl "${dirusers[@]}" "${dirgroups[@]}" "${subdir}"
0ac9f2
+	for x in "${subdir}"* ; do
0ac9f2
+		if [ -d "${x}" ]; then
0ac9f2
+			setfacl -bk ${x}
0ac9f2
+			setfacl "${dirusers[@]}" "${dirgroups[@]}" ${x}
0ac9f2
+			update_subdir "${x}/"
0ac9f2
+		elif [ -e "${x}" ]; then
0ac9f2
+			setfacl -bk ${x}
0ac9f2
+			setfacl "${fileusers[@]}" "${filegroups[@]}" ${x}
0ac9f2
+		else
0ac9f2
+			:;
0ac9f2
+		fi
0ac9f2
+	done
0ac9f2
+}
0ac9f2
+
0ac9f2
+for x in /var/run/pesign/ /etc/pki/pesign*/ ; do
0ac9f2
+	if [ -d "${x}" ]; then
0ac9f2
+		update_subdir "${x}"
0ac9f2
+	else
0ac9f2
+		:;
0ac9f2
+	fi
0ac9f2
+done
0ac9f2
diff --git a/src/pesign-authorize-groups b/src/pesign-authorize-groups
0ac9f2
deleted file mode 100644
0ac9f2
index cf51fb6..0000000
0ac9f2
--- a/src/pesign-authorize-groups
0ac9f2
+++ /dev/null
0ac9f2
@@ -1,30 +0,0 @@
0ac9f2
-#!/bin/bash
0ac9f2
-set -e
0ac9f2
-
0ac9f2
-#
0ac9f2
-# With /run/pesign/socket on tmpfs, a simple way of restoring the
0ac9f2
-# acls for specific groups is useful
0ac9f2
-#
0ac9f2
-#  Compare to: http://infrastructure.fedoraproject.org/cgit/ansible.git/tree/roles/bkernel/tasks/main.yml?id=17198dadebf59d8090b7ed621bc8ab22152d2eb6
0ac9f2
-#
0ac9f2
-
0ac9f2
-# License: GPLv2
0ac9f2
-
0ac9f2
-if [ -r /etc/pesign/groups ]; then
0ac9f2
-    for group in $(cat /etc/pesign/groups); do
0ac9f2
-	if [ -d /var/run/pesign ]; then
0ac9f2
-	    setfacl -m g:${group}:rx /var/run/pesign
0ac9f2
-	    if [ -e /var/run/pesign/socket ]; then
0ac9f2
-		setfacl -m g:${group}:rw /var/run/pesign/socket
0ac9f2
-	    fi
0ac9f2
-	fi
0ac9f2
-	for x in /etc/pki/pesign*/ ; do
0ac9f2
-	    if [ -d ${x} ]; then
0ac9f2
-		setfacl -m g:${group}:rx ${x}
0ac9f2
-		for y in ${x}{cert8,key3,secmod}.db ; do
0ac9f2
-		    setfacl -m g:${group}:rw ${y}
0ac9f2
-		done
0ac9f2
-	    fi
0ac9f2
-	done
0ac9f2
-    done
0ac9f2
-fi
0ac9f2
diff --git a/src/pesign-authorize-users b/src/pesign-authorize-users
0ac9f2
deleted file mode 100644
0ac9f2
index 940138e..0000000
0ac9f2
--- a/src/pesign-authorize-users
0ac9f2
+++ /dev/null
0ac9f2
@@ -1,30 +0,0 @@
0ac9f2
-#!/bin/bash
0ac9f2
-set -e
0ac9f2
-
0ac9f2
-#
0ac9f2
-# With /run/pesign/socket on tmpfs, a simple way of restoring the
0ac9f2
-# acls for specific users is useful
0ac9f2
-#
0ac9f2
-#  Compare to: http://infrastructure.fedoraproject.org/cgit/ansible.git/tree/roles/bkernel/tasks/main.yml?id=17198dadebf59d8090b7ed621bc8ab22152d2eb6
0ac9f2
-#
0ac9f2
-
0ac9f2
-# License: GPLv2
0ac9f2
-
0ac9f2
-if [ -r /etc/pesign/users ]; then
0ac9f2
-    for username in $(cat /etc/pesign/users); do
0ac9f2
-	if [ -d /var/run/pesign ]; then
0ac9f2
-	    setfacl -m g:${username}:rx /var/run/pesign
0ac9f2
-	    if [ -e /var/run/pesign/socket ]; then
0ac9f2
-		setfacl -m g:${username}:rw /var/run/pesign/socket
0ac9f2
-	    fi
0ac9f2
-	fi
0ac9f2
-	for x in /etc/pki/pesign*/ ; do
0ac9f2
-	    if [ -d ${x} ]; then
0ac9f2
-		setfacl -m g:${username}:rx ${x}
0ac9f2
-		for y in ${x}{cert8,key3,secmod}.db ; do
0ac9f2
-		    setfacl -m g:${username}:rw ${y}
0ac9f2
-		done
0ac9f2
-	    fi
0ac9f2
-	done
0ac9f2
-    done
0ac9f2
-fi
0ac9f2
diff --git a/src/pesign.service.in b/src/pesign.service.in
0ac9f2
index aaa408e..c75a000 100644
0ac9f2
--- a/src/pesign.service.in
0ac9f2
+++ b/src/pesign.service.in
0ac9f2
@@ -6,5 +6,4 @@ PrivateTmp=true
0ac9f2
 Type=forking
0ac9f2
 PIDFile=/var/run/pesign.pid
0ac9f2
 ExecStart=/usr/bin/pesign --daemonize
0ac9f2
-ExecStartPost=@@LIBEXECDIR@@/pesign/pesign-authorize-users
0ac9f2
-ExecStartPost=@@LIBEXECDIR@@/pesign/pesign-authorize-groups
0ac9f2
+ExecStartPost=@@LIBEXECDIR@@/pesign/pesign-authorize
0ac9f2
diff --git a/src/pesign.sysvinit.in b/src/pesign.sysvinit.in
0ac9f2
index dc508d8..b0e0f84 100644
0ac9f2
--- a/src/pesign.sysvinit.in
0ac9f2
+++ b/src/pesign.sysvinit.in
0ac9f2
@@ -27,8 +27,7 @@ start(){
0ac9f2
     RETVAL=$?
0ac9f2
     echo
0ac9f2
     touch /var/lock/subsys/pesign
0ac9f2
-    @@LIBEXECDIR@@/pesign/pesign-authorize-users
0ac9f2
-    @@LIBEXECDIR@@/pesign/pesign-authorize-groups
0ac9f2
+    @@LIBEXECDIR@@/pesign/pesign-authorize
0ac9f2
 }
0ac9f2
 
0ac9f2
 stop(){
0ac9f2
-- 
0ac9f2
2.13.4
0ac9f2