mirror of
https://github.com/3proxy/3proxy.git
synced 2026-04-13 00:10:11 +08:00
Compare commits
No commits in common. "381e755bea62983a8a780cf65c789825649a4f3f" and "77b0dc339779142eb6fc4b458ced71a8f1434df1" have entirely different histories.
381e755bea
...
77b0dc3397
2
.github/workflows/c-cpp-cmake.yml
vendored
2
.github/workflows/c-cpp-cmake.yml
vendored
@ -2,7 +2,7 @@ name: C/C++ CI cmake
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master", "unix_socket" ]
|
||||
branches: [ "master" ]
|
||||
paths: [ '**.c', '**.h', '**.cmake', 'CMakeLists.txt', '.github/configs', '.github/workflows/c-cpp-cmake.yml' ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
@ -54,7 +54,6 @@ option(3PROXY_USE_SPLICE "Use Linux splice() for zero-copy (Linux only)" ON)
|
||||
option(3PROXY_USE_POLL "Use poll() instead of select() (Unix only)" ON)
|
||||
option(3PROXY_USE_WSAPOLL "Use WSAPoll instead of select() (Windows only)" ON)
|
||||
option(3PROXY_USE_NETFILTER "Enable Linux netfilter support (Linux only)" ON)
|
||||
option(3PROXY_USE_UNIX_SOCKETS "Enable Unix domain socket support (Unix only)" ON)
|
||||
|
||||
# Output directory
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
@ -160,10 +159,6 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
add_compile_definitions(WITH_NETFILTER)
|
||||
endif()
|
||||
|
||||
if(3PROXY_USE_UNIX_SOCKETS)
|
||||
add_compile_definitions(WITH_UN)
|
||||
endif()
|
||||
|
||||
set(DEFAULT_PLUGINS
|
||||
StringsPlugin
|
||||
TrafficPlugin
|
||||
@ -181,10 +176,6 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD|Darwin|OpenBSD|NetBSD")
|
||||
add_compile_options(-fno-strict-aliasing)
|
||||
endif()
|
||||
|
||||
if(3PROXY_USE_UNIX_SOCKETS)
|
||||
add_compile_definitions(WITH_UN)
|
||||
endif()
|
||||
|
||||
set(DEFAULT_PLUGINS
|
||||
StringsPlugin
|
||||
TrafficPlugin
|
||||
@ -197,10 +188,6 @@ else()
|
||||
add_compile_options(-fno-strict-aliasing)
|
||||
endif()
|
||||
|
||||
if(3PROXY_USE_UNIX_SOCKETS)
|
||||
add_compile_definitions(WITH_UN)
|
||||
endif()
|
||||
|
||||
set(DEFAULT_PLUGINS
|
||||
StringsPlugin
|
||||
TrafficPlugin
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
# 3proxy.full is fully functional 3proxy build based on busybox:glibc
|
||||
#
|
||||
# Example are for podman, for docker change 'podman' to 'docker'
|
||||
#
|
||||
#to build:
|
||||
# podman build -f Dockerfile.busybox -t 3proxy.busybox .
|
||||
#to run:
|
||||
#
|
||||
# echo nserver 8.8.8.8 >/path/to/local/config/directory/3proxy.cfg
|
||||
# echo proxy -p3129 >>/path/to/local/config/directory/3proxy.cfg
|
||||
# podman run --read-only -p 3129:3129 -v /path/to/local/config/directory:/etc/3proxy -name 3proxy.busybox 3proxy.busybox
|
||||
#
|
||||
# use "log" without pathname in config to log to stdout.
|
||||
# plugins are located in /usr/local/3proxy/libexec (/libexec for chroot config)
|
||||
# symlinked as /lib and /lib64 in both root and chroot configurations, so no need
|
||||
# to specify full path to plugin. SSLPlugin is supported.
|
||||
#
|
||||
# Since 0.9.6 image is distroless, no reason to use chroot, chroot
|
||||
# configuration is supported for compatility only.
|
||||
|
||||
|
||||
FROM docker.io/gcc AS buildenv
|
||||
COPY . 3proxy
|
||||
RUN cd 3proxy &&\
|
||||
apt --assume-yes update && apt --assume-yes install libssl-dev libpcre2-dev &&\
|
||||
make -f Makefile.Linux &&\
|
||||
strip bin/3proxy &&\
|
||||
mkdir /dist &&\
|
||||
mkdir /dist/etc &&\
|
||||
mkdir /dist/etc/3proxy &&\
|
||||
mkdir /dist/bin &&\
|
||||
mkdir /dist/usr &&\
|
||||
mkdir /dist/lib &&\
|
||||
mkdir /dist/usr/local &&\
|
||||
mkdir /dist/usr/local/3proxy &&\
|
||||
mkdir /dist/usr/local/3proxy/conf &&\
|
||||
cp bin/3proxy /dist/bin &&\
|
||||
cp bin/*.so /dist/lib &&\
|
||||
cp scripts/3proxy.cfg.inchroot /dist/etc/3proxy/3proxy.cfg
|
||||
RUN cd /dist &&\
|
||||
ln -s /lib lib64 &&\
|
||||
ln -s /lib usr/lib &&\
|
||||
ln -s /lib usr/lib64 &&\
|
||||
cp /lib64/ld-*.so.* /dist/lib &&\
|
||||
cp "/lib/`gcc -dumpmachine`"/libdl.so.* /dist/lib &&\
|
||||
cp "/lib/`gcc -dumpmachine`"/libcrypto.so.* /dist/lib &&\
|
||||
cp "/lib/`gcc -dumpmachine`"/libssl.so.* /dist/lib &&\
|
||||
cp "/lib/`gcc -dumpmachine`"/libpcre2-8.so.* /dist/lib &&\
|
||||
cp "/lib/`gcc -dumpmachine`"/libz.so.* /dist/lib &&\
|
||||
cp "/lib/`gcc -dumpmachine`"/libzstd.so.* /dist/lib &&\
|
||||
ls -lR /dist
|
||||
|
||||
FROM docker.io/busybox:glibc
|
||||
COPY --from=buildenv /dist /
|
||||
RUN ln -s /lib /usr/local/3proxy/libexec
|
||||
CMD ["/bin/3proxy", "/etc/3proxy/3proxy.cfg"]
|
||||
@ -1,4 +1,4 @@
|
||||
# 3proxy.full is fully functional distroless 3proxy build
|
||||
# 3proxy.full is fully functional 3proxy build based on busybox:glibc
|
||||
#
|
||||
# Example are for podman, for docker change 'podman' to 'docker'
|
||||
#
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
BUILDDIR = ../bin/
|
||||
CC ?= cc
|
||||
|
||||
CFLAGS := -c -fno-strict-aliasing -DNOODBC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_UN $(CFLAGS)
|
||||
CFLAGS := -c -fno-strict-aliasing -DNOODBC -DFD_SETSIZE=4096 -DWITH_POLL $(CFLAGS)
|
||||
COUT = -o
|
||||
LN ?= ${CC}
|
||||
LDFLAGS += -pthread -fno-strict-aliasing
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
BUILDDIR = ../bin/
|
||||
CC ?= gcc
|
||||
|
||||
CFLAGS := -g -fPIC -O2 -fno-strict-aliasing -c -pthread -DWITHSPLICE -D_GNU_SOURCE -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_NETFILTER -D WITH_UN $(CFLAGS)
|
||||
CFLAGS := -g -fPIC -O2 -fno-strict-aliasing -c -pthread -DWITHSPLICE -D_GNU_SOURCE -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_NETFILTER $(CFLAGS)
|
||||
COUT = -o
|
||||
LN ?= ${CC}
|
||||
DCFLAGS ?=
|
||||
|
||||
@ -9,7 +9,7 @@ BUILDDIR = ../bin/
|
||||
CC ?= gcc
|
||||
|
||||
# you may need -L/usr/pkg/lib for older NetBSD versions
|
||||
CFLAGS := -g -O2 -fno-strict-aliasing -c -pthread -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_UN $(CFLAGS)
|
||||
CFLAGS := -g -O2 -fno-strict-aliasing -c -pthread -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DFD_SETSIZE=4096 -DWITH_POLL $(CFLAGS)
|
||||
COUT = -o
|
||||
LN ?= $(CC)
|
||||
LDFLAGS ?= -O2 -fno-strict-aliasing -pthread
|
||||
|
||||
18
src/auth.c
18
src/auth.c
@ -255,7 +255,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
if(!connected){
|
||||
if(cur->type == R_EXTIP){
|
||||
param->sinsl = cur->addr;
|
||||
if(SAISNULL(¶m->sinsl) && (*SAFAMILY(¶m->sincr) == AF_INET || *SAFAMILY(¶m->sincr) == AF_INET6))param->sinsl = param->sincr;
|
||||
if(SAISNULL(¶m->sinsl))param->sinsl = param->sincr;
|
||||
#ifndef NOIPV6
|
||||
else if(cur->cidr && *SAFAMILY(¶m->sinsl) == AF_INET6){
|
||||
uint16_t c;
|
||||
@ -766,8 +766,11 @@ struct authcache {
|
||||
char * username;
|
||||
char * password;
|
||||
time_t expires;
|
||||
PROXYSOCKADDRTYPE sa;
|
||||
PROXYSOCKADDRTYPE sinsl;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa, sinsl;
|
||||
#else
|
||||
struct sockaddr_in sa, sinsl;
|
||||
#endif
|
||||
struct ace *acl;
|
||||
struct authcache *next;
|
||||
} *authc = NULL;
|
||||
@ -1206,8 +1209,13 @@ uint32_t udpresolve(int af, unsigned char * name, unsigned char * value, uint32_
|
||||
int j, k, len, flen;
|
||||
SOCKET sock;
|
||||
uint32_t ttl;
|
||||
PROXYSOCKADDRTYPE addr;
|
||||
PROXYSOCKADDRTYPE *sinsr, *sinsl;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 addr;
|
||||
struct sockaddr_in6 *sinsr, *sinsl;
|
||||
#else
|
||||
struct sockaddr_in addr;
|
||||
struct sockaddr_in *sinsr, *sinsl;
|
||||
#endif
|
||||
int usetcp = 0;
|
||||
unsigned short serial = 1;
|
||||
|
||||
|
||||
@ -306,7 +306,11 @@ int radsend(struct clientparam * param, int auth, int stop){
|
||||
int total_length;
|
||||
int len;
|
||||
int op;
|
||||
PROXYSOCKADDRTYPE saremote;
|
||||
#ifdef NOIPV6
|
||||
struct sockaddr_in saremote;
|
||||
#else
|
||||
struct sockaddr_in6 saremote;
|
||||
#endif
|
||||
struct pollfd fds[1];
|
||||
char vector[AUTH_VECTOR_LEN];
|
||||
radius_packet_t packet, rpacket;
|
||||
|
||||
22
src/common.c
22
src/common.c
@ -63,26 +63,12 @@ int mutex_unlock(int *val)
|
||||
#endif
|
||||
|
||||
int myinet_ntop(int af, void *src, char *dst, socklen_t size){
|
||||
#ifdef WITH_UN
|
||||
if(af == AF_UNIX){
|
||||
struct sockaddr_un *sun = (struct sockaddr_un *)src;
|
||||
char *path = sun->sun_path;
|
||||
char *basename = strrchr(path, '/');
|
||||
if(basename) basename++;
|
||||
else basename = path;
|
||||
if(size > 0){
|
||||
strncpy(dst, basename, (size > 40) ? 40 : size - 1);
|
||||
dst[((size > 40) ? 40 : size - 1)] = 0;
|
||||
}
|
||||
return (int)strlen(dst);
|
||||
}
|
||||
#endif
|
||||
#ifndef NOIPV6
|
||||
if(af != AF_INET6){
|
||||
#endif
|
||||
#endif
|
||||
unsigned u = ntohl(((struct in_addr *)src)->s_addr);
|
||||
return sprintf(dst, "%u.%u.%u.%u",
|
||||
((u&0xFF000000)>>24),
|
||||
return sprintf(dst, "%u.%u.%u.%u",
|
||||
((u&0xFF000000)>>24),
|
||||
((u&0x00FF0000)>>16),
|
||||
((u&0x0000FF00)>>8),
|
||||
((u&0x000000FF)));
|
||||
@ -91,7 +77,7 @@ int myinet_ntop(int af, void *src, char *dst, socklen_t size){
|
||||
*dst = 0;
|
||||
inet_ntop(af, src, dst, size);
|
||||
return (int)strlen(dst);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
char *rotations[] = {
|
||||
|
||||
47
src/conf.c
47
src/conf.c
@ -285,26 +285,17 @@ static int h_proxy(int argc, unsigned char ** argv){
|
||||
}
|
||||
|
||||
static int h_internal(int argc, unsigned char ** argv){
|
||||
#ifdef WITH_UN
|
||||
if(!strncmp((char *)argv[1], "unix:", 5)){
|
||||
struct sockaddr_un *sun = (struct sockaddr_un *)&conf.intsa;
|
||||
memset(sun, 0, sizeof(*sun));
|
||||
sun->sun_family = AF_UNIX;
|
||||
strncpy(sun->sun_path, (char *)argv[1] + 5, sizeof(sun->sun_path) - 1);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
getip46(46, argv[1], (struct sockaddr *)&conf.intsa);
|
||||
getip46(46, argv[1], (struct sockaddr *)&conf.intsa);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_external(int argc, unsigned char ** argv){
|
||||
int res;
|
||||
#ifndef NOIPV6
|
||||
PROXYSOCKADDRTYPE sa6;
|
||||
struct sockaddr_in6 sa6;
|
||||
memset(&sa6, 0, sizeof(sa6));
|
||||
res = getip46(46, argv[1], (struct sockaddr *)&sa6);
|
||||
if(!res) return 1;
|
||||
if(!res) return 1;
|
||||
if (*SAFAMILY(&sa6)==AF_INET) conf.extsa = sa6;
|
||||
else conf.extsa6 = sa6;
|
||||
#else
|
||||
@ -696,7 +687,11 @@ static int h_nscache6(int argc, unsigned char **argv){
|
||||
}
|
||||
|
||||
static int h_nsrecord(int argc, unsigned char **argv){
|
||||
PROXYSOCKADDRTYPE sa;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa;
|
||||
#else
|
||||
struct sockaddr_in sa;
|
||||
#endif
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
if(!getip46(46, argv[2], (struct sockaddr *)&sa)) return 1;
|
||||
|
||||
@ -847,7 +842,11 @@ static int h_nolog(int argc, unsigned char **argv){
|
||||
}
|
||||
|
||||
int scanipl(unsigned char *arg, struct iplist *dst){
|
||||
PROXYSOCKADDRTYPE sa;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa;
|
||||
#else
|
||||
struct sockaddr_in sa;
|
||||
#endif
|
||||
char * slash, *dash;
|
||||
int masklen, addrlen;
|
||||
int res;
|
||||
@ -1398,6 +1397,21 @@ static int h_delimchar(int argc, unsigned char **argv){
|
||||
static int h_radius(int argc, unsigned char **argv){
|
||||
uint16_t port;
|
||||
|
||||
/*
|
||||
int oldrad;
|
||||
#ifdef NOIPV6
|
||||
struct sockaddr_in bindaddr;
|
||||
#else
|
||||
struct sockaddr_in6 bindaddr;
|
||||
#endif
|
||||
|
||||
oldrad = nradservers;
|
||||
nradservers = 0;
|
||||
for(; oldrad; oldrad--){
|
||||
if(radiuslist[oldrad].logsock >= 0) so._closesocket(radiuslist[oldrad].logsock);
|
||||
radiuslist[oldrad].logsock = -1;
|
||||
}
|
||||
*/
|
||||
memset(radiuslist, 0, sizeof(radiuslist));
|
||||
if(strlen((char *)argv[1]) > 63) argv[1][63] = 0;
|
||||
strcpy(radiussecret, (char *)argv[1]);
|
||||
@ -1413,6 +1427,11 @@ static int h_radius(int argc, unsigned char **argv){
|
||||
port = ntohs(*SAPORT(&radiuslist[nradservers].authaddr));
|
||||
radiuslist[nradservers].logaddr = radiuslist[nradservers].authaddr;
|
||||
*SAPORT(&radiuslist[nradservers].logaddr) = htons(port+1);
|
||||
/*
|
||||
bindaddr = radiuslist[nradservers].localaddr;
|
||||
if ((radiuslist[nradservers].logsock = so._socket(SASOCK(&radiuslist[nradservers].logaddr), SOCK_DGRAM, 0)) < 0) return 2;
|
||||
if (so._bind(radiuslist[nradservers].logsock, (struct sockaddr *)&bindaddr, SASIZE(&bindaddr))) return 3;
|
||||
*/
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -58,10 +58,8 @@ static FILTER_ACTION transparent_filter_client(void *fo, struct clientparam * pa
|
||||
return REJECT;
|
||||
#endif
|
||||
#else
|
||||
if(*SAFAMILY(¶m->sincl) == AF_INET || *SAFAMILY(¶m->sincl) == AF_INET6){
|
||||
param->req = param->sincl;
|
||||
param->sincl = param->srv->intsa;
|
||||
}
|
||||
param->req = param->sincl;
|
||||
param->sincl = param->srv->intsa;
|
||||
#endif
|
||||
pl->myinet_ntop(*SAFAMILY(¶m->req), SAADDR(¶m->req), (char *)addrbuf, sizeof(addrbuf));
|
||||
if(param->hostname) pl->freefunc(param->hostname);
|
||||
|
||||
@ -328,7 +328,14 @@ extern struct commands commandhandlers[];
|
||||
|
||||
|
||||
extern struct radserver {
|
||||
PROXYSOCKADDRTYPE authaddr, logaddr, localaddr;
|
||||
#ifdef NOIPV6
|
||||
struct sockaddr_in authaddr, logaddr, localaddr;
|
||||
#else
|
||||
struct sockaddr_in6 authaddr, logaddr, localaddr;
|
||||
#endif
|
||||
/*
|
||||
SOCKET logsock;
|
||||
*/
|
||||
} radiuslist[MAXRADIUS];
|
||||
|
||||
extern char radiussecret[64];
|
||||
|
||||
@ -252,7 +252,11 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
char *hostname=NULL;
|
||||
int opt = 1, isudp = 0, iscbl = 0, iscbc = 0;
|
||||
unsigned char *cbc_string = NULL, *cbl_string = NULL;
|
||||
PROXYSOCKADDRTYPE cbsa;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 cbsa;
|
||||
#else
|
||||
struct sockaddr_in cbsa;
|
||||
#endif
|
||||
FILE *fp = NULL;
|
||||
struct linger lg;
|
||||
int nlog = 5000;
|
||||
@ -405,27 +409,18 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
}
|
||||
break;
|
||||
case 'i':
|
||||
#ifdef WITH_UN
|
||||
if(!strncmp((char *)argv[i]+2, "unix:", 5)){
|
||||
struct sockaddr_un *sun = (struct sockaddr_un *)&srv.intsa;
|
||||
memset(sun, 0, sizeof(*sun));
|
||||
sun->sun_family = AF_UNIX;
|
||||
strncpy(sun->sun_path, (char *)argv[i] + 7, sizeof(sun->sun_path) - 1);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&srv.intsa);
|
||||
break;
|
||||
case 'e':
|
||||
{
|
||||
#ifndef NOIPV6
|
||||
PROXYSOCKADDRTYPE sa6;
|
||||
struct sockaddr_in6 sa6;
|
||||
memset(&sa6, 0, sizeof(sa6));
|
||||
error = !getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&sa6);
|
||||
if(!error) {
|
||||
if (*SAFAMILY(&sa6)==AF_INET) srv.extsa = sa6;
|
||||
else srv.extsa6 = sa6;
|
||||
}
|
||||
}
|
||||
#else
|
||||
error = !getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&srv.extsa);
|
||||
#endif
|
||||
@ -659,12 +654,6 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if (!iscbc) {
|
||||
if(srv.srvsock == INVALID_SOCKET){
|
||||
|
||||
#ifdef WITH_UN
|
||||
if(*SAFAMILY(&srv.intsa) == AF_UNIX){
|
||||
sock=srv.so._socket(srv.so.state, PF_UNIX, SOCK_STREAM, 0);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if(!isudp){
|
||||
sock=srv.so._socket(srv.so.state, SASOCK(&srv.intsa), SOCK_STREAM, IPPROTO_TCP);
|
||||
}
|
||||
@ -682,17 +671,12 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
fcntl(sock,F_SETFL,O_NONBLOCK | fcntl(sock,F_GETFL));
|
||||
#endif
|
||||
srv.srvsock = sock;
|
||||
#ifdef WITH_UN
|
||||
if(*SAFAMILY(&srv.intsa) != AF_UNIX)
|
||||
#endif
|
||||
{
|
||||
opt = 1;
|
||||
if(srv.so._setsockopt(srv.so.state, sock, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int)))perror("setsockopt()");
|
||||
#ifdef SO_REUSEPORT
|
||||
opt = 1;
|
||||
srv.so._setsockopt(srv.so.state, sock, SOL_SOCKET, SO_REUSEPORT, (char *)&opt, sizeof(int));
|
||||
#endif
|
||||
}
|
||||
#if defined SO_BINDTODEVICE
|
||||
if(srv.ibindtodevice && srv.so._setsockopt(srv.so.state, sock, SOL_SOCKET, SO_BINDTODEVICE, srv.ibindtodevice, strlen(srv.ibindtodevice) + 1)) {
|
||||
dolog(&defparam, (unsigned char *)"failed to bind device");
|
||||
@ -715,17 +699,11 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef WITH_UN
|
||||
if(*SAFAMILY(&srv.intsa) == AF_UNIX){
|
||||
struct sockaddr_un *sun = (struct sockaddr_un *)&srv.intsa;
|
||||
unlink(sun->sun_path);
|
||||
}
|
||||
#endif
|
||||
size = sizeof(srv.intsa);
|
||||
for(sleeptime = SLEEPTIME * 100; srv.so._bind(srv.so.state, sock, (struct sockaddr*)&srv.intsa, SASIZE(&srv.intsa))==-1; usleep(sleeptime)) {
|
||||
sprintf((char *)buf, "bind(): %s", strerror(errno));
|
||||
if(!srv.silent)dolog(&defparam, buf);
|
||||
sleeptime = (sleeptime<<1);
|
||||
if(!srv.silent)dolog(&defparam, buf);
|
||||
sleeptime = (sleeptime<<1);
|
||||
if(!sleeptime) {
|
||||
srv.so._closesocket(srv.so.state, sock);
|
||||
return -3;
|
||||
@ -738,7 +716,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
return -4;
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
defparam.clisock = sock;
|
||||
|
||||
if(!srv.silent && !iscbc){
|
||||
@ -891,9 +869,6 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(!srv.silent)dolog(&defparam, buf);
|
||||
continue;
|
||||
}
|
||||
#ifdef WITH_UN
|
||||
if(*SAFAMILY(&defparam.sincl) == AF_UNIX) defparam.sincr = defparam.sincl;
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
ioctlsocket(new_sock, FIONBIO, &ul);
|
||||
#else
|
||||
|
||||
@ -44,7 +44,11 @@ void * sockschild(struct clientparam* param) {
|
||||
struct pollfd fds[3];
|
||||
int ver=0;
|
||||
int havepass = 0;
|
||||
PROXYSOCKADDRTYPE sin;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sin = {AF_INET6};
|
||||
#else
|
||||
struct sockaddr_in sin = {AF_INET};
|
||||
#endif
|
||||
int len;
|
||||
|
||||
|
||||
|
||||
106
src/structures.h
106
src/structures.h
@ -106,9 +106,6 @@ int
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WITH_UN
|
||||
#include <sys/un.h>
|
||||
#endif
|
||||
|
||||
#define ALLOW 0
|
||||
#define DENY 1
|
||||
@ -144,52 +141,23 @@ int
|
||||
#define DNSRESOLVE 0x00100000
|
||||
#define ADMIN 0x01000000
|
||||
|
||||
#ifdef NO_UN
|
||||
#undef WITH_UN
|
||||
#endif
|
||||
|
||||
#define SAFAMILY(sa) (&(((struct sockaddr_in *)sa)->sin_family))
|
||||
|
||||
#ifdef WITH_UN
|
||||
#define UN_SAPORT(sa) (((struct sockaddr_un *)sa)->sun_family == AF_UNIX)? (uint16_t *)(((uint8_t *)(sa)) + sizeof(struct sockaddr_storage) - 2) :
|
||||
#define UN_SAADDR(sa) (((struct sockaddr_un *)sa)->sun_family == AF_UNIX)? (unsigned char *)((struct sockaddr_un *)sa)->sun_path :
|
||||
#define UN_SAADDRLEN(sa) (((struct sockaddr_un *)sa)->sun_family == AF_UNIX)? (int)sizeof(((struct sockaddr_un *)sa)->sun_path) :
|
||||
#define UN_SASOCK(sa) (((struct sockaddr_un *)sa)->sun_family == AF_UNIX)? PF_UNIX :
|
||||
#define UN_SASIZE(sa) (((struct sockaddr_un *)sa)->sun_family == AF_UNIX)? sizeof(struct sockaddr_un) :
|
||||
#define UN_SAISNULL(sa) (((struct sockaddr_un *)sa)->sun_family == AF_UNIX)? (*((struct sockaddr_un *)sa)->sun_path == 0) :
|
||||
#else
|
||||
#define UN_SAPORT(sa)
|
||||
#define UN_SAADDR(sa)
|
||||
#define UN_SAADDRLEN(sa)
|
||||
#define UN_SASOCK(sa)
|
||||
#define UN_SASIZE(sa)
|
||||
#define UN_SAISNULL(sa)
|
||||
#endif
|
||||
|
||||
#ifndef NOIPV6
|
||||
#define SAPORT(sa) ( UN_SAPORT(sa) ((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port)
|
||||
#define SAADDR(sa) ( UN_SAADDR(sa) ((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
|
||||
#define SAADDRLEN(sa) ( UN_SAADDRLEN(sa) ((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)
|
||||
#define SASOCK(sa) ( UN_SASOCK(sa) ((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET)
|
||||
#define SASIZE(sa) ( UN_SASIZE(sa) ((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in))
|
||||
#define SAISNULL(sa) ( UN_SAISNULL(sa) !memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)))
|
||||
#define SAPORT(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port)
|
||||
#define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
|
||||
#define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)
|
||||
#define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET)
|
||||
#define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in))
|
||||
#define SAISNULL(sa) (!memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)))
|
||||
#else
|
||||
#define SAPORT(sa) ( UN_SAPORT(sa) &((struct sockaddr_in *)sa)->sin_port)
|
||||
#define SAADDR(sa) ( UN_SAADDR(sa) (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
|
||||
#define SAADDRLEN(sa) ( UN_SAADDRLEN(sa) 4)
|
||||
#define SASOCK(sa) ( UN_SASOCK(sa) PF_INET)
|
||||
#define SASIZE(sa) ( UN_SASIZE(sa) sizeof(struct sockaddr_in))
|
||||
#define SAISNULL(sa) ( UN_SAISNULL(sa) ((struct sockaddr_in *)sa)->sin_addr.s_addr == 0)
|
||||
#endif
|
||||
|
||||
#ifdef WITH_UN
|
||||
#define PROXYSOCKADDRTYPE struct sockaddr_storage
|
||||
#else
|
||||
#ifndef NOIPv6
|
||||
#define PROXYSOCKADDRTYPE struct sockaddr_in6
|
||||
#else
|
||||
#define PROXYSOCKADDRTYPE struct sockaddr_in
|
||||
#endif
|
||||
#define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port)
|
||||
#define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
|
||||
#define SAADDRLEN(sa) (4)
|
||||
#define SASOCK(sa) (PF_INET)
|
||||
#define SASIZE(sa) (sizeof(struct sockaddr_in))
|
||||
#define SAISNULL(sa) (((struct sockaddr_in *)sa)->sin_addr.s_addr == 0)
|
||||
#endif
|
||||
|
||||
extern char* NULLADDR;
|
||||
@ -262,8 +230,13 @@ struct auth {
|
||||
struct iplist {
|
||||
struct iplist *next;
|
||||
int family;
|
||||
PROXYSOCKADDRTYPE ip_from;
|
||||
PROXYSOCKADDRTYPE ip_to;
|
||||
#ifndef NOIPV6
|
||||
struct in6_addr ip_from;
|
||||
struct in6_addr ip_to;
|
||||
#else
|
||||
struct in_addr ip_from;
|
||||
struct in_addr ip_to;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct portlist {
|
||||
@ -326,7 +299,11 @@ extern struct redirdesc redirs[];
|
||||
struct chain {
|
||||
struct chain * next;
|
||||
int type;
|
||||
PROXYSOCKADDRTYPE addr;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 addr;
|
||||
#else
|
||||
struct sockaddr_in addr;
|
||||
#endif
|
||||
unsigned char * exthost;
|
||||
unsigned char * extuser;
|
||||
unsigned char * extpass;
|
||||
@ -407,7 +384,11 @@ struct trafcount {
|
||||
};
|
||||
|
||||
struct nserver {
|
||||
PROXYSOCKADDRTYPE addr;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 addr;
|
||||
#else
|
||||
struct sockaddr_in addr;
|
||||
#endif
|
||||
int usetcp;
|
||||
};
|
||||
extern int numservers;
|
||||
@ -529,11 +510,18 @@ struct srvparam {
|
||||
#endif
|
||||
unsigned bufsize;
|
||||
unsigned logdumpsrv, logdumpcli;
|
||||
PROXYSOCKADDRTYPE intsa, intNat, extNat;
|
||||
#ifndef NOIPV6
|
||||
PROXYSOCKADDRTYPE extsa6;
|
||||
struct sockaddr_in6 intsa;
|
||||
struct sockaddr_in6 extsa6;
|
||||
struct sockaddr_in6 extsa;
|
||||
struct sockaddr_in6 extNat;
|
||||
struct sockaddr_in6 intNat;
|
||||
#else
|
||||
struct sockaddr_in intsa;
|
||||
struct sockaddr_in extsa;
|
||||
struct sockaddr_in extNat;
|
||||
struct sockaddr_in intNat;
|
||||
#endif
|
||||
PROXYSOCKADDRTYPE extsa;
|
||||
pthread_mutex_t counter_mutex;
|
||||
struct pollfd fds;
|
||||
FILE *stdlog;
|
||||
@ -625,8 +613,11 @@ struct clientparam {
|
||||
uint64_t
|
||||
maxtrafin64,
|
||||
maxtrafout64;
|
||||
PROXYSOCKADDRTYPE sincl, sincr;
|
||||
PROXYSOCKADDRTYPE sinsl, sinsr, req;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sincl, sincr, sinsl, sinsr, req;
|
||||
#else
|
||||
struct sockaddr_in sincl, sincr, sinsl, sinsr, req;
|
||||
#endif
|
||||
|
||||
uint64_t statscli64,
|
||||
statssrv64;
|
||||
@ -671,11 +662,14 @@ struct extparam {
|
||||
unsigned char *logname, **archiver;
|
||||
ROTATION logtype, countertype;
|
||||
char * counterfile;
|
||||
PROXYSOCKADDRTYPE intsa;
|
||||
#ifndef NOIPV6
|
||||
PROXYSOCKADDRTYPE extsa6;
|
||||
struct sockaddr_in6 intsa;
|
||||
struct sockaddr_in6 extsa6;
|
||||
struct sockaddr_in6 extsa;
|
||||
#else
|
||||
struct sockaddr_in intsa;
|
||||
struct sockaddr_in extsa;
|
||||
#endif
|
||||
PROXYSOCKADDRTYPE extsa;
|
||||
struct passwords *pwl;
|
||||
struct auth * authenticate;
|
||||
AUTHFUNC authfunc;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user