Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PSA: Mac OS X El Capitan upgrade might break your $PATH





On 7/31/15 6:01 PM, Kurtis Rader wrote:
On Fri, Jul 31, 2015 at 2:05 PM, Andrew Janke <andrew@xxxxxxxxxxx <mailto:andrew@xxxxxxxxxxx>> wrote:


    I suspect the order of entries in path_helper is determined by
    alphabetical ordering of the filenames in /etc/paths.d, where
    path_helper locates the files that come after the default system
    paths. That "40-" in XQuartz looks like an rcdir-style technique
    to enforce ordering, and I think the XQuartz folks know what
    they're doing with the OS X system stuff. (This is on 10.9.)


That would be fine if it simply appended those directories in that order to the existing PATH as the man page claims. But it is clearly using a hash based ordering and ignoring even the apparent ordering implied by the file names in /etc/paths.d. From my system:

14:45 macbook  coff  ~  ls /etc/paths.d
40-XQuartzgo
14:50 macbook  coff  ~  cat /etc/paths.d/*
/opt/X11/bin
/usr/local/go/bin
14:52 macbook  coff  ~  /usr/libexec/path_helper -s
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/go/bin:/Users/krader/bin:/Users/krader/sbin:/Users/krader/symlinks:/usr/local/sbin"; export PATH;
14:52 macbook  coff  ~  echo $PATH
/Users/krader/bin:/Users/krader/sbin:/Users/krader/symlinks:/usr/local/bin:/usr/local/go/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/opt/X11/bin

That path_helper output doesn't look random or hash based. That looks like:

- the system default paths (from /etc/paths) come first, in the order specified in /etc/paths
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:

- then the stuff from /etc/paths.d, in filename alphabetical order
/opt/X11/bin:/usr/local/go/bin:

- then any other item it found in $PATH at the time of its invocation, in the order in which they appeared in $PATH.
/Users/krader/bin:/Users/krader/sbin:/Users/krader/symlinks:/usr/local/sbin

That lastpart isn't documented in `man path_helper`, but it behaved this way consistently when I was testing it with various $PATH values. (on 10.9)

The man page could stand tobe more thorough and clear, but I don't think it's randomly rearranging your path. And the `man path_helper` page does indicate where the default paths come from, though it's buried a few paragraphs down.

Prior to reading these directories, default PATH and MANPATH values are
     obtained from the files /etc/paths and /etc/manpaths respectively.


    One other El Capitan change: the system-supplied zsh (5.0.8)
    appears to be compiled with /usr/local/share/zsh/site-functions in
    the default $fpath, which was not the case for earlier versions of
    OS X. This is probably related to the "rootless" stuff that locks
    down /usr outside /usr/local/.


Yes, I noticed that as well and should have mentioned it as it causes zsh running as root to complain about "compinit: insecure files" since those files are managed by HomeBrew and owned by me. Computer Security: If it isn't getting in your way you're doing it wrong :-)
--
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank



Messages sorted by: Reverse Date, Date, Thread, Author