zsh-workers
 help / color / mirror / code / Atom feed
* compaudit slow with many groups
@ 2004-03-19 21:57 Danek Duvall
  2004-03-21 18:46 ` Danek Duvall
  2004-03-30 14:28 ` Oliver Kiddle
  0 siblings, 2 replies; 4+ messages in thread
From: Danek Duvall @ 2004-03-19 21:57 UTC (permalink / raw)
  To: zsh-workers

At work, we have 1168 groups defined in NIS, and the entire database
dumped via "getent group" is over 100kB.  This makes compaudit very slow
on startup if the groups are not all cached locally, and makes it a drag
logging in to a machine with zsh as my shell.

The code to blame is on line 85:

    local GROUP GROUPMEM _i_pw _i_gid _i_ulwdirs
    while IFS=: read GROUP _i_pw _i_gid GROUPMEM; do
      if (( UID == EUID )); then
        [[ $GROUP == $LOGNAME ]] && break
      else
        (( _i_gid == EGID )) && break       # Somewhat arbitrary
      fi
    done <<(getent group)

which seems somewhat inefficient.  Would something along the lines of

    local GROUP GROUPMEM _i_pw _i_gid _i_ulwdirs
    if (( UID == EUID )); then
    	getent group $UID | IFS=: read GROUP _i_pw _i_gid GROUPMEM
	[[ $GROUP == $LOGNAME ]] || unset GROUP GROUPMEM
    else
    	getent group $EGID | IFS=: read GROUP _i_pw _i_gid GROUPMEM
	(( _i_gid == EGID )) || unset GROUP GROUPMEM
    fi

work?  I'm not positive this is the right set of tests, but if not,
there ought to be some similar way of reducing the overhead of the
function.  Is there any system where getent can't take two arguments?

Or perhaps it ought to be conditional on some style being set or unset.

Thanks,
Danek


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-03-30 14:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-03-19 21:57 compaudit slow with many groups Danek Duvall
2004-03-21 18:46 ` Danek Duvall
2004-03-22 20:12   ` Peter Stephenson
2004-03-30 14:28 ` Oliver Kiddle

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).