Re: [EXIM] Strange multiple local interface?

Top Page
Delete this message
Reply to this message
Author: Philip Hazel
Date:  
To: Daniel Ryde
CC: Exim Users
Subject: Re: [EXIM] Strange multiple local interface?
On Thu, 5 Feb 1998, Daniel Ryde wrote:

> On Thu, 5 Feb 1998, Philip Hazel wrote:
>
> > Exim calls the SIOCGIFCONF ioctl to find the local interfaces. This
> > seems to be one of those things that varies between Unices. There is
> > some contorted code in there to try to get this right. Perhaps Linux is
> > being different (again)... The code is in the function
> > host_find_running_interfaces() in the host.c module.
>
> Umm, you define:
>
> struct ifreq ifreq, *ifr;
>
> And then later you start using the pointer ifr uninitialized?
>
>     mac_max(ifr->ifr_addr.sa_len, sizeof(ifr->ifr_addr)) +

>
> Am I wrong?


Yes, I'm afraid you are. The lines in question are:

for (cp = buf; cp < buf + ifc.ifc_len; cp +=
    #ifdef HAVE_SA_LEN
    mac_max(ifr->ifr_addr.sa_len, sizeof(ifr->ifr_addr)) +
      sizeof(ifr->ifr_name))
    #else
    sizeof(*ifr))
    #endif
  {
  ifr = (struct ifreq *)cp;


The use of ifr in the "for" statement come in the third part, which gets
obeyed at the end of each time round the loop. Notice that the first
statement in the loop sets ifr, so it will be set when that expression
is evaluated.

-- 
Philip Hazel                   University Computing Service,
ph10@???             New Museums Site, Cambridge CB2 3QG,
P.Hazel@???          England.  Phone: +44 1223 334714



--
*** Exim information can be found at http://www.exim.org/ ***