From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id q2KMjO4W027755 for ; Tue, 20 Mar 2012 23:45:29 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqsDADYHaU/AbSoIe2dsb2JhbAA6CoVBn2GRQiIBARYmBCOCCQEBBSMECwE7CxAJAgkPAgIJCQETAgIUDQsZGBMSh3gEB6RtkiETgRyIPWyDAwGCDzNjBI4Ah16LL4dhgVU X-IronPort-AV: E=Sophos;i="4.73,621,1325458800"; d="scan'208";a="150437431" Received: from einhorn.in-berlin.de ([192.109.42.8]) by mail1-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 20 Mar 2012 23:45:29 +0100 X-Envelope-From: oliver@first.in-berlin.de Received: from first (e178016028.adsl.alicedsl.de [85.178.16.28]) (authenticated bits=0) by einhorn.in-berlin.de (8.13.6/8.13.6/Debian-1) with ESMTP id q2KMjPqx019959 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 20 Mar 2012 23:45:26 +0100 Received: by first (Postfix, from userid 1000) id 9F43C1540145; Tue, 20 Mar 2012 23:45:25 +0100 (CET) Date: Tue, 20 Mar 2012 23:45:25 +0100 From: oliver To: Till Varoquaux Cc: yminsky@gmail.com, David House , Ricardo Catalinas =?utf-8?Q?Jim=C3=A9nez?= , caml-list@inria.fr Message-ID: <20120320224525.GE3352@siouxsie> References: <20120320175113.GC935@viper.local> <20120320180759.GE935@viper.local> <4F68CC67.3020207@janestreet.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) X-Scanned-By: MIMEDefang_at_IN-Berlin_e.V. on 192.109.42.8 Subject: Re: [Caml-list] Re: Unix.getlogin () fails when stdin is redirected Are there so many bugs in glibc that fixing this one means waiting in a long, long queue... and bugfixes will need months or years? Are there any reasons this bug is not already fixed? And since when is it known? Ciao, Oliver On Tue, Mar 20, 2012 at 04:12:36PM -0400, Till Varoquaux wrote: > As far as I can tell getpwuid(geteuid()) is what the (deprecated) > cuserid function does. The linux man page explains the difference > between the two functions like this: > > _ These functions let your program identify positively the user who > is running (cuserid()) or the user who logged in this session > (getlogin()). (These can differ when set-user-ID programs are > involved.) > > I expect there to be more points were the behaviours of those two > functions diverge (e.g.: sudo, deamons etc...). > > In general I am very skeptic any time I see a one liner that is sold > as a working alternative to a glibc function. The glibc has issues and > pitfalls but they tend to be very well documented. "Better the devil > you know"... > > Till > > On Tue, Mar 20, 2012 at 3:41 PM, Yaron Minsky wrote: > > Is there a concrete difference in behavior you're concerned about? > > > > y > > > > > > On Tue, Mar 20, 2012 at 2:48 PM, Till Varoquaux wrote: > >> > >> getpwuid(getuid()) is not a synonym for get_login (refer to the > >> discussion in the POSIX standard[^1]). You should not shadow posix > >> functions by functions with different semantics in the Unix modules; > >> providing your own abstraction over the OS is a commendable goal but > >> you should do so without silently bypassing core functions. > >> > >> Till > >> [1]:http://pubs.opengroup.org/onlinepubs/007904975/functions/getlogin.html > >> > >> > >> On Tue, Mar 20, 2012 at 2:28 PM, David House > >> wrote: > >> > Note that Jane Street's core library [1] does not use getlogin(3) in its > >> > replacement Unix module, for exactly this reason: > >> > > >> > (* The standard getlogin function goes through utmp which is unreliable, > >> >  see the BUGS section of getlogin(3) *) > >> > let getlogin_orig = Unix.getlogin > >> > let getlogin () = (Unix.getpwuid (getuid ())).Unix.pw_name > >> > > >> > [1]: https://bitbucket.org/yminsky/ocaml-core/wiki/Home > >> > > >> > I just tested your specific example, and it worked fine. > >> > > >> > > >> > On Tue 20 Mar 2012 06:07:59 PM GMT, Ricardo Catalinas Jiménez wrote: > >> >> > >> >> On Tue, Mar 20, 2012 at 06:51:13PM +0100, Ricardo Catalinas Jiménez > >> >> wrote: > >> >>> > >> >>> I found out the next issue in this simple code: > >> >>> > >> >>> let () = > >> >>>     print_endline "Hello"; > >> >>>     print_endline (Unix.getlogin ()) > >> >>> > >> >>> Running in the normal case, with `./a.out' gives: > >> >>> > >> >>> Hello > >> >>> ricardo > >> >>> > >> >>> But running like `./a.out >> >>> > >> >>> Hello > >> >>> Fatal error: exception Unix.Unix_error(20, "getlogin", "") > >> >>> > >> >>> A simple strace reveals the problem: > >> >>> > >> >>>    open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 > >> >>>    fstat(3, {st_mode=S_IFREG|0644, st_size=509, ...}) = 0 > >> >>>    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, > >> >>> -1, > >> >>> 0) = 0x7fb125554000 > >> >>>    read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 509 > >> >>>    read(3, "", 4096)                       = 0 > >> >>>    close(3)                                = 0 > >> >>>    munmap(0x7fb125554000, 4096)            = 0 > >> >>> ->  ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or > >> >>> TCGETS, 0x7fff12682c98) = -1 ENOTTY (Inappropriate ioctl for device) > >> >>>    write(2, "Fatal error: exception Unix.Unix"..., 59) = 59 > >> >>>    exit_group(2)                           = ? > >> >> > >> >> > >> >> > >> >> Someone knew the answer, man 3 getlogin reads: > >> >> > >> >>        Note that glibc does not follow the POSIX specification and uses > >> >>        stdin instead of /dev/tty.  A bug.  (Other recent systems, like > >> >>        SunOS 5.8 and HP-UX 11.11 and FreeBSD 4.8 all return the login > >> >>        name also when stdin is redirected.) > >> >> > >> >> > >> >> Regards > >> > > >> > > >> > > >> > > >> > -- > >> > Caml-list mailing list.  Subscription management and archives: > >> > https://sympa-roc.inria.fr/wws/info/caml-list > >> > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > >> > Bug reports: http://caml.inria.fr/bin/caml-bugs > >> > > >> > >> > >> -- > >> Caml-list mailing list.  Subscription management and archives: > >> https://sympa-roc.inria.fr/wws/info/caml-list > >> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > >> Bug reports: http://caml.inria.fr/bin/caml-bugs > >> > > > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa-roc.inria.fr/wws/info/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >