diff mbox series

package: dropbear: make PATH configurable

Message ID 20180308214403.94906-1-mmayer@broadcom.com
State Superseded
Headers show
Series package: dropbear: make PATH configurable | expand

Commit Message

Markus Mayer March 8, 2018, 9:44 p.m. UTC
Make the default PATH dropbear is using configurable.

If not specified, it will continue to default to dropbear's
DEFAULT_PATH.

Signed-off-by: Markus Mayer <mmayer@broadcom.com>
---

Please let me know what you think. Thanks.

 package/dropbear/Config.in   | 6 ++++++
 package/dropbear/dropbear.mk | 8 ++++++++
 2 files changed, 14 insertions(+)

Comments

Yann E. MORIN March 8, 2018, 9:48 p.m. UTC | #1
Markus, All,

On 2018-03-08 13:44 -0800, Markus Mayer spake thusly:
> Make the default PATH dropbear is using configurable.
> 
> If not specified, it will continue to default to dropbear's
> DEFAULT_PATH.

Isn't it better to jut let the user provide a ~/.profile file which
actually sets the PATH?

Regards,
Yann E. MORIN.

> Signed-off-by: Markus Mayer <mmayer@broadcom.com>
> ---
> 
> Please let me know what you think. Thanks.
> 
>  package/dropbear/Config.in   | 6 ++++++
>  package/dropbear/dropbear.mk | 8 ++++++++
>  2 files changed, 14 insertions(+)
> 
> diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in
> index 6700778161ba..d38ecf50834a 100644
> --- a/package/dropbear/Config.in
> +++ b/package/dropbear/Config.in
> @@ -55,4 +55,10 @@ config BR2_PACKAGE_DROPBEAR_LASTLOG
>  	  Enable logging of dropbear access to lastlog. Notice that
>  	  Buildroot does not generate lastlog by default.
>  
> +config BR2_PACKAGE_DROPBEAR_PATH
> +	string "dropbear default path"
> +	help
> +	  Use the path specified here as dropbear's default path.
> +	  If not specified, dropbear will use "/usr/bin:/bin".
> +
>  endif
> diff --git a/package/dropbear/dropbear.mk b/package/dropbear/dropbear.mk
> index 01a1a07b7696..ddbedf3bce93 100644
> --- a/package/dropbear/dropbear.mk
> +++ b/package/dropbear/dropbear.mk
> @@ -51,6 +51,14 @@ define DROPBEAR_DISABLE_STANDALONE
>  	$(SED) 's:\(#define NON_INETD_MODE\):/*\1 */:' $(@D)/options.h
>  endef
>  
> +ifneq ($(BR2_PACKAGE_DROPBEAR_PATH),"")
> +define DROPBEAR_CUSTOM_PATH
> +	$(SED) 's|^\(#define DEFAULT_PATH\).*|\1 $(BR2_PACKAGE_DROPBEAR_PATH)|' $(@D)/options.h
> +endef
> +
> +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH
> +endif
> +
>  define DROPBEAR_INSTALL_INIT_SYSTEMD
>  	$(INSTALL) -D -m 644 package/dropbear/dropbear.service \
>  		$(TARGET_DIR)/usr/lib/systemd/system/dropbear.service
> -- 
> 2.7.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Markus Mayer March 8, 2018, 10:29 p.m. UTC | #2
On 8 March 2018 at 13:48, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Markus, All,
>
> On 2018-03-08 13:44 -0800, Markus Mayer spake thusly:
>> Make the default PATH dropbear is using configurable.
>>
>> If not specified, it will continue to default to dropbear's
>> DEFAULT_PATH.
>
> Isn't it better to jut let the user provide a ~/.profile file which
> actually sets the PATH?

That's certainly one way to do it and one can still choose to do that
for when it works.

Where we have found it helpful to change the default is for
non-interactive shells, i.e. running a command via ssh without logging
in first. If you try to do "ssh eval-board ifconfig" it'll fail,
because /sbin isn't in the path. And .profile doesn't help you.

There's an example:

$ ssh brcmstb ifconfig
sh: ifconfig: command not found

No surprise, because /sbin isn't in the PATH.

$ ssh brcmstb 'echo $PATH'
/usr/bin:/bin

But hold on. ".profile" does exist and it does add /sbin to the PATH.
Still no luck, though.

$ ssh brcmstb 'cat .profile'
PATH=/bin:/usr/bin:/sbin:/usr/sbin

Of course it works if you specify the full path.

$ ssh brcmstb /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:10:18:DD:33:10
          inet addr:192.168.15.8  Bcast:192.168.15.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:364 errors:0 dropped:0 overruns:0 frame:0
          TX packets:274 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:65845 (64.3 KiB)  TX bytes:45749 (44.6 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

And when you log in, ".profile" does what you expect it to do. So,
".profile" works for interactive shells, but not for non-interactive
ones.

$ ssh brcmstb
# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin

Hence the idea of allowing a user to modify the DEFAULT_PATH in dropbear itself.

Regards,
-Markus

> Regards,
> Yann E. MORIN.
>
>> Signed-off-by: Markus Mayer <mmayer@broadcom.com>
>> ---
>>
>> Please let me know what you think. Thanks.
>>
>>  package/dropbear/Config.in   | 6 ++++++
>>  package/dropbear/dropbear.mk | 8 ++++++++
>>  2 files changed, 14 insertions(+)
>>
>> diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in
>> index 6700778161ba..d38ecf50834a 100644
>> --- a/package/dropbear/Config.in
>> +++ b/package/dropbear/Config.in
>> @@ -55,4 +55,10 @@ config BR2_PACKAGE_DROPBEAR_LASTLOG
>>         Enable logging of dropbear access to lastlog. Notice that
>>         Buildroot does not generate lastlog by default.
>>
>> +config BR2_PACKAGE_DROPBEAR_PATH
>> +     string "dropbear default path"
>> +     help
>> +       Use the path specified here as dropbear's default path.
>> +       If not specified, dropbear will use "/usr/bin:/bin".
>> +
>>  endif
>> diff --git a/package/dropbear/dropbear.mk b/package/dropbear/dropbear.mk
>> index 01a1a07b7696..ddbedf3bce93 100644
>> --- a/package/dropbear/dropbear.mk
>> +++ b/package/dropbear/dropbear.mk
>> @@ -51,6 +51,14 @@ define DROPBEAR_DISABLE_STANDALONE
>>       $(SED) 's:\(#define NON_INETD_MODE\):/*\1 */:' $(@D)/options.h
>>  endef
>>
>> +ifneq ($(BR2_PACKAGE_DROPBEAR_PATH),"")
>> +define DROPBEAR_CUSTOM_PATH
>> +     $(SED) 's|^\(#define DEFAULT_PATH\).*|\1 $(BR2_PACKAGE_DROPBEAR_PATH)|' $(@D)/options.h
>> +endef
>> +
>> +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH
>> +endif
>> +
>>  define DROPBEAR_INSTALL_INIT_SYSTEMD
>>       $(INSTALL) -D -m 644 package/dropbear/dropbear.service \
>>               $(TARGET_DIR)/usr/lib/systemd/system/dropbear.service
>> --
>> 2.7.4
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot@busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
Christopher McCrory March 9, 2018, 12:34 a.m. UTC | #3
On Mar 8, 2018 2:29 PM, "Markus Mayer" <mmayer@broadcom.com> wrote:

On 8 March 2018 at 13:48, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Markus, All,
>
> On 2018-03-08 13:44 -0800, Markus Mayer spake thusly:
>> Make the default PATH dropbear is using configurable.
>>
>> If not specified, it will continue to default to dropbear's
>> DEFAULT_PATH.
>
> Isn't it better to jut let the user provide a ~/.profile file which
> actually sets the PATH?

That's certainly one way to do it and one can still choose to do that
for when it works.

Where we have found it helpful to change the default is for
non-interactive shells, i.e. running a command via ssh without logging
in first. If you try to do "ssh eval-board ifconfig" it'll fail,
because /sbin isn't in the path. And .profile doesn't help you.

There's an example:

$ ssh brcmstb ifconfig
sh: ifconfig: command not found

No surprise, because /sbin isn't in the PATH.

$ ssh brcmstb 'echo $PATH'
/usr/bin:/bin

But hold on. ".profile" does exist and it does add /sbin to the PATH.
Still no luck, though.

$ ssh brcmstb 'cat .profile'
PATH=/bin:/usr/bin:/sbin:/usr/sbin

Of course it works if you specify the full path.

$ ssh brcmstb /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:10:18:DD:33:10
          inet addr:192.168.15.8  Bcast:192.168.15.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:364 errors:0 dropped:0 overruns:0 frame:0
          TX packets:274 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:65845 (64.3 KiB)  TX bytes:45749 (44.6 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

And when you log in, ".profile" does what you expect it to do. So,
".profile" works for interactive shells, but not for non-interactive
ones.

$ ssh brcmstb
# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin




ssh -t $host echo $PATH






Hence the idea of allowing a user to modify the DEFAULT_PATH in dropbear
itself.

Regards,
-Markus

> Regards,
> Yann E. MORIN.
>
>> Signed-off-by: Markus Mayer <mmayer@broadcom.com>
>> ---
>>
>> Please let me know what you think. Thanks.
>>
>>  package/dropbear/Config.in   | 6 ++++++
>>  package/dropbear/dropbear.mk | 8 ++++++++
>>  2 files changed, 14 insertions(+)
>>
>> diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in
>> index 6700778161ba..d38ecf50834a 100644
>> --- a/package/dropbear/Config.in
>> +++ b/package/dropbear/Config.in
>> @@ -55,4 +55,10 @@ config BR2_PACKAGE_DROPBEAR_LASTLOG
>>         Enable logging of dropbear access to lastlog. Notice that
>>         Buildroot does not generate lastlog by default.
>>
>> +config BR2_PACKAGE_DROPBEAR_PATH
>> +     string "dropbear default path"
>> +     help
>> +       Use the path specified here as dropbear's default path.
>> +       If not specified, dropbear will use "/usr/bin:/bin".
>> +
>>  endif
>> diff --git a/package/dropbear/dropbear.mk b/package/dropbear/dropbear.mk
>> index 01a1a07b7696..ddbedf3bce93 100644
>> --- a/package/dropbear/dropbear.mk
>> +++ b/package/dropbear/dropbear.mk
>> @@ -51,6 +51,14 @@ define DROPBEAR_DISABLE_STANDALONE
>>       $(SED) 's:\(#define NON_INETD_MODE\):/*\1 */:' $(@D)/options.h
>>  endef
>>
>> +ifneq ($(BR2_PACKAGE_DROPBEAR_PATH),"")
>> +define DROPBEAR_CUSTOM_PATH
>> +     $(SED) 's|^\(#define DEFAULT_PATH\).*|\1
$(BR2_PACKAGE_DROPBEAR_PATH)|' $(@D)/options.h
>> +endef
>> +
>> +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH
>> +endif
>> +
>>  define DROPBEAR_INSTALL_INIT_SYSTEMD
>>       $(INSTALL) -D -m 644 package/dropbear/dropbear.service \
>>               $(TARGET_DIR)/usr/lib/systemd/system/dropbear.service
>> --
>> 2.7.4
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot@busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
>
> --
> .-----------------.--------------------.------------------.-
-------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics'
conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___
     |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There
is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v
 conspiracy.  |
> '------------------------------^-------^------------------^-
-------------------'
Nicolas Cavallari March 9, 2018, 9:04 a.m. UTC | #4
On 08/03/2018 22:44, Markus Mayer wrote:
> Make the default PATH dropbear is using configurable.
> 
> If not specified, it will continue to default to dropbear's
> DEFAULT_PATH.
> 
> Signed-off-by: Markus Mayer <mmayer@broadcom.com>
> ---
> 
> Please let me know what you think. Thanks.
> 
>  package/dropbear/Config.in   | 6 ++++++
>  package/dropbear/dropbear.mk | 8 ++++++++
>  2 files changed, 14 insertions(+)
> 
> diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in
> index 6700778161ba..d38ecf50834a 100644
> --- a/package/dropbear/Config.in
> +++ b/package/dropbear/Config.in
> @@ -55,4 +55,10 @@ config BR2_PACKAGE_DROPBEAR_LASTLOG
>  	  Enable logging of dropbear access to lastlog. Notice that
>  	  Buildroot does not generate lastlog by default.
>  
> +config BR2_PACKAGE_DROPBEAR_PATH
> +	string "dropbear default path"
> +	help
> +	  Use the path specified here as dropbear's default path.
> +	  If not specified, dropbear will use "/usr/bin:/bin".
> +
>  endif
> diff --git a/package/dropbear/dropbear.mk b/package/dropbear/dropbear.mk
> index 01a1a07b7696..ddbedf3bce93 100644
> --- a/package/dropbear/dropbear.mk
> +++ b/package/dropbear/dropbear.mk
> @@ -51,6 +51,14 @@ define DROPBEAR_DISABLE_STANDALONE
>  	$(SED) 's:\(#define NON_INETD_MODE\):/*\1 */:' $(@D)/options.h
>  endef
>  
> +ifneq ($(BR2_PACKAGE_DROPBEAR_PATH),"")
> +define DROPBEAR_CUSTOM_PATH
> +	$(SED) 's|^\(#define DEFAULT_PATH\).*|\1 $(BR2_PACKAGE_DROPBEAR_PATH)|' $(@D)/options.h
> +endef

You should probably protect this regex a bit more.  It could overwrite
a future macro beginning with DEFAULT_PATH, or it could stop working
if someone add spaces between #define and DEFAULT_PATH.  Such future
bugs could stay unnoticed if the compilation does not fail.

Alternatively, you could append an #undef and #define at the end of
the file, so that #undef can fails if DEFAULT_PATH does not exist anymore.

BTW, you probably know that ifconfig is deprecated, and the
replacement is 'ip a' from busybox or iproute2, which is inside /bin
Christopher McCrory March 9, 2018, 5:10 p.m. UTC | #5
On Thu, Mar 8, 2018 at 4:34 PM, Christopher McCrory <chrismcc@gmail.com>
wrote:

<snip>



>
> $ ssh brcmstb
> # echo $PATH
> /bin:/usr/bin:/sbin:/usr/sbin
>
>
>
>
> ssh -t $host echo $PATH
>
>
I thought that would work (forcing a term), but it doesn't


This will do what you want on your local project

$ cat output/local.mk
DROPBEAR_CONF_OPTS += --enable-foo=bar

define DROPBEAR_CUSTOM_PATH
$(SED) 's|^\(#define DEFAULT_PATH\).*|\1
"/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"|'
$(@D)/options.h
endef

DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH
Markus Mayer March 9, 2018, 9:29 p.m. UTC | #6
On 9 March 2018 at 09:10, Christopher McCrory <chrismcc@gmail.com> wrote:
>
> On Thu, Mar 8, 2018 at 4:34 PM, Christopher McCrory <chrismcc@gmail.com>
> wrote:
>
> <snip>
>
>>
>> $ ssh brcmstb
>> # echo $PATH
>> /bin:/usr/bin:/sbin:/usr/sbin
>>
>>
>> ssh -t $host echo $PATH
>>
>
> I thought that would work (forcing a term), but it doesn't
>
> This will do what you want on your local project
>
> $ cat output/local.mk
> DROPBEAR_CONF_OPTS += --enable-foo=bar
>
> define DROPBEAR_CUSTOM_PATH
> $(SED) 's|^\(#define DEFAULT_PATH\).*|\1
> "/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"|'
> $(@D)/options.h
> endef
>
> DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH

If nobody else wants to make use of this feature, we can certainly
stick it in local.mk. I figured it might be beneficial to others, as
well.

I'll create a version with a safer regexp as suggested by Nicolas, and
then I'll let the maintainers decide if this is worthwhile or not.

Regards,
-Markus

> --
> Christopher McCrory
> To the optimist, the glass is half full.
> To the pessimist, the glass is half empty.
> To the engineer, the glass is twice as big as it needs to be.
diff mbox series

Patch

diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in
index 6700778161ba..d38ecf50834a 100644
--- a/package/dropbear/Config.in
+++ b/package/dropbear/Config.in
@@ -55,4 +55,10 @@  config BR2_PACKAGE_DROPBEAR_LASTLOG
 	  Enable logging of dropbear access to lastlog. Notice that
 	  Buildroot does not generate lastlog by default.
 
+config BR2_PACKAGE_DROPBEAR_PATH
+	string "dropbear default path"
+	help
+	  Use the path specified here as dropbear's default path.
+	  If not specified, dropbear will use "/usr/bin:/bin".
+
 endif
diff --git a/package/dropbear/dropbear.mk b/package/dropbear/dropbear.mk
index 01a1a07b7696..ddbedf3bce93 100644
--- a/package/dropbear/dropbear.mk
+++ b/package/dropbear/dropbear.mk
@@ -51,6 +51,14 @@  define DROPBEAR_DISABLE_STANDALONE
 	$(SED) 's:\(#define NON_INETD_MODE\):/*\1 */:' $(@D)/options.h
 endef
 
+ifneq ($(BR2_PACKAGE_DROPBEAR_PATH),"")
+define DROPBEAR_CUSTOM_PATH
+	$(SED) 's|^\(#define DEFAULT_PATH\).*|\1 $(BR2_PACKAGE_DROPBEAR_PATH)|' $(@D)/options.h
+endef
+
+DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH
+endif
+
 define DROPBEAR_INSTALL_INIT_SYSTEMD
 	$(INSTALL) -D -m 644 package/dropbear/dropbear.service \
 		$(TARGET_DIR)/usr/lib/systemd/system/dropbear.service