Michael McConville wrote:
> Theo de Raadt wrote:
> > Please KNF.
> > 
> >     case 90:
> >             return "Succeeded";
> >     case 91:
> > 
> > etc.
> 
> New diff:

Thoughts, anyone?

> Index: socks.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/nc/socks.c,v
> retrieving revision 1.21
> diff -u -p -r1.21 socks.c
> --- socks.c   26 Mar 2015 21:19:51 -0000      1.21
> +++ socks.c   1 Dec 2015 02:59:57 -0000
> @@ -122,6 +122,58 @@ getproxypass(const char *proxyuser, cons
>       return (pw);
>  }
>  
> +/*
> + * Error strings adapted from the generally accepted SOCKSv4 spec:
> + *
> + * http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol
> + */
> +static const char *
> +socks4_strerror(int e)
> +{
> +     switch (e) {
> +     case 90:
> +             return "Succeeded";
> +     case 91:
> +             return "Request rejected or failed";
> +     case 92:
> +             return "SOCKS server cannot connect to identd on the client";
> +     case 93:
> +             return "Client program and identd report different user-ids";
> +     default:
> +             return "Unknown error";
> +     }
> +}
> +
> +/*
> + * Error strings taken almost directly from RFC 1928.
> + */
> +static const char *
> +socks5_strerror(int e)
> +{
> +     switch (e) {
> +     case 0:
> +             return "Succeeded";
> +     case 1:
> +             return "General SOCKS server failure";
> +     case 2:
> +             return "Connection not allowed by ruleset";
> +     case 3:
> +             return "Network unreachable";
> +     case 4:
> +             return "Host unreachable";
> +     case 5:
> +             return "Connection refused";
> +     case 6:
> +             return "TTL expired";
> +     case 7:
> +             return "Command not supported";
> +     case 8:
> +             return "Address type not supported";
> +     default:
> +             return "Unknown error";
> +     }
> +}
> +
>  int
>  socks_connect(const char *host, const char *port,
>      struct addrinfo hints __attribute__ ((__unused__)),
> @@ -225,8 +277,10 @@ socks_connect(const char *host, const ch
>               cnt = atomicio(read, proxyfd, buf, 4);
>               if (cnt != 4)
>                       err(1, "read failed (%zu/4)", cnt);
> -             if (buf[1] != 0)
> -                     errx(1, "connection failed, SOCKS error %d", buf[1]);
> +             if (buf[1] != 0) {
> +                     errx(1, "connection failed, SOCKS error: %s",
> +                         socks5_strerror(buf[1]));
> +             }
>               switch (buf[3]) {
>               case SOCKS_IPV4:
>                       cnt = atomicio(read, proxyfd, buf + 4, 6);
> @@ -261,8 +315,10 @@ socks_connect(const char *host, const ch
>               cnt = atomicio(read, proxyfd, buf, 8);
>               if (cnt != 8)
>                       err(1, "read failed (%zu/8)", cnt);
> -             if (buf[1] != 90)
> -                     errx(1, "connection failed, SOCKS error %d", buf[1]);
> +             if (buf[1] != 90) {
> +                     errx(1, "connection failed, SOCKS error: %s",
> +                         socks4_strerror(buf[1]));
> +             }
>       } else if (socksv == -1) {
>               /* HTTP proxy CONNECT */
>  
> 

Reply via email to