On 09/12/2014 11:02 AM, Christian Franke wrote:
> If PATH variable is unset or does not contain /bin or /usr/bin,
> exec("/not_bin/program", ...) fails because cygwin DLLs could not be
> loaded.
>
> This affects postfix which cleans the environment to the bare minimum
> for security reasons.
> (fortunately there is an easy workaround, so this does not block postfix
> ITP)
>
> Testcase:
>
> $ cat nopath.cc
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> // #include <windows.h>
>
> int main()
> {
> unsetenv("PATH");This is undefined behavior, per POSIX. POSIX recommends that you always leave PATH defined to at least a bare minimum of the results of confstr(_CS_PATH, ...); it also states that implementations are free to do what they want (in this case, crash) if you don't follow the recommendation: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html "If PATH is unset or is set to null, the path search is implementation-defined." > Enabling the SetDllDirectory() Win32 call fixes the problem. > Would possibly make sense to add this call to cygwin1.dll. That said, just because POSIX has already given us the get-out-of-jail-free card doesn't mean that we can't be nice and improve cygwin1.dll to try and help broken programs that unset PATH. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature

