-const char gateway_rcs[] = "$Id: gateway.c,v 1.8 2001/09/13 20:10:12 jongfoster Exp $";
+const char gateway_rcs[] = "$Id: gateway.c,v 1.10 2002/03/07 03:50:19 oes Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/gateway.c,v $
*
* Revisions :
* $Log: gateway.c,v $
+ * Revision 1.10 2002/03/07 03:50:19 oes
+ * - Improved handling of failed DNS lookups
+ * - Fixed compiler warnings
+ *
+ * Revision 1.9 2001/10/25 03:40:48 david__schmidt
+ * Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple
+ * threads to call select() simultaneously. So, it's time to do a real, live,
+ * native OS/2 port. See defines for __EMX__ (the porting layer) vs. __OS2__
+ * (native). Both versions will work, but using __OS2__ offers multi-threading.
+ *
* Revision 1.8 2001/09/13 20:10:12 jongfoster
* Fixing missing #include under Windows
*
struct client_state *csp)
{
int web_server_addr;
- unsigned char cbuf[BUFFER_SIZE];
- unsigned char sbuf[BUFFER_SIZE];
+ char cbuf[BUFFER_SIZE];
+ char sbuf[BUFFER_SIZE];
struct socks_op *c = (struct socks_op *)cbuf;
struct socks_reply *s = (struct socks_reply *)sbuf;
- int n;
- int csiz;
+ size_t n;
+ size_t csiz;
int sfd;
int err = 0;
char *errstr;
{
case SOCKS_4:
web_server_addr = htonl(resolve_hostname_to_ip(target_host));
+ if (web_server_addr == INADDR_NONE)
+ {
+ log_error(LOG_LEVEL_CONNECT, "socks4_connect: could not resolve target host %s", target_host);
+ return(-1);
+ }
break;
case SOCKS_4A:
web_server_addr = 0x00000001;
errno = EINVAL;
return(-1);
}
- strcpy(((char *)cbuf) + csiz, target_host);
+ strcpy(cbuf + csiz, target_host);
csiz = n;
break;
default:
return(-1);
}
- if ((n = write_socket(sfd, (char *)c, csiz)) != csiz)
+ if (write_socket(sfd, (char *)c, csiz) != csiz)
{
log_error(LOG_LEVEL_CONNECT, "SOCKS4 negotiation write failed...");
close_socket(sfd);
return(-1);
}
- if ((n = read_socket(sfd, sbuf, sizeof(sbuf))) != sizeof(*s))
+ if (read_socket(sfd, sbuf, sizeof(sbuf)) != sizeof(*s))
{
log_error(LOG_LEVEL_CONNECT, "SOCKS4 negotiation read failed...");
close_socket(sfd);
errno = EACCES;
break;
default:
- errstr = (char *) cbuf;
+ errstr = cbuf;
errno = ENOENT;
sprintf(errstr,
"SOCKS request rejected for reason code %d\n", s->cd);