Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH Re: "Once-a-day" long delay before startup
- X-seq: zsh-workers 29711
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: PATCH Re: "Once-a-day" long delay before startup
- Date: Sat, 20 Aug 2011 00:13:25 -0700
- In-reply-to: <20110820004710.GA4085@andrew.cmu.edu>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <20110814145749.GA6341@andrew.cmu.edu> <4E4D8D50.5040800@gmail.com> <20110819020336.GA21062@andrew.cmu.edu> <110818210558.ZM20788@torch.brasslantern.com> <20110820004710.GA4085@andrew.cmu.edu>
This implements Vincent's suggestion of searching for group-writable
directories in compaudit and doing the getent only if some are found.
Doesn't help much on an RHEL-derived system because everyone is in
their own group and the default umask is group-writable, but maybe
it helps somebody.
Please check my work on that first assignment to _i_wdirs. It's the
same as the "else" clause of the $GROUPMEM == $LOGNAME branch, which
I think is the right place from which to start checking.
Index: Completion/compaudit
--- ../zsh-forge/current/Completion/compaudit 2005-02-27 11:40:17.000000000 -0800
+++ Completion/compaudit 2011-08-20 00:07:53.000000000 -0700
@@ -82,19 +82,6 @@
[[ $_i_fail == use ]] && return 0
-# RedHat Linux "per-user groups" check. This is tricky, because it's very
-# difficult to tell whether the sysadmin has put someone else into your
-# "private" group (e.g., via the default group field in /etc/passwd, or
-# by NFS group sharing with an untrustworthy machine). So we must assume
-# that this has not happened, and pick the best group.
-
-local GROUP GROUPMEM _i_pw _i_gid _i_ulwdirs
-if ((UID == EUID )); then
- getent group $LOGNAME | IFS=: read GROUP _i_pw _i_gid GROUPMEM
-else
- getent group $EGID | IFS=: read GROUP _i_pw _i_gid GROUPMEM
-fi
-
# We search for:
# - world/group-writable directories in fpath not owned by root and the user
# - parent-directories of directories in fpath that are world/group-writable
@@ -105,12 +92,27 @@
# - and for files in directories from fpath not owned by root and the user
# (including zwc files)
-if [[ $GROUP == $LOGNAME && ( -z $GROUPMEM || $GROUPMEM == $LOGNAME ) ]]; then
- _i_wdirs=( ${^fpath}(N-f:g+w:^g:${GROUP}:,-f:o+w:,-^u0u${EUID})
- ${^fpath:h}(N-f:g+w:^g:${GROUP}:,-f:o+w:,-^u0u${EUID}) )
-else
- _i_wdirs=( ${^fpath}(N-f:g+w:,-f:o+w:,-^u0u${EUID})
- ${^fpath:h}(N-f:g+w:,-f:o+w:,-^u0u${EUID}) )
+_i_wdirs=( ${^fpath}(N-f:g+w:,-f:o+w:,-^u0u${EUID})
+ ${^fpath:h}(N-f:g+w:,-f:o+w:,-^u0u${EUID}) )
+
+# RedHat Linux "per-user groups" check. This is tricky, because it's very
+# difficult to tell whether the sysadmin has put someone else into your
+# "private" group (e.g., via the default group field in /etc/passwd, or
+# by NFS group sharing with an untrustworthy machine). So we must assume
+# that this has not happened, and pick the best group.
+
+if (( $#_i_wdirs )); then
+ local GROUP GROUPMEM _i_pw _i_gid _i_ulwdirs
+ if ((UID == EUID )); then
+ getent group $LOGNAME | IFS=: read GROUP _i_pw _i_gid GROUPMEM
+ else
+ getent group $EGID | IFS=: read GROUP _i_pw _i_gid GROUPMEM
+ fi
+
+ if [[ $GROUP == $LOGNAME && ( -z $GROUPMEM || $GROUPMEM == $LOGNAME ) ]]
+ then
+ _i_wdirs=( ${^_i_wdirs}(N-f:g+w:^g:${GROUP}:,-f:o+w:,-^u0u${EUID}) )
+ fi
fi
if [[ -f /etc/debian_version ]]
Messages sorted by:
Reverse Date,
Date,
Thread,
Author