[GHC] #1487: unix package: test needed for getLoginName

GHC ghc-devs at haskell.org
Thu Jun 26 22:15:42 UTC 2014


#1487: unix package: test needed for getLoginName
-------------------------------------+-------------------------------------
        Reporter:  simonmar          |            Owner:  thomie
            Type:  bug               |           Status:  new
        Priority:  lowest            |        Milestone:  7.6.2
       Component:  libraries/unix    |          Version:  6.6.1
      Resolution:                    |         Keywords:
Operating System:  Linux             |     Architecture:  Unknown/Multiple
 Type of failure:  Incorrect result  |       Difficulty:  Easy (less than 1
  at runtime                         |  hour)
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+-------------------------------------

Comment (by thomie):

 The attached patch fixes this issue.

 I tried going the pseudo-terminal route, but it doesn't work.

 System.Posix.User's `getLoginName` calls the C function `getlogin`. This
 function, on GNU/Linux at least, looks in the file /var/run/utmp for a
 login record with a tty name that matches that of the terminal connected
 to stdin (filedescriptor 0).

 It is possible to trick `getlogin` to check a pseudo terminal's name with
 something like:

     (master, slave) <- openPseudoTerminal
     dupTo master stdInput

 But, as far as I understand, pseudo-terminals are never registered in
 /var/run/utmp. Therefore `getlogin` will not find the user's login name
 and just return 'No such file or directory'. Maybe better than
 'Inappropriate ioctl for device', but still an error.

 What does work, surprisingly, is adding this to `user001.hs`:

     dupTo stdOutput stdInput

 , but only if we wouldn't redirect stdout as well. The same for stderr.

 The solution is to simply not redirect stdin (i.e. don't do ./user001 <
 /dev/null). This implies skipping the ghci way. The commit that introduced
 the `no_stdin` test option alluded to this as well:
 fa52a8c9d8eae5e3fc4c0cf0e5672875e161e05c.

 One general concern is that there are no guarantees that `getlogin` will
 return anything other than NULL, so the test with this patch applied might
 fail on some systems. Another option therefore would be to turn the
 getLoginName test back off again, document why, and close this issue
 regardless.

 Review of

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/1487#comment:19>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list