zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-workers@zsh.org
Subject: PATCH Re: "Once-a-day" long delay before startup
Date: Sat, 20 Aug 2011 00:13:25 -0700	[thread overview]
Message-ID: <110820001325.ZM23133@torch.brasslantern.com> (raw)
In-Reply-To: <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 ]]


       reply	other threads:[~2011-08-20  7:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20110814145749.GA6341@andrew.cmu.edu>
     [not found] ` <4E4D8D50.5040800@gmail.com>
     [not found]   ` <20110819020336.GA21062@andrew.cmu.edu>
     [not found]     ` <110818210558.ZM20788@torch.brasslantern.com>
     [not found]       ` <20110820004710.GA4085@andrew.cmu.edu>
2011-08-20  7:13         ` Bart Schaefer [this message]
2011-08-20  9:04           ` Vincent Lefevre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=110820001325.ZM23133@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).