View | Details | Raw Unified
Collapse All | Expand All

(-) /usr/portage/sys-apps/chpax/files/pax-init.d (-13 / +43 lines)
 Lines 7-36   depend() { Link Here 
}
}
checkconfig() {
checkconfig() {
	/sbin/chpax -v /sbin/chpax >/dev/null 2>&1 || return 1
	if [ "x$CHPAX" = "x" ]; then
		CHPAX="/sbin/chpax /sbin/paxctl"
	fi
	# Find non-existant chpaxes
	REALCHPAX=""
	for i in $CHPAX; do
		REALCHPAX="$REALCHPAX`$i -v $i >/dev/null 2>&1 && echo \ $i`"
	done
	if [ "x$REALCHPAX" = "x" ]; then
		eerror "error:  none of the specified chpax commands exist!"
		return 1
	fi
	CHPAX="$REALCHPAX"
}
}
chpax_flag() {
chpax_flag() {
	flag=$1
	flag=$1
	fname=$2
	fname=$2
	if [ -w "$fname" ]; then
	if [ -w ${fname} ]; then
		#einfo "chpax $flags $fname"
		#einfo "-${flag} flagging ${fname}"
		/sbin/chpax -$flag ${fname}
		for i in $CHPAX; do
		[ $? != 0 ] && eerror "error: chpax -$flag ${fname}"
			#einfo "    with $i"
			$i -$flag ${fname}
			[ $? != 0 ] && eerror "error: $i -$flag ${fname}"
		done
	fi
	fi
}
}
fix_exempts() {
	#need to do this for foo{,bar,baz} expressions to work.
	PAGEEXEC_EXEMPT=`eval echo $PAGEEXEC_EXEMPT`
	TRAMPOLINE_EXEMPT=`eval echo $TRAMPOLINE_EXEMPT`
	RANDMMAP_EXEMPT=`eval echo $RANDMMAP_EXEMPT`
	MPROTECT_EXEMPT=`eval echo $MPROTECT_EXEMPT`
	SEGMEXEC_EXEMPT=`eval echo $SEGMEXEC_EXEMPT`
	RANDEXEC_EXEMPT=`eval echo $RANDEXEC_EXEMPT`
}
start() {
start() {
	checkconfig || return 1
	checkconfig || return 1
	for p in $PAGEEXEC_EXEMPT; do chpax_flag p ${p} ;done
	fix_exempts
	ebegin "Setting PaX flags on binaries"
	for e in $TRAMPOLINE_EXEMPT; do chpax_flag e ${e} ;done
	for e in $TRAMPOLINE_EXEMPT; do chpax_flag e ${e} ;done
	for r in $RANDMMAP_EXEMPT; do chpax_flag r ${r} ;done
	for r in $RANDMMAP_EXEMPT; do chpax_flag r ${r} ;done
	for m in $MPROTECT_EXEMPT; do chpax_flag m ${m} ;done
	for m in $MPROTECT_EXEMPT; do chpax_flag m ${m} ;done
	for s in $SEGMEXEC_EXEMPT; do chpax_flag s ${s} ;done
	for p in $PAGEEXEC_EXEMPT; do chpax_flag pem ${p} ;done
	for s in $SEGMEXEC_EXEMPT; do chpax_flag sem ${s} ;done
	for x in $RANDEXEC_EXEMPT; do chpax_flag x ${x} ;done
	for x in $RANDEXEC_EXEMPT; do chpax_flag x ${x} ;done
	eend
	return 0
	return 0
}
}
 Lines 38-50   stop() { Link Here 
	checkconfig || return 1
	checkconfig || return 1
	[ "$ZERO_FLAG_MASK" = "yes" ] || return 0
	[ "$ZERO_FLAG_MASK" = "yes" ] || return 0
	fix_exempts
	einfo "chpax zero flag masking"
	einfo "chpax zero flag masking"
	for p in $PAGEEXEC_EXEMPT; do chpax_flag z ${p} ;done
	for p in $PAGEEXEC_EXEMPT; do chpax_flag ze ${p} ;done
	for e in $TRAMPOLINE_EXEMPT; do chpax_flag z ${e} ;done
	for e in $TRAMPOLINE_EXEMPT; do chpax_flag ze ${e} ;done
	for r in $RANDMMAP_EXEMPT; do chpax_flag z ${r} ;done
	for r in $RANDMMAP_EXEMPT; do chpax_flag ze ${r} ;done
	for m in $MPROTECT_EXEMPT; do chpax_flag z ${m} ;done
	for m in $MPROTECT_EXEMPT; do chpax_flag ze ${m} ;done
	for s in $SEGMEXEC_EXEMPT; do chpax_flag z ${s} ;done
	for s in $SEGMEXEC_EXEMPT; do chpax_flag ze ${s} ;done
	for x in $RANDEXEC_EXEMPT; do chpax_flag z ${x} ;done
	for x in $RANDEXEC_EXEMPT; do chpax_flag ze ${x} ;done
	return 0
	return 0
}
}