diff --git a/src/3proxy.c b/src/3proxy.c index 30a1320..4a5eb70 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -139,7 +139,7 @@ int timechanged (time_t oldtime, time_t newtime, ROTATION lt){ struct tm tmold; struct tm *tm; tm = localtime(&oldtime); - memcpy(&tmold, tm, sizeof(tmold)); + tmold = *tm; tm = localtime(&newtime); switch(lt){ case MINUTELY: diff --git a/src/auth.c b/src/auth.c index 55bde6a..97f2673 100644 --- a/src/auth.c +++ b/src/auth.c @@ -242,7 +242,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } if(!connected){ if(cur->type == R_EXTIP){ - memcpy(¶m->sinsl, &cur->addr, sizeof(cur->addr)); + param->sinsl = cur->addr; } else if(SAISNULL(&cur->addr) && !*SAPORT(&cur->addr)){ if(cur->extuser){ @@ -280,12 +280,12 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ } else if(!*SAPORT(&cur->addr) && !SAISNULL(&cur->addr)) { unsigned short port = *SAPORT(¶m->sinsr); - memcpy(¶m->sinsr, &cur->addr, SASIZE(&cur->addr)); + param->sinsr = cur->addr; *SAPORT(¶m->sinsr) = port; } else if(SAISNULL(&cur->addr) && *SAPORT(&cur->addr)) *SAPORT(¶m->sinsr) = *SAPORT(&cur->addr); else { - memcpy(¶m->sinsr, &cur->addr, SASIZE(&cur->addr)); + param->sinsr = cur->addr; } if((res = alwaysauth(param))){ @@ -609,7 +609,7 @@ int checkACL(struct clientparam * param){ if(param->redirected && acentry->chains && SAISNULL(&acentry->chains->addr) && !*SAPORT(&acentry->chains->addr)) { continue; } - memcpy(&dup, acentry, sizeof(struct ace)); + dup = *acentry; return handleredirect(param, &dup); } return acentry->action; @@ -700,7 +700,7 @@ int doauth(struct clientparam * param){ ac->password = mystrdup(param->password); myfree(tmp); } - memcpy(&ac->sa, ¶m->sincr, SASIZE(¶m->sincr)); + ac->sa = param->sincr; break; } } @@ -709,7 +709,7 @@ int doauth(struct clientparam * param){ if(ac){ ac->expires = conf.time + conf.authcachetime; ac->username = mystrdup(param->username); - memcpy(&ac->sa, ¶m->sincr, SASIZE(¶m->sincr)); + ac->sa = param->sincr; ac->password = NULL; if((conf.authcachetype&4) && param->password) ac->password = mystrdup(param->password); } @@ -1038,17 +1038,18 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un unsigned ttl; #ifndef NOIPV6 struct sockaddr_in6 addr; + struct sockaddr_in6 *sinsr, *sinsl; #else struct sockaddr_in addr; + struct sockaddr_in *sinsr, *sinsl; #endif - struct sockaddr *sinsr, *sinsl; int usetcp = 0; unsigned short serial = 1; buf = b+2; - sinsl = (param && !makeauth)? (struct sockaddr *)¶m->sinsl : (struct sockaddr *)&addr; - sinsr = (param && !makeauth)? (struct sockaddr *)¶m->sinsr : (struct sockaddr *)&addr; + sinsl = (param && !makeauth)? ¶m->sinsl : &addr; + sinsr = (param && !makeauth)? ¶m->sinsr : &addr; memset(sinsl, 0, sizeof(addr)); memset(sinsr, 0, sizeof(addr)); @@ -1062,19 +1063,19 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un *SAFAMILY(sinsl) = *SAFAMILY(&nservers[i].addr); } if((sock=so._socket(SASOCK(sinsl), usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break; - if(so._bind(sock,sinsl,SASIZE(sinsl))){ + if(so._bind(sock,(struct sockaddr *)sinsl,SASIZE(sinsl))){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); break; } if(makeauth && !SAISNULL(&authnserver.addr)){ - memcpy(sinsr, &authnserver.addr, sizeof(authnserver.addr)); + *sinsr = authnserver.addr; } else { - memcpy(sinsr, &nservers[i].addr, sizeof(nservers[i].addr)); + *sinsr = nservers[i].addr; } if(usetcp){ - if(so._connect(sock,sinsr,SASIZE(sinsr))) { + if(so._connect(sock,(struct sockaddr *)sinsr,SASIZE(sinsr))) { so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); break; @@ -1110,13 +1111,13 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un len+=2; } - if(socksendto(sock, sinsr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ + if(socksendto(sock, (struct sockaddr *)sinsr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){ so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); continue; } if(param) param->statscli64 += len; - len = sockrecvfrom(sock, sinsr, buf, 4096, conf.timeouts[DNS_TO]*1000); + len = sockrecvfrom(sock, (struct sockaddr *)sinsr, buf, 4096, conf.timeouts[DNS_TO]*1000); so._shutdown(sock, SHUT_RDWR); so._closesocket(sock); if(len <= 13) { @@ -1128,7 +1129,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un us = ntohs(*(unsigned short*)buf); len-=2; buf+=2; - if(us > 4096 || us < len || (us > len && sockrecvfrom(sock, sinsr, buf+len, us-len, conf.timeouts[DNS_TO]*1000) != us-len)) { + if(us > 4096 || us < len || (us > len && sockrecvfrom(sock, (struct sockaddr *)sinsr, buf+len, us-len, conf.timeouts[DNS_TO]*1000) != us-len)) { continue; } } diff --git a/src/common.c b/src/common.c index 509dd6a..55aef52 100644 --- a/src/common.c +++ b/src/common.c @@ -676,10 +676,10 @@ int doconnect(struct clientparam * param){ if(SAISNULL(¶m->sinsl)){ #ifndef NOIPV6 - if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); + if(*SAFAMILY(¶m->sinsr) == AF_INET6) param->sinsl = param->srv->extsa6; else #endif - memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); + param->sinsl = param->srv->extsa; *SAPORT(¶m->sinsl) = 0; } if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, SASIZE(¶m->sinsl))==-1) { diff --git a/src/conf.c b/src/conf.c index ec73767..7ef51bf 100644 --- a/src/conf.c +++ b/src/conf.c @@ -274,7 +274,8 @@ static int h_external(int argc, unsigned char ** argv){ memset(&sa6, 0, sizeof(sa6)); res = getip46(46, argv[1], (struct sockaddr *)&sa6); if(!res) return 1; - memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&conf.extsa:(void *)&conf.extsa6, &sa6, sizeof(sa6)); + if (*SAFAMILY(&sa6)==AF_INET) conf.extsa = sa6; + else conf.extsa6 = sa6; #else res = getip46(46, argv[1], (struct sockaddr *)&conf.extsa); if(!res) return 1; diff --git a/src/dnspr.c b/src/dnspr.c index 3e4137e..45d4355 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -138,7 +138,7 @@ void * dnsprchild(struct clientparam* param) { if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,SASIZE(¶m->sinsl))) { RETURN(819); } - memcpy(¶m->sinsr, &nservers[0].addr, sizeof(param->sinsr)); + param->sinsr = nservers[0].addr; if(nservers[0].usetcp) { if(so._connect(param->remsock,(struct sockaddr *)¶m->sinsr,SASIZE(¶m->sinsr))) RETURN(830); buf-=2; diff --git a/src/ftp.c b/src/ftp.c index 734fa93..b776115 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -189,7 +189,7 @@ SOCKET ftpdata(struct clientparam *param){ if(sscanf(sb+1, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) return INVALID_SOCKET; rem = param->remsock; param->remsock = INVALID_SOCKET; - memcpy(¶m->req,¶m->sinsr,sizeof(param->req)); + param->req = param->sinsr; *SAPORT(¶m->req) = *SAPORT(¶m->sinsr) = htons((unsigned short)((b5<<8)^b6)); i = param->operation; param->operation = FTP_DATA; diff --git a/src/proxymain.c b/src/proxymain.c index 080bb88..dfb073d 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -26,7 +26,7 @@ void * threadfunc (void *p) { continue; } #ifndef WITHMAIN - memcpy(¶m->req, ¶m->sinsr, size); + param->req = param->sinsr; if(param->srv->acl) param->res = checkACL(param); if(param->res){ param->srv->logfunc(param, "Connect back ACL failed"); @@ -240,7 +240,10 @@ int MODULEMAINFUNC (int argc, char** argv){ struct sockaddr_in6 sa6; memset(&sa6, 0, sizeof(sa6)); error = !getip46(46, argv[i]+2, (struct sockaddr *)&sa6); - if(!error) memcpy((*SAFAMILY(&sa6)==AF_INET)?(void *)&srv.extsa:(void *)&srv.extsa6, &sa6, sizeof(sa6)); + if(!error) { + if (*SAFAMILY(&sa6)==AF_INET) srv.extsa = sa6; + else srv.extsa6 = sa6; + } #else error = !getip46(46, argv[i]+2, (struct sockaddr *)&srv.extsa); #endif @@ -386,7 +389,7 @@ int MODULEMAINFUNC (int argc, char** argv){ if(! (newparam = myalloc (sizeof(defparam)))){ return 2; }; - memcpy(newparam, &defparam, sizeof(defparam)); + *newparam = defparam; return((*srv.pf)((void *)newparam)? 1:0); } @@ -621,7 +624,7 @@ int MODULEMAINFUNC (int argc, char** argv){ usleep(SLEEPTIME); continue; }; - memcpy(newparam, &defparam, sizeof(defparam)); + *newparam = defparam; if(defparam.hostname)newparam->hostname=strdup(defparam.hostname); clearstat(newparam); if(!isudp) newparam->clisock = new_sock; @@ -721,10 +724,10 @@ void srvinit(struct srvparam * srv, struct clientparam *param){ param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET; *SAFAMILY(¶m->req) = *SAFAMILY(¶m->sinsl) = *SAFAMILY(¶m->sinsr) = *SAFAMILY(¶m->sincr) = *SAFAMILY(¶m->sincl) = AF_INET; pthread_mutex_init(&srv->counter_mutex, NULL); - memcpy(&srv->intsa, &conf.intsa, sizeof(srv->intsa)); - memcpy(&srv->extsa, &conf.extsa, sizeof(srv->extsa)); + srv->intsa = conf.intsa; + srv->extsa = conf.extsa; #ifndef NOIPV6 - memcpy(&srv->extsa6, &conf.extsa6, sizeof(srv->extsa6)); + srv->extsa6 = conf.extsa6; #endif } @@ -748,13 +751,12 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ *SAFAMILY(¶m->sinsl) = AF_INET; *SAFAMILY(¶m->sinsr) = AF_INET; *SAFAMILY(¶m->req) = AF_INET; - memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); - memcpy(¶m->sincl, &srv->intsa, sizeof(param->sincl)); + param->sincr = param->sincl = srv->intsa; #ifndef NOIPV6 - memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsr)); -#else - memcpy(¶m->sinsr, &srv->extsa, sizeof(param->sinsr)); + if (srv->family == 6 || srv->family == 64) param->sinsr = srv->extsa6; + else #endif + param->sinsr = srv->extsa; } void srvfree(struct srvparam * srv){ @@ -911,7 +913,7 @@ void copyfilter (struct filter *filter, struct srvparam *srv){ if(!filter->filter_open || !(data = (*filter->filter_open)(filter->data, srv))) continue; - memcpy(srv->filter + srv->nfilters, filter, sizeof(struct filter)); + srv->filter[srv->nfilters] = *filter; srv->filter[srv->nfilters].data = data; if(srv->nfilters>0)srv->filter[srv->nfilters - 1].next = srv->filter + srv->nfilters; srv->nfilters++; diff --git a/src/socks.c b/src/socks.c index 6e2b7d8..b9c6b2b 100644 --- a/src/socks.c +++ b/src/socks.c @@ -133,7 +133,7 @@ void * sockschild(struct clientparam* param) { } buf[i] = 0; if(!getip46(param->srv->family, buf, (struct sockaddr *) ¶m->req)) RETURN(100); - memcpy(¶m->sinsr, ¶m->req, sizeof(param->req)); + param->sinsr = param->req; break; default: RETURN(997); @@ -159,7 +159,7 @@ void * sockschild(struct clientparam* param) { if(param->hostname)myfree(param->hostname); param->hostname = (unsigned char *)mystrdup((char *)buf); if(!getip46(param->srv->family, buf, (struct sockaddr *) ¶m->req)) RETURN(100); - memcpy(¶m->sinsr, ¶m->req, sizeof(¶m->req)); + param->sinsr = param->req; } } @@ -173,9 +173,9 @@ void * sockschild(struct clientparam* param) { 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)); + param->sinsl = *SAFAMILY(¶m->req)==AF_INET6? param->srv->extsa6 : param->srv->extsa; #else - memcpy(¶m->sinsl, ¶m->srv->extsa, SASIZE(¶m->req)); + param->sinsl = param->srv->extsa; #endif if ((param->remsock=so._socket(SASOCK(¶m->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);} param->operation = command == 2?BIND:UDPASSOC; @@ -218,7 +218,7 @@ fflush(stderr); param->ctrlsock = param->clisock; param->clisock = so._socket(SASOCK(¶m->sincr), SOCK_DGRAM, IPPROTO_UDP); if(param->clisock == INVALID_SOCKET) {RETURN(11);} - memcpy(&sin, ¶m->sincl, sizeof(&sin)); + sin = param->sincl; *SAPORT(&sin) = 0; if(so._bind(param->clisock,(struct sockaddr *)&sin,SASIZE(&sin))) {RETURN (12);} #if SOCKSTRACE > 0 @@ -328,7 +328,7 @@ fflush(stderr); param->res = sockmap(param, conf.timeouts[CONNECTION_S]); break; case 3: - memcpy(¶m->sinsr, ¶m->req, sizeof(param->sinsr)); + param->sinsr = param->req; myfree(buf); if(!(buf = myalloc(LARGEBUFSIZE))) {RETURN(21);}