View Issue Details

IDProjectCategoryView StatusLast Update
0005688Talermerchant backendpublic2021-09-02 16:22
Reporternikita Assigned ToChristian Grothoff Resolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicator 
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Versiongit (master) 
Target Version0.6Fixed in Version0.6 
Summary0005688: unable to build merchant due to includes (or getaddrinfo(3)?)
DescriptionSimilar to the bug I reported earlier for exchange, merchant has includes in global style which
I am pretty sure should be local style. This was fixed as soon as I build with exchange. So works as intended but undocumented?

I'm still in the orientation phase wrt Taler source code layout and connection, so I will refrain from
fixing the reported bug.

Now the real bug I hit on NetBSD/amd64:

make all-recursive
Making all in .
Making all in src
Making all in include
Making all in backenddb
Making all in backend
  CC taler-merchant-httpd.o
In file included from /home/ng0/gnunet/include/gnunet/gnunet_util_lib.h:83:0,
                 from taler-merchant-httpd.c:26:
/home/ng0/gnunet/include/gnunet/gnunet_tun_lib.h:141:10: warning: 'packed' attribute ignored for field of type 'struct in_addr' [-Wattributes]
   struct in_addr source_address GNUNET_PACKED;
          ^~~~~~~
/home/ng0/gnunet/include/gnunet/gnunet_tun_lib.h:146:10: warning: 'packed' attribute ignored for field of type 'struct in_addr' [-Wattributes]
   struct in_addr destination_address GNUNET_PACKED;
          ^~~~~~~
/home/ng0/gnunet/include/gnunet/gnunet_tun_lib.h:736:12: warning: 'packed' attribute ignored for field of type 'struct in_addr' [-Wattributes]
     struct in_addr redirect_gateway_address GNUNET_PACKED;
            ^~~~~~~
taler-merchant-httpd.c: In function 'run':
taler-merchant-httpd.c:1465:39: error: 'AI_IDN' undeclared (first use in this function); did you mean 'AF_ISDN'?
         hints.ai_flags = AI_PASSIVE | AI_IDN;
                                       ^~~~~~
                                       AF_ISDN
taler-merchant-httpd.c:1465:39: note: each undeclared identifier is reported only once for each function it appears in
*** Error code 1

Stop.
make[3]: stopped in /home/ng0/src/taler/merchant/src/backend
*** Error code 1

Stop.
make[2]: stopped in /home/ng0/src/taler/merchant/src
*** Error code 1

Stop.
make[1]: stopped in /home/ng0/src/taler/merchant
*** Error code 1

Stop.
make: stopped in /home/ng0/src/taler/merchant




So the closest I can find is in <netdb.h>, but that's not enough.
I can't even find this in the compatibility header file which comes
with postgresql-server in postgresql/server/getaddrinfo.h

But still no positive match. Surprisingly include/php/main/php_config.h
has a match, but it's #undef for me.

So since I assume this is just integers (I'm writing this bug report from memory
of what I've done this morning), is this AI_IDN only defined on some Linux platforms?

It seems so, because `man 3 getaddrinfo` on my Debian system includes:

...
Extensions to getaddrinfo() for Internationalized Domain Names
       Starting with glibc 2.3.4, getaddrinfo() has been extended to selec‐
       tively allow the incoming and outgoing hostnames to be transparently
       converted to and from the Internationalized Domain Name (IDN) format
       (see RFC 3490, Internationalizing Domain Names in Applications
       (IDNA)). Four new flags are defined:

       AI_IDN If this flag is specified, then the node name given in node is
              converted to IDN format if necessary. The source encoding is
              that of the current locale.

              If the input name contains non-ASCII characters, then the IDN
              encoding is used. Those parts of the node name (delimited by
              dots) that contain non-ASCII characters are encoded using
              ASCII Compatible Encoding (ACE) before being passed to the
              name resolution functions.
...


I presume the best way to resolve this is by checking in taler-merchant-httpd.c
or wherever it came from if we have a glibc >= 2.3.4 and set the value of
hints.ai_flags accordingly.
Actually maybe even a check for the underlying OS because I also have glibc (available, but limitations might apply and it is not the native one).
Updating in a bit with more details.
TagsNo tags attached.

Required notifications

Address or linkRemarkAdded byNotifiedActions

Activities

nikita

2019-04-16 19:19

reporter   ~0014295

Last edited: 2019-04-16 19:20

diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c
index 31a1c9d..e54bd3c 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -1462,7 +1462,11 @@ run (void *cls,
         hints.ai_family = AF_UNSPEC;
         hints.ai_socktype = SOCK_STREAM;
         hints.ai_protocol = IPPROTO_TCP;
+#ifdef AI_IDN
         hints.ai_flags = AI_PASSIVE | AI_IDN;
+#else
+ hints.ai_flags = AI_PASSIVE;
+#endif
         if (0 !=
             (ec = getaddrinfo (bind_to,
                                port_str,





good enough or did I miss anything obvious?
It compiles to the point where I hit errors with texinfo which I'll be fixing now,
ie it gets past the original error but I'm not sure if it's enough.

nikita

2019-04-16 19:47

reporter   ~0014296

medfly in #NetBSD suggests that

#ifndef AI_IDN #define AI_IDN 0 #endif

would be enough, but I'd like to have a final call by someone with more knowledge of parts of merchant
(I started reading it just this morning)

Issue History

Date ModifiedUsernameFieldChange
2019-04-16 18:48nikitaNew Issue
2019-04-16 18:48nikitaStatusnew => assigned
2019-04-16 18:48nikitaAssigned To => Marcello Stanisci
2019-04-16 19:05nikitaDescription Updated
2019-04-16 19:19nikitaNote Added: 0014295
2019-04-16 19:20nikitaNote Edited: 0014295
2019-04-16 19:47nikitaNote Added: 0014296
2019-04-18 15:36Christian GrothoffAssigned ToMarcello Stanisci => Christian Grothoff
2019-04-18 15:36Christian GrothoffStatusassigned => informing
2019-04-18 15:36Christian GrothoffResolutionopen => fixed
2019-04-18 15:36Christian GrothoffFixed in Version => 0.6
2019-04-18 15:36Christian GrothoffTarget Version => 0.6
2019-12-20 18:12Christian GrothoffStatusinforming => closed
2021-09-02 16:22Christian Grothoff
2025-03-22 13:09Christian GrothoffCategorymechant backend => merchant backend