From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/10363 Path: news.gmane.org!.POSTED!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: utmp symbol conflict Date: Thu, 4 Aug 2016 18:20:06 -0400 Message-ID: <20160804222006.GN15995@brightrain.aerifal.cx> References: <20160804222852.6fbec1a6@free-electrons.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1470349243 29299 195.159.176.226 (4 Aug 2016 22:20:43 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 4 Aug 2016 22:20:43 +0000 (UTC) User-Agent: Mutt/1.5.21 (2010-09-15) To: musl@lists.openwall.com Original-X-From: musl-return-10376-gllmg-musl=m.gmane.org@lists.openwall.com Fri Aug 05 00:20:26 2016 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1bVR00-0004dY-Pm for gllmg-musl@m.gmane.org; Fri, 05 Aug 2016 00:20:20 +0200 Original-Received: (qmail 22278 invoked by uid 550); 4 Aug 2016 22:20:19 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 22260 invoked from network); 4 Aug 2016 22:20:19 -0000 Content-Disposition: inline In-Reply-To: <20160804222852.6fbec1a6@free-electrons.com> Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:10363 Archived-At: On Thu, Aug 04, 2016 at 10:28:52PM +0200, Thomas Petazzoni wrote: > Hello, > > The shellinabox project > (https://github.com/shellinabox/shellinabox) fails to build with musl > due to the following define in musl's utmp.h: > > #define utmp utmpx > > Indeed shellinabox/launcher.c has the following piece of code > (https://github.com/shellinabox/shellinabox/blob/master/shellinabox/launcher.c#L1572) : > > struct utmpx utmpx = utmp->utmpx; > if (service->useLogin || service->authUser) { > utmpx.ut_type = LOGIN_PROCESS; > memset(utmpx.ut_host, 0, sizeof(utmpx.ut_host)); > } > > Where "utmp" is of type "struct Utmp *", which is an internal structure > type defined as: > > struct Utmp { > const char pid[32]; > int pty; > int useLogin; > #ifdef HAVE_UTMPX_H > struct utmpx utmpx; > #endif > }; > > Unfortunately, with musl's definition #define utmp utmpx, the line: > > struct utmpx utmpx = utmp->utmpx; > > gets turned after pre-processing to: > > struct utmpx utmpx = utmpx->utmpx; > > which obviously causes a build failure: > > shellinabox/launcher.c: In function ‘childProcess’: > shellinabox/launcher.c:1576:41: error: invalid type argument of ‘->’ (have ‘struct utmpx’) > struct utmpx utmpx = utmp->utmpx; > ^ > I don't think the symbol "utmp" as a variable name is reserved, so is > the #define utmp utmpx done by musl really a legal thing to do? The header is not a standard header so there are no namespace constraints on it. An application using utmpx (the standard api) should be including just not . Aside from that, utmp is not supported at all on musl (it's all stubs) so it would probably make the most sense to compile with an option to disable utmp support if possible. This might help avoid runtime warnings about not being able to set/find utmp entries. Rich