You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.2 KiB

{% calculate comment='#', pkg('sys-apps/calculate-server'), unbound %}
# vim: set syntax=sh
#
# Copyright 2014 Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# added for calculate server 2.2
# FUNC: change_permissions
# DESC: change permissions for all files and directories into specified
change_permissions() {
local directory=$1
[[ -d $1 ]] || return
local out="$(getfacl $directory 2>/dev/null)"
if ! (grep -q default:user:900:rwx <<<$out && grep -q ^user:900:rwx <<<$out)
then
setfacl -R -m d:u:900:rwx,u:900:rwx $directory
fi
addwrite ${directory}
# get owner from parent directory
local diruid=$(stat -c"%u" ${directory})
local dirgid=$(stat -c"%g" ${directory})
local dirowner="${diruid}:${dirgid}"
# get permissions from parent directory
local dirmode=0$(stat -c%a ${directory})
# turnoff execute for all (permission for files in parent directory)
if type bc &>/dev/null;
then
local filemode=0$(echo "obase=8;$(( $dirmode & 0666 ))" | bc)
elif type printf &>/dev/null;
then
local filemode=$(printf "0%o" $(( $dirmode & 0666 )) )
else
local filemode=
fi
# set for all files and directories dirowner
find ${directory} \! -uid ${diruid} -o \! -gid ${dirgid} -exec chown ${dirowner} {} \;
# set permissions for all directories in parent directory
find ${directory} \! -perm ${dirmode} -type d -exec chmod ${dirmode} {} \;
if [[ -n $filemode ]]
then
# set permissions for all files in parent directory
find ${directory} \! -perm ${filemode} -type f -exec chmod ${filemode} {} \;
fi
}
# system has "remote" share
if grep "\[remote\]" /etc/samba/smb.conf &>/dev/null
then
pre_pkg_preinst() {
einfo "Performing permissions change for packages directory"
change_permissions ${PKGDIR}
}
post_src_unpack() {
einfo "Performing permissions change for distdir directory"
change_permissions ${PORTAGE_ACTUAL_DISTDIR}
}
else
post_src_unpack() {
:
}
pre_pkg_preinst() {
:
}
fi