Don't bother with diffs to b_sock.c.  Instead, if you have code
which uses it, talk to krw.

There is a monster diff coming which rewrites it all.

And by the way, all that code disapears and is replaced by 2 lines.

> Not sure this is sensible as it encourages people to simply
> update the table.
> 
> I was inclined to remove the code entirely but I am not sure
> what broken systems might rely on this.
> 
> Only build tested.
> 
> Thoughts?
> 
> Index: b_sock.c
> ===================================================================
> RCS file: /cvs/src/lib/libssl/src/crypto/bio/b_sock.c,v
> retrieving revision 1.33
> diff -u -p -r1.33 b_sock.c
> --- b_sock.c  26 Apr 2014 18:56:37 -0000      1.33
> +++ b_sock.c  29 Apr 2014 13:55:39 -0000
> @@ -140,6 +140,19 @@ BIO_get_port(const char *str, unsigned s
>  {
>       int i;
>       struct servent *s;
> +     size_t len;
> +     struct {
> +             const char *name;
> +             int port;
> +     } servmap[] = {
> +             { "http",   80   },
> +             { "telnet", 23   },
> +             { "socks",  1080 },
> +             { "https",  443  },
> +             { "ssl",    443  },
> +             { "ftp",    21   },
> +             { "gopher", 70   }
> +     };
>  
>       if (str == NULL) {
>               BIOerr(BIO_F_BIO_GET_PORT, BIO_R_NO_PORT_DEFINED);
> @@ -155,21 +168,14 @@ BIO_get_port(const char *str, unsigned s
>                       *port_ptr = ntohs((unsigned short)s->s_port);
>               CRYPTO_w_unlock(CRYPTO_LOCK_GETSERVBYNAME);
>               if (s == NULL) {
> -                     if (strcmp(str, "http") == 0)
> -                             *port_ptr = 80;
> -                     else if (strcmp(str, "telnet") == 0)
> -                             *port_ptr = 23;
> -                     else if (strcmp(str, "socks") == 0)
> -                             *port_ptr = 1080;
> -                     else if (strcmp(str, "https") == 0)
> -                             *port_ptr = 443;
> -                     else if (strcmp(str, "ssl") == 0)
> -                             *port_ptr = 443;
> -                     else if (strcmp(str, "ftp") == 0)
> -                             *port_ptr = 21;
> -                     else if (strcmp(str, "gopher") == 0)
> -                             *port_ptr = 70;
> -                     else {
> +                     len = sizeof(servmap) / sizeof(servmap[0]);
> +                     for (i = 0; i < len; i++) {
> +                             if (strcmp(str, servmap[i].name) == 0) {
> +                                     *port_ptr = servmap[i].port;
> +                                     break;
> +                             }
> +                     }
> +                     if (i == len) {
>                               SYSerr(SYS_F_GETSERVBYNAME, errno);
>                               ERR_asprintf_error_data("service='%s'", str);
>                               return (0);
> 

Reply via email to