diff --git a/src/common.c b/src/common.c index 70dfc38..fdf586a 100644 --- a/src/common.c +++ b/src/common.c @@ -618,12 +618,22 @@ int doconnect(struct clientparam * param){ if(!*SAPORT(¶m->sinsr))*SAPORT(¶m->sinsr) = *SAPORT(¶m->req); if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsr), SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {return (11);} so._setsockopt(param->remsock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg)); - if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 + if(*SAFAMILY(¶m->sinsr) == AF_INET) +#endif + memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); +#endif if (param->srv->targetport && !*SAPORT(¶m->sinsl) && ntohs(*SAPORT(¶m->sincr)) > 1023) *SAPORT(¶m->sinsl) = *SAPORT(¶m->sincr); if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { - if(*SAFAMILY(¶m->sinsr) == AF_INET) memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 + if(*SAFAMILY(¶m->sinsr) == AF_INET) +#endif + memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); +#ifndef NOIPV6 else memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); +#endif if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, sizeof(param->sinsl))==-1) { return 12; } diff --git a/src/datatypes.c b/src/datatypes.c index 75c6279..19364c5 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -568,9 +568,11 @@ static void * ef_server_extsa(struct node * node){ return &((struct srvparam *)node->value) -> extsa; } +#ifndef NOIPV6 static void * ef_server_extsa6(struct node * node){ return &((struct srvparam *)node->value) -> extsa6; } +#endif static void * ef_server_acl(struct node * node){ return ((struct srvparam *)node->value) -> acl; @@ -747,18 +749,20 @@ static struct property prop_server[] = { {prop_server + 4, "starttime", ef_server_starttime, TYPE_DATETIME, "service started seconds"}, {prop_server + 5, "intsa", ef_server_intsa, TYPE_SA, "ip address of internal interface"}, {prop_server + 6, "extsa", ef_server_extsa, TYPE_SA, "ip address of external interface"}, + {prop_server + 7, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, + {prop_server + 8, "acl", ef_server_acl, TYPE_ACE, "access control list"}, + {prop_server + 9, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, + {prop_server + 10, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"}, + {prop_server + 11, "log", ef_server_log, TYPE_STRING, "type of logging"}, + {prop_server + 12, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"}, + {prop_server + 13, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"}, + {prop_server + 14, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"}, + {prop_server + 15, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"}, + {prop_server + 16, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, + {prop_server + 17, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, +#ifndef NOIPV6 {prop_server + 7, "extsa6", ef_server_extsa6, TYPE_SA, "ipv6 address of external interface"}, - {prop_server + 8, "auth", ef_server_auth, TYPE_STRING, "service authentication type"}, - {prop_server + 9, "acl", ef_server_acl, TYPE_ACE, "access control list"}, - {prop_server + 10, "singlepacket", ef_server_singlepacket, TYPE_INTEGER, "is single packet redirection"}, - {prop_server + 11, "usentlm", ef_server_usentlm, TYPE_INTEGER, "allow NTLM authentication"}, - {prop_server + 12, "log", ef_server_log, TYPE_STRING, "type of logging"}, - {prop_server + 13, "logtarget", ef_server_logtarget, TYPE_STRING, "log target options"}, - {prop_server + 14, "logformat", ef_server_logformat, TYPE_STRING, "logging format string"}, - {prop_server + 15, "nonprintable", ef_server_nonprintable, TYPE_STRING, "non printable characters"}, - {prop_server + 16, "replacement", ef_server_replacement, TYPE_CHAR, "replacement character"}, - {prop_server + 17, "childcount", ef_server_childcount, TYPE_INTEGER, "number of servers connected"}, - {prop_server + 18, "child", ef_server_child, TYPE_CLIENT, "connected clients"}, +#endif {NULL, "next", ef_server_next, TYPE_SERVER, "next"} }; diff --git a/src/proxymain.c b/src/proxymain.c index b903654..fb87e6f 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -579,7 +579,11 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ } if(srv->logtarget) srv->logtarget = (unsigned char *)mystrdup((char *)srv->logtarget); memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); +#ifndef NOIPV6 memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl)); +#else + memcpy(¶m->sinsr, &srv->extsa, sizeof(param->sinsl)); +#endif } void srvfree(struct srvparam * srv){ diff --git a/src/socks.c b/src/socks.c index e8aa81e..928f494 100644 --- a/src/socks.c +++ b/src/socks.c @@ -153,8 +153,12 @@ void * sockschild(struct clientparam* param) { break; case 2: case 3: - + +#ifndef NOIPV6 memcpy(¶m->sinsl, *SAFAMILY(¶m->req)==AF_INET6? (struct sockaddr *)¶m->srv->extsa6:(struct sockaddr *)¶m->srv->extsa, SASIZE(¶m->req)); +#else + memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); +#endif if(!*SAPORT(¶m->sinsl))*SAPORT(¶m->sinsl) = port; if ((param->remsock=so._socket(*SAFAMILY(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} param->operation = command == 2?BIND:UDPASSOC; diff --git a/src/udppm.c b/src/udppm.c index 4a609fb..0d3ef9b 100644 --- a/src/udppm.c +++ b/src/udppm.c @@ -71,7 +71,11 @@ void * udppmchild(struct clientparam* param) { param->clisock = param->srv->srvsock; #endif +#ifndef NOIPV6 memcpy(¶m->sinsl, *SAFAMILY(¶m->req) == AF_INET? (struct sockaddr *)¶m->srv->extsa : (struct sockaddr *)¶m->srv->extsa6, SASIZE(¶m->req)); +#else + memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); +#endif *SAPORT(¶m->sinsl) = 0; if ((param->remsock=so._socket(*SAFAMILY(¶m->sinsl), SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,sizeof(param->sinsl))) {RETURN (12);} diff --git a/src/version.h b/src/version.h index 0bc5479..17afac9 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ #define VERSION "3proxy-0.8b-devel" -#define BUILDDATE "141109205515" +#define BUILDDATE "141109215219"