Applied, thank you

On Wed, Aug 25, 2021 at 10:14 PM Sergey Ponomarev <[email protected]> wrote:
>
> BusyBox on Termux can't use ports less than 1024 it's patched to change 
> default port for httpd to 8080 and telnetd to 8023.
>
> https://github.com/termux/termux-packages/blob/master/packages/busybox/0011-networking-telnetd-default-port.patch
> https://github.com/termux/termux-packages/blob/master/packages/busybox/0010-networking-httpd-default-port.patch
>
> To avoid such patches we can make port configurable.
> The macros STR(s) is copied from ftpd.c and it's needed to convert int to 
> string.
>
> For httpd.c made a refactoring of openServer():
> * bind_addr_or_port is not preset with "80" and user not specified -p then it 
> will remain a NULL
> * Extracted variable fd instead of reusing n var
> * 0xffff replaced with 65535 as it done in other places
>
> function                                             old     new   delta
> httpd_main                                           668     677      +9
> packed_usage                                        2699    2701      +2
> .rodata                                            11051   11048      -3
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 2/1 up/down: 11/-3)               Total: 8 bytes
>    text    data     bss     dec     hex filename
>  186936    4027   69256  260219   3f87b busybox_old
>  186944    4027   69256  260227   3f883 busybox_unstripped
>
> Signed-off-by: Sergey Ponomarev <[email protected]>
> ---
>  networking/httpd.c   | 31 ++++++++++++++++++++++---------
>  networking/telnetd.c | 16 ++++++++++++++--
>  2 files changed, 36 insertions(+), 11 deletions(-)
>
> diff --git a/networking/httpd.c b/networking/httpd.c
> index 568b5f72b..aff8f994e 100644
> --- a/networking/httpd.c
> +++ b/networking/httpd.c
> @@ -102,6 +102,13 @@
>  //config:      help
>  //config:      HTTP server.
>  //config:
> +//config:config HTTPD_PORT_DEFAULT
> +//config:      int "Default port"
> +//config:      default 80
> +//config:      range 1 65535
> +//config:      help
> +//config:      Port to listen on
> +//config:
>  //config:config FEATURE_HTTPD_RANGES
>  //config:      bool "Support 'Ranges:' header"
>  //config:      default y
> @@ -257,6 +264,8 @@
>
>  //kbuild:lib-$(CONFIG_HTTPD) += httpd.o
>
> +//usage:#define STR1(s) #s
> +//usage:#define STR(s) STR1(s)
>  //usage:#define httpd_trivial_usage
>  //usage:       "[-ifv[v]]"
>  //usage:       " [-c CONFFILE]"
> @@ -270,7 +279,7 @@
>  //usage:     "\n       -i              Inetd mode"
>  //usage:     "\n       -f              Don't daemonize"
>  //usage:     "\n       -v[v]           Verbose"
> -//usage:     "\n       -p [IP:]PORT    Bind to IP:PORT (default *:80)"
> +//usage:     "\n       -p [IP:]PORT    Bind to IP:PORT. Default " 
> STR(CONFIG_HTTPD_PORT_DEFAULT)
>  //usage:       IF_FEATURE_HTTPD_SETUID(
>  //usage:     "\n       -u USER[:GRP]   Set uid/gid after binding to port")
>  //usage:       IF_FEATURE_HTTPD_BASIC_AUTH(
> @@ -542,7 +551,7 @@ enum {
>         SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
>         IF_FEATURE_HTTPD_BASIC_AUTH(g_realm = "Web Server Authentication";) \
>         IF_FEATURE_HTTPD_RANGES(range_start = -1;) \
> -       bind_addr_or_port = "80"; \
> +       bind_addr_or_port = NULL; \
>         index_page = index_html; \
>         file_size = -1; \
>  } while (0)
> @@ -1030,13 +1039,17 @@ static void decodeBase64(char *data)
>   */
>  static int openServer(void)
>  {
> -       unsigned n = bb_strtou(bind_addr_or_port, NULL, 10);
> -       if (!errno && n && n <= 0xffff)
> -               n = create_and_bind_stream_or_die(NULL, n);
> -       else
> -               n = create_and_bind_stream_or_die(bind_addr_or_port, 80);
> -       xlisten(n, 9);
> -       return n;
> +       int fd;
> +       if (bind_addr_or_port != NULL) {
> +               unsigned port = bb_strtou(bind_addr_or_port, NULL, 10);
> +               if (!errno && port && port <= 65535) // PORT
> +                       fd = create_and_bind_stream_or_die(NULL, port);
> +               else // IP:PORT
> +                       fd = create_and_bind_stream_or_die(bind_addr_or_port, 
> CONFIG_HTTPD_PORT_DEFAULT);
> +       } else // Nothing specified, use default port
> +               fd = create_and_bind_stream_or_die(NULL, 
> CONFIG_HTTPD_PORT_DEFAULT);
> +       xlisten(fd, 9);
> +       return fd;
>  }
>
>  /*
> diff --git a/networking/telnetd.c b/networking/telnetd.c
> index de4d733f9..af83ba3d4 100644
> --- a/networking/telnetd.c
> +++ b/networking/telnetd.c
> @@ -68,6 +68,14 @@
>  //config:      help
>  //config:      Selecting this will make telnetd able to run standalone.
>  //config:
> +//config:config TELNETD_PORT_DEFAULT
> +//config:      int "Default port"
> +//config:      default "23"
> +//config:      range 1 65535
> +//config:      depends on FEATURE_TELNETD_STANDALONE
> +//config:      help
> +//config:      Port to listen on
> +//config:
>  //config:config FEATURE_TELNETD_INETD_WAIT
>  //config:      bool "Support -w SEC option (inetd wait mode)"
>  //config:      default y
> @@ -93,6 +101,8 @@
>
>  //kbuild:lib-$(CONFIG_TELNETD) += telnetd.o
>
> +//usage:#define STR1(s) #s
> +//usage:#define STR(s) STR1(s)
>  //usage:#define telnetd_trivial_usage
>  //usage:       "[OPTIONS]"
>  //usage:#define telnetd_full_usage "\n\n"
> @@ -103,7 +113,7 @@
>  //usage:     "\n       -K              Close connection as soon as login 
> exits"
>  //usage:     "\n                       (normally wait until all programs 
> close slave pty)"
>  //usage:       IF_FEATURE_TELNETD_STANDALONE(
> -//usage:     "\n       -p PORT         Port to listen on"
> +//usage:     "\n       -p PORT         Port to listen on. Default " 
> STR(CONFIG_TELNETD_PORT_DEFAULT)
>  //usage:     "\n       -b ADDR[:PORT]  Address to bind to"
>  //usage:     "\n       -F              Run in foreground"
>  //usage:     "\n       -i              Inetd mode"
> @@ -708,9 +718,11 @@ int telnetd_main(int argc UNUSED_PARAM, char **argv)
>         } else {
>                 master_fd = 0;
>                 if (!(opt & OPT_WAIT)) {
> -                       unsigned portnbr = 23;
> +                       unsigned portnbr;
>                         if (opt & OPT_PORT)
>                                 portnbr = xatou16(opt_portnbr);
> +                       else
> +                               portnbr = CONFIG_TELNETD_PORT_DEFAULT;
>                         master_fd = 
> create_and_bind_stream_or_die(opt_bindaddr, portnbr);
>                         xlisten(master_fd, 1);
>                 }
> --
> 2.30.2
>
> _______________________________________________
> busybox mailing list
> [email protected]
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to