[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#9582: suidmanager 0.6 uploaded to master.debian.org



 This works every time, with no fails due to '-o errexit'.

#!/bin/sh
#
# Register a binary
#

function setperm()
{
	if [ -e $2 ]; then
		chown $3.$4 $2
		chmod $5 $2
	fi
}

function compperm()
{
	if [ $1 != $4 -o $2 != $5 -o $3 != $6 ]; then
		echo "$FILE PERMISSION MISMATCH: was $1.$2 $3 changed to $4.$5 $6"
	fi
}

function permdiag()
{
	FILE=$2
	if [ -e $FILE ]; then
		compperm `find $2 -printf "%u %g %m"` $3 $4 $5
	else
		echo "File $FILE registered but not installed"
	fi
}

function suidrun()
{
	while [ 1 ]; do
		read X
		if [ "$X" ]; then
			permdiag $X
			setperm $X
		else
			return
		fi
	done
}

function with_no_errexit()
{
  if echo $- | grep -q e; then
    e=-e
    set +e
  else
    e=+e
  fi
  eval $1
  set $e
}

if [ "$1" = "" ]; then
	sed </etc/suid.conf -e "/^#/d" -e "/^$/d" | suidrun
	exit 0
fi

if [ "$1" = "-s" ]; then
	shift
	PACKAGE=$1
	shift
else
	PACKAGE=user
fi

if [ "$4" = "" ]; then
	echo "Usage: suidregister file user group perm"
	exit 1
fi


if [ ! -e $1 ]; then
	echo "$1 not found"
	exit 1
fi

with_no_errexit 'X=$(grep ".* $1" /etc/suid.conf)'

if [ "$X" ]; then
	if expr "$X" : "user" >/dev/null; then
		# Reinstate User overrides
		setperm $X
		echo "OVERRIDE: $X"
		exit 0
	else
		suidunregister $1
	fi
fi

echo "$PACKAGE $1 $2 $3 $4" >>/etc/suid.conf
setperm $PACKAGE $1 $2 $3 $4
-- 
Karl M. Hegbloom <karlheg@inetarena.com>
http://www.inetarena.com/~karlheg
Portland, OR  USA
Debian GNU 1.2  Linux 2.1.36 AMD K5 PR-133


Reply to: