| Current Path : /usr/share/language-tools/ |
| Current File : //usr/share/language-tools/save-to-pam-env |
#!/bin/sh -pe
#
# updates the ~/.pam_environment config file
homedir=$1
locale_name=$2
language_list=$3
[ -n "$homedir" -a -n "$locale_name" ] || exit 1
langtoolsdir=/usr/share/language-tools
# create ~/.pam_environment if it doesn't exist
touch "$homedir/.pam_environment" || exit 1
is_valid_pam_value() {
case "$1" in
''|*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.@:+-]*)
return 1
;;
*)
return 0
;;
esac
}
save_to_pam_env() {
var=$1; value=$2
case "$var" in
''|*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
exit 1
;;
esac
is_valid_pam_value "$value" || exit 1
temp=$(mktemp '.pam_environment.XXXXXXXX') || exit 1
if awk -v var="$var" -v value="$value" '
BEGIN { replaced = 0; pattern = "^" var "([[:space:]]+DEFAULT|=)" }
$0 ~ pattern {
if (!replaced)
print var "\tDEFAULT=" value
replaced = 1
next
}
{ print }
END {
if (!replaced)
print var "\tDEFAULT=" value
}
' .pam_environment > "$temp"; then
mv "$temp" .pam_environment
else
rm -f "$temp"
exit 1
fi
}
cd "$homedir"
if [ -n "$language_list" ]; then
save_to_pam_env 'LANGUAGE' "$language_list"
save_to_pam_env 'LANG' "$locale_name"
else
for var in 'LC_NUMERIC' 'LC_TIME' 'LC_MONETARY' 'LC_PAPER' 'LC_NAME' \
'LC_ADDRESS' 'LC_TELEPHONE' 'LC_MEASUREMENT' 'LC_IDENTIFICATION'; do
save_to_pam_env "$var" "$locale_name"
done
papersize=$( "$langtoolsdir/locale2papersize" "$locale_name" )
save_to_pam_env 'PAPERSIZE' "$papersize"
printf '%s\n' "$locale_name"
fi
exit 0