Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Feb 2016 08:53:09 +0800
From:      Julian Elischer <julian@freebsd.org>
To:        Jeremy Boy <jb@jboy.eu>, freebsd-net@freebsd.org
Subject:   Re: ifconfig with quoted arguments
Message-ID:  <56BD2CF5.7020200@freebsd.org>
In-Reply-To: <76A08658-ACD2-426B-865A-45A6A79BBFB4@jboy.eu>
References:  <76A08658-ACD2-426B-865A-45A6A79BBFB4@jboy.eu>

next in thread | previous in thread | raw e-mail | index | archive | help
On 10/02/2016 5:51 AM, Jeremy Boy wrote:
> Hello list,
>
> please CC me in replies to this mail, since I am no subscriber to this list.
>
> For safety reasons, we enclose user input to shell commands in quotes. Until today, the resulting command for ifconfig(8) looked like this:
>
>> ifconfig ue0 inet "192.168.2.176 netmask 255.255.255.0"
>
> As we figured out, this means that ifconfig sometimes doesn't set the netmask as we expect it to do:
>
>> root@csbuild:~ # ifconfig ue0
>> ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
>>          options=80001<RXCSUM,LINKSTATE>
>>          ether b8:27:eb:fd:58:69
>>          inet 192.168.2.176 netmask 0xffff0000 broadcast 192.168.255.255
>>          media: Ethernet autoselect (100baseTX <full-duplex>)
>>          status: active
>>          nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>> root@csbuild:~ # ifconfig ue0 inet "192.168.2.176 netmask 255.0.0.0"
>> root@csbuild:~ # echo $?
>> 0
>> root@csbuild:~ # ifconfig ue0
>> ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
>>          options=80001<RXCSUM,LINKSTATE>
>>          ether b8:27:eb:fd:58:69
>>          inet 192.168.2.176 netmask 0xffffff00 broadcast 192.168.2.255
>>          media: Ethernet autoselect (100baseTX <full-duplex>)
>>          status: active
>>          nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>> root@csbuild:~ #
>
> As you can see, ifconfig sets the netmask to 255.255.255.0, ignoring the netmask we provided. If provided with a 10.* address, ifconfig sets the netmask to 255.0.0.0, no matter what actual netmask we entered. Also, it doesn't exit with a status indicating error, which made it a little harder to debug this issue. The following works as expected:
>
>> root@csbuild:~ # ifconfig ue0
>> ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
>>          options=80001<RXCSUM,LINKSTATE>
>>          ether b8:27:eb:fd:58:69
>>          inet 192.168.2.176 netmask 0xffffff00 broadcast 192.168.2.255
>>          media: Ethernet autoselect (100baseTX <full-duplex>)
>>          status: active
>>          nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>> root@csbuild:~ # ifconfig ue0 inet "192.168.2.176" netmask "255.0.0.0"
>> root@csbuild:~ # ifconfig ue0
>> ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
>>          options=80001<RXCSUM,LINKSTATE>
>>          ether b8:27:eb:fd:58:69
>>          inet 192.168.2.176 netmask 0xff000000 broadcast 192.255.255.255
>>          media: Ethernet autoselect (100baseTX <full-duplex>)
>>          status: active
>>          nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>> root@csbuild:~ #
> What exactly does ifconfig do? It seems to me that it reads the IP address from the quoted string but truncates the netmask. Is this a bug in ifconfig or intended behavior?
it's not so much as ifconfig, as the shell

you have ifconfig with 3 arguments, the last of which is

   "192.168.2.176 netmask 255.255.255.0"

which ifconfig inspects to see if it has an IP address in it (followed 
by a space which terminates the test successfully).

this is expected behaviour.   Though admittedly a less than clear 
example of it.




>
> Best wishes
> Jeremy
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56BD2CF5.7020200>