Mike Gerdts wrote:
> The code that then tries to determine the man section list from the
> directories /usr/bin/man/* fails when it tries to
> opendir(/usr/bin/man) and returns without building the section list.
> The crash is happening as duplicate man directories and sections are
> removed because it assumes the section list is non-null. An empty
> section list would be OK, but a NULL section list blows up.
>
> There are two obvious ways to address this:
>
> 1) Use realpath() on each path directory prior to turning it into a
> man directory. This will break the functionality of allowing
> $prefix/bin -> $prefix/$arch/bin with a shared $prefix/man (no
> $prefix/arch/man).
> 2) Use the a special pathmap
> (http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/man/src/man.c#204)
> entry to map /usr/bin/X11 to /usr/X11/share/man.
>
> I'm leaning toward fixing it with #2. As I was looking into this I
> came across the following that I will address at the same time.
>
> - path_to_manpath() should not allow a directory to be added to
> manpath if no sections are found.
> - When checking for the existence of man and share/man directories, be
> sure they are directories
I agree /usr/bin/X11 is a special case and probably needs to be handled as
such. (And yes, it was added for compatibility with .cshrc/.profiles for
users of other Unixes.)
Does the second item mean you'll be adding checks to the path_to_manpath
code to protect against segfaults in other special cases, by basically
doing something like changing the check from:
if (stat(mand, &sb) == 0)
to:
if ((stat(mand, &sb) == 0) && (S_ISDIR(sb.mode))
? (I realize that's not safe against race conditions, but since man isn't
setuid, that seems okay.)
--
-Alan Coopersmith- [EMAIL PROTECTED]
Sun Microsystems, Inc. - X Window System Engineering
_______________________________________________
opensolaris-discuss mailing list
[email protected]