From da395c583770b466b5ba83c37d313a7b1c0024c9 Mon Sep 17 00:00:00 2001 From: leycec Date: Sat, 11 Jul 2015 00:52:54 -0400 Subject: Secure umask enforced during installation. For safety, a umask of 022 prohibiting both group and other writability is now enforced during OMZ installation. In theory, this should reduce the likelihood of subsequent compinit() failures due to insecure directory permissions under all platforms except for default Cygwin installations (in which Windows ACLs override POSIX umasks). --- tools/install.sh | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tools') diff --git a/tools/install.sh b/tools/install.sh index c83a6f23d..405f461e9 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -9,6 +9,13 @@ if [ -d "$ZSH" ]; then exit fi +# Prevent the cloned repository from having insecure permissions. Failing to do +# so causes compinit() calls to fail with "command not found: compdef" errors +# for users with insecure umasks (e.g., "002", allowing group writability). Note +# that this will be ignored under Cygwin by default, as Windows ACLs take +# precedence over umasks except for filesystems mounted with option "noacl". +umask g-w,o-w + echo "\033[0;34mCloning Oh My Zsh...\033[0m" hash git >/dev/null 2>&1 && env git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git $ZSH || { echo "git not installed" -- cgit v1.2.3-70-g09d2 From e8caf22beb8cde69f097382a75f6d1a247625030 Mon Sep 17 00:00:00 2001 From: leycec Date: Sat, 11 Jul 2015 00:54:36 -0400 Subject: Cygwin-specific "chsh" installation issue fixed. Installation previously assumed the existence of a "chsh" command in the current ${PATH}. Since Cygwin does *NOT* provide this command, installation now tests for the existence of this command before attempting to run it. --- tools/install.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'tools') diff --git a/tools/install.sh b/tools/install.sh index 405f461e9..f5836fdf6 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -39,12 +39,17 @@ sed -i -e "/export PATH=/ c\\ export PATH=\"$PATH\" " ~/.zshrc -TEST_CURRENT_SHELL=$(expr "$SHELL" : '.*/\(.*\)') -if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then +# If this user's login shell is not already "zsh", attempt to switch. +if [ "$(expr "$SHELL" : '.*/\(.*\)')" != "zsh" ]; then + # If this platform provides a "chsh" command (not Cygwin), do it, man! + if hash chsh >/dev/null 2>&1; then echo "\033[0;34mTime to change your default shell to zsh!\033[0m" chsh -s $(grep /zsh$ /etc/shells | tail -1) + # Else, suggest the user do so manually. + else + echo "\033[0;34mPlease manually change your default shell to zsh!\033[0m" + fi fi -unset TEST_CURRENT_SHELL echo "\033[0;32m"' __ __ '"\033[0m" echo "\033[0;32m"' ____ / /_ ____ ___ __ __ ____ _____/ /_ '"\033[0m" -- cgit v1.2.3-70-g09d2