mirror of
https://github.com/3proxy/3proxy.git
synced 2025-04-20 03:02:10 +08:00
get rid of unsigned chars
This commit is contained in:
parent
3e35fdd054
commit
1f7a33d5ab
12
src/3proxy.c
12
src/3proxy.c
@ -19,7 +19,7 @@
|
||||
#endif
|
||||
|
||||
FILE * confopen();
|
||||
extern unsigned char *strings[];
|
||||
extern char *strings[];
|
||||
extern FILE *writable;
|
||||
extern struct counter_header cheader;
|
||||
extern struct counter_record crecord;
|
||||
@ -79,7 +79,7 @@ void __stdcall CommandHandler( DWORD dwCommand )
|
||||
}
|
||||
|
||||
|
||||
void __stdcall ServiceMain(int argc, unsigned char* argv[] )
|
||||
void __stdcall ServiceMain(int argc, char* argv[] )
|
||||
{
|
||||
|
||||
hSrv = RegisterServiceCtrlHandler((LPCSTR)conf.stringtable[1], (LPHANDLER_FUNCTION)CommandHandler);
|
||||
@ -181,7 +181,7 @@ void doschedule(void){
|
||||
|
||||
void dumpcounters(struct trafcount *tlin, int counterd){
|
||||
|
||||
unsigned char tmpbuf[8192];
|
||||
char tmpbuf[8192];
|
||||
struct trafcount *tl;
|
||||
if(counterd >= 0 && tlin) {
|
||||
|
||||
@ -189,7 +189,7 @@ void dumpcounters(struct trafcount *tlin, int counterd){
|
||||
if(cheader.updated && conf.countertype && timechanged(cheader.updated, conf.time, conf.countertype)){
|
||||
FILE * cfp;
|
||||
|
||||
cfp = fopen((char *)dologname(tmpbuf, sizeof(tmpbuf), (unsigned char *)conf.counterfile, NULL, conf.countertype, cheader.updated), "w");
|
||||
cfp = fopen((char *)dologname(tmpbuf, sizeof(tmpbuf), (char *)conf.counterfile, NULL, conf.countertype, cheader.updated), "w");
|
||||
if(cfp){
|
||||
for(tl = tlin; cfp && tl; tl = tl->next){
|
||||
if(tl->type >= conf.countertype)
|
||||
@ -293,9 +293,9 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
|
||||
FILE * fp = NULL;
|
||||
|
||||
#ifdef _WIN32
|
||||
unsigned char * arg;
|
||||
char * arg;
|
||||
WSADATA wd;
|
||||
unsigned char tmpbuf[8192];
|
||||
char tmpbuf[8192];
|
||||
|
||||
WSAStartup(MAKEWORD( 1, 1 ), &wd);
|
||||
osv.dwOSVersionInfoSize = sizeof(osv);
|
||||
|
@ -133,20 +133,14 @@ $(BUILDDIR)mycrypt$(EXESUFFICS): md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycryptmain$(
|
||||
md4$(OBJSUFFICS): libs/md4.h libs/md4.c
|
||||
$(CC) $(COUT)md4$(OBJSUFFICS) $(CFLAGS) libs/md4.c
|
||||
|
||||
smbdes$(OBJSUFFICS): libs/smbdes.c
|
||||
$(CC) $(COUT)smbdes$(OBJSUFFICS) $(CFLAGS) libs/smbdes.c
|
||||
|
||||
md5$(OBJSUFFICS): libs/md5.h libs/md5.c
|
||||
$(CC) $(COUT)md5$(OBJSUFFICS) $(CFLAGS) libs/md5.c
|
||||
|
||||
ntlm$(OBJSUFFICS): ntlm.c
|
||||
$(CC) $(COUT)ntlm$(OBJSUFFICS) $(CFLAGS) ntlm.c
|
||||
|
||||
stringtable$(OBJSUFFICS): stringtable.c
|
||||
$(CC) $(COUT)stringtable$(OBJSUFFICS) $(CFLAGS) stringtable.c
|
||||
|
||||
$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) log$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS)
|
||||
$(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) log$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS)
|
||||
$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) log$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS)
|
||||
$(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) log$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS)
|
||||
|
||||
clean:
|
||||
@$(REMOVECOMMAND) *$(OBJSUFFICS) $(COMPFILES)
|
||||
|
89
src/auth.c
89
src/auth.c
@ -9,12 +9,12 @@
|
||||
#include "proxy.h"
|
||||
|
||||
|
||||
int clientnegotiate(struct chain * redir, struct clientparam * param, struct sockaddr * addr, unsigned char * hostname){
|
||||
int clientnegotiate(struct chain * redir, struct clientparam * param, struct sockaddr * addr, char * hostname){
|
||||
unsigned char *buf;
|
||||
unsigned char *username;
|
||||
char *username;
|
||||
int res;
|
||||
int len=0;
|
||||
unsigned char * user, *pass;
|
||||
char * user, *pass;
|
||||
|
||||
|
||||
user = redir->extuser;
|
||||
@ -56,7 +56,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc
|
||||
":%hu HTTP/1.0\r\nConnection: keep-alive\r\n", ntohs(*SAPORT(addr)));
|
||||
if(user){
|
||||
len += sprintf((char *)buf + len, "Proxy-Authorization: Basic ");
|
||||
sprintf((char *)username, "%.128s:%.128s", user, pass?pass:(unsigned char *)"");
|
||||
sprintf((char *)username, "%.128s:%.128s", user, pass?pass:(char *)"");
|
||||
en64(username, buf+len, (int)strlen((char *)username));
|
||||
len = (int)strlen((char *)buf);
|
||||
len += sprintf((char *)buf + len, "\r\n");
|
||||
@ -87,7 +87,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc
|
||||
buf[7] = 3;
|
||||
}
|
||||
else memcpy(buf+4, SAADDR(addr), 4);
|
||||
if(!user)user = (unsigned char *)"anonymous";
|
||||
if(!user)user = (char *)"anonymous";
|
||||
len = (int)strlen((char *)user) + 1;
|
||||
memcpy(buf+8, user, len);
|
||||
len += 8;
|
||||
@ -138,10 +138,10 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc
|
||||
}
|
||||
if(buf[1] == 2){
|
||||
buf[inbuf++] = 1;
|
||||
buf[inbuf] = (unsigned char)strlen((char *)user);
|
||||
buf[inbuf] = (char)strlen((char *)user);
|
||||
memcpy(buf+inbuf+1, user, buf[inbuf]);
|
||||
inbuf += buf[inbuf] + 1;
|
||||
buf[inbuf] = pass?(unsigned char)strlen((char *)pass):0;
|
||||
buf[inbuf] = pass?(char)strlen((char *)pass):0;
|
||||
if(pass)memcpy(buf+inbuf+1, pass, buf[inbuf]);
|
||||
inbuf += buf[inbuf] + 1;
|
||||
if(socksend(param->remsock, buf, inbuf, conf.timeouts[CHAIN_TO]) != inbuf){
|
||||
@ -260,11 +260,11 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
if(cur->extuser){
|
||||
if(param->extusername)
|
||||
myfree(param->extusername);
|
||||
param->extusername = (unsigned char *)mystrdup((char *)((*cur->extuser == '*' && param->username)? param->username : cur->extuser));
|
||||
param->extusername = (char *)mystrdup((char *)((*cur->extuser == '*' && param->username)? param->username : cur->extuser));
|
||||
if(cur->extpass){
|
||||
if(param->extpassword)
|
||||
myfree(param->extpassword);
|
||||
param->extpassword = (unsigned char *)mystrdup((char *)((*cur->extuser == '*' && param->password)?param->password : cur->extpass));
|
||||
param->extpassword = (char *)mystrdup((char *)((*cur->extuser == '*' && param->password)?param->password : cur->extpass));
|
||||
}
|
||||
if(*cur->extuser == '*' && !param->username) return 4;
|
||||
}
|
||||
@ -312,11 +312,11 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
if(*cur -> extuser == '*' && !param->username) return 4;
|
||||
if(param->extusername)
|
||||
myfree(param->extusername);
|
||||
param->extusername = (unsigned char *)mystrdup((char *)((*cur->extuser == '*' && param->username)? param->username : cur->extuser));
|
||||
param->extusername = (char *)mystrdup((char *)((*cur->extuser == '*' && param->username)? param->username : cur->extuser));
|
||||
if(cur->extpass){
|
||||
if(param->extpassword)
|
||||
myfree(param->extpassword);
|
||||
param->extpassword = (unsigned char *)mystrdup((char *)((*cur->extuser == '*' && param->password)?param->password : cur->extpass));
|
||||
param->extpassword = (char *)mystrdup((char *)((*cur->extuser == '*' && param->password)?param->password : cur->extpass));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -330,14 +330,14 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
||||
|
||||
int IPInentry(struct sockaddr *sa, struct iplist *ipentry){
|
||||
int addrlen;
|
||||
unsigned char *ip, *ipf, *ipt;
|
||||
char *ip, *ipf, *ipt;
|
||||
|
||||
|
||||
if(!sa || ! ipentry || *SAFAMILY(sa) != ipentry->family) return 0;
|
||||
|
||||
ip = (unsigned char *)SAADDR(sa);
|
||||
ipf = (unsigned char *)&ipentry->ip_from;
|
||||
ipt = (unsigned char *)&ipentry->ip_to;
|
||||
ip = (char *)SAADDR(sa);
|
||||
ipf = (char *)&ipentry->ip_from;
|
||||
ipt = (char *)&ipentry->ip_to;
|
||||
|
||||
|
||||
addrlen = SAADDRLEN(sa);
|
||||
@ -352,12 +352,12 @@ int ACLmatches(struct ace* acentry, struct clientparam * param){
|
||||
struct iplist *ipentry;
|
||||
struct portlist *portentry;
|
||||
struct period *periodentry;
|
||||
unsigned char * username;
|
||||
char * username;
|
||||
struct hostname * hstentry=NULL;
|
||||
int i;
|
||||
int match = 0;
|
||||
|
||||
username = param->username?param->username:(unsigned char *)"-";
|
||||
username = param->username?param->username:(char *)"-";
|
||||
if(acentry->src) {
|
||||
for(ipentry = acentry->src; ipentry; ipentry = ipentry->next)
|
||||
if(IPInentry((struct sockaddr *)¶m->sincr, ipentry)) {
|
||||
@ -770,7 +770,7 @@ int cacheauth(struct clientparam * param){
|
||||
if(param->username){
|
||||
myfree(param->username);
|
||||
}
|
||||
param->username = (unsigned char *)mystrdup(ac->username);
|
||||
param->username = (char *)mystrdup(ac->username);
|
||||
pthread_mutex_unlock(&hash_mutex);
|
||||
return 0;
|
||||
}
|
||||
@ -873,7 +873,7 @@ int doauth(struct clientparam * param){
|
||||
|
||||
int ipauth(struct clientparam * param){
|
||||
int res;
|
||||
unsigned char *username;
|
||||
char *username;
|
||||
|
||||
if(param->preauthorized) return (0);
|
||||
username = param->username;
|
||||
@ -898,7 +898,7 @@ int dnsauth(struct clientparam * param){
|
||||
if(*SAFAMILY(¶m->sincr)!=AF_INET){
|
||||
char *s = buf;
|
||||
for(i=15; i>=0; i--){
|
||||
unsigned char c=((unsigned char *)SAADDR(¶m->sincr))[i];
|
||||
char c=((char *)SAADDR(¶m->sincr))[i];
|
||||
*s++ = dig[(c&0xf)];
|
||||
*s++ = '.';
|
||||
*s++ = dig[(c>>4)];
|
||||
@ -916,7 +916,7 @@ int dnsauth(struct clientparam * param){
|
||||
((u&0xFF000000)>>24));
|
||||
|
||||
}
|
||||
if(!udpresolve(*SAFAMILY(¶m->sincr), (unsigned char *)buf, (unsigned char *)addr, NULL, param, 1)) {
|
||||
if(!udpresolve(*SAFAMILY(¶m->sincr), (char *)buf, (char *)addr, NULL, param, 1)) {
|
||||
return 3;
|
||||
}
|
||||
if(memcmp(SAADDR(¶m->sincr), addr, SAADDRLEN(¶m->sincr))) {
|
||||
@ -928,7 +928,7 @@ int dnsauth(struct clientparam * param){
|
||||
|
||||
int strongauth(struct clientparam * param){
|
||||
struct passwords * pwl;
|
||||
unsigned char buf[256];
|
||||
char buf[256];
|
||||
|
||||
|
||||
if(!param->username) return 4;
|
||||
@ -942,15 +942,6 @@ int strongauth(struct clientparam * param){
|
||||
else if (!param->pwtype && param->password && !strcmp((char *)param->password, (char *)pwl->password)){
|
||||
break;
|
||||
}
|
||||
#ifndef NOCRYPT
|
||||
else if (param->pwtype == 2 && param->password) {
|
||||
ntpwdhash(buf, pwl->password, 0);
|
||||
mschap(buf, param->password, buf + 16);
|
||||
if(!memcmp(buf+16, param->password+8, 24)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
pthread_mutex_unlock(&pwl_mutex);
|
||||
return 6;
|
||||
#ifndef NOCRYPT
|
||||
@ -964,13 +955,6 @@ int strongauth(struct clientparam * param){
|
||||
if(param->password && !param->pwtype && !memcmp(pwl->password, ntpwdhash(buf,param->password, 1), 32)) {
|
||||
break;
|
||||
}
|
||||
else if (param->pwtype == 2){
|
||||
fromhex(pwl->password, buf, 16);
|
||||
mschap(buf, param->password, buf + 16);
|
||||
if(!memcmp(buf + 16, param->password+8, 24)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&pwl_mutex);
|
||||
return 8;
|
||||
#endif
|
||||
@ -1011,7 +995,7 @@ struct hashtable dns_table = {0, 4, {0,0,0,0}, NULL, NULL, NULL};
|
||||
struct hashtable dns6_table = {0, 16, {0,0,0,0}, NULL, NULL, NULL};
|
||||
|
||||
|
||||
void nametohash(const unsigned char * name, unsigned char *hash, unsigned char *rnd){
|
||||
void nametohash(const char * name, char *hash, char *rnd){
|
||||
unsigned i, j, k;
|
||||
memcpy(hash, rnd, sizeof(unsigned)*4);
|
||||
for(i=0, j=0, k=0; name[j]; j++){
|
||||
@ -1023,7 +1007,7 @@ void nametohash(const unsigned char * name, unsigned char *hash, unsigned char *
|
||||
}
|
||||
}
|
||||
|
||||
unsigned hashindex(struct hashtable *ht, const unsigned char* hash){
|
||||
unsigned hashindex(struct hashtable *ht, const char* hash){
|
||||
unsigned t1, t2, t3, t4;
|
||||
t1 = *(unsigned *)hash;
|
||||
t2 = *(unsigned *)(hash + sizeof(unsigned));
|
||||
@ -1102,7 +1086,7 @@ int inithashtable(struct hashtable *ht, unsigned nhashsize){
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires){
|
||||
void hashadd(struct hashtable *ht, const char* name, char* value, time_t expires){
|
||||
struct hashentry * hen, *he;
|
||||
struct hashentry ** hep;
|
||||
|
||||
@ -1115,7 +1099,7 @@ void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* val
|
||||
}
|
||||
hen = ht->hashempty;
|
||||
ht->hashempty = ht->hashempty->next;
|
||||
nametohash(name, hen->hash, (unsigned char *)ht->rnd);
|
||||
nametohash(name, hen->hash, (char *)ht->rnd);
|
||||
memcpy(hen->value, value, ht->recsize);
|
||||
hen->expires = expires;
|
||||
hen->next = NULL;
|
||||
@ -1135,8 +1119,8 @@ void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* val
|
||||
pthread_mutex_unlock(&hash_mutex);
|
||||
}
|
||||
|
||||
unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsigned char* value, unsigned *ttl){
|
||||
unsigned char hash[sizeof(unsigned)*4];
|
||||
unsigned long hashresolv(struct hashtable *ht, const char* name, char* value, unsigned *ttl){
|
||||
char hash[sizeof(unsigned)*4];
|
||||
struct hashentry ** hep;
|
||||
struct hashentry *he;
|
||||
unsigned index;
|
||||
@ -1146,7 +1130,7 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign
|
||||
pthread_mutex_unlock(&hash_mutex);
|
||||
return 0;
|
||||
}
|
||||
nametohash(name, hash, (unsigned char *)ht->rnd);
|
||||
nametohash(name, hash, (char *)ht->rnd);
|
||||
index = hashindex(ht, hash);
|
||||
for(hep = ht->hashtable + index; (he = *hep)!=NULL; ){
|
||||
if(he->expires < conf.time) {
|
||||
@ -1171,7 +1155,7 @@ struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0}
|
||||
struct nserver authnserver;
|
||||
|
||||
|
||||
unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth){
|
||||
unsigned long udpresolve(int af, char * name, char * value, unsigned *retttl, struct clientparam* param, int makeauth){
|
||||
|
||||
int i,n;
|
||||
unsigned long retval;
|
||||
@ -1185,7 +1169,8 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
||||
n = (makeauth && !SAISNULL(&authnserver.addr))? 1 : numservers;
|
||||
for(i=0; i<n; i++){
|
||||
unsigned short nq, na;
|
||||
unsigned char b[4098], *buf, *s1, *s2;
|
||||
char b[4098], *s1, *s2;
|
||||
unsigned char *buf;
|
||||
int j, k, len, flen;
|
||||
SOCKET sock;
|
||||
unsigned ttl;
|
||||
@ -1199,7 +1184,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
||||
int usetcp = 0;
|
||||
unsigned short serial = 1;
|
||||
|
||||
buf = b+2;
|
||||
buf = (unsigned char*)b+2;
|
||||
|
||||
sinsl = (param && !makeauth)? ¶m->sinsl : &addr;
|
||||
sinsr = (param && !makeauth)? ¶m->sinsr : &addr;
|
||||
@ -1257,7 +1242,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
||||
memcpy(buf + 13, name, len);
|
||||
len += 13;
|
||||
buf[len] = 0;
|
||||
for(s2 = buf + 12; (s1 = (unsigned char *)strchr((char *)s2 + 1, '.')); s2 = s1)*s2 = (unsigned char)((s1 - s2) - 1);
|
||||
for(s2 = buf + 12; (s1 = (char *)strchr((char *)s2 + 1, '.')); s2 = s1)*s2 = (char)((s1 - s2) - 1);
|
||||
*s2 = (len - (int)(s2 - buf)) - 1;
|
||||
len++;
|
||||
buf[len++] = 0;
|
||||
@ -1343,7 +1328,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
||||
}
|
||||
*s2 = 0;
|
||||
if(param->username)myfree(param->username);
|
||||
param->username = (unsigned char *)mystrdup ((char *)buf + k + 13);
|
||||
param->username = mystrdup ((char *)buf + k + 13);
|
||||
|
||||
return udpresolve(af,param->username, value, NULL, NULL, 2);
|
||||
}
|
||||
@ -1352,11 +1337,11 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned long myresolver(int af, unsigned char * name, unsigned char * value){
|
||||
unsigned long myresolver(int af, char * name, char * value){
|
||||
return udpresolve(af, name, value, NULL, NULL, 0);
|
||||
}
|
||||
|
||||
unsigned long fakeresolver (int af, unsigned char *name, unsigned char * value){
|
||||
unsigned long fakeresolver (int af, char *name, char * value){
|
||||
memset(value, 0, af == AF_INET6? 16 : 4);
|
||||
if(af == AF_INET6){
|
||||
memset(value, 0, 16);
|
||||
|
@ -168,22 +168,7 @@ char radiussecret[64]="";
|
||||
|
||||
pthread_mutex_t rad_mutex;
|
||||
|
||||
void md5_calc(unsigned char *output, unsigned char *input,
|
||||
unsigned int inputlen);
|
||||
|
||||
|
||||
char *strNcpy(char *dest, const char *src, int n)
|
||||
{
|
||||
if (n > 0)
|
||||
strncpy(dest, src, n);
|
||||
else
|
||||
n = 1;
|
||||
dest[n - 1] = 0;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
void md5_calc(unsigned char *output, unsigned char *input,
|
||||
static void md5_calc(unsigned char *output, unsigned char *input,
|
||||
unsigned int inlen)
|
||||
{
|
||||
MD5_CTX context;
|
||||
@ -220,7 +205,7 @@ static int calc_replydigest(char *packet, char *original, const char *secret, in
|
||||
}
|
||||
|
||||
#define AUTH_PASS_LEN (16)
|
||||
int rad_pwencode(char *passwd, int *pwlen, const char *secret, const char *vector)
|
||||
static int rad_pwencode(char *passwd, int *pwlen, const char *secret, const char *vector)
|
||||
{
|
||||
uint8_t buffer[AUTH_VECTOR_LEN + MAX_STRING_LEN + 1];
|
||||
char digest[AUTH_VECTOR_LEN];
|
||||
@ -258,7 +243,7 @@ int rad_pwencode(char *passwd, int *pwlen, const char *secret, const char *vecto
|
||||
}
|
||||
|
||||
|
||||
void random_vector(uint8_t *vector, struct clientparam *param)
|
||||
static void random_vector(uint8_t *vector, struct clientparam *param)
|
||||
{
|
||||
int i;
|
||||
static int did_random = 0;
|
||||
@ -300,7 +285,7 @@ typedef struct radius_packet_t {
|
||||
|
||||
#define packet (*((radius_packet_t *)inbuf))
|
||||
|
||||
int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, int stop){
|
||||
static int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, int stop){
|
||||
int id;
|
||||
int res = 4;
|
||||
SOCKET sockfd = -1;
|
||||
@ -518,7 +503,7 @@ int radbuf(struct clientparam * param, unsigned char * inbuf, int auth, int stop
|
||||
}
|
||||
|
||||
|
||||
int radsend(const unsigned char *inbuf, int total_length, int auth,
|
||||
static int radsend(const unsigned char *inbuf, int total_length, int auth,
|
||||
#ifdef NOIPV6
|
||||
struct sockaddr_in* sinsl
|
||||
#else
|
||||
@ -685,12 +670,12 @@ int radauth(struct clientparam * param){
|
||||
}
|
||||
|
||||
|
||||
int raddobuf(struct clientparam * param, unsigned char * buf, const unsigned char *s){
|
||||
return radbuf(param, buf, 0, 1);
|
||||
int raddobuf(struct clientparam * param, char * buf, const unsigned char *s){
|
||||
return radbuf(param, (unsigned char *)buf, 0, 1);
|
||||
}
|
||||
|
||||
void logradius(const unsigned char *buf, int len, struct LOGGER *logger){
|
||||
if(len)radsend(buf, len, 0, NULL);
|
||||
void logradius(const char *buf, int len, struct LOGGER *logger){
|
||||
if(len)radsend((unsigned char *)buf, len, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
14
src/base64.c
14
src/base64.c
@ -7,11 +7,11 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
static const unsigned char base64digits[] =
|
||||
static const char base64digits[] =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
|
||||
#define BAD 255
|
||||
static const unsigned char base64val[] = {
|
||||
static const char base64val[] = {
|
||||
BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
|
||||
BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
|
||||
BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63,
|
||||
@ -23,7 +23,7 @@ static const unsigned char base64val[] = {
|
||||
};
|
||||
#define DECODE64(c) ((c > 32 && c<127)? base64val[(int)c] : BAD)
|
||||
|
||||
unsigned char* en64 (const unsigned char *in, unsigned char *out, int inlen)
|
||||
unsigned char* en64 (const char *in, char *out, int inlen)
|
||||
{
|
||||
for (; inlen > 0; inlen -= 3, in+=3)
|
||||
{
|
||||
@ -79,9 +79,9 @@ int de64 (const char *in, char *out, int maxlen)
|
||||
return (len);
|
||||
}
|
||||
|
||||
unsigned char hex[] = "0123456789ABCDEF";
|
||||
char hex[] = "0123456789ABCDEF";
|
||||
|
||||
void tohex(unsigned char *in, unsigned char *out, int len){
|
||||
void tohex(char *in, char *out, int len){
|
||||
int i;
|
||||
|
||||
for (i=0; i<len; i++) {
|
||||
@ -91,13 +91,13 @@ void tohex(unsigned char *in, unsigned char *out, int len){
|
||||
out[(i<<1)] = 0;
|
||||
}
|
||||
|
||||
void fromhex(unsigned char *in, unsigned char *out, int len){
|
||||
void fromhex(char *in, char *out, int len){
|
||||
char *c1, *c2;
|
||||
for (; len > 0; len--) {
|
||||
c1 = strchr((char *)hex, *in++);
|
||||
c2 = strchr((char *)hex, *in++);
|
||||
if(c1 && c2){
|
||||
*out++ = ((unsigned char)((unsigned char *)c1 - hex) << 4) + (unsigned char)((unsigned char *)c2 - hex);
|
||||
*out++ = (char)(unsigned char)(((c1 - hex) << 4) + (c2 - hex));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
32
src/common.c
32
src/common.c
@ -31,7 +31,7 @@ int randomizer = 1;
|
||||
|
||||
#endif
|
||||
|
||||
unsigned char **stringtable = NULL;
|
||||
char **stringtable = NULL;
|
||||
|
||||
#ifdef WITH_LINUX_FUTEX
|
||||
int sys_futex(void *addr1, int op, int val1, struct timespec *timeout, void *addr2, int val3)
|
||||
@ -124,12 +124,12 @@ struct extparam conf = {
|
||||
NULL, /* BANDLIMFUNC bandlimfunc; */
|
||||
NULL, /* TRAFCOUNTFUNC trafcountfunc; */
|
||||
NULL, /* void (*prelog)(struct clientparam * param); */
|
||||
NULL, NULL, /* unsigned char *logtarget, *logformat; */
|
||||
NULL, NULL, /* char *logtarget, *logformat; */
|
||||
NULL, /* struct filemon * fmon; */
|
||||
NULL, /* struct filter * filters; */
|
||||
NULL, /* struct auth *authfuncs; */
|
||||
NULL, /* char* demanddialprog; */
|
||||
NULL, /* unsigned char **stringtable; */
|
||||
NULL, /* char **stringtable; */
|
||||
(time_t)0, /* time_t time; */
|
||||
0,0, /* unsigned logdumpsrv, logdumpcli; */
|
||||
'@', /* char delimchar; */
|
||||
@ -270,7 +270,7 @@ int ceparseargs(const char *str){
|
||||
|
||||
#endif
|
||||
|
||||
int parsehost(int family, unsigned char *host, struct sockaddr *sa){
|
||||
int parsehost(int family, char *host, struct sockaddr *sa){
|
||||
char *sp=NULL,*se=NULL;
|
||||
unsigned short port=0;
|
||||
int ret = 0;
|
||||
@ -306,7 +306,7 @@ int parsehostname(char *hostname, struct clientparam *param, unsigned short port
|
||||
}
|
||||
if(hostname != (char *)param->hostname){
|
||||
if(param->hostname) myfree(param->hostname);
|
||||
param->hostname = (unsigned char *)mystrdup(hostname + (se!=0));
|
||||
param->hostname = (char *)mystrdup(hostname + (se!=0));
|
||||
}
|
||||
if(sp){
|
||||
port = atoi(sp+1);
|
||||
@ -329,11 +329,11 @@ int parseusername(char *username, struct clientparam *param, int extpasswd){
|
||||
if(sp) *sp = 0;
|
||||
if(*(sb+1)) {
|
||||
if(param->password) myfree(param->password);
|
||||
param->password = (unsigned char *)mystrdup(sb+1);
|
||||
param->password = (char *)mystrdup(sb+1);
|
||||
}
|
||||
if(*username) {
|
||||
if(param->username) myfree(param->username);
|
||||
param->username = (unsigned char *)mystrdup(username);
|
||||
param->username = (char *)mystrdup(username);
|
||||
}
|
||||
username = se+1;
|
||||
}
|
||||
@ -342,11 +342,11 @@ int parseusername(char *username, struct clientparam *param, int extpasswd){
|
||||
if(sp){
|
||||
*sp = 0;
|
||||
if(param->extpassword) myfree(param->extpassword);
|
||||
param->extpassword = (unsigned char *) mystrdup(sp+1);
|
||||
param->extpassword = (char *) mystrdup(sp+1);
|
||||
}
|
||||
}
|
||||
if(param->extusername) myfree(param->extusername);
|
||||
param->extusername = (unsigned char *)mystrdup(username);
|
||||
param->extusername = (char *)mystrdup(username);
|
||||
if(sb) *sb = ':';
|
||||
if(se) *se = ':';
|
||||
if(sp) *sp = ':';
|
||||
@ -429,7 +429,7 @@ int doconnect(struct clientparam * param){
|
||||
#endif
|
||||
#ifdef SO_REUSEPORT
|
||||
opt = 1;
|
||||
so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int));
|
||||
so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEPORT, (char *)&opt, sizeof(int));
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
@ -462,7 +462,7 @@ int doconnect(struct clientparam * param){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask) {
|
||||
int scanaddr(const char *s, unsigned long * ip, unsigned long * mask) {
|
||||
unsigned d1, d2, d3, d4, m;
|
||||
int res;
|
||||
if ((res = sscanf((char *)s, "%u.%u.%u.%u/%u", &d1, &d2, &d3, &d4, &m)) < 4) return 0;
|
||||
@ -495,7 +495,7 @@ struct hostent * my_gethostbyname(char *name, char *buf, struct hostent *hp){
|
||||
#endif
|
||||
|
||||
#ifdef NOIPV6
|
||||
unsigned long getip(unsigned char *name){
|
||||
unsigned long getip(char *name){
|
||||
unsigned long retval;
|
||||
int i;
|
||||
int ndots = 0;
|
||||
@ -522,8 +522,8 @@ unsigned long getip(unsigned char *name){
|
||||
}
|
||||
}
|
||||
if((tmpresolv=resolvfunc)){
|
||||
if((*tmpresolv)(AF_INET, name, (unsigned char *)&retval)) return retval;
|
||||
return (*tmpresolv)(AF_INET, name, (unsigned char *)&retval)?retval:0;
|
||||
if((*tmpresolv)(AF_INET, name, (char *)&retval)) return retval;
|
||||
return (*tmpresolv)(AF_INET, name, (char *)&retval)?retval:0;
|
||||
}
|
||||
#if !defined(_WIN32) && !defined(GETHOSTBYNAME_R)
|
||||
if(!ghbn_init){
|
||||
@ -548,7 +548,7 @@ unsigned long getip(unsigned char *name){
|
||||
}
|
||||
#endif
|
||||
|
||||
int afdetect(unsigned char *name){
|
||||
int afdetect(char *name){
|
||||
int ndots=0, ncols=0, nhex=0;
|
||||
int i;
|
||||
|
||||
@ -580,7 +580,7 @@ int afdetect(unsigned char *name){
|
||||
|
||||
}
|
||||
|
||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){
|
||||
unsigned long getip46(int family, char *name, struct sockaddr *sa){
|
||||
#ifndef NOIPV6
|
||||
int detect;
|
||||
struct addrinfo *ai, hint;
|
||||
|
180
src/conf.c
180
src/conf.c
@ -131,7 +131,7 @@ int start_proxy_thread(struct child * chp){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_proxy(int argc, unsigned char ** argv){
|
||||
static int h_proxy(int argc, char ** argv){
|
||||
struct child ch;
|
||||
|
||||
ch.argc = argc;
|
||||
@ -216,12 +216,12 @@ static int h_proxy(int argc, unsigned char ** argv){
|
||||
return start_proxy_thread(&ch);
|
||||
}
|
||||
|
||||
static int h_internal(int argc, unsigned char ** argv){
|
||||
static int h_internal(int argc, char ** argv){
|
||||
getip46(46, argv[1], (struct sockaddr *)&conf.intsa);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_external(int argc, unsigned char ** argv){
|
||||
static int h_external(int argc, char ** argv){
|
||||
int res;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa6;
|
||||
@ -237,49 +237,49 @@ static int h_external(int argc, unsigned char ** argv){
|
||||
}
|
||||
|
||||
|
||||
static int h_log(int argc, unsigned char ** argv){
|
||||
static int h_log(int argc, char ** argv){
|
||||
myfree(conf.logtarget);
|
||||
if(argc < 2) conf.logtarget = (unsigned char *)mystrdup("");
|
||||
else conf.logtarget = (unsigned char *)mystrdup((char *)argv[1]);
|
||||
if(argc < 2) conf.logtarget = (char *)mystrdup("");
|
||||
else conf.logtarget = (char *)mystrdup((char *)argv[1]);
|
||||
if(argc > 2) {
|
||||
conf.logtype = getrotate(*argv[2]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_stacksize(int argc, unsigned char **argv){
|
||||
static int h_stacksize(int argc, char **argv){
|
||||
conf.stacksize = atoi((char *)argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int h_force(int argc, unsigned char **argv){
|
||||
static int h_force(int argc, char **argv){
|
||||
conf.noforce = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_noforce(int argc, unsigned char **argv){
|
||||
static int h_noforce(int argc, char **argv){
|
||||
conf.noforce = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_service(int argc, unsigned char **argv){
|
||||
static int h_service(int argc, char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_daemon(int argc, unsigned char **argv){
|
||||
static int h_daemon(int argc, char **argv){
|
||||
if(!conf.demon)daemonize();
|
||||
conf.demon = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_config(int argc, unsigned char **argv){
|
||||
static int h_config(int argc, char **argv){
|
||||
if(conf.conffile)myfree(conf.conffile);
|
||||
conf.conffile = mystrdup((char *)argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_include(int argc, unsigned char **argv){
|
||||
static int h_include(int argc, char **argv){
|
||||
int res;
|
||||
FILE *fp1;
|
||||
|
||||
@ -293,18 +293,18 @@ static int h_include(int argc, unsigned char **argv){
|
||||
return res;
|
||||
}
|
||||
|
||||
static int h_archiver(int argc, unsigned char **argv){
|
||||
static int h_archiver(int argc, char **argv){
|
||||
int j;
|
||||
|
||||
conf.archiver = myalloc(argc * sizeof(char *));
|
||||
if(conf.archiver) {
|
||||
conf.archiverc = argc;
|
||||
for(j = 0; j < conf.archiverc; j++) conf.archiver[j] = (unsigned char *)mystrdup((char *)argv[j]);
|
||||
for(j = 0; j < conf.archiverc; j++) conf.archiver[j] = (char *)mystrdup((char *)argv[j]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_counter(int argc, unsigned char **argv){
|
||||
static int h_counter(int argc, char **argv){
|
||||
struct counter_header ch1;
|
||||
if(conf.counterd >=0)close(conf.counterd);
|
||||
if(!conf.trafcountfunc) conf.trafcountfunc = trafcountfunc;
|
||||
@ -344,19 +344,19 @@ static int h_counter(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_rotate(int argc, unsigned char **argv){
|
||||
static int h_rotate(int argc, char **argv){
|
||||
conf.rotate = atoi((char *)argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_logformat(int argc, unsigned char **argv){
|
||||
unsigned char * old = conf.logformat;
|
||||
conf.logformat = (unsigned char *)mystrdup((char *)argv[1]);
|
||||
static int h_logformat(int argc, char **argv){
|
||||
char * old = conf.logformat;
|
||||
conf.logformat = (char *)mystrdup((char *)argv[1]);
|
||||
if(old) myfree(old);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_timeouts(int argc, unsigned char **argv){
|
||||
static int h_timeouts(int argc, char **argv){
|
||||
int j;
|
||||
|
||||
for(j = 0; conf.timeouts[j] && j + 1 < argc; j++) {
|
||||
@ -368,11 +368,11 @@ static int h_timeouts(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_noop(int argc, unsigned char **argv){
|
||||
static int h_noop(int argc, char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_auth(int argc, unsigned char **argv){
|
||||
static int h_auth(int argc, char **argv){
|
||||
struct auth *au, * newau;
|
||||
|
||||
freeauth(conf.authfuncs);
|
||||
@ -397,9 +397,9 @@ static int h_auth(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_users(int argc, unsigned char **argv){
|
||||
static int h_users(int argc, char **argv){
|
||||
int j;
|
||||
unsigned char *arg;
|
||||
char *arg;
|
||||
struct passwords *pwl = NULL;
|
||||
|
||||
for (j = 1; j<argc; j++) {
|
||||
@ -409,22 +409,22 @@ static int h_users(int argc, unsigned char **argv){
|
||||
}
|
||||
memset(pwl, 0, sizeof(struct passwords));
|
||||
|
||||
arg = (unsigned char *)strchr((char *)argv[j], ':');
|
||||
arg = (char *)strchr((char *)argv[j], ':');
|
||||
if(!arg||!arg[1]||!arg[2]||arg[3]!=':') {
|
||||
pwl->user = (unsigned char *)mystrdup((char *)argv[j]);
|
||||
pwl->user = (char *)mystrdup((char *)argv[j]);
|
||||
pwl->pwtype = SYS;
|
||||
}
|
||||
else {
|
||||
*arg = 0;
|
||||
pwl->user = (unsigned char *)mystrdup((char *)argv[j]);
|
||||
pwl->user = (char *)mystrdup((char *)argv[j]);
|
||||
if((arg[1] == 'C' && arg[2] == 'L' && (pwl->pwtype = CL)) ||
|
||||
(arg[1] == 'C' && arg[2] == 'R' && (pwl->pwtype = CR)) ||
|
||||
(arg[1] == 'N' && arg[2] == 'T' && (pwl->pwtype = NT)) ||
|
||||
(arg[1] == 'L' && arg[2] == 'M' && (pwl->pwtype = LM))){
|
||||
pwl->password = (unsigned char *)mystrdup((char *)arg+4);
|
||||
pwl->password = (char *)mystrdup((char *)arg+4);
|
||||
}
|
||||
else {
|
||||
pwl->password = (unsigned char *) mystrdup((char *)arg + 1);
|
||||
pwl->password = (char *) mystrdup((char *)arg + 1);
|
||||
pwl->pwtype = UN;
|
||||
}
|
||||
}
|
||||
@ -438,7 +438,7 @@ static int h_users(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_maxconn(int argc, unsigned char **argv){
|
||||
static int h_maxconn(int argc, char **argv){
|
||||
conf.maxchild = atoi((char *)argv[1]);
|
||||
if(!conf.maxchild) {
|
||||
return(1);
|
||||
@ -458,21 +458,21 @@ static int h_maxconn(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_flush(int argc, unsigned char **argv){
|
||||
static int h_flush(int argc, char **argv){
|
||||
freeacl(conf.acl);
|
||||
conf.acl = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
static int h_flushusers(int argc, unsigned char **argv){
|
||||
static int h_flushusers(int argc, char **argv){
|
||||
freepwl(conf.pwl);
|
||||
conf.pwl = NULL;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
static int h_nserver(int argc, unsigned char **argv){
|
||||
static int h_nserver(int argc, char **argv){
|
||||
char *str;
|
||||
|
||||
if(numservers < MAXNSERVERS) {
|
||||
@ -491,7 +491,7 @@ static int h_nserver(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_authnserver(int argc, unsigned char **argv){
|
||||
static int h_authnserver(int argc, char **argv){
|
||||
char *str;
|
||||
|
||||
if((str = strchr((char *)argv[1], '/')))
|
||||
@ -505,12 +505,12 @@ static int h_authnserver(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_fakeresolve(int argc, unsigned char **argv){
|
||||
static int h_fakeresolve(int argc, char **argv){
|
||||
resolvfunc = fakeresolver;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_nscache(int argc, unsigned char **argv){
|
||||
static int h_nscache(int argc, char **argv){
|
||||
int res;
|
||||
|
||||
res = atoi((char *)argv[1]);
|
||||
@ -524,7 +524,7 @@ static int h_nscache(int argc, unsigned char **argv){
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static int h_nscache6(int argc, unsigned char **argv){
|
||||
static int h_nscache6(int argc, char **argv){
|
||||
int res;
|
||||
|
||||
res = atoi((char *)argv[1]);
|
||||
@ -539,7 +539,7 @@ static int h_nscache6(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_nsrecord(int argc, unsigned char **argv){
|
||||
static int h_nsrecord(int argc, char **argv){
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa;
|
||||
#else
|
||||
@ -552,7 +552,7 @@ static int h_nsrecord(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_system(int argc, unsigned char **argv){
|
||||
static int h_system(int argc, char **argv){
|
||||
int res;
|
||||
|
||||
if((res = system((char *)argv[1])) == -1){
|
||||
@ -562,7 +562,7 @@ static int h_system(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_pidfile(int argc, unsigned char **argv){
|
||||
static int h_pidfile(int argc, char **argv){
|
||||
FILE *pidf;
|
||||
|
||||
if(!(pidf = fopen((char *)argv[1], "w"))){
|
||||
@ -574,7 +574,7 @@ static int h_pidfile(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_monitor(int argc, unsigned char **argv){
|
||||
static int h_monitor(int argc, char **argv){
|
||||
struct filemon * fm;
|
||||
|
||||
fm = myalloc(sizeof (struct filemon));
|
||||
@ -590,7 +590,7 @@ static int h_monitor(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_parent(int argc, unsigned char **argv){
|
||||
static int h_parent(int argc, char **argv){
|
||||
struct ace *acl = NULL;
|
||||
struct chain *chains;
|
||||
|
||||
@ -637,10 +637,10 @@ static int h_parent(int argc, unsigned char **argv){
|
||||
#else
|
||||
getip46(46, argv[3], (struct sockaddr *)&chains->addr);
|
||||
#endif
|
||||
chains->exthost = (unsigned char *)mystrdup((char *)argv[3]);
|
||||
chains->exthost = (char *)mystrdup((char *)argv[3]);
|
||||
*SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4]));
|
||||
if(argc > 5) chains->extuser = (unsigned char *)mystrdup((char *)argv[5]);
|
||||
if(argc > 6) chains->extpass = (unsigned char *)mystrdup((char *)argv[6]);
|
||||
if(argc > 5) chains->extuser = (char *)mystrdup((char *)argv[5]);
|
||||
if(argc > 6) chains->extpass = (char *)mystrdup((char *)argv[6]);
|
||||
if(!acl->chains) {
|
||||
acl->chains = chains;
|
||||
}
|
||||
@ -654,7 +654,7 @@ static int h_parent(int argc, unsigned char **argv){
|
||||
|
||||
}
|
||||
|
||||
static int h_nolog(int argc, unsigned char **argv){
|
||||
static int h_nolog(int argc, char **argv){
|
||||
struct ace *acl = NULL;
|
||||
|
||||
acl = conf.acl;
|
||||
@ -668,7 +668,7 @@ static int h_nolog(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int scanipl(unsigned char *arg, struct iplist *dst){
|
||||
int scanipl(char *arg, struct iplist *dst){
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa;
|
||||
#else
|
||||
@ -686,7 +686,7 @@ int scanipl(unsigned char *arg, struct iplist *dst){
|
||||
dst->family = *SAFAMILY(&sa);
|
||||
if(dash){
|
||||
if(afdetect(dash+1) == -1) return 1;
|
||||
if(!getip46(46, (unsigned char *)dash+1, (struct sockaddr *)&sa)) return 2;
|
||||
if(!getip46(46, (char *)dash+1, (struct sockaddr *)&sa)) return 2;
|
||||
memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa));
|
||||
if(*SAFAMILY(&sa) != dst->family || memcmp(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)) < 0) return 3;
|
||||
return 0;
|
||||
@ -700,12 +700,12 @@ int scanipl(unsigned char *arg, struct iplist *dst){
|
||||
int i, nbytes = masklen / 8, nbits = (8 - (masklen % 8)) % 8;
|
||||
|
||||
for(i = addrlen; i>(nbytes + (nbits > 0)); i--){
|
||||
((unsigned char *)&dst->ip_from)[i-1] = 0x00;
|
||||
((unsigned char *)&dst->ip_to)[i-1] = 0xff;
|
||||
((char *)&dst->ip_from)[i-1] = 0x00;
|
||||
((char *)&dst->ip_to)[i-1] = 0xff;
|
||||
}
|
||||
for(;nbits;nbits--){
|
||||
((unsigned char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1));
|
||||
((unsigned char *)&dst->ip_to)[nbytes] |= (0x01<<(nbits-1));
|
||||
((char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1));
|
||||
((char *)&dst->ip_to)[nbytes] |= (0x01<<(nbits-1));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -713,9 +713,9 @@ int scanipl(unsigned char *arg, struct iplist *dst){
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
struct ace * make_ace (int argc, char ** argv){
|
||||
struct ace * acl;
|
||||
unsigned char *arg;
|
||||
char *arg;
|
||||
struct iplist *ipl=NULL;
|
||||
struct portlist *portl=NULL;
|
||||
struct userlist *userl=NULL;
|
||||
@ -727,7 +727,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
memset(acl, 0, sizeof(struct ace));
|
||||
if(argc > 0 && strcmp("*", (char *)argv[0])) {
|
||||
arg = argv[0];
|
||||
arg = (unsigned char *)strtok((char *)arg, ",");
|
||||
arg = (char *)strtok((char *)arg, ",");
|
||||
do {
|
||||
if(!acl->users) {
|
||||
acl->users = userl = myalloc(sizeof(struct userlist));
|
||||
@ -741,11 +741,11 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
return(NULL);
|
||||
}
|
||||
memset(userl, 0, sizeof(struct userlist));
|
||||
userl->user=(unsigned char*)mystrdup((char *)arg);
|
||||
} while((arg = (unsigned char *)strtok((char *)NULL, ",")));
|
||||
userl->user=(char*)mystrdup((char *)arg);
|
||||
} while((arg = (char *)strtok((char *)NULL, ",")));
|
||||
}
|
||||
if(argc > 1 && strcmp("*", (char *)argv[1])) {
|
||||
arg = (unsigned char *)strtok((char *)argv[1], ",");
|
||||
arg = (char *)strtok((char *)argv[1], ",");
|
||||
do {
|
||||
if(!acl->src) {
|
||||
acl->src = ipl = myalloc(sizeof(struct iplist));
|
||||
@ -763,13 +763,13 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum);
|
||||
return(NULL);
|
||||
}
|
||||
} while((arg = (unsigned char *)strtok((char *)NULL, ",")));
|
||||
} while((arg = (char *)strtok((char *)NULL, ",")));
|
||||
}
|
||||
if(argc > 2 && strcmp("*", (char *)argv[2])) {
|
||||
arg = (unsigned char *)strtok((char *)argv[2], ",");
|
||||
arg = (char *)strtok((char *)argv[2], ",");
|
||||
do {
|
||||
int arglen;
|
||||
unsigned char *pattern;
|
||||
char *pattern;
|
||||
struct iplist tmpip={NULL};
|
||||
|
||||
arglen = (int)strlen((char *)arg);
|
||||
@ -799,7 +799,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
arglen--;
|
||||
hostnamel->matchtype ^= MATCHBEGIN;
|
||||
}
|
||||
hostnamel->name = (unsigned char *) mystrdup( (char *)pattern);
|
||||
hostnamel->name = (char *) mystrdup( (char *)pattern);
|
||||
if(!hostnamel->name) {
|
||||
fprintf(stderr, "No memory for ACL entry, line %d\n", linenum);
|
||||
return(NULL);
|
||||
@ -820,10 +820,10 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
}
|
||||
*ipl = tmpip;
|
||||
}
|
||||
}while((arg = (unsigned char *)strtok((char *)NULL, ",")));
|
||||
}while((arg = (char *)strtok((char *)NULL, ",")));
|
||||
}
|
||||
if(argc > 3 && strcmp("*", (char *)argv[3])) {
|
||||
arg = (unsigned char *)strtok((char *)argv[3], ",");
|
||||
arg = (char *)strtok((char *)argv[3], ",");
|
||||
do {
|
||||
if(!acl->ports) {
|
||||
acl->ports = portl = myalloc(sizeof(struct portlist));
|
||||
@ -843,10 +843,10 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
return(NULL);
|
||||
}
|
||||
if (res == 1) portl->endport = portl->startport;
|
||||
} while((arg = (unsigned char *)strtok((char *)NULL, ",")));
|
||||
} while((arg = (char *)strtok((char *)NULL, ",")));
|
||||
}
|
||||
if(argc > 4 && strcmp("*", (char *)argv[4])) {
|
||||
arg = (unsigned char *)strtok((char *)argv[4], ",");
|
||||
arg = (char *)strtok((char *)argv[4], ",");
|
||||
do {
|
||||
if(!strcmp((char *)arg, "CONNECT")){
|
||||
acl->operation |= CONNECT;
|
||||
@ -909,7 +909,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
fprintf(stderr, "Unknown operation type: %s line %d\n", arg, linenum);
|
||||
return(NULL);
|
||||
}
|
||||
} while((arg = (unsigned char *)strtok((char *)NULL, ",")));
|
||||
} while((arg = (char *)strtok((char *)NULL, ",")));
|
||||
}
|
||||
if(argc > 5){
|
||||
for(arg = argv[5]; *arg;){
|
||||
@ -973,7 +973,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){
|
||||
}
|
||||
|
||||
|
||||
static int h_ace(int argc, unsigned char **argv){
|
||||
static int h_ace(int argc, char **argv){
|
||||
int res = 0;
|
||||
int offset = 0;
|
||||
struct ace *acl = NULL;
|
||||
@ -1187,26 +1187,26 @@ static int h_ace(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_logdump(int argc, unsigned char **argv){
|
||||
static int h_logdump(int argc, char **argv){
|
||||
conf.logdumpsrv = (unsigned) atoi((char *) *(argv + 1));
|
||||
if(argc > 2) conf.logdumpcli = (unsigned) atoi((char *) *(argv + 2));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int h_filtermaxsize(int argc, unsigned char **argv){
|
||||
static int h_filtermaxsize(int argc, char **argv){
|
||||
conf.filtermaxsize = atoi((char *) *(argv + 1));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_delimchar(int argc, unsigned char **argv){
|
||||
static int h_delimchar(int argc, char **argv){
|
||||
conf.delimchar = *argv[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifndef NORADIUS
|
||||
static int h_radius(int argc, unsigned char **argv){
|
||||
static int h_radius(int argc, char **argv){
|
||||
unsigned short port;
|
||||
|
||||
/*
|
||||
@ -1248,7 +1248,7 @@ static int h_radius(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
static int h_authcache(int argc, unsigned char **argv){
|
||||
static int h_authcache(int argc, char **argv){
|
||||
conf.authcachetype = 0;
|
||||
if(strstr((char *) *(argv + 1), "ip")) conf.authcachetype |= 1;
|
||||
if(strstr((char *) *(argv + 1), "user")) conf.authcachetype |= 2;
|
||||
@ -1262,7 +1262,7 @@ static int h_authcache(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_plugin(int argc, unsigned char **argv){
|
||||
static int h_plugin(int argc, char **argv){
|
||||
#ifdef NOPLUGINS
|
||||
return 999;
|
||||
#else
|
||||
@ -1302,7 +1302,7 @@ static int h_plugin(int argc, unsigned char **argv){
|
||||
|
||||
#ifndef _WIN32
|
||||
|
||||
uid_t strtouid(unsigned char *str){
|
||||
uid_t strtouid(char *str){
|
||||
uid_t res = 0;
|
||||
|
||||
if(!isnumber(*(char *)str)){
|
||||
@ -1315,7 +1315,7 @@ uid_t strtouid(unsigned char *str){
|
||||
}
|
||||
|
||||
|
||||
static int h_setuid(int argc, unsigned char **argv){
|
||||
static int h_setuid(int argc, char **argv){
|
||||
uid_t res = 0;
|
||||
res = strtouid(argv[1]);
|
||||
if(!res || setreuid(res,res)) {
|
||||
@ -1325,7 +1325,7 @@ static int h_setuid(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
gid_t strtogid(unsigned char *str){
|
||||
gid_t strtogid(char *str){
|
||||
gid_t res = 0;
|
||||
|
||||
if(!isnumber(*(char *)str)){
|
||||
@ -1337,7 +1337,7 @@ gid_t strtogid(unsigned char *str){
|
||||
return res;
|
||||
}
|
||||
|
||||
static int h_setgid(int argc, unsigned char **argv){
|
||||
static int h_setgid(int argc, char **argv){
|
||||
gid_t res = 0;
|
||||
|
||||
res = strtogid(argv[1]);
|
||||
@ -1349,7 +1349,7 @@ static int h_setgid(int argc, unsigned char **argv){
|
||||
}
|
||||
|
||||
|
||||
static int h_chroot(int argc, unsigned char **argv){
|
||||
static int h_chroot(int argc, char **argv){
|
||||
uid_t uid = 0;
|
||||
gid_t gid = 0;
|
||||
if(argc > 2) {
|
||||
@ -1468,15 +1468,15 @@ struct commands commandhandlers[]={
|
||||
{specificcommands, "", h_noop, 1, 0}
|
||||
};
|
||||
|
||||
int parsestr (unsigned char *str, unsigned char **argm, int nitems, unsigned char ** buff, int *inbuf, int *bufsize){
|
||||
int parsestr (char *str, char **argm, int nitems, char ** buff, int *inbuf, int *bufsize){
|
||||
#define buf (*buff)
|
||||
int argc = 0;
|
||||
int space = 1;
|
||||
int comment = 0;
|
||||
unsigned char * incbegin = 0;
|
||||
char * incbegin = 0;
|
||||
int fd;
|
||||
int res, len;
|
||||
unsigned char *str1;
|
||||
char *str1;
|
||||
|
||||
for(;;str++){
|
||||
if(*str == '\"'){
|
||||
@ -1566,15 +1566,15 @@ int parsestr (unsigned char *str, unsigned char **argm, int nitems, unsigned cha
|
||||
|
||||
|
||||
int readconfig(FILE * fp){
|
||||
unsigned char ** argv = NULL;
|
||||
unsigned char * buf = NULL;
|
||||
char ** argv = NULL;
|
||||
char * buf = NULL;
|
||||
int bufsize = STRINGBUF*2;
|
||||
int inbuf = 0;
|
||||
int argc;
|
||||
struct commands * cm;
|
||||
int res = 0;
|
||||
|
||||
if( !(buf = myalloc(bufsize)) || ! (argv = myalloc((NPARAMS + 1) * sizeof(unsigned char *))) ) {
|
||||
if( !(buf = myalloc(bufsize)) || ! (argv = myalloc((NPARAMS + 1) * sizeof(char *))) ) {
|
||||
fprintf(stderr, "No memory for configuration");
|
||||
return(10);
|
||||
}
|
||||
@ -1642,9 +1642,9 @@ void freeconf(struct extparam *confp){
|
||||
struct ace *acl;
|
||||
struct filemon *fm;
|
||||
int counterd, archiverc;
|
||||
unsigned char *logtarget;
|
||||
unsigned char **archiver;
|
||||
unsigned char * logformat;
|
||||
char *logtarget;
|
||||
char **archiver;
|
||||
char * logformat;
|
||||
|
||||
int i;
|
||||
|
||||
@ -1711,7 +1711,7 @@ void freeconf(struct extparam *confp){
|
||||
|
||||
{
|
||||
char * args[] = {"auth", "iponly", NULL};
|
||||
h_auth(2, (unsigned char **)args);
|
||||
h_auth(2, (char **)args);
|
||||
}
|
||||
if(tc)dumpcounters(tc,counterd);
|
||||
for(; tc; tc = (struct trafcount *) itfree(tc, tc->next)){
|
||||
|
@ -153,12 +153,12 @@ void * dnsprchild(struct clientparam* param) {
|
||||
#endif
|
||||
}
|
||||
|
||||
if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){
|
||||
if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, (char *)buf, i, conf.timeouts[SINGLEBYTE_L]*1000) != i){
|
||||
RETURN(820);
|
||||
}
|
||||
param->statscli64 += i;
|
||||
param->nwrites++;
|
||||
len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, buf, BUFSIZE, conf.timeouts[DNS_TO]*1000);
|
||||
len = sockrecvfrom(param->remsock, (struct sockaddr *)¶m->sinsr, (char *)buf, BUFSIZE, conf.timeouts[DNS_TO]*1000);
|
||||
if(len <= 13) {
|
||||
RETURN(821);
|
||||
}
|
||||
@ -174,7 +174,7 @@ void * dnsprchild(struct clientparam* param) {
|
||||
if(len != us) RETURN(832);
|
||||
}
|
||||
if(buf[6] || buf[7]){
|
||||
if(socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){
|
||||
if(socksendto(param->clisock, (struct sockaddr *)¶m->sincr, (char *)buf, len, conf.timeouts[SINGLEBYTE_L]*1000) != len){
|
||||
RETURN(822);
|
||||
}
|
||||
RETURN(0);
|
||||
@ -185,7 +185,7 @@ void * dnsprchild(struct clientparam* param) {
|
||||
buf[2] = 0x85;
|
||||
buf[3] = 0x83;
|
||||
}
|
||||
res = socksendto(param->clisock, (struct sockaddr *)¶m->sincr, buf, len, conf.timeouts[SINGLEBYTE_L]*1000);
|
||||
res = socksendto(param->clisock, (struct sockaddr *)¶m->sincr, (char *)buf, len, conf.timeouts[SINGLEBYTE_L]*1000);
|
||||
if(res != len){RETURN(819);}
|
||||
if(!ip) {RETURN(888);}
|
||||
|
||||
|
52
src/ftp.c
52
src/ftp.c
@ -20,7 +20,7 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
|
||||
|
||||
if(innbuf)*innbuf = 0;
|
||||
if(len < 140) return 707;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
while((i = sockgetlinebuf(param, SERVER, (char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
}
|
||||
if(i < 3) return 706;
|
||||
buf[i] = 0;
|
||||
@ -28,13 +28,13 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
|
||||
*innbuf = i;
|
||||
return 702;
|
||||
}
|
||||
sprintf(buf, "USER %.128s\r\n", param->extusername?param->extusername:(unsigned char *)"anonymous");
|
||||
if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
sprintf(buf, "USER %.128s\r\n", param->extusername?param->extusername:(char *)"anonymous");
|
||||
if((int)socksend(param->remsock, (char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
return 703;
|
||||
}
|
||||
param->statscli64 += (int)strlen(buf);
|
||||
param->nwrites++;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
while((i = sockgetlinebuf(param, SERVER, (char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
}
|
||||
if(i < 3) return 704;
|
||||
buf[i] = 0;
|
||||
@ -43,15 +43,15 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
|
||||
sprintf(buf, "PASS %.128s\r\n",
|
||||
param->extusername?
|
||||
(param->extpassword?
|
||||
param->extpassword:(unsigned char *)"")
|
||||
:(unsigned char *)"3proxy@");
|
||||
param->extpassword:(char *)"")
|
||||
:(char *)"3proxy@");
|
||||
res = (int)strlen(buf);
|
||||
if((int)socksend(param->remsock, (unsigned char *)buf, res, conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
if((int)socksend(param->remsock, (char *)buf, res, conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
return 705;
|
||||
}
|
||||
param->statscli64 += res;
|
||||
param->nwrites++;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0){
|
||||
while((i = sockgetlinebuf(param, SERVER, (char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0){
|
||||
buf[i] = 0;
|
||||
res = (i>3 && buf[3] != '-')? atoi(buf)/100 : 0;
|
||||
if(res || (nbuf && (len-i) > 256 && i > 3)) {
|
||||
@ -71,18 +71,18 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ftpcd(struct clientparam *param, unsigned char* path, char *nbuf, int *innbuf){
|
||||
int ftpcd(struct clientparam *param, char* path, char *nbuf, int *innbuf){
|
||||
char buf[1024];
|
||||
int i;
|
||||
int inbuf = 0;
|
||||
|
||||
sprintf(buf, "CWD %.512s\r\n", path);
|
||||
if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
if((int)socksend(param->remsock, (char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
return 711;
|
||||
}
|
||||
param->statscli64 += (int)strlen(buf);
|
||||
param->nwrites++;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
while((i = sockgetlinebuf(param, SERVER, (char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
if(nbuf && innbuf && inbuf + i < *innbuf && i > 6) {
|
||||
memcpy(nbuf + inbuf, buf, i);
|
||||
inbuf += i;
|
||||
@ -95,7 +95,7 @@ int ftpcd(struct clientparam *param, unsigned char* path, char *nbuf, int *innbu
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ftpres(struct clientparam *param, unsigned char * buf, int l){
|
||||
int ftpres(struct clientparam *param, char * buf, int l){
|
||||
int i;
|
||||
|
||||
if (l < 16) return 755;
|
||||
@ -107,10 +107,10 @@ int ftpres(struct clientparam *param, unsigned char * buf, int l){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ftpsyst(struct clientparam *param, unsigned char *buf, unsigned len){
|
||||
int ftpsyst(struct clientparam *param, char *buf, unsigned len){
|
||||
int i;
|
||||
|
||||
if(socksend(param->remsock, (unsigned char *)"SYST\r\n", 6, conf.timeouts[STRING_S]) != 6){
|
||||
if(socksend(param->remsock, (char *)"SYST\r\n", 6, conf.timeouts[STRING_S]) != 6){
|
||||
return 721;
|
||||
}
|
||||
param->statscli64 += 6;
|
||||
@ -125,11 +125,11 @@ int ftpsyst(struct clientparam *param, unsigned char *buf, unsigned len){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ftppwd(struct clientparam *param, unsigned char *buf, unsigned len){
|
||||
int ftppwd(struct clientparam *param, char *buf, unsigned len){
|
||||
int i;
|
||||
char *b, *e;
|
||||
|
||||
if(socksend(param->remsock, (unsigned char *)"PWD\r\n", 5, conf.timeouts[STRING_S]) != 5){
|
||||
if(socksend(param->remsock, (char *)"PWD\r\n", 5, conf.timeouts[STRING_S]) != 5){
|
||||
return 731;
|
||||
}
|
||||
param->statscli64 += 5;
|
||||
@ -149,17 +149,17 @@ int ftppwd(struct clientparam *param, unsigned char *buf, unsigned len){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ftptype(struct clientparam *param, unsigned char* f_type){
|
||||
int ftptype(struct clientparam *param, char* f_type){
|
||||
char buf[1024];
|
||||
int i;
|
||||
|
||||
sprintf(buf, "TYPE %.512s\r\n", f_type);
|
||||
if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
if((int)socksend(param->remsock, (char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
return 741;
|
||||
}
|
||||
param->statscli64 += (int)strlen(buf);
|
||||
param->nwrites++;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
while((i = sockgetlinebuf(param, SERVER, (char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
}
|
||||
if(i < 3) return 742;
|
||||
if(buf[0] != '2') return 740;
|
||||
@ -176,12 +176,12 @@ SOCKET ftpdata(struct clientparam *param){
|
||||
unsigned short b5, b6;
|
||||
SASIZETYPE sasize;
|
||||
|
||||
if(socksend(param->remsock, (unsigned char *)"PASV\r\n", 6, conf.timeouts[STRING_S]) != 6){
|
||||
if(socksend(param->remsock, (char *)"PASV\r\n", 6, conf.timeouts[STRING_S]) != 6){
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
param->statscli64 += 6;
|
||||
param->nwrites++;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
while((i = sockgetlinebuf(param, SERVER, (char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
}
|
||||
if(i < 7) return INVALID_SOCKET;
|
||||
if(buf[0] != '2') return INVALID_SOCKET;
|
||||
@ -216,7 +216,7 @@ SOCKET ftpdata(struct clientparam *param){
|
||||
return s;
|
||||
}
|
||||
|
||||
SOCKET ftpcommand(struct clientparam *param, unsigned char * command, unsigned char *arg) {
|
||||
SOCKET ftpcommand(struct clientparam *param, char * command, char *arg) {
|
||||
char buf[1024];
|
||||
int i;
|
||||
SOCKET s;
|
||||
@ -225,15 +225,15 @@ SOCKET ftpcommand(struct clientparam *param, unsigned char * command, unsigned c
|
||||
s = ftpdata(param);
|
||||
if(s==INVALID_SOCKET) return INVALID_SOCKET;
|
||||
sprintf(buf, "%.15s%s%.512s\r\n", command, arg?
|
||||
(unsigned char *)" ":(unsigned char *)"",
|
||||
arg?arg:(unsigned char *)"");
|
||||
if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
" ":"",
|
||||
arg?arg:"");
|
||||
if((int)socksend(param->remsock, buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
|
||||
so._closesocket(s);
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
param->statscli64 += (int)strlen(buf);
|
||||
param->nwrites++;
|
||||
while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
while((i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
|
||||
}
|
||||
if(i < 3) {
|
||||
so._closesocket(s);
|
||||
|
40
src/ftppr.c
40
src/ftppr.c
@ -13,8 +13,8 @@
|
||||
|
||||
void * ftpprchild(struct clientparam* param) {
|
||||
int i=0, res;
|
||||
unsigned char *buf;
|
||||
unsigned char *se;
|
||||
char *buf;
|
||||
char *se;
|
||||
int status = 0;
|
||||
int inbuf;
|
||||
int pasv = 0;
|
||||
@ -29,7 +29,7 @@ void * ftpprchild(struct clientparam* param) {
|
||||
param->operation = CONNECT;
|
||||
lg.l_onoff = 1;
|
||||
lg.l_linger = conf.timeouts[STRING_L];;
|
||||
if(socksend(param->ctrlsock, (unsigned char *)"220 Ready\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (801);}
|
||||
if(socksend(param->ctrlsock, (char *)"220 Ready\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (801);}
|
||||
for(;;){
|
||||
i = sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 10, '\n', conf.timeouts[CONNECTION_S]);
|
||||
if(!i) {
|
||||
@ -37,7 +37,7 @@ void * ftpprchild(struct clientparam* param) {
|
||||
}
|
||||
if(i<4) {RETURN(802);}
|
||||
buf[i] = 0;
|
||||
if ((se=(unsigned char *)strchr((char *)buf, '\r'))) *se = 0;
|
||||
if ((se=(char *)strchr((char *)buf, '\r'))) *se = 0;
|
||||
if (req) myfree (req);
|
||||
req = NULL;
|
||||
|
||||
@ -50,7 +50,7 @@ void * ftpprchild(struct clientparam* param) {
|
||||
}
|
||||
if((res = (*param->srv->authfunc)(param))) {RETURN(res);}
|
||||
param->ctrlsocksrv = param->remsock;
|
||||
if(socksend(param->ctrlsock, (unsigned char *)"220 Ready\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (801);}
|
||||
if(socksend(param->ctrlsock, (char *)"220 Ready\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (801);}
|
||||
status = 1;
|
||||
}
|
||||
else if (!strncasecmp((char *)buf, "USER ", 5)){
|
||||
@ -59,12 +59,12 @@ void * ftpprchild(struct clientparam* param) {
|
||||
if((res = (*param->srv->authfunc)(param))) {RETURN(res);}
|
||||
param->ctrlsocksrv = param->remsock;
|
||||
}
|
||||
if(socksend(param->ctrlsock, (unsigned char *)"331 ok\r\n", 8, conf.timeouts[STRING_S])!=8) {RETURN (807);}
|
||||
if(socksend(param->ctrlsock, (char *)"331 ok\r\n", 8, conf.timeouts[STRING_S])!=8) {RETURN (807);}
|
||||
status = 2;
|
||||
|
||||
}
|
||||
else if (!strncasecmp((char *)buf, "PASS ", 5)){
|
||||
param->extpassword = (unsigned char *)mystrdup((char *)buf+5);
|
||||
param->extpassword = (char *)mystrdup((char *)buf+5);
|
||||
inbuf = BUFSIZE;
|
||||
res = ftplogin(param, (char *)buf, &inbuf);
|
||||
param->res = res;
|
||||
@ -129,16 +129,16 @@ void * ftpprchild(struct clientparam* param) {
|
||||
if(pasv == 1){
|
||||
if(*SAFAMILY(¶m->sincl) == AF_INET)
|
||||
sprintf((char *)buf, "227 OK (%u,%u,%u,%u,%u,%u)\r\n",
|
||||
(unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[0]),
|
||||
(unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[1]),
|
||||
(unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[2]),
|
||||
(unsigned)(((unsigned char *)(SAADDR(¶m->sincl)))[3]),
|
||||
(unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[0]),
|
||||
(unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[1])
|
||||
(unsigned)(((char *)(SAADDR(¶m->sincl)))[0]),
|
||||
(unsigned)(((char *)(SAADDR(¶m->sincl)))[1]),
|
||||
(unsigned)(((char *)(SAADDR(¶m->sincl)))[2]),
|
||||
(unsigned)(((char *)(SAADDR(¶m->sincl)))[3]),
|
||||
(unsigned)(((char *)(SAPORT(¶m->sincl)))[0]),
|
||||
(unsigned)(((char *)(SAPORT(¶m->sincl)))[1])
|
||||
);
|
||||
else sprintf((char *)buf, "227 OK (127,0,0,1,%u,%u)\r\n",
|
||||
(unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[0]),
|
||||
(unsigned)(((unsigned char *)(SAPORT(¶m->sincl)))[1])
|
||||
(unsigned)(((char *)(SAPORT(¶m->sincl)))[0]),
|
||||
(unsigned)(((char *)(SAPORT(¶m->sincl)))[1])
|
||||
);
|
||||
}
|
||||
else {
|
||||
@ -230,11 +230,11 @@ void * ftpprchild(struct clientparam* param) {
|
||||
so._closesocket(clidatasock);
|
||||
clidatasock = INVALID_SOCKET;
|
||||
|
||||
if(socksend(param->ctrlsock, (unsigned char *)"550 err\r\n", 9, conf.timeouts[STRING_S])!=9) {RETURN (831);}
|
||||
if(socksend(param->ctrlsock, (char *)"550 err\r\n", 9, conf.timeouts[STRING_S])!=9) {RETURN (831);}
|
||||
continue;
|
||||
}
|
||||
|
||||
if(socksend(param->ctrlsock, (unsigned char *)"125 data\r\n", 10, conf.timeouts[STRING_S]) != 10) {
|
||||
if(socksend(param->ctrlsock, (char *)"125 data\r\n", 10, conf.timeouts[STRING_S]) != 10) {
|
||||
param->remsock = INVALID_SOCKET;
|
||||
RETURN (832);
|
||||
}
|
||||
@ -274,7 +274,7 @@ void * ftpprchild(struct clientparam* param) {
|
||||
}
|
||||
else {
|
||||
if(status < 3) {
|
||||
if(socksend(param->remsock, (unsigned char *)"530 login\r\n", 11, conf.timeouts[STRING_S])!=1) {RETURN (810);}
|
||||
if(socksend(param->remsock, (char *)"530 login\r\n", 11, conf.timeouts[STRING_S])!=1) {RETURN (810);}
|
||||
continue;
|
||||
}
|
||||
if(!strncasecmp((char *)buf, "QUIT", 4)) status = 5;
|
||||
@ -295,7 +295,7 @@ void * ftpprchild(struct clientparam* param) {
|
||||
sasize = sizeof(param->sincr);
|
||||
if(so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sincr, &sasize)){RETURN(819);}
|
||||
if(req && (param->statscli64 || param->statssrv64)){
|
||||
dolog(param, (unsigned char *)req);
|
||||
dolog(param, (char *)req);
|
||||
}
|
||||
}
|
||||
|
||||
@ -316,7 +316,7 @@ CLEANRET:
|
||||
sasize = sizeof(param->sincr);
|
||||
so._getpeername(param->ctrlsock, (struct sockaddr *)¶m->sincr, &sasize);
|
||||
if(param->res != 0 || param->statscli64 || param->statssrv64 ){
|
||||
dolog(param, (unsigned char *)((req && (param->res > 802))? req:NULL));
|
||||
dolog(param, (req && (param->res > 802))? req:NULL);
|
||||
}
|
||||
if(req) myfree(req);
|
||||
if(buf) myfree(buf);
|
||||
|
3821
src/libs/regex.c
3821
src/libs/regex.c
File diff suppressed because it is too large
Load Diff
@ -1,74 +0,0 @@
|
||||
/*
|
||||
|
||||
Minimal version of Henry Spencer's regex library
|
||||
with minor modifications
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _REGEX_H_
|
||||
#define _REGEX_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef off_t regoff_t;
|
||||
typedef struct {
|
||||
int re_magic;
|
||||
size_t re_nsub; /* number of parenthesized subexpressions */
|
||||
const char *re_endp; /* end pointer for REG_PEND */
|
||||
struct re_guts *re_g; /* none of your business :-) */
|
||||
} regex_t;
|
||||
typedef struct {
|
||||
regoff_t rm_so; /* start of match */
|
||||
regoff_t rm_eo; /* end of match */
|
||||
} regmatch_t;
|
||||
|
||||
|
||||
extern int regcomp(regex_t *, const char *, int);
|
||||
#define REG_BASIC 0000
|
||||
#define REG_EXTENDED 0001
|
||||
#define REG_ICASE 0002
|
||||
#define REG_NOSUB 0004
|
||||
#define REG_NEWLINE 0010
|
||||
#define REG_NOSPEC 0020
|
||||
#define REG_PEND 0040
|
||||
#define REG_DUMP 0200
|
||||
|
||||
|
||||
#define REG_OKAY 0
|
||||
#define REG_NOMATCH 1
|
||||
#define REG_BADPAT 2
|
||||
#define REG_ECOLLATE 3
|
||||
#define REG_ECTYPE 4
|
||||
#define REG_EESCAPE 5
|
||||
#define REG_ESUBREG 6
|
||||
#define REG_EBRACK 7
|
||||
#define REG_EPAREN 8
|
||||
#define REG_EBRACE 9
|
||||
#define REG_BADBR 10
|
||||
#define REG_ERANGE 11
|
||||
#define REG_ESPACE 12
|
||||
#define REG_BADRPT 13
|
||||
#define REG_EMPTY 14
|
||||
#define REG_ASSERT 15
|
||||
#define REG_INVARG 16
|
||||
#define REG_ATOI 255 /* convert name to number (!) */
|
||||
#define REG_ITOA 0400 /* convert number to name (!) */
|
||||
|
||||
|
||||
extern int regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
|
||||
#define REG_NOTBOL 00001
|
||||
#define REG_NOTEOL 00002
|
||||
#define REG_STARTEND 00004
|
||||
#define REG_TRACE 00400 /* tracing of execution */
|
||||
#define REG_LARGE 01000 /* force large representation */
|
||||
#define REG_BACKR 02000 /* force use of backref code */
|
||||
|
||||
|
||||
extern void regfree(regex_t *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
@ -1,321 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
a partial implementation of DES designed for use in the
|
||||
SMB authentication protocol
|
||||
|
||||
Copyright (C) Andrew Tridgell 1998
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
#define uchar unsigned char
|
||||
|
||||
static const uchar perm1[56] = {57, 49, 41, 33, 25, 17, 9,
|
||||
1, 58, 50, 42, 34, 26, 18,
|
||||
10, 2, 59, 51, 43, 35, 27,
|
||||
19, 11, 3, 60, 52, 44, 36,
|
||||
63, 55, 47, 39, 31, 23, 15,
|
||||
7, 62, 54, 46, 38, 30, 22,
|
||||
14, 6, 61, 53, 45, 37, 29,
|
||||
21, 13, 5, 28, 20, 12, 4};
|
||||
|
||||
static const uchar perm2[48] = {14, 17, 11, 24, 1, 5,
|
||||
3, 28, 15, 6, 21, 10,
|
||||
23, 19, 12, 4, 26, 8,
|
||||
16, 7, 27, 20, 13, 2,
|
||||
41, 52, 31, 37, 47, 55,
|
||||
30, 40, 51, 45, 33, 48,
|
||||
44, 49, 39, 56, 34, 53,
|
||||
46, 42, 50, 36, 29, 32};
|
||||
|
||||
static const uchar perm3[64] = {58, 50, 42, 34, 26, 18, 10, 2,
|
||||
60, 52, 44, 36, 28, 20, 12, 4,
|
||||
62, 54, 46, 38, 30, 22, 14, 6,
|
||||
64, 56, 48, 40, 32, 24, 16, 8,
|
||||
57, 49, 41, 33, 25, 17, 9, 1,
|
||||
59, 51, 43, 35, 27, 19, 11, 3,
|
||||
61, 53, 45, 37, 29, 21, 13, 5,
|
||||
63, 55, 47, 39, 31, 23, 15, 7};
|
||||
|
||||
static const uchar perm4[48] = { 32, 1, 2, 3, 4, 5,
|
||||
4, 5, 6, 7, 8, 9,
|
||||
8, 9, 10, 11, 12, 13,
|
||||
12, 13, 14, 15, 16, 17,
|
||||
16, 17, 18, 19, 20, 21,
|
||||
20, 21, 22, 23, 24, 25,
|
||||
24, 25, 26, 27, 28, 29,
|
||||
28, 29, 30, 31, 32, 1};
|
||||
|
||||
static const uchar perm5[32] = { 16, 7, 20, 21,
|
||||
29, 12, 28, 17,
|
||||
1, 15, 23, 26,
|
||||
5, 18, 31, 10,
|
||||
2, 8, 24, 14,
|
||||
32, 27, 3, 9,
|
||||
19, 13, 30, 6,
|
||||
22, 11, 4, 25};
|
||||
|
||||
|
||||
static const uchar perm6[64] ={ 40, 8, 48, 16, 56, 24, 64, 32,
|
||||
39, 7, 47, 15, 55, 23, 63, 31,
|
||||
38, 6, 46, 14, 54, 22, 62, 30,
|
||||
37, 5, 45, 13, 53, 21, 61, 29,
|
||||
36, 4, 44, 12, 52, 20, 60, 28,
|
||||
35, 3, 43, 11, 51, 19, 59, 27,
|
||||
34, 2, 42, 10, 50, 18, 58, 26,
|
||||
33, 1, 41, 9, 49, 17, 57, 25};
|
||||
|
||||
|
||||
static const uchar sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
|
||||
|
||||
static const uchar sbox[8][4][16] = {
|
||||
{{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7},
|
||||
{0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8},
|
||||
{4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0},
|
||||
{15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}},
|
||||
|
||||
{{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10},
|
||||
{3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5},
|
||||
{0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15},
|
||||
{13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}},
|
||||
|
||||
{{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8},
|
||||
{13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1},
|
||||
{13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7},
|
||||
{1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}},
|
||||
|
||||
{{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15},
|
||||
{13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9},
|
||||
{10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4},
|
||||
{3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}},
|
||||
|
||||
{{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9},
|
||||
{14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6},
|
||||
{4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14},
|
||||
{11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}},
|
||||
|
||||
{{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11},
|
||||
{10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8},
|
||||
{9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6},
|
||||
{4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}},
|
||||
|
||||
{{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1},
|
||||
{13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6},
|
||||
{1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2},
|
||||
{6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}},
|
||||
|
||||
{{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7},
|
||||
{1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2},
|
||||
{7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8},
|
||||
{2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}}};
|
||||
|
||||
static void permute(char *out, const char *in, const uchar *p, int n)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<n;i++)
|
||||
out[i] = in[p[i]-1];
|
||||
}
|
||||
|
||||
static void lshift(char *d, int count, int n)
|
||||
{
|
||||
char out[64];
|
||||
int i;
|
||||
for (i=0;i<n;i++)
|
||||
out[i] = d[(i+count)%n];
|
||||
for (i=0;i<n;i++)
|
||||
d[i] = out[i];
|
||||
}
|
||||
|
||||
static void concat(char *out, char *in1, char *in2, int l1, int l2)
|
||||
{
|
||||
while (l1--)
|
||||
*out++ = *in1++;
|
||||
while (l2--)
|
||||
*out++ = *in2++;
|
||||
}
|
||||
|
||||
static void xor(char *out, char *in1, char *in2, int n)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<n;i++)
|
||||
out[i] = in1[i] ^ in2[i];
|
||||
}
|
||||
|
||||
static void dohash(char *out, char *in, char *key)
|
||||
{
|
||||
int i, j, k;
|
||||
char pk1[56];
|
||||
char c[28];
|
||||
char d[28];
|
||||
char cd[56];
|
||||
char ki[16][48];
|
||||
char pd1[64];
|
||||
char l[32], r[32];
|
||||
char rl[64];
|
||||
|
||||
permute(pk1, key, perm1, 56);
|
||||
|
||||
for (i=0;i<28;i++)
|
||||
c[i] = pk1[i];
|
||||
for (i=0;i<28;i++)
|
||||
d[i] = pk1[i+28];
|
||||
|
||||
for (i=0;i<16;i++) {
|
||||
lshift(c, sc[i], 28);
|
||||
lshift(d, sc[i], 28);
|
||||
|
||||
concat(cd, c, d, 28, 28);
|
||||
permute(ki[i], cd, perm2, 48);
|
||||
}
|
||||
|
||||
permute(pd1, in, perm3, 64);
|
||||
|
||||
for (j=0;j<32;j++) {
|
||||
l[j] = pd1[j];
|
||||
r[j] = pd1[j+32];
|
||||
}
|
||||
|
||||
for (i=0;i<16;i++) {
|
||||
char er[48];
|
||||
char erk[48];
|
||||
char b[8][6];
|
||||
char cb[32];
|
||||
char pcb[32];
|
||||
char r2[32];
|
||||
|
||||
permute(er, r, perm4, 48);
|
||||
|
||||
xor(erk, er, ki[i], 48);
|
||||
|
||||
for (j=0;j<8;j++)
|
||||
for (k=0;k<6;k++)
|
||||
b[j][k] = erk[j*6 + k];
|
||||
|
||||
for (j=0;j<8;j++) {
|
||||
int m, n;
|
||||
m = (b[j][0]<<1) | b[j][5];
|
||||
|
||||
n = (b[j][1]<<3) | (b[j][2]<<2) | (b[j][3]<<1) | b[j][4];
|
||||
|
||||
for (k=0;k<4;k++)
|
||||
b[j][k] = (sbox[j][m][n] & (1<<(3-k)))?1:0;
|
||||
}
|
||||
|
||||
for (j=0;j<8;j++)
|
||||
for (k=0;k<4;k++)
|
||||
cb[j*4+k] = b[j][k];
|
||||
permute(pcb, cb, perm5, 32);
|
||||
|
||||
xor(r2, l, pcb, 32);
|
||||
|
||||
for (j=0;j<32;j++)
|
||||
l[j] = r[j];
|
||||
|
||||
for (j=0;j<32;j++)
|
||||
r[j] = r2[j];
|
||||
}
|
||||
|
||||
concat(rl, r, l, 32, 32);
|
||||
|
||||
permute(out, rl, perm6, 64);
|
||||
}
|
||||
|
||||
static void str_to_key(unsigned char *str,unsigned char *key)
|
||||
{
|
||||
int i;
|
||||
|
||||
key[0] = str[0]>>1;
|
||||
key[1] = ((str[0]&0x01)<<6) | (str[1]>>2);
|
||||
key[2] = ((str[1]&0x03)<<5) | (str[2]>>3);
|
||||
key[3] = ((str[2]&0x07)<<4) | (str[3]>>4);
|
||||
key[4] = ((str[3]&0x0F)<<3) | (str[4]>>5);
|
||||
key[5] = ((str[4]&0x1F)<<2) | (str[5]>>6);
|
||||
key[6] = ((str[5]&0x3F)<<1) | (str[6]>>7);
|
||||
key[7] = str[6]&0x7F;
|
||||
for (i=0;i<8;i++) {
|
||||
key[i] = (key[i]<<1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void smbhash(unsigned char *out, const unsigned char *in, unsigned char *key)
|
||||
{
|
||||
int i;
|
||||
char outb[64];
|
||||
char inb[64];
|
||||
char keyb[64];
|
||||
unsigned char key2[8];
|
||||
|
||||
str_to_key(key, key2);
|
||||
|
||||
for (i=0;i<64;i++) {
|
||||
inb[i] = (in[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
|
||||
keyb[i] = (key2[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
|
||||
outb[i] = 0;
|
||||
}
|
||||
|
||||
dohash(outb, inb, keyb);
|
||||
|
||||
for (i=0;i<8;i++) {
|
||||
out[i] = 0;
|
||||
}
|
||||
|
||||
for (i=0;i<64;i++) {
|
||||
if (outb[i])
|
||||
out[i/8] |= (1<<(7-(i%8)));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Converts the password to uppercase, and creates the LM
|
||||
* password hash.
|
||||
*/
|
||||
void lmpwdhash(const unsigned char *password,unsigned char *lmhash)
|
||||
{
|
||||
int i;
|
||||
unsigned char p14[14];
|
||||
static unsigned char sp8[8] = {0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25};
|
||||
|
||||
memset(p14, 0, sizeof(p14));
|
||||
for (i = 0; i < 14 && password[i]; i++) {
|
||||
p14[i] = toupper((int) password[i]);
|
||||
}
|
||||
|
||||
smbhash(lmhash, sp8, p14);
|
||||
smbhash(lmhash+8, sp8, p14+7);
|
||||
}
|
||||
|
||||
/*
|
||||
* Take the NT or LM password, and return the MSCHAP response
|
||||
*
|
||||
* The win_password MUST be exactly 16 bytes long.
|
||||
*/
|
||||
void mschap(const unsigned char *win_password,
|
||||
const unsigned char *challenge, unsigned char *response)
|
||||
{
|
||||
unsigned char p21[21];
|
||||
|
||||
memset(p21, 0, sizeof(p21));
|
||||
memcpy(p21, win_password, 16);
|
||||
|
||||
smbhash(response, challenge, p21);
|
||||
smbhash(response+8, challenge, p21+7);
|
||||
smbhash(response+16, challenge, p21+14);
|
||||
}
|
22
src/log.c
22
src/log.c
@ -58,7 +58,7 @@ void logpush(struct logevent *evt);
|
||||
#define HAVESQL 0
|
||||
#else
|
||||
#ifndef NORADIUS
|
||||
int raddobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s);
|
||||
int raddobuf(struct clientparam * param, char * buf, int bufsize, const char *s);
|
||||
void logradius(const char * buf, int len, struct LOGGER *logger);
|
||||
#define HAVERADIUS 1
|
||||
#else
|
||||
@ -67,7 +67,7 @@ void logradius(const char * buf, int len, struct LOGGER *logger);
|
||||
#ifndef NOODBC
|
||||
#define HAVESQL 1
|
||||
static int sqlinit(struct LOGGER *logger);
|
||||
static int sqldobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s);
|
||||
static int sqldobuf(struct clientparam * param, char * buf, int bufsize, const char *s);
|
||||
static void sqllog(const char * buf, int len, struct LOGGER *logger);
|
||||
static void sqlrotate(struct LOGGER *logger);
|
||||
static void sqlclose(struct LOGGER *logger);
|
||||
@ -87,7 +87,7 @@ static void syslogclose(struct LOGGER *logger);
|
||||
#endif
|
||||
|
||||
static int stdloginit(struct LOGGER *logger);
|
||||
static int stddobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s);
|
||||
static int stddobuf(struct clientparam * param, char * buf, int bufsize, const char *s);
|
||||
static void stdlog(const char * buf, int len, struct LOGGER *logger);
|
||||
static void stdlogrotate(struct LOGGER *logger);
|
||||
static void stdlogclose(struct LOGGER *logger);
|
||||
@ -346,7 +346,7 @@ static void delaydolog(struct logevent *evt){
|
||||
}
|
||||
}
|
||||
|
||||
void dolog(struct clientparam * param, const unsigned char *s){
|
||||
void dolog(struct clientparam * param, const char *s){
|
||||
static int init = 0;
|
||||
|
||||
if(!param || !param->srv){
|
||||
@ -497,7 +497,7 @@ char months[12][4] = {
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
||||
};
|
||||
|
||||
unsigned char * dologname (unsigned char *buf, int bufsize, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t) {
|
||||
char * dologname (char *buf, int bufsize, char *name, const char *ext, ROTATION lt, time_t t) {
|
||||
struct tm *ts;
|
||||
|
||||
ts = localtime(&t);
|
||||
@ -538,7 +538,7 @@ unsigned char * dologname (unsigned char *buf, int bufsize, unsigned char *name
|
||||
return buf;
|
||||
}
|
||||
|
||||
int dobuf2(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format){
|
||||
int dobuf2(struct clientparam * param, char * buf, int bufsize, const char *s, const char * doublec, struct tm* tm, char * format){
|
||||
int i, j;
|
||||
int len;
|
||||
time_t sec;
|
||||
@ -670,7 +670,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, int bufsize, const u
|
||||
if(param->service < 15) {
|
||||
len = (conf.stringtable)? (int)strlen((char *)conf.stringtable[SERVICES + param->service]) : 0;
|
||||
if(len > 20) len = 20;
|
||||
memcpy(buf+i, (len)?conf.stringtable[SERVICES + param->service]:(unsigned char*)"-", (len)?len:1);
|
||||
memcpy(buf+i, (len)?conf.stringtable[SERVICES + param->service]:(char*)"-", (len)?len:1);
|
||||
i += (len)?len:1;
|
||||
}
|
||||
break;
|
||||
@ -787,7 +787,7 @@ int dobuf2(struct clientparam * param, unsigned char * buf, int bufsize, const u
|
||||
return i;
|
||||
}
|
||||
|
||||
int dobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s, const unsigned char * doublec){
|
||||
int dobuf(struct clientparam * param, char * buf, int bufsize, const char *s, const char * doublec){
|
||||
struct tm* tm;
|
||||
int i;
|
||||
char * format;
|
||||
@ -828,7 +828,7 @@ static int stdloginit(struct LOGGER *logger){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stddobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s){
|
||||
static int stddobuf(struct clientparam * param, char * buf, int bufsize, const char *s){
|
||||
return dobuf(param, buf, bufsize, s, NULL);
|
||||
}
|
||||
|
||||
@ -1014,8 +1014,8 @@ static int sqlinit(struct LOGGER *logger){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sqldobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s){
|
||||
return dobuf(param, buf, bufsize, s, (unsigned char *)"\'");
|
||||
static int sqldobuf(struct clientparam * param, char * buf, int bufsize, const char *s){
|
||||
return dobuf(param, buf, bufsize, s, "\'");
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,13 +16,13 @@
|
||||
#endif
|
||||
|
||||
|
||||
void tohex(unsigned char *in, unsigned char *out, int len);
|
||||
void tohex(char *in, char *out, int len);
|
||||
|
||||
static unsigned char itoa64[] =
|
||||
static char itoa64[] =
|
||||
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
void
|
||||
_crypt_to64(unsigned char *s, unsigned long v, int n)
|
||||
_crypt_to64(char *s, unsigned long v, int n)
|
||||
{
|
||||
while (--n >= 0) {
|
||||
*s++ = itoa64[v&0x3f];
|
||||
@ -31,9 +31,9 @@ _crypt_to64(unsigned char *s, unsigned long v, int n)
|
||||
}
|
||||
|
||||
|
||||
unsigned char * ntpwdhash (unsigned char *szHash, const unsigned char *szPassword, int ctohex)
|
||||
char * ntpwdhash (char *szHash, const char *szPassword, int ctohex)
|
||||
{
|
||||
unsigned char szUnicodePass[513];
|
||||
char szUnicodePass[513];
|
||||
unsigned int nPasswordLen;
|
||||
MD4_CTX ctx;
|
||||
unsigned int i;
|
||||
@ -61,14 +61,14 @@ unsigned char * ntpwdhash (unsigned char *szHash, const unsigned char *szPasswor
|
||||
}
|
||||
|
||||
|
||||
unsigned char * mycrypt(const unsigned char *pw, const unsigned char *salt, unsigned char *passwd){
|
||||
char * mycrypt(const char *pw, const char *salt, char *passwd){
|
||||
|
||||
const unsigned char *ep;
|
||||
if(salt[0] == '$' && salt[1] == '1' && salt[2] == '$' && (ep = (unsigned char *)strchr((char *)salt+3, '$'))) {
|
||||
static unsigned char *magic = (unsigned char *)"$1$";
|
||||
unsigned char *p;
|
||||
const unsigned char *sp;
|
||||
unsigned char final[MD5_SIZE];
|
||||
const char *ep;
|
||||
if(salt[0] == '$' && salt[1] == '1' && salt[2] == '$' && (ep = (char *)strchr((char *)salt+3, '$'))) {
|
||||
static char *magic = (char *)"$1$";
|
||||
char *p;
|
||||
const char *sp;
|
||||
char final[MD5_SIZE];
|
||||
int sl,pl,i;
|
||||
MD5_CTX ctx,ctx1;
|
||||
unsigned long l;
|
||||
@ -90,7 +90,7 @@ unsigned char * mycrypt(const unsigned char *pw, const unsigned char *salt, unsi
|
||||
/* Then the raw salt */
|
||||
MD5Update(&ctx,sp,sl);
|
||||
|
||||
/* Then just as many unsigned characters of the MD5(pw,salt,pw) */
|
||||
/* Then just as many characters of the MD5(pw,salt,pw) */
|
||||
MD5Init(&ctx1);
|
||||
MD5Update(&ctx1,pw,strlen((char *)pw));
|
||||
MD5Update(&ctx1,sp,sl);
|
||||
@ -170,7 +170,7 @@ unsigned char * mycrypt(const unsigned char *pw, const unsigned char *salt, unsi
|
||||
|
||||
#include <stdio.h>
|
||||
int main(int argc, char* argv[]){
|
||||
unsigned char buf[1024];
|
||||
char buf[1024];
|
||||
unsigned i;
|
||||
if(argc < 2 || argc > 3) {
|
||||
fprintf(stderr, "usage: \n"
|
||||
@ -185,13 +185,13 @@ int main(int argc, char* argv[]){
|
||||
return 1;
|
||||
}
|
||||
if(argc == 2) {
|
||||
printf("NT:%s\n", ntpwdhash(buf, (unsigned char *)argv[1], 1));
|
||||
printf("NT:%s\n", ntpwdhash(buf, (char *)argv[1], 1));
|
||||
}
|
||||
else {
|
||||
i = (int)strlen((char *)argv[1]);
|
||||
if (i > 64) argv[1][64] = 0;
|
||||
sprintf((char *)buf, "$1$%s$", argv[1]);
|
||||
printf("CR:%s\n", mycrypt((unsigned char *)argv[2], buf, buf+256));
|
||||
printf("CR:%s\n", mycrypt(argv[2], buf, buf+256));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
88
src/ntlm.c
88
src/ntlm.c
@ -1,88 +0,0 @@
|
||||
/*
|
||||
3APA3A simpliest proxy server
|
||||
(c) 2002-2016 by Vladimir Dubrovin <3proxy@3proxy.ru>
|
||||
|
||||
please read License Agreement
|
||||
|
||||
*/
|
||||
|
||||
#include "proxy.h"
|
||||
struct ntlmchal {
|
||||
unsigned char sig[8];
|
||||
unsigned char messtype[4];
|
||||
unsigned char dom_len[2];
|
||||
unsigned char dom_max_len[2];
|
||||
unsigned char dom_offset[4];
|
||||
unsigned char flags[4];
|
||||
unsigned char challenge[8];
|
||||
unsigned char reserved[8];
|
||||
unsigned char addr_len[2];
|
||||
unsigned char addr_max_len[2];
|
||||
unsigned char addr_offset[4];
|
||||
unsigned char data[1];
|
||||
};
|
||||
|
||||
struct ntlmreq {
|
||||
unsigned char sig[8];
|
||||
unsigned char messtype[4];
|
||||
unsigned char flags[4];
|
||||
unsigned char dom_len[2];
|
||||
unsigned char dom_max_len[2];
|
||||
unsigned char dom_offset[4];
|
||||
unsigned char pad1[2];
|
||||
unsigned char host_len[2];
|
||||
unsigned char host_max_len[2];
|
||||
unsigned char host_offset[4];
|
||||
unsigned char pad2[2];
|
||||
unsigned char data[1];
|
||||
};
|
||||
|
||||
int text2unicode(const char * text, char * buf, int buflen){
|
||||
int count = 0;
|
||||
buflen = ((buflen>>1)<<1);
|
||||
if(!text || !buflen) return 0;
|
||||
do {
|
||||
buf[count++] = toupper(*text++);
|
||||
buf[count++] = '\0';
|
||||
} while (*text && count < buflen);
|
||||
return count;
|
||||
}
|
||||
|
||||
void unicode2text(const char *unicode, char * buf, int len){
|
||||
int i;
|
||||
if(!unicode || !len) return;
|
||||
for(i=0; i<len; i++){
|
||||
buf[i] = unicode[(i<<1)];
|
||||
}
|
||||
buf[i] = 0;
|
||||
}
|
||||
|
||||
void genchallenge(struct clientparam *param, char * challenge, char *buf){
|
||||
struct ntlmchal *chal;
|
||||
char tmpbuf[1024];
|
||||
char hostname[128];
|
||||
int len, i;
|
||||
|
||||
|
||||
chal = (struct ntlmchal *)tmpbuf;
|
||||
memset(chal, 0, 1024);
|
||||
memcpy(chal->sig, "NTLMSSP", 8);
|
||||
chal->messtype[0] = 2;
|
||||
gethostname(hostname, 128);
|
||||
hostname[15] = 0;
|
||||
len = (((int)strlen(hostname)) << 1);
|
||||
chal->dom_len[0] = len;
|
||||
chal->dom_max_len[0] = len;
|
||||
chal->dom_offset[0] = (unsigned char)((unsigned char *)chal->data - (unsigned char *)chal);
|
||||
chal->flags[0] = 0x03;
|
||||
chal->flags[1] = 0x82;
|
||||
chal->flags[2] = 0x81;
|
||||
chal->flags[3] = 0xA0;
|
||||
text2unicode(hostname, (char *)chal->data, 64);
|
||||
time((time_t *)challenge);
|
||||
memcpy(challenge+4, SAADDR(¶m->sincr), 4);
|
||||
challenge[1]^=*SAPORT(¶m->sincr);
|
||||
for(i = 0; i < 8; i++) challenge[i] ^= myrand(challenge, 8);
|
||||
memcpy(chal->challenge, challenge, 8);
|
||||
en64((unsigned char *)tmpbuf, (unsigned char *)buf, (int)((unsigned char *)chal->data - (unsigned char *)chal) + len);
|
||||
}
|
@ -11,11 +11,11 @@
|
||||
unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nbytesout);
|
||||
void trafcountfunc(struct clientparam *param);
|
||||
int checkACL(struct clientparam * param);
|
||||
void nametohash(const unsigned char * name, unsigned char *hash);
|
||||
unsigned hashindex(const unsigned char* hash);
|
||||
void decodeurl(unsigned char *s, int allowcr);
|
||||
int parsestr (unsigned char *str, unsigned char **argm, int nitems, unsigned char ** buff, int *inbuf, int *bufsize);
|
||||
struct ace * make_ace (int argc, unsigned char ** argv);
|
||||
void nametohash(const char * name, char *hash);
|
||||
unsigned hashindex(const char* hash);
|
||||
void decodeurl(char *s, int allowcr);
|
||||
int parsestr (char *str, char **argm, int nitems, char ** buff, int *inbuf, int *bufsize);
|
||||
struct ace * make_ace (int argc, char ** argv);
|
||||
extern char * proxy_stringtable[];
|
||||
extern char * admin_stringtable[];
|
||||
extern struct schedule * schedule;
|
||||
|
@ -760,7 +760,7 @@ static FILTER_ACTION fp_client(void *fo, struct clientparam * param, void** fc){
|
||||
return CONTINUE;
|
||||
}
|
||||
|
||||
static FILTER_ACTION fp_request(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
static FILTER_ACTION fp_request(void *fc, struct clientparam * param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
if(fc && (param->service == S_PROXY)){
|
||||
if(FC->state) {
|
||||
closefiles(FC);
|
||||
@ -776,7 +776,7 @@ static FILTER_ACTION fp_request(void *fc, struct clientparam * param, unsigned c
|
||||
return CONTINUE;
|
||||
}
|
||||
|
||||
static FILTER_ACTION fp_hcli(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
static FILTER_ACTION fp_hcli(void *fc, struct clientparam * param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
if(fc && param->service == S_SMTPP) {
|
||||
processcallbacks(FC, FP_CALLONREQUEST, *buf_p + offset, *length_p - offset);
|
||||
if(FC->what & FP_REJECT) return REJECT;
|
||||
@ -792,7 +792,7 @@ static FILTER_ACTION fp_hcli(void *fc, struct clientparam * param, unsigned char
|
||||
return CONTINUE;
|
||||
}
|
||||
|
||||
static FILTER_ACTION fp_hsrv(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
static FILTER_ACTION fp_hsrv(void *fc, struct clientparam * param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
if(fc && param->service == S_PROXY && (FC->state == GOT_HTTP_REQUEST || FC->state == GOT_HTTP_CLI_HDR || FC->state == GOT_HTTP_CLIDATA)){
|
||||
if(FC->what & FP_SRVHEADER) initserverfile(FC);
|
||||
FC->state = GOT_HTTP_SRV_HDR;
|
||||
@ -801,7 +801,7 @@ static FILTER_ACTION fp_hsrv(void *fc, struct clientparam * param, unsigned char
|
||||
return CONTINUE;
|
||||
}
|
||||
|
||||
static FILTER_ACTION fp_dcli(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
static FILTER_ACTION fp_dcli(void *fc, struct clientparam * param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
if(fc && FC->state == GOT_HTTP_REQUEST){
|
||||
FC->state = GOT_HTTP_CLI_HDR2;
|
||||
}
|
||||
@ -809,7 +809,7 @@ static FILTER_ACTION fp_dcli(void *fc, struct clientparam * param, unsigned char
|
||||
}
|
||||
|
||||
|
||||
static FILTER_ACTION fp_dsrv(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
static FILTER_ACTION fp_dsrv(void *fc, struct clientparam * param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
if(fc && (FC->state == GOT_HTTP_REQUEST || FC->state == GOT_HTTP_CLI_HDR || FC->state == GOT_HTTP_CLIDATA || FC->state == GOT_HTTP_CLIDATA || FC->state == GOT_HTTP_SRV_HDR)){
|
||||
FC->state = GOT_HTTP_SRV_HDR2;
|
||||
}
|
||||
@ -846,7 +846,7 @@ static struct symbol fp_symbols[] = {
|
||||
{NULL, "fp_stringtable", (void*) fp_stringtable}
|
||||
};
|
||||
|
||||
static int h_cachedir(int argc, unsigned char **argv){
|
||||
static int h_cachedir(int argc, char **argv){
|
||||
char * dirp;
|
||||
size_t len;
|
||||
|
||||
@ -866,7 +866,7 @@ static int h_cachedir(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_preview(int argc, unsigned char **argv){
|
||||
static int h_preview(int argc, char **argv){
|
||||
preview = atoi(argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ main(int argc, char *argv[])
|
||||
char *attrs[] = { NULL, NULL };
|
||||
int i, rc = -1;
|
||||
int lderrno;
|
||||
unsigned char tmpbuf[1000];
|
||||
char tmpbuf[1000];
|
||||
|
||||
if ( argc < 6 )
|
||||
{
|
||||
|
@ -22,7 +22,7 @@ static struct commands ldap_trafgroup_handler;
|
||||
static struct commands ldap_attrsgroup_handler;
|
||||
static struct commands ldap_dircount_handler;
|
||||
|
||||
static void (*dolog)(struct clientparam * param, const unsigned char *s);
|
||||
static void (*ldolog)(struct clientparam * param, const char *s);
|
||||
|
||||
|
||||
static char *attrs[] = { NULL, NULL};
|
||||
@ -61,7 +61,7 @@ int savecounters(void)
|
||||
struct trafcount *tcd;
|
||||
struct counter_record wcounter;
|
||||
FILE *f;
|
||||
unsigned char *tmpbuf,pat_file[]="%s%s.lc";
|
||||
char *tmpbuf,pat_file[]="%s%s.lc";
|
||||
|
||||
|
||||
/* timetoexit !=0 - áóäåì çàâåðøàòüñÿ.*/
|
||||
@ -112,7 +112,7 @@ static int ldapfunc(struct clientparam *param)
|
||||
ld = ldap_init( ldap_serv, 389 );
|
||||
if ( ld == NULL )
|
||||
{
|
||||
dolog(param,"Error ldap_init: No init lib ldap");
|
||||
ldolog(param,"Error ldap_init: No init lib ldap");
|
||||
/*ldap_perror( ld, "Error ldap_init" ); */
|
||||
return 7;
|
||||
}
|
||||
@ -136,7 +136,7 @@ static int ldapfunc(struct clientparam *param)
|
||||
|
||||
if ( rc != LDAP_SUCCESS )
|
||||
{
|
||||
dolog(param,"Error ldap_bind: No connect ldap catalog");
|
||||
ldolog(param,"Error ldap_bind: No connect ldap catalog");
|
||||
ldap_unbind_s(ld);
|
||||
return 7;
|
||||
}
|
||||
@ -147,7 +147,7 @@ static int ldapfunc(struct clientparam *param)
|
||||
|
||||
if ( ld == NULL )
|
||||
{
|
||||
dolog(param,"Error ldap_init: No init lib ldap");
|
||||
ldolog(param,"Error ldap_init: No init lib ldap");
|
||||
/*ldap_perror( ld, "Error ldap_init" ); */
|
||||
return 7;
|
||||
}
|
||||
@ -156,7 +156,7 @@ static int ldapfunc(struct clientparam *param)
|
||||
|
||||
if ( rc != LDAP_SUCCESS )
|
||||
{
|
||||
dolog(param, "Error ldap_bind: Not authorize in ldap\
|
||||
ldolog(param, "Error ldap_bind: Not authorize in ldap\
|
||||
catalog, checked option \'ldapconnect\' ");
|
||||
ldap_unbind_s(ld);
|
||||
return 7;
|
||||
@ -187,7 +187,7 @@ static int ldapfunc(struct clientparam *param)
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldapserv */
|
||||
int h_ldapconnect(int argc, unsigned char ** argv)
|
||||
int h_ldapconnect(int argc, char ** argv)
|
||||
{
|
||||
LDAP *ld = NULL;
|
||||
|
||||
@ -216,7 +216,7 @@ int h_ldapconnect(int argc, unsigned char ** argv)
|
||||
}
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldapaccess */
|
||||
int h_access(int argc, unsigned char ** argv)
|
||||
int h_access(int argc, char ** argv)
|
||||
{
|
||||
if (argc < 1)
|
||||
{
|
||||
@ -229,7 +229,7 @@ int h_access(int argc, unsigned char ** argv)
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldapsbase
|
||||
searching base */
|
||||
int h_sbase(int argc, unsigned char ** argv)
|
||||
int h_sbase(int argc, char ** argv)
|
||||
{
|
||||
if (argc < 1)
|
||||
{
|
||||
@ -241,7 +241,7 @@ int h_sbase(int argc, unsigned char ** argv)
|
||||
}
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldapuserenv */
|
||||
int h_userenv(int argc, unsigned char ** argv)
|
||||
int h_userenv(int argc, char ** argv)
|
||||
{
|
||||
if (argc < 1)
|
||||
{
|
||||
@ -253,7 +253,7 @@ int h_userenv(int argc, unsigned char ** argv)
|
||||
}
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldaptrafgroup */
|
||||
int h_trafgroup(int argc, unsigned char ** argv)
|
||||
int h_trafgroup(int argc, char ** argv)
|
||||
{
|
||||
struct trafcount *newtrafcount;
|
||||
struct bandlim *newbandlim;
|
||||
@ -418,7 +418,7 @@ int h_trafgroup(int argc, unsigned char ** argv)
|
||||
}
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldapattrsgroup */
|
||||
int h_attrsgroup(int argc, unsigned char ** argv)
|
||||
int h_attrsgroup(int argc, char ** argv)
|
||||
{
|
||||
if (argc < 1)
|
||||
{
|
||||
@ -435,7 +435,7 @@ int h_attrsgroup(int argc, unsigned char ** argv)
|
||||
}
|
||||
/* --------------------------------------------------------------------------
|
||||
handle command ldapdircount */
|
||||
int h_dircount(int argc, unsigned char ** argv)
|
||||
int h_dircount(int argc, char ** argv)
|
||||
{
|
||||
if (argc < 1)
|
||||
{
|
||||
@ -476,7 +476,7 @@ PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink,
|
||||
}
|
||||
|
||||
|
||||
dolog=pluginlink->findbyname("dolog");
|
||||
ldolog=pluginlink->findbyname("dolog");
|
||||
|
||||
already_loaded = 1;
|
||||
|
||||
|
@ -123,7 +123,7 @@ static FILTER_ACTION pcre_filter_client(void *fo, struct clientparam * param, vo
|
||||
return (res)? CONTINUE:PASS;
|
||||
}
|
||||
|
||||
static FILTER_ACTION pcre_filter_buffer(void *fc, struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
static FILTER_ACTION pcre_filter_buffer(void *fc, struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
int ovector[48];
|
||||
int count = 0;
|
||||
struct ace *acl;
|
||||
@ -195,7 +195,7 @@ static FILTER_ACTION pcre_filter_buffer(void *fc, struct clientparam *param, uns
|
||||
}
|
||||
memcpy(newbuf, *buf_p, ovector[0]);
|
||||
pl->freefunc(*buf_p);
|
||||
*buf_p = (unsigned char *)newbuf;
|
||||
*buf_p = (char *)newbuf;
|
||||
*bufsize_p = ovector[0] + replen + 1;
|
||||
}
|
||||
memcpy(*buf_p + ovector[0], tmpbuf, replen);
|
||||
@ -219,7 +219,7 @@ static void pcre_filter_close(void *fo){
|
||||
pcre_data_free((struct pcre_filter_data *)fo);
|
||||
}
|
||||
|
||||
static int h_pcre(int argc, unsigned char **argv){
|
||||
static int h_pcre(int argc, char **argv){
|
||||
int action = 0;
|
||||
pcre *re = NULL;
|
||||
struct ace *acl;
|
||||
@ -317,7 +317,7 @@ static int h_pcre(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_pcre_extend(int argc, unsigned char **argv){
|
||||
static int h_pcre_extend(int argc, char **argv){
|
||||
struct ace *acl;
|
||||
if(!pcre_last_filter || !pcre_last_filter->data) return 1;
|
||||
acl = ((struct pcre_filter_data *)pcre_last_filter->data)->acl;
|
||||
@ -328,7 +328,7 @@ static int h_pcre_extend(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_pcre_options(int argc, unsigned char **argv){
|
||||
static int h_pcre_options(int argc, char **argv){
|
||||
int i,j;
|
||||
|
||||
pcre_options = 0;
|
||||
|
@ -20,7 +20,7 @@ static struct auth pamauth;
|
||||
#ifdef USERCASE
|
||||
static int usercaselow = 0;
|
||||
#endif
|
||||
static unsigned char *service=NULL;
|
||||
static char *service=NULL;
|
||||
static struct pluginlink * pl;
|
||||
|
||||
|
||||
@ -125,7 +125,7 @@ static int pamfunc(struct clientparam *param)
|
||||
|
||||
/*------------------------------- MAIN --------------------------------------
|
||||
start plugin init */
|
||||
PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, unsigned char** argv)
|
||||
PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, char** argv)
|
||||
{
|
||||
|
||||
|
||||
|
@ -47,7 +47,7 @@ static char hexMap[] = {
|
||||
static BIO *bio_err=NULL;
|
||||
|
||||
|
||||
static size_t bin2hex (const unsigned char* bin, size_t bin_length, char* str, size_t str_length)
|
||||
static size_t bin2hex (const char* bin, size_t bin_length, char* str, size_t str_length)
|
||||
{
|
||||
char *p;
|
||||
size_t i;
|
||||
@ -111,9 +111,9 @@ SSL_CERT ssl_copy_cert(SSL_CERT cert)
|
||||
EVP_PKEY *pk = NULL;
|
||||
RSA *rsa = NULL;
|
||||
|
||||
unsigned char p1[] = "RU";
|
||||
unsigned char p2[] = "3proxy";
|
||||
unsigned char p3[] = "3proxy CA";
|
||||
char p1[] = "RU";
|
||||
char p2[] = "3proxy";
|
||||
char p3[] = "3proxy CA";
|
||||
|
||||
char hash_name_sha1[sizeof(src_cert->sha1_hash)*2 + 1];
|
||||
char cache_name[200];
|
||||
|
@ -28,7 +28,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
PROXYFUNC tcppmfunc, proxyfunc, smtppfunc, ftpprfunc;
|
||||
static void (*pdolog)(struct clientparam * param, const unsigned char *s);
|
||||
static void (*pdolog)(struct clientparam * param, const char *s);
|
||||
|
||||
static struct pluginlink * pl;
|
||||
|
||||
@ -239,25 +239,25 @@ int dossl(struct clientparam* param, SSL_CONN* ServerConnp, SSL_CONN* ClientConn
|
||||
ServerConn = ssl_handshake_to_server(param->remsock, (char *)param->hostname, &ServerCert, &errSSL);
|
||||
if ( ServerConn == NULL || ServerCert == NULL ) {
|
||||
param->res = 8011;
|
||||
pdolog(param, (unsigned char *)"SSL handshake to server failed");
|
||||
if(ServerConn == NULL) pdolog(param, (unsigned char *)"ServerConn is NULL");
|
||||
if(ServerCert == NULL) pdolog(param, (unsigned char *)"ServerCert is NULL");
|
||||
if(errSSL)pdolog(param, (unsigned char *)errSSL);
|
||||
pdolog(param, (char *)"SSL handshake to server failed");
|
||||
if(ServerConn == NULL) pdolog(param, (char *)"ServerConn is NULL");
|
||||
if(ServerCert == NULL) pdolog(param, (char *)"ServerCert is NULL");
|
||||
if(errSSL)pdolog(param, (char *)errSSL);
|
||||
return 1;
|
||||
}
|
||||
FakeCert = ssl_copy_cert(ServerCert);
|
||||
if ( FakeCert == NULL ) {
|
||||
param->res = 8012;
|
||||
_ssl_cert_free(ServerCert);
|
||||
pdolog(param, (unsigned char *)"Failed to create certificate copy");
|
||||
pdolog(param, (char *)"Failed to create certificate copy");
|
||||
ssl_conn_free(ServerConn);
|
||||
return 2;
|
||||
}
|
||||
ClientConn = ssl_handshake_to_client(param->clisock, FakeCert, &errSSL);
|
||||
if ( ClientConn == NULL ) {
|
||||
param->res = 8012;
|
||||
pdolog(param, (unsigned char *)"Handshake to client failed");
|
||||
if(errSSL)pdolog(param, (unsigned char *)errSSL);
|
||||
pdolog(param, (char *)"Handshake to client failed");
|
||||
if(errSSL)pdolog(param, (char *)errSSL);
|
||||
_ssl_cert_free(ServerCert);
|
||||
_ssl_cert_free(FakeCert);
|
||||
ssl_conn_free(ServerConn);
|
||||
@ -329,7 +329,7 @@ static struct filter ssl_filter = {
|
||||
int mitm = 0;
|
||||
int ssl_inited = 0;
|
||||
|
||||
static int h_mitm(int argc, unsigned char **argv){
|
||||
static int h_mitm(int argc, char **argv){
|
||||
if(!ssl_inited) {
|
||||
ssl_init();
|
||||
ssl_inited = 1;
|
||||
@ -342,7 +342,7 @@ static int h_mitm(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_nomitm(int argc, unsigned char **argv){
|
||||
static int h_nomitm(int argc, char **argv){
|
||||
struct filter * sf;
|
||||
if(!(mitm&1)) return 1;
|
||||
if(mitm) usleep(100*SLEEPTIME);
|
||||
@ -357,7 +357,7 @@ static int h_nomitm(int argc, unsigned char **argv){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_certpath(int argc, unsigned char **argv){
|
||||
static int h_certpath(int argc, char **argv){
|
||||
size_t len;
|
||||
len = strlen(argv[1]);
|
||||
if(!len || (argv[1][len - 1] != '/' && argv[1][len - 1] != '\\')) return 1;
|
||||
|
@ -26,7 +26,7 @@ extern "C" {
|
||||
int DBGLEVEL = 0;
|
||||
|
||||
int already_loaded = 0;
|
||||
typedef int (* handler)(int argc, unsigned char ** argv);
|
||||
typedef int (* handler)(int argc, char ** argv);
|
||||
|
||||
struct extparam * sconfp;
|
||||
struct commands * scommandhandlers;
|
||||
@ -79,7 +79,7 @@ static void killtrafcorrect() {
|
||||
}
|
||||
|
||||
struct commands trafcorrect_handler;
|
||||
int h_trafcorrect(int argc, unsigned char ** argv) {
|
||||
int h_trafcorrect(int argc, char ** argv) {
|
||||
if (argc < 2) {
|
||||
if(DBGLEVEL == 1)fprintf(stdout, "See documentation of traffic correct plugin.\n");
|
||||
return 1;
|
||||
|
@ -85,12 +85,12 @@ static struct filter transparent_filter = {
|
||||
transparent_filter_close
|
||||
};
|
||||
|
||||
static int h_transparent(int argc, unsigned char **argv){
|
||||
static int h_transparent(int argc, char **argv){
|
||||
transparent_filter.filter_open = transparent_filter_open;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int h_notransparent(int argc, unsigned char **argv){
|
||||
static int h_notransparent(int argc, char **argv){
|
||||
transparent_filter.filter_open = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
@ -22,17 +22,17 @@ static struct auth alwaysauth;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
unsigned char * conv_utf8_to_cp1251(unsigned char *s){
|
||||
int i, j=0, n=(int)strlen((char *)s);
|
||||
int byte2 = 0;
|
||||
int c1, new_c1, new_c2, new_i;
|
||||
char * conv_utf8_to_cp1251(char *s){
|
||||
unsigned i, j=0, n=(int)strlen((char *)s);
|
||||
unsigned byte2 = 0;
|
||||
unsigned c1, new_c1, new_c2, new_i;
|
||||
for(i = 0; i < n; i++){
|
||||
if(byte2 && s[i]>=128 && s[i]<=192){
|
||||
if(byte2 && ((unsigned)s[i])>=128 && ((unsigned)s[i])<=192){
|
||||
new_c2=(c1&3)*64+(s[i]&63);
|
||||
new_c1=(c1>>2)&5;
|
||||
new_i=(new_c1*256)+new_c2;
|
||||
if(new_i == 1025) s[j++] = 168;
|
||||
else if (new_i==1105) s[j++] = 184;
|
||||
if(new_i == 1025) s[j++] = (char)(unsigned char)168;
|
||||
else if (new_i==1105) s[j++] = (char)(unsigned char)184;
|
||||
else if (new_i < (192 + 848) || new_i > (255 + 848)){
|
||||
return s;
|
||||
}
|
||||
@ -46,7 +46,7 @@ unsigned char * conv_utf8_to_cp1251(unsigned char *s){
|
||||
c1 = s[i];
|
||||
byte2 = 1;
|
||||
}
|
||||
else if(s[i] < 128) s[j++] = s[i];
|
||||
else if(((unsigned)s[i]) < 128) s[j++] = s[i];
|
||||
else return s;
|
||||
}
|
||||
s[j] = 0;
|
||||
|
18
src/pop3p.c
18
src/pop3p.c
@ -12,23 +12,23 @@
|
||||
|
||||
void * pop3pchild(struct clientparam* param) {
|
||||
int i=0, res;
|
||||
unsigned char buf[320];
|
||||
unsigned char *se;
|
||||
char buf[320];
|
||||
char *se;
|
||||
|
||||
if(socksend(param->clisock, (unsigned char *)"+OK Proxy\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (611);}
|
||||
if(socksend(param->clisock, (char *)"+OK Proxy\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (611);}
|
||||
i = sockgetlinebuf(param, CLIENT, buf, sizeof(buf) - 10, '\n', conf.timeouts[STRING_S]);
|
||||
while(i > 4 && strncasecmp((char *)buf, "USER", 4)){
|
||||
if(!strncasecmp((char *)buf, "QUIT", 4)){
|
||||
socksend(param->clisock, (unsigned char *)"+OK\r\n", 5,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"+OK\r\n", 5,conf.timeouts[STRING_S]);
|
||||
RETURN(0);
|
||||
}
|
||||
socksend(param->clisock, (unsigned char *)"-ERR need USER first\r\n", 22, conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"-ERR need USER first\r\n", 22, conf.timeouts[STRING_S]);
|
||||
i = sockgetlinebuf(param, CLIENT, buf, sizeof(buf) - 10, '\n', conf.timeouts[STRING_S]);
|
||||
}
|
||||
if(i<6) {RETURN(612);}
|
||||
|
||||
buf[i] = 0;
|
||||
if ((se=(unsigned char *)strchr((char *)buf, '\r'))) *se = 0;
|
||||
if ((se=(char *)strchr((char *)buf, '\r'))) *se = 0;
|
||||
if (strncasecmp((char *)buf, "USER ", 5)){RETURN (614);}
|
||||
if(parseconnusername((char *)buf +5, param, 0, 110)){RETURN(615);}
|
||||
param->operation = CONNECT;
|
||||
@ -38,9 +38,9 @@ void * pop3pchild(struct clientparam* param) {
|
||||
if( i < 3 ) {RETURN(621);}
|
||||
buf[i] = 0;
|
||||
if(strncasecmp((char *)buf, "+OK", 3)||!strncasecmp((char *)buf+4, "PROXY", 5)){RETURN(622);}
|
||||
if( socksend(param->remsock, (unsigned char *)"USER ", 5, conf.timeouts[STRING_S])!= 5 ||
|
||||
if( socksend(param->remsock, (char *)"USER ", 5, conf.timeouts[STRING_S])!= 5 ||
|
||||
socksend(param->remsock, param->extusername, (int)strlen((char *)param->extusername), conf.timeouts[STRING_S]) <= 0 ||
|
||||
socksend(param->remsock, (unsigned char *)"\r\n", 2, conf.timeouts[STRING_S])!=2)
|
||||
socksend(param->remsock, (char *)"\r\n", 2, conf.timeouts[STRING_S])!=2)
|
||||
{RETURN(623);}
|
||||
param->statscli64 += (uint64_t)(strlen((char *)param->extusername) + 7);
|
||||
param->nwrites++;
|
||||
@ -53,7 +53,7 @@ CLEANRET:
|
||||
}
|
||||
else dolog(param, NULL);
|
||||
if(param->clisock != INVALID_SOCKET) {
|
||||
if ((param->res > 0 && param->res < 100) || (param->res > 611 && param->res <700)) socksend(param->clisock, (unsigned char *)"-ERR\r\n", 6,conf.timeouts[STRING_S]);
|
||||
if ((param->res > 0 && param->res < 100) || (param->res > 611 && param->res <700)) socksend(param->clisock, (char *)"-ERR\r\n", 6,conf.timeouts[STRING_S]);
|
||||
}
|
||||
freeparam(param);
|
||||
return (NULL);
|
||||
|
184
src/proxy.c
184
src/proxy.c
@ -89,9 +89,6 @@ char * proxy_stringtable[] = {
|
||||
"<body><h2>403 Access Denied</h2><h3>Access control list denies you to access this resource</body></html>\r\n",
|
||||
|
||||
/* 12*/ "HTTP/1.0 407 Proxy Authentication Required\r\n"
|
||||
#ifndef NOCRYPT
|
||||
"Proxy-Authenticate: NTLM\r\n"
|
||||
#endif
|
||||
"Proxy-Authenticate: Basic realm=\"proxy\"\r\n"
|
||||
"Connection: close\r\n"
|
||||
"Content-type: text/html; charset=utf-8\r\n"
|
||||
@ -99,10 +96,7 @@ char * proxy_stringtable[] = {
|
||||
"<html><head><title>407 Proxy Authentication Required</title></head>\r\n"
|
||||
"<body><h2>407 Proxy Authentication Required</h2><h3>Access to requested resource disallowed by administrator or you need valid username/password to use this resource</h3></body></html>\r\n",
|
||||
|
||||
/* 13*/ "HTTP/1.0 407 Proxy Authentication Required\r\n"
|
||||
"Connection: keep-alive\r\n"
|
||||
"Content-Length: 0\r\n"
|
||||
"Proxy-Authenticate: NTLM ",
|
||||
/* 13*/ "",
|
||||
|
||||
/* 14*/ "HTTP/1.0 403 Forbidden\r\n"
|
||||
"Connection: close\r\n"
|
||||
@ -152,11 +146,11 @@ static void logurl(struct clientparam * param, char * buf, char * req, int ftp){
|
||||
strcpy(se, sb);
|
||||
}
|
||||
}
|
||||
if(param->res != 555 && param->res != 508)dolog(param, (unsigned char *)(req?buf:NULL));
|
||||
if(param->res != 555 && param->res != 508)dolog(param, (char *)(req?buf:NULL));
|
||||
}
|
||||
|
||||
void decodeurl(unsigned char *s, int allowcr){
|
||||
unsigned char *d = s;
|
||||
void decodeurl(char *s, int allowcr){
|
||||
char *d = s;
|
||||
unsigned u;
|
||||
|
||||
while(*s){
|
||||
@ -184,7 +178,7 @@ void decodeurl(unsigned char *s, int allowcr){
|
||||
*d = 0;
|
||||
}
|
||||
|
||||
void file2url(unsigned char *sb, unsigned char *buf, unsigned bufsize, int * inbuf, int skip255){
|
||||
void file2url(char *sb, char *buf, unsigned bufsize, int * inbuf, int skip255){
|
||||
for(; *sb; sb++){
|
||||
if((bufsize - *inbuf)<16)break;
|
||||
if(*sb=='\r'||*sb=='\n')continue;
|
||||
@ -208,14 +202,14 @@ void file2url(unsigned char *sb, unsigned char *buf, unsigned bufsize, int * inb
|
||||
|
||||
void * proxychild(struct clientparam* param) {
|
||||
int res=0, i=0;
|
||||
unsigned char* buf = NULL, *newbuf;
|
||||
char* buf = NULL, *newbuf;
|
||||
int inbuf;
|
||||
int bufsize;
|
||||
unsigned reqlen = 0;
|
||||
unsigned char *sb=NULL, *sg=NULL, *se=NULL, *sp=NULL,
|
||||
char *sb=NULL, *sg=NULL, *se=NULL, *sp=NULL,
|
||||
*req=NULL, *su=NULL, *ss = NULL;
|
||||
unsigned char *ftpbase=NULL;
|
||||
unsigned char username[1024];
|
||||
char *ftpbase=NULL;
|
||||
char username[1024];
|
||||
int keepalive = 0;
|
||||
uint64_t contentlength64 = 0;
|
||||
int hascontent =0;
|
||||
@ -293,7 +287,7 @@ for(;;){
|
||||
}
|
||||
myfree(req);
|
||||
}
|
||||
req = (unsigned char *)mystrdup((char *)buf);
|
||||
req = (char *)mystrdup((char *)buf);
|
||||
if(!req){RETURN(510);}
|
||||
if(i<10) {
|
||||
RETURN(511);
|
||||
@ -302,7 +296,7 @@ for(;;){
|
||||
param->transparent = 0;
|
||||
if((isconnect = !strncasecmp((char *)buf, "CONNECT", 7))) keepalive = 2;
|
||||
|
||||
if ((sb=(unsigned char *)(unsigned char *)strchr((char *)buf, ' ')) == NULL) {RETURN(512);}
|
||||
if ((sb=(char *)(char *)strchr((char *)buf, ' ')) == NULL) {RETURN(512);}
|
||||
ss = ++sb;
|
||||
if(!isconnect) {
|
||||
if (!strncasecmp((char *)sb, "http://", 7)) {
|
||||
@ -320,21 +314,21 @@ for(;;){
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((se=(unsigned char *)(unsigned char *)strchr((char *)sb, ' ')) == NULL || sb==se) {RETURN (514);}
|
||||
if ((se=(char *)(char *)strchr((char *)sb, ' ')) == NULL || sb==se) {RETURN (514);}
|
||||
*se = 0;
|
||||
}
|
||||
if(!param->transparent || isconnect) {
|
||||
if(!isconnect) {
|
||||
if ((se=(unsigned char *)(unsigned char *)strchr((char *)sb, '/')) == NULL
|
||||
if ((se=(char *)(char *)strchr((char *)sb, '/')) == NULL
|
||||
|| sb==se
|
||||
|| !(sg=(unsigned char *)strchr((char *)sb, ' '))) {RETURN (515);}
|
||||
|| !(sg=(char *)strchr((char *)sb, ' '))) {RETURN (515);}
|
||||
if(se > sg) se=sg;
|
||||
*se = 0;
|
||||
}
|
||||
prefix = (int)(se - buf);
|
||||
su = (unsigned char*)strrchr((char *)sb, '@');
|
||||
su = (char*)strrchr((char *)sb, '@');
|
||||
if(su) {
|
||||
su = (unsigned char *)mystrdup((char *)sb);
|
||||
su = (char *)mystrdup((char *)sb);
|
||||
decodeurl(su, 0);
|
||||
if(parseconnusername((char *)su, (struct clientparam *)param, 1, (unsigned short)((ftp)?21:80))) RETURN (100);
|
||||
myfree(su);
|
||||
@ -358,7 +352,7 @@ for(;;){
|
||||
/*printf("Got: %s\n", buf+inbuf);*/
|
||||
#ifndef WITHMAIN
|
||||
if(i > 25 && !param->srv->transparent && (!strncasecmp((char *)(buf+inbuf), "proxy-authorization", 19))){
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -369,65 +363,17 @@ for(;;){
|
||||
i = de64(sb, username, 255);
|
||||
if(i<=0)continue;
|
||||
username[i] = 0;
|
||||
sb = (unsigned char *)strchr((char *)username, ':');
|
||||
sb = (char *)strchr((char *)username, ':');
|
||||
if(sb){
|
||||
*sb = 0;
|
||||
if(param->password)myfree(param->password);
|
||||
param->password = (unsigned char *)mystrdup((char *)sb+1);
|
||||
param->password = (char *)mystrdup((char *)sb+1);
|
||||
param->pwtype = 0;
|
||||
}
|
||||
if(param->username)myfree(param->username);
|
||||
param->username = (unsigned char *)mystrdup((char *)username);
|
||||
param->username = (char *)mystrdup((char *)username);
|
||||
continue;
|
||||
}
|
||||
#ifndef NOCRYPT
|
||||
if(param->srv->usentlm && !strncasecmp((char *)sb, "ntlm", 4)){
|
||||
sb+=4;
|
||||
while(isspace(*sb))sb++;
|
||||
i = de64(sb, username, 1023);
|
||||
if(i<=16)continue;
|
||||
username[i] = 0;
|
||||
if(strncasecmp((char *)username, "NTLMSSP", 8)) continue;
|
||||
if(username[8] == 1) {
|
||||
while( (i = sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, '\n', conf.timeouts[STRING_S])) > 2){
|
||||
if(i> 15 && (!strncasecmp((char *)(buf), "content-length", 14))){
|
||||
buf[i]=0;
|
||||
sscanf((char *)buf + 15, "%"PRIu64, &contentlength64);
|
||||
}
|
||||
}
|
||||
while( contentlength64 > 0 && (i = sockgetlinebuf(param, CLIENT, buf, (BUFSIZE < contentlength64)? BUFSIZE - 1:(int)contentlength64, '\n', conf.timeouts[STRING_S])) > 0){
|
||||
if ((uint64_t)i > contentlength64) break;
|
||||
contentlength64-=i;
|
||||
}
|
||||
contentlength64 = 0;
|
||||
if(param->password)myfree(param->password);
|
||||
param->password = myalloc(32);
|
||||
param->pwtype = 2;
|
||||
i = (int)strlen(proxy_stringtable[13]);
|
||||
memcpy(buf, proxy_stringtable[13], i);
|
||||
genchallenge(param, (char *)param->password, (char *)buf + i);
|
||||
memcpy(buf + strlen((char *)buf), "\r\n\r\n", 5);
|
||||
socksend(param->clisock, buf, (int)strlen((char *)buf), conf.timeouts[STRING_S]);
|
||||
ckeepalive = keepalive = 1;
|
||||
goto REQUESTEND;
|
||||
}
|
||||
if(username[8] == 3 && param->pwtype == 2 && i>=80) {
|
||||
unsigned offset, len;
|
||||
|
||||
len = username[20] + (((unsigned)username[21]) << 8);
|
||||
offset = username[24] + (((unsigned)username[25]) << 8);
|
||||
if(len != 24 || len + offset > (unsigned)i) continue;
|
||||
memcpy(param->password + 8, username + offset, 24);
|
||||
len = username[36] + (((unsigned)username[37]) << 8);
|
||||
offset = username[40] + (((unsigned)username[41]) << 8);
|
||||
if(len> 255 || len + offset > (unsigned)i) continue;
|
||||
if(param->username) myfree(param->username);
|
||||
unicode2text((char *)username+offset, (char *)username+offset, (len>>1));
|
||||
param->username = (unsigned char *)mystrdup((char *)username+offset);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if(!isconnect && (
|
||||
@ -435,7 +381,7 @@ for(;;){
|
||||
||
|
||||
(i> 16 && (!strncasecmp((char *)(buf+inbuf), "connection:", 11)))
|
||||
)){
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -447,16 +393,16 @@ for(;;){
|
||||
}
|
||||
if( i > 11 && !strncasecmp((char *)(buf+inbuf), "Expect: 100", 11)){
|
||||
keepalive = 1;
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[17], (int)strlen(proxy_stringtable[17]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[17], (int)strlen(proxy_stringtable[17]), conf.timeouts[STRING_S]);
|
||||
continue;
|
||||
}
|
||||
if(param->transparent && i > 6 && !strncasecmp((char *)buf + inbuf, "Host:", 5)){
|
||||
unsigned char c;
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
char c;
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
(se = (unsigned char *)strchr((char *)sb, '\r')) || (se = (unsigned char *)strchr((char *)sb, '\n'));
|
||||
(se = (char *)strchr((char *)sb, '\r')) || (se = (char *)strchr((char *)sb, '\n'));
|
||||
if(se) {
|
||||
c = *se;
|
||||
*se = 0;
|
||||
@ -466,7 +412,7 @@ for(;;){
|
||||
}
|
||||
newbuf = myalloc(strlen((char *)req) + strlen((char *)(buf+inbuf)) + 8);
|
||||
if(newbuf){
|
||||
sp = (unsigned char *)strchr((char *)req+1, '/');
|
||||
sp = (char *)strchr((char *)req+1, '/');
|
||||
memcpy(newbuf, req, (sp - req));
|
||||
sprintf((char*)newbuf + (sp - req), "http://%s%s",sb,sp);
|
||||
myfree(req);
|
||||
@ -475,7 +421,7 @@ for(;;){
|
||||
if(se)*se = c;
|
||||
}
|
||||
if(ftp && i > 13 && (!strncasecmp((char *)(buf+inbuf), "authorization", 13))){
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -486,19 +432,19 @@ for(;;){
|
||||
i = de64(sb, username, 255);
|
||||
if(i<=0)continue;
|
||||
username[i] = 0;
|
||||
sb = (unsigned char *)strchr((char *)username, ':');
|
||||
sb = (char *)strchr((char *)username, ':');
|
||||
if(sb){
|
||||
*sb = 0;
|
||||
if(param->extpassword)myfree(param->extpassword);
|
||||
param->extpassword = (unsigned char *)mystrdup((char *)sb+1);
|
||||
param->extpassword = (char *)mystrdup((char *)sb+1);
|
||||
}
|
||||
if(param->extusername)myfree(param->extusername);
|
||||
param->extusername = (unsigned char *)mystrdup((char *)username);
|
||||
param->extusername = (char *)mystrdup((char *)username);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(i> 15 && (!strncasecmp((char *)(buf+inbuf), "content-length", 14))){
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -573,7 +519,7 @@ for(;;){
|
||||
ckeepalive = 1;
|
||||
if(ftpbase) myfree(ftpbase);
|
||||
ftpbase = NULL;
|
||||
if(!(sp = (unsigned char *)strchr((char *)ss, ' '))){RETURN(799);}
|
||||
if(!(sp = (char *)strchr((char *)ss, ' '))){RETURN(799);}
|
||||
*sp = 0;
|
||||
|
||||
decodeurl(ss, 0);
|
||||
@ -597,10 +543,10 @@ for(;;){
|
||||
inftpbuf = FTPBUFSIZE - (20 + inftpbuf);
|
||||
res = ftpcd(param, ftpbase, ftpbuf, &inftpbuf);
|
||||
if(res){
|
||||
res = ftptype(param, (unsigned char *)"I");
|
||||
res = ftptype(param, (char *)"I");
|
||||
if(res)RETURN(res);
|
||||
ftpbase[--i] = 0;
|
||||
ftps = ftpcommand(param, param->operation == FTP_PUT? (unsigned char *)"PUT" : (unsigned char *)"RETR", ftpbase);
|
||||
ftps = ftpcommand(param, param->operation == FTP_PUT? (char *)"PUT" : (char *)"RETR", ftpbase);
|
||||
}
|
||||
else {
|
||||
if(inftpbuf){
|
||||
@ -609,12 +555,12 @@ for(;;){
|
||||
memcpy(buf+inbuf, "<hr>", 4);
|
||||
inbuf += 4;
|
||||
}
|
||||
ftps = ftpcommand(param, (unsigned char *)"LIST", NULL);
|
||||
ftps = ftpcommand(param, (char *)"LIST", NULL);
|
||||
mode = 1;
|
||||
}
|
||||
if(ftps == INVALID_SOCKET){RETURN(780);}
|
||||
if(!mode){
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]);
|
||||
s = param->remsock;
|
||||
param->remsock = ftps;
|
||||
if((param->operation == FTP_PUT) && (contentlength64 > 0)) param->waitclient64 = contentlength64;
|
||||
@ -635,7 +581,7 @@ for(;;){
|
||||
}
|
||||
|
||||
param->remsock = ftps;
|
||||
if(gotres <= 0) for(; (res = sockgetlinebuf(param, SERVER, (unsigned char *)ftpbuf, FTPBUFSIZE - 20, '\n', conf.timeouts[STRING_S])) > 0; i++){
|
||||
if(gotres <= 0) for(; (res = sockgetlinebuf(param, SERVER, (char *)ftpbuf, FTPBUFSIZE - 20, '\n', conf.timeouts[STRING_S])) > 0; i++){
|
||||
int isdir = 0;
|
||||
int islink = 0;
|
||||
int filetoken =-1;
|
||||
@ -643,9 +589,9 @@ for(;;){
|
||||
int modetoken =-1;
|
||||
int datetoken =-1;
|
||||
int spaces = 1;
|
||||
unsigned char * tokens[10];
|
||||
char * tokens[10];
|
||||
unsigned wordlen [10];
|
||||
unsigned char j=0;
|
||||
char j=0;
|
||||
int space = 1;
|
||||
|
||||
ftpbuf[res] = 0;
|
||||
@ -654,7 +600,7 @@ for(;;){
|
||||
continue;
|
||||
}
|
||||
if(!isnumber(*ftpbuf) && mode == 1) mode = 2;
|
||||
for(sb=(unsigned char *)ftpbuf; *sb; sb++){
|
||||
for(sb=(char *)ftpbuf; *sb; sb++){
|
||||
if(!space && isspace(*sb)){
|
||||
space = 1;
|
||||
wordlen[j]=(unsigned)(sb-tokens[j]);
|
||||
@ -721,7 +667,7 @@ for(;;){
|
||||
memcpy(buf+inbuf, " <A HREF=\"", 10);
|
||||
inbuf+=10;
|
||||
sb = NULL;
|
||||
if(islink) sb = (unsigned char *)strstr((char *)tokens[filetoken], " -> ");
|
||||
if(islink) sb = (char *)strstr((char *)tokens[filetoken], " -> ");
|
||||
if(sb) sb+=4;
|
||||
|
||||
else sb=tokens[filetoken];
|
||||
@ -760,7 +706,7 @@ for(;;){
|
||||
if((bufsize - inbuf) < LINESIZE){
|
||||
if (bufsize > 20000){
|
||||
if(!headsent++){
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[9], (int)strlen(proxy_stringtable[9]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[9], (int)strlen(proxy_stringtable[9]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
if((unsigned)socksend(param->clisock, buf, inbuf, conf.timeouts[STRING_S]) != inbuf){
|
||||
RETURN(781);
|
||||
@ -791,7 +737,7 @@ for(;;){
|
||||
"Connection: keep-alive\r\n"
|
||||
"Content-Length: %d\r\n\r\n",
|
||||
inbuf);
|
||||
socksend(param->clisock, (unsigned char *)ftpbuf, (int)strlen(ftpbuf), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)ftpbuf, (int)strlen(ftpbuf), conf.timeouts[STRING_S]);
|
||||
}
|
||||
socksend(param->clisock, buf, inbuf, conf.timeouts[STRING_S]);
|
||||
if(res){RETURN(res);}
|
||||
@ -803,7 +749,7 @@ for(;;){
|
||||
}
|
||||
|
||||
if(isconnect && param->redirtype != R_HTTP) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]);
|
||||
if(param->redirectfunc) {
|
||||
if(req)myfree(req);
|
||||
if(buf)myfree(buf);
|
||||
@ -821,7 +767,7 @@ for(;;){
|
||||
else {
|
||||
#ifdef TCP_CORK
|
||||
int opt = 1;
|
||||
so._setsockopt(param->remsock, IPPROTO_TCP, TCP_CORK, (unsigned char *)&opt, sizeof(int));
|
||||
so._setsockopt(param->remsock, IPPROTO_TCP, TCP_CORK, (char *)&opt, sizeof(int));
|
||||
#endif
|
||||
redirect = 1;
|
||||
res = (int)strlen((char *)req);
|
||||
@ -846,7 +792,7 @@ for(;;){
|
||||
else if(anonymous>1){
|
||||
sprintf((char*)buf+strlen((char *)buf), "Via: 1.1 ");
|
||||
gethostname((char *)(buf+strlen((char *)buf)), 256);
|
||||
sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(unsigned char *)"", conf.stringtable?conf.stringtable[3]:(unsigned char *)"");
|
||||
sprintf((char*)buf+strlen((char *)buf), ":%d (%s %s)\r\nX-Forwarded-For: ", (int)ntohs(*SAPORT(¶m->srv->intsa)), conf.stringtable?conf.stringtable[2]:(char *)"", conf.stringtable?conf.stringtable[3]:(char *)"");
|
||||
if(anonymous != 2)myinet_ntop(*SAFAMILY(¶m->sincr), SAADDR(¶m->sincr), (char *)buf + strlen((char *)buf), 128);
|
||||
else {
|
||||
unsigned long tmp;
|
||||
@ -862,7 +808,7 @@ for(;;){
|
||||
}
|
||||
if(param->extusername){
|
||||
sprintf((char*)buf + strlen((char *)buf), "%s: Basic ", (redirect)?"Proxy-Authorization":"Authorization");
|
||||
sprintf((char*)username, "%.128s:%.128s", param->extusername, param->extpassword?param->extpassword:(unsigned char*)"");
|
||||
sprintf((char*)username, "%.128s:%.128s", param->extusername, param->extpassword?param->extpassword:(char*)"");
|
||||
en64(username, buf+strlen((char *)buf), (int)strlen((char *)username));
|
||||
sprintf((char*)buf + strlen((char *)buf), "\r\n");
|
||||
}
|
||||
@ -873,7 +819,7 @@ for(;;){
|
||||
#ifdef TCP_CORK
|
||||
{
|
||||
int opt = 0;
|
||||
so._setsockopt(param->remsock, IPPROTO_TCP, TCP_CORK, (unsigned char *)&opt, sizeof(int));
|
||||
so._setsockopt(param->remsock, IPPROTO_TCP, TCP_CORK, (char *)&opt, sizeof(int));
|
||||
}
|
||||
#endif
|
||||
param->statscli64 += res;
|
||||
@ -904,7 +850,7 @@ for(;;){
|
||||
||
|
||||
(i> 16 && !strncasecmp((char *)(buf+inbuf), "connection:", 11))
|
||||
)){
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -919,7 +865,7 @@ for(;;){
|
||||
}
|
||||
else if(i > 15 && (!strncasecmp((char *)(buf+inbuf), "content-length", 14))){
|
||||
buf[inbuf+i]=0;
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -935,7 +881,7 @@ for(;;){
|
||||
}
|
||||
else if(i>25 && (!strncasecmp((char *)(buf+inbuf), "transfer-encoding", 17))){
|
||||
buf[inbuf+i]=0;
|
||||
sb = (unsigned char *)strchr((char *)(buf+inbuf), ':');
|
||||
sb = (char *)strchr((char *)(buf+inbuf), ':');
|
||||
if(!sb)continue;
|
||||
++sb;
|
||||
while(isspace(*sb))sb++;
|
||||
@ -1020,7 +966,7 @@ for(;;){
|
||||
if((param->chunked || contentlength64 > 0) && param->operation != HTTP_HEAD && res != 204 && res != 304) {
|
||||
do {
|
||||
if(param->chunked){
|
||||
unsigned char smallbuf[32];
|
||||
char smallbuf[32];
|
||||
while ((i = sockgetlinebuf(param, SERVER, smallbuf, 30, '\n', conf.timeouts[STRING_S])) == 2) {
|
||||
if (socksend(param->clisock, smallbuf, i, conf.timeouts[STRING_S]) != i){
|
||||
RETURN(533);
|
||||
@ -1086,41 +1032,41 @@ CLEANRET:
|
||||
if(param->res != 555 && param->res && param->clisock != INVALID_SOCKET && (param->res < 90 || param->res >=800 || param->res == 100 ||(param->res > 500 && param->res< 800))) {
|
||||
if((param->res>=509 && param->res < 517) || param->res > 900) while( (i = sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, '\n', conf.timeouts[STRING_S])) > 2);
|
||||
if(param->res == 10) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[2], (int)strlen(proxy_stringtable[2]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[2], (int)strlen(proxy_stringtable[2]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if (res == 700 || res == 701){
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[16], (int)strlen(proxy_stringtable[16]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (unsigned char *)ftpbuf, inftpbuf, conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[16], (int)strlen(proxy_stringtable[16]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)ftpbuf, inftpbuf, conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res == 100 || (param->res >10 && param->res < 20) || (param->res >701 && param->res <= 705)) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[1], (int)strlen(proxy_stringtable[1]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[1], (int)strlen(proxy_stringtable[1]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res >=20 && param->res < 30) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[6], (int)strlen(proxy_stringtable[6]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[6], (int)strlen(proxy_stringtable[6]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res >=30 && param->res < 80) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[5], (int)strlen(proxy_stringtable[5]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[5], (int)strlen(proxy_stringtable[5]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res == 1 || (!param->srv->needuser && param->res < 10)) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[11], (int)strlen(proxy_stringtable[11]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[11], (int)strlen(proxy_stringtable[11]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res < 10) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[param->srv->usentlm?12:7], (int)strlen(proxy_stringtable[param->srv->usentlm?12:7]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[7], (int)strlen(proxy_stringtable[7]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res == 999) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[4], (int)strlen(proxy_stringtable[4]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[4], (int)strlen(proxy_stringtable[4]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res == 519) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[3], (int)strlen(proxy_stringtable[3]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[3], (int)strlen(proxy_stringtable[3]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res == 517) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[15], (int)strlen(proxy_stringtable[15]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[15], (int)strlen(proxy_stringtable[15]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res == 780) {
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[10], (int)strlen(proxy_stringtable[10]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[10], (int)strlen(proxy_stringtable[10]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(param->res >= 511 && param->res<=516){
|
||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[0], (int)strlen(proxy_stringtable[0]), conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)proxy_stringtable[0], (int)strlen(proxy_stringtable[0]), conf.timeouts[STRING_S]);
|
||||
}
|
||||
}
|
||||
logurl(param, (char *)buf, (char *)req, ftp);
|
||||
|
72
src/proxy.h
72
src/proxy.h
@ -153,9 +153,9 @@ extern int timetoexit;
|
||||
extern struct extparam conf;
|
||||
|
||||
int sockmap(struct clientparam * param, int timeo, int usesplice);
|
||||
int socksend(SOCKET sock, unsigned char * buf, int bufsize, int to);
|
||||
int socksendto(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
|
||||
int sockrecvfrom(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
|
||||
int socksend(SOCKET sock, char * buf, int bufsize, int to);
|
||||
int socksendto(SOCKET sock, struct sockaddr * sin, char * buf, int bufsize, int to);
|
||||
int sockrecvfrom(SOCKET sock, struct sockaddr * sin, char * buf, int bufsize, int to);
|
||||
|
||||
|
||||
int sockgetcharcli(struct clientparam * param, int timeosec, int timeousec);
|
||||
@ -163,14 +163,14 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec);
|
||||
int sockfillbuffcli(struct clientparam * param, unsigned long size, int timeosec);
|
||||
int sockfillbuffsrv(struct clientparam * param, unsigned long size, int timeosec);
|
||||
|
||||
int sockgetlinebuf(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to);
|
||||
int sockgetlinebuf(struct clientparam * param, DIRECTION which, char * buf, int bufsize, int delim, int to);
|
||||
|
||||
|
||||
|
||||
void initlog(void);
|
||||
void dolog(struct clientparam * param, const unsigned char *s);
|
||||
int dobuf(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s, const unsigned char * doublec);
|
||||
int dobuf2(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format);
|
||||
void dolog(struct clientparam * param, const char *s);
|
||||
int dobuf(struct clientparam * param, char * buf, int bufsize, const char *s, const char * doublec);
|
||||
int dobuf2(struct clientparam * param, char * buf, int bufsize, const char *s, const char * doublec, struct tm* tm, char * format);
|
||||
int doconnect(struct clientparam * param);
|
||||
int alwaysauth(struct clientparam * param);
|
||||
int ipauth(struct clientparam * param);
|
||||
@ -181,15 +181,15 @@ void trafcountfunc(struct clientparam *param);
|
||||
unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nbytesout);
|
||||
|
||||
|
||||
int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask);
|
||||
int scanaddr(const char *s, unsigned long * ip, unsigned long * mask);
|
||||
int myinet_ntop(int af, void *src, char *dst, socklen_t size);
|
||||
extern struct nserver nservers[MAXNSERVERS];
|
||||
extern struct nserver authnserver;
|
||||
unsigned long getip(unsigned char *name);
|
||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa);
|
||||
int afdetect(unsigned char *name);
|
||||
unsigned long myresolver(int, unsigned char *, unsigned char *);
|
||||
unsigned long fakeresolver (int, unsigned char *, unsigned char*);
|
||||
unsigned long getip(char *name);
|
||||
unsigned long getip46(int family, char *name, struct sockaddr *sa);
|
||||
int afdetect(char *name);
|
||||
unsigned long myresolver(int, char *, char *);
|
||||
unsigned long fakeresolver (int, char *, char*);
|
||||
int inithashtable(struct hashtable *hashtable, unsigned nhashsize);
|
||||
void freeparam(struct clientparam * param);
|
||||
void srvpostfree(struct srvparam * srv);
|
||||
@ -207,34 +207,34 @@ int reload (void);
|
||||
extern int paused;
|
||||
extern int demon;
|
||||
|
||||
unsigned char * mycrypt(const unsigned char *key, const unsigned char *salt, unsigned char *buf);
|
||||
unsigned char * ntpwdhash (unsigned char *szHash, const unsigned char *szPassword, int tohex);
|
||||
int de64 (const unsigned char *in, unsigned char *out, int maxlen);
|
||||
unsigned char* en64 (const unsigned char *in, unsigned char *out, int inlen);
|
||||
void tohex(unsigned char *in, unsigned char *out, int len);
|
||||
void fromhex(unsigned char *in, unsigned char *out, int len);
|
||||
char * mycrypt(const char *key, const char *salt, char *buf);
|
||||
char * ntpwdhash (char *szHash, const char *szPassword, int tohex);
|
||||
int de64 (const char *in, char *out, int maxlen);
|
||||
char* en64 (const char *in, char *out, int inlen);
|
||||
void tohex(char *in, char *out, int len);
|
||||
void fromhex(char *in, char *out, int len);
|
||||
|
||||
|
||||
|
||||
int ftplogin(struct clientparam *param, char *buf, int *inbuf);
|
||||
int ftpcd(struct clientparam *param, unsigned char* path, char *buf, int *inbuf);
|
||||
int ftpsyst(struct clientparam *param, unsigned char *buf, unsigned len);
|
||||
int ftppwd(struct clientparam *param, unsigned char *buf, unsigned len);
|
||||
int ftptype(struct clientparam *param, unsigned char* f_type);
|
||||
int ftpres(struct clientparam *param, unsigned char * buf, int len);
|
||||
SOCKET ftpcommand(struct clientparam *param, unsigned char * command, unsigned char *arg);
|
||||
int ftpcd(struct clientparam *param, char* path, char *buf, int *inbuf);
|
||||
int ftpsyst(struct clientparam *param, char *buf, unsigned len);
|
||||
int ftppwd(struct clientparam *param, char *buf, unsigned len);
|
||||
int ftptype(struct clientparam *param, char* f_type);
|
||||
int ftpres(struct clientparam *param, char * buf, int len);
|
||||
SOCKET ftpcommand(struct clientparam *param, char * command, char *arg);
|
||||
|
||||
|
||||
int text2unicode(const char * text, char * buf, int buflen);
|
||||
void unicode2text(const char *unicode, char * buf, int len);
|
||||
void genchallenge(struct clientparam *param, char * challenge, char *buf);
|
||||
void mschap(const unsigned char *win_password,
|
||||
const unsigned char *challenge, unsigned char *response);
|
||||
void mschap(const char *win_password,
|
||||
const char *challenge, char *response);
|
||||
|
||||
struct hashtable;
|
||||
void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires);
|
||||
void hashadd(struct hashtable *ht, const char* name, char* value, time_t expires);
|
||||
|
||||
int parsehost(int family, unsigned char *host, struct sockaddr *sa);
|
||||
int parsehost(int family, char *host, struct sockaddr *sa);
|
||||
int parsehostname(char *hostname, struct clientparam *param, unsigned short port);
|
||||
int parseusername(char *username, struct clientparam *param, int extpasswd);
|
||||
int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port);
|
||||
@ -242,7 +242,7 @@ int ACLmatches(struct ace* acentry, struct clientparam * param);
|
||||
int checkACL(struct clientparam * param);
|
||||
int checkpreACL(struct clientparam * param);
|
||||
extern int havelog;
|
||||
unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth);
|
||||
unsigned long udpresolve(int af, char * name, char * value, unsigned *retttl, struct clientparam* param, int makeauth);
|
||||
|
||||
void copyacl (struct ace *ac, struct srvparam *srv);
|
||||
struct auth * copyauth (struct auth *);
|
||||
@ -255,17 +255,17 @@ struct passwords * copypwl (struct passwords *pwl);
|
||||
void freepwl(struct passwords *pw);
|
||||
void copyfilter(struct filter *, struct srvparam *srv);
|
||||
FILTER_ACTION makefilters (struct srvparam *srv, struct clientparam *param);
|
||||
FILTER_ACTION handlereqfilters(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handlehdrfilterscli(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handlehdrfilterssrv(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handlereqfilters(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handlehdrfilterscli(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handlehdrfilterssrv(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handlepredatflt(struct clientparam *param);
|
||||
FILTER_ACTION handledatfltcli(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handledatfltsrv(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handledatfltcli(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
FILTER_ACTION handledatfltsrv(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
|
||||
void srvinit(struct srvparam * srv, struct clientparam *param);
|
||||
void srvinit2(struct srvparam * srv, struct clientparam *param);
|
||||
void srvfree(struct srvparam * srv);
|
||||
unsigned char * dologname (unsigned char *buf, int bufsize, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t);
|
||||
char * dologname (char *buf, int bufsize, char *name, const char *ext, ROTATION lt, time_t t);
|
||||
int readconfig(FILE * fp);
|
||||
int connectwithpoll(SOCKET sock, struct sockaddr *sa, SASIZETYPE size, int to);
|
||||
|
||||
|
@ -25,27 +25,27 @@ void * threadfunc (void *p) {
|
||||
fds.revents = 0;
|
||||
for(i=5+(param->srv->maxchild>>10); i; i--){
|
||||
if(so._poll(&fds, 1, 1000*CONNBACK_TO)!=1){
|
||||
dolog(param, (unsigned char *)"Connect back not received, check connback client");
|
||||
dolog(param, (char *)"Connect back not received, check connback client");
|
||||
i = 0;
|
||||
break;
|
||||
}
|
||||
param->remsock = so._accept(param->srv->cbsock, (struct sockaddr*)¶m->sinsr, &size);
|
||||
if(param->remsock == INVALID_SOCKET) {
|
||||
dolog(param, (unsigned char *)"Connect back accept() failed");
|
||||
dolog(param, (char *)"Connect back accept() failed");
|
||||
continue;
|
||||
}
|
||||
#ifndef WITHMAIN
|
||||
param->req = param->sinsr;
|
||||
if(param->srv->preacl) param->res = checkpreACL(param);
|
||||
if(param->res){
|
||||
dolog(param, (unsigned char *)"Connect back ACL failed");
|
||||
dolog(param, (char *)"Connect back ACL failed");
|
||||
so._closesocket(param->remsock);
|
||||
param->remsock = INVALID_SOCKET;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
if(socksendto(param->remsock, (struct sockaddr*)¶m->sinsr, (unsigned char *)"C", 1, CONNBACK_TO) != 1){
|
||||
dolog(param, (unsigned char *)"Connect back sending command failed");
|
||||
if(socksendto(param->remsock, (struct sockaddr*)¶m->sinsr, (char *)"C", 1, CONNBACK_TO) != 1){
|
||||
dolog(param, (char *)"Connect back sending command failed");
|
||||
so._closesocket(param->remsock);
|
||||
param->remsock = INVALID_SOCKET;
|
||||
continue;
|
||||
@ -185,10 +185,10 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
struct clientparam * newparam;
|
||||
int error = 0;
|
||||
unsigned sleeptime;
|
||||
unsigned char buf[256];
|
||||
char buf[256];
|
||||
char *hostname=NULL;
|
||||
int opt = 1, isudp = 0, iscbl = 0, iscbc = 0;
|
||||
unsigned char *cbc_string = NULL, *cbl_string = NULL;
|
||||
char *cbc_string = NULL, *cbl_string = NULL;
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 cbsa;
|
||||
#else
|
||||
@ -316,28 +316,28 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
#endif
|
||||
case 'l':
|
||||
myfree(srv->logtarget);
|
||||
srv->logtarget = (unsigned char *)mystrdup(argv[i] + 2);
|
||||
srv->logtarget = (char *)mystrdup(argv[i] + 2);
|
||||
break;
|
||||
case 'i':
|
||||
getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&srv->intsa);
|
||||
getip46(46, (char *)argv[i]+2, (struct sockaddr *)&srv->intsa);
|
||||
break;
|
||||
case 'e':
|
||||
{
|
||||
#ifndef NOIPV6
|
||||
struct sockaddr_in6 sa6;
|
||||
memset(&sa6, 0, sizeof(sa6));
|
||||
error = !getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&sa6);
|
||||
error = !getip46(46, (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);
|
||||
error = !getip46(46, (char *)argv[i]+2, (struct sockaddr *)&srv->extsa);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
getip46(46, (unsigned char *)argv[i]+2, (struct sockaddr *)&srv->extNat);
|
||||
getip46(46, (char *)argv[i]+2, (struct sockaddr *)&srv->extNat);
|
||||
break;
|
||||
case 'p':
|
||||
*SAPORT(&srv->intsa) = htons(atoi(argv[i]+2));
|
||||
@ -365,7 +365,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
#endif
|
||||
case 'f':
|
||||
if(srv->logformat)myfree(srv->logformat);
|
||||
srv->logformat = (unsigned char *)mystrdup(argv[i] + 2);
|
||||
srv->logformat = (char *)mystrdup(argv[i] + 2);
|
||||
break;
|
||||
case 't':
|
||||
srv->silent = 1;
|
||||
@ -374,11 +374,11 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
hostname = argv[i] + 2;
|
||||
break;
|
||||
case 'r':
|
||||
cbc_string = (unsigned char *)mystrdup(argv[i] + 2);
|
||||
cbc_string = (char *)mystrdup(argv[i] + 2);
|
||||
iscbc = 1;
|
||||
break;
|
||||
case 'R':
|
||||
cbl_string = (unsigned char *)mystrdup(argv[i] + 2);
|
||||
cbl_string = (char *)mystrdup(argv[i] + 2);
|
||||
iscbl = 1;
|
||||
break;
|
||||
case 'u':
|
||||
@ -496,7 +496,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
);
|
||||
return (1);
|
||||
}
|
||||
srv->target = (unsigned char *)mystrdup(argv[i+1]);
|
||||
srv->target = (char *)mystrdup(argv[i+1]);
|
||||
#endif
|
||||
#ifndef STDMAIN
|
||||
}
|
||||
@ -507,8 +507,8 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(inetd) {
|
||||
fcntl(0,F_SETFL,O_NONBLOCK | fcntl(0,F_GETFL));
|
||||
if(!isudp){
|
||||
so._setsockopt(0, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg));
|
||||
so._setsockopt(0, SOL_SOCKET, SO_OOBINLINE, (unsigned char *)&opt, sizeof(int));
|
||||
so._setsockopt(0, SOL_SOCKET, SO_LINGER, (char *)&lg, sizeof(lg));
|
||||
so._setsockopt(0, SOL_SOCKET, SO_OOBINLINE, (char *)&opt, sizeof(int));
|
||||
}
|
||||
defparam.clisock = 0;
|
||||
if(! (newparam = myalloc (sizeof(defparam)))){
|
||||
@ -604,7 +604,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(iscbl){
|
||||
parsehost(srv->family, cbl_string, (struct sockaddr *)&cbsa);
|
||||
if((srv->cbsock=so._socket(SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) {
|
||||
dolog(&defparam, (unsigned char *)"Failed to allocate connect back socket");
|
||||
dolog(&defparam, (char *)"Failed to allocate connect back socket");
|
||||
return -6;
|
||||
}
|
||||
opt = 1;
|
||||
@ -617,11 +617,11 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
setopts(srv->cbsock, srv->cbssockopts);
|
||||
|
||||
if(so._bind(srv->cbsock, (struct sockaddr*)&cbsa, SASIZE(&cbsa))==-1) {
|
||||
dolog(&defparam, (unsigned char *)"Failed to bind connect back socket");
|
||||
dolog(&defparam, (char *)"Failed to bind connect back socket");
|
||||
return -7;
|
||||
}
|
||||
if(so._listen(srv->cbsock, 1 + (srv->maxchild>>4))==-1) {
|
||||
dolog(&defparam, (unsigned char *)"Failed to listen connect back socket");
|
||||
dolog(&defparam, (char *)"Failed to listen connect back socket");
|
||||
return -8;
|
||||
}
|
||||
}
|
||||
@ -766,12 +766,12 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(! (newparam = myalloc (sizeof(defparam)))){
|
||||
if(!isudp) so._closesocket(new_sock);
|
||||
defparam.res = 21;
|
||||
if(!srv->silent)dolog(&defparam, (unsigned char *)"Memory Allocation Failed");
|
||||
if(!srv->silent)dolog(&defparam, (char *)"Memory Allocation Failed");
|
||||
usleep(SLEEPTIME);
|
||||
continue;
|
||||
};
|
||||
*newparam = defparam;
|
||||
if(defparam.hostname)newparam->hostname=(unsigned char *)mystrdup((char *)defparam.hostname);
|
||||
if(defparam.hostname)newparam->hostname=(char *)mystrdup((char *)defparam.hostname);
|
||||
clearstat(newparam);
|
||||
|
||||
if(!isudp) newparam->clisock = new_sock;
|
||||
@ -827,7 +827,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(isudp) while(!srv->fds.events)usleep(SLEEPTIME);
|
||||
}
|
||||
|
||||
if(!srv->silent) dolog(&defparam, (unsigned char *)"Exiting thread");
|
||||
if(!srv->silent) dolog(&defparam, (char *)"Exiting thread");
|
||||
|
||||
srvfree(srv);
|
||||
pthread_mutex_lock(&srv->counter_mutex);
|
||||
@ -853,8 +853,8 @@ void srvinit(struct srvparam * srv, struct clientparam *param){
|
||||
srv->version = conf.version + 1;
|
||||
srv->paused = conf.paused;
|
||||
srv->noforce = conf.noforce;
|
||||
srv->logformat = conf.logformat? (unsigned char *)mystrdup((char *)conf.logformat) : NULL;
|
||||
srv->logtarget = conf.logtarget? (unsigned char *)mystrdup((char *)conf.logtarget) : NULL;
|
||||
srv->logformat = conf.logformat? (char *)mystrdup((char *)conf.logformat) : NULL;
|
||||
srv->logtarget = conf.logtarget? (char *)mystrdup((char *)conf.logtarget) : NULL;
|
||||
srv->authfunc = conf.authfunc;
|
||||
srv->usentlm = 0;
|
||||
srv->maxchild = conf.maxchild;
|
||||
@ -887,12 +887,12 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){
|
||||
if(srv->logformat){
|
||||
char *s;
|
||||
if(*srv->logformat == '-' && (s = strchr((char *)srv->logformat + 1, '+')) && s[1]){
|
||||
unsigned char* logformat = srv->logformat;
|
||||
char* logformat = srv->logformat;
|
||||
|
||||
*s = 0;
|
||||
srv->nonprintable = (unsigned char *)mystrdup((char *)srv->logformat + 1);
|
||||
srv->nonprintable = (char *)mystrdup((char *)srv->logformat + 1);
|
||||
srv->replace = s[1];
|
||||
srv->logformat = (unsigned char *)mystrdup(s + 2);
|
||||
srv->logformat = (char *)mystrdup(s + 2);
|
||||
*s = '+';
|
||||
myfree(logformat);
|
||||
}
|
||||
@ -999,17 +999,17 @@ void copyacl (struct ace *ac, struct srvparam *srv){
|
||||
for(pel = ac->periods; pel; pel = pel->next = itcopy(pel->next, sizeof(struct period)));
|
||||
ac->users = itcopy(ac->users, sizeof(struct userlist));
|
||||
for(ul = ac->users; ul; ul = ul->next = itcopy(ul->next, sizeof(struct userlist))){
|
||||
if(ul->user) ul->user = (unsigned char*)mystrdup((char *)ul->user);
|
||||
if(ul->user) ul->user = (char*)mystrdup((char *)ul->user);
|
||||
}
|
||||
ac->dstnames = itcopy(ac->dstnames, sizeof(struct hostname));
|
||||
for(hst = ac->dstnames; hst; hst = hst->next = itcopy(hst->next, sizeof(struct hostname))){
|
||||
if(hst->name) hst->name = (unsigned char*)mystrdup((char *)hst->name);
|
||||
if(hst->name) hst->name = (char*)mystrdup((char *)hst->name);
|
||||
}
|
||||
ac->chains = itcopy(ac->chains, sizeof(struct chain));
|
||||
for(ch = ac->chains; ch; ch = ch->next = itcopy(ch->next, sizeof(struct chain))){
|
||||
if(ch->extuser)ch->extuser = (unsigned char*)mystrdup((char *)ch->extuser);
|
||||
if(ch->extpass)ch->extpass = (unsigned char*)mystrdup((char *)ch->extpass);
|
||||
if(ch->exthost)ch->exthost = (unsigned char*)mystrdup((char *)ch->exthost);
|
||||
if(ch->extuser)ch->extuser = (char*)mystrdup((char *)ch->extuser);
|
||||
if(ch->extpass)ch->extpass = (char*)mystrdup((char *)ch->extpass);
|
||||
if(ch->exthost)ch->exthost = (char*)mystrdup((char *)ch->exthost);
|
||||
}
|
||||
if(preacl){
|
||||
if(ac->dst || ac->ports || ac->users || ac->dstnames || ac->chains|| ac->action>1){
|
||||
@ -1126,7 +1126,7 @@ void freeacl(struct ace *ac){
|
||||
}
|
||||
}
|
||||
|
||||
FILTER_ACTION handlereqfilters(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION handlereqfilters(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION action;
|
||||
int i;
|
||||
|
||||
@ -1137,7 +1137,7 @@ FILTER_ACTION handlereqfilters(struct clientparam *param, unsigned char ** buf_p
|
||||
return PASS;
|
||||
}
|
||||
|
||||
FILTER_ACTION handlehdrfilterssrv(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION handlehdrfilterssrv(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION action;
|
||||
int i;
|
||||
|
||||
@ -1148,7 +1148,7 @@ FILTER_ACTION handlehdrfilterssrv(struct clientparam *param, unsigned char ** bu
|
||||
return PASS;
|
||||
}
|
||||
|
||||
FILTER_ACTION handlehdrfilterscli(struct clientparam *param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION handlehdrfilterscli(struct clientparam *param, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION action;
|
||||
int i;
|
||||
|
||||
@ -1174,7 +1174,7 @@ FILTER_ACTION handlepredatflt(struct clientparam *cparam){
|
||||
return PASS;
|
||||
}
|
||||
|
||||
FILTER_ACTION handledatfltcli(struct clientparam *cparam, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION handledatfltcli(struct clientparam *cparam, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
#ifndef STDMAIN
|
||||
FILTER_ACTION action;
|
||||
int i;
|
||||
@ -1187,7 +1187,7 @@ FILTER_ACTION handledatfltcli(struct clientparam *cparam, unsigned char ** buf_p
|
||||
return PASS;
|
||||
}
|
||||
|
||||
FILTER_ACTION handledatfltsrv(struct clientparam *cparam, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION handledatfltsrv(struct clientparam *cparam, char ** buf_p, int * bufsize_p, int offset, int * length_p){
|
||||
FILTER_ACTION action;
|
||||
int i;
|
||||
|
||||
|
48
src/smtpp.c
48
src/smtpp.c
@ -16,7 +16,7 @@ char ehlo[] = "250-Proxy\r\n"
|
||||
"250 DSN\r\n";
|
||||
|
||||
int readreply (struct clientparam* param) {
|
||||
unsigned char * buf;
|
||||
char * buf;
|
||||
int res, i, bufsize = 640;
|
||||
|
||||
if(!(buf = myalloc(bufsize))) return 0;
|
||||
@ -43,7 +43,7 @@ int readreply (struct clientparam* param) {
|
||||
}
|
||||
|
||||
int readcommand (struct clientparam* param) {
|
||||
unsigned char * buf;
|
||||
char * buf;
|
||||
int res, i, bufsize = 320;
|
||||
int ret = 1;
|
||||
|
||||
@ -69,7 +69,7 @@ int readcommand (struct clientparam* param) {
|
||||
}
|
||||
|
||||
int readdata (struct clientparam* param) {
|
||||
unsigned char * buf;
|
||||
char * buf;
|
||||
int res, i, bufsize = 4096;
|
||||
|
||||
if(!(buf = myalloc(bufsize))) return 0;
|
||||
@ -96,25 +96,25 @@ int readdata (struct clientparam* param) {
|
||||
|
||||
void * smtppchild(struct clientparam* param) {
|
||||
int i=0, res;
|
||||
unsigned char buf[320];
|
||||
unsigned char username[256];
|
||||
char buf[320];
|
||||
char username[256];
|
||||
char * command = NULL;
|
||||
int login = 0;
|
||||
|
||||
if(socksend(param->clisock, (unsigned char *)"220 Proxy\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (611);}
|
||||
if(socksend(param->clisock, (char *)"220 Proxy\r\n", 11, conf.timeouts[STRING_S])!=11) {RETURN (611);}
|
||||
i = sockgetlinebuf(param, CLIENT, buf, sizeof(buf) - 10, '\n', conf.timeouts[STRING_S]);
|
||||
while(i > 4 && (strncasecmp((char *)buf, "AUTH PLAIN", 10) || !(login = 2)) && (strncasecmp((char *)buf, "AUTH LOGIN", 10) || !(login = 1))){
|
||||
if(!strncasecmp((char *)buf, "QUIT", 4)){
|
||||
socksend(param->clisock, (unsigned char *)"221 Proxy\r\n", 11,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"221 Proxy\r\n", 11,conf.timeouts[STRING_S]);
|
||||
RETURN(0);
|
||||
}
|
||||
else if(!strncasecmp((char *)buf, "HELO ", 5)){
|
||||
socksend(param->clisock, (unsigned char *)"250 Proxy\r\n", 11,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"250 Proxy\r\n", 11,conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(!strncasecmp((char *)buf, "EHLO ", 5)){
|
||||
socksend(param->clisock, (unsigned char *)ehlo, sizeof(ehlo) - 1,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)ehlo, sizeof(ehlo) - 1,conf.timeouts[STRING_S]);
|
||||
}
|
||||
else if(!param->hostname) socksend(param->clisock, (unsigned char *)"571 need AUTH first\r\n", 22, conf.timeouts[STRING_S]);
|
||||
else if(!param->hostname) socksend(param->clisock, (char *)"571 need AUTH first\r\n", 22, conf.timeouts[STRING_S]);
|
||||
else {
|
||||
login = -1;
|
||||
buf[i] = 0;
|
||||
@ -125,7 +125,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
}
|
||||
if(!login) {RETURN(662);}
|
||||
if(login == 1){
|
||||
socksend(param->clisock, (unsigned char *)"334 VXNlcm5hbWU6\r\n", 18,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"334 VXNlcm5hbWU6\r\n", 18,conf.timeouts[STRING_S]);
|
||||
i = sockgetlinebuf(param, CLIENT, buf, sizeof(buf) - 10, '\n', conf.timeouts[STRING_S]);
|
||||
if(i < 3) {RETURN(663);}
|
||||
buf[i-2] = 0;
|
||||
@ -133,7 +133,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
if(i < 1) {RETURN(664);}
|
||||
username[i] = 0;
|
||||
parseconnusername((char *)username, param, 0, 25);
|
||||
socksend(param->clisock, (unsigned char *)"334 UGFzc3dvcmQ6\r\n", 18,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"334 UGFzc3dvcmQ6\r\n", 18,conf.timeouts[STRING_S]);
|
||||
i = sockgetlinebuf(param, CLIENT, buf, sizeof(buf) - 10, '\n', conf.timeouts[STRING_S]);
|
||||
if(i < 2) {RETURN(665);}
|
||||
buf[i-2] = 0;
|
||||
@ -141,7 +141,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
if(i < 0) {RETURN(666);}
|
||||
username[i] = 0;
|
||||
if(param->extpassword) myfree(param->extpassword);
|
||||
param->extpassword = (unsigned char *)mystrdup((char *)username);
|
||||
param->extpassword = (char *)mystrdup((char *)username);
|
||||
}
|
||||
else if(login == 2){
|
||||
if(i > 13) {
|
||||
@ -149,7 +149,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
i = de64(buf+11,username,255);
|
||||
}
|
||||
else {
|
||||
socksend(param->clisock, (unsigned char *)"334\r\n", 5,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"334\r\n", 5,conf.timeouts[STRING_S]);
|
||||
i = sockgetlinebuf(param, CLIENT, buf, sizeof(buf) - 10, '\n', conf.timeouts[STRING_S]);
|
||||
if(i < 3) {RETURN(667);}
|
||||
buf[i-2] = 0;
|
||||
@ -161,7 +161,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
res = (int)strlen((char *)username+1) + 2;
|
||||
if(res < i){
|
||||
if(param->extpassword) myfree(param->extpassword);
|
||||
param->extpassword = (unsigned char *)mystrdup((char *)username + res);
|
||||
param->extpassword = (char *)mystrdup((char *)username + res);
|
||||
}
|
||||
}
|
||||
|
||||
@ -204,29 +204,29 @@ void * smtppchild(struct clientparam* param) {
|
||||
if(i<3) {RETURN(672);}
|
||||
if(!command || (param->extusername && param->extpassword)){
|
||||
if(!param->extusername || !*param->extusername || !param->extpassword || !*param->extpassword || !login){
|
||||
socksend(param->clisock, (unsigned char *)"235 auth required\r\n", 19,conf.timeouts[STRING_S]);
|
||||
socksend(param->clisock, (char *)"235 auth required\r\n", 19,conf.timeouts[STRING_S]);
|
||||
}
|
||||
if ((login & 1)) {
|
||||
socksend(param->remsock, (unsigned char *)"AUTH LOGIN\r\n", 12, conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (char *)"AUTH LOGIN\r\n", 12, conf.timeouts[STRING_S]);
|
||||
param->statscli64+=12;
|
||||
param->nwrites++;
|
||||
i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]);
|
||||
if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(680);}
|
||||
en64(param->extusername, buf, (int)strlen((char *)param->extusername));
|
||||
socksend(param->remsock, buf, (int)strlen((char *)buf), conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (unsigned char *)"\r\n", 2, conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (char *)"\r\n", 2, conf.timeouts[STRING_S]);
|
||||
param->statscli64+=(i+2);
|
||||
param->nwrites+=2;
|
||||
i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]);
|
||||
if(i<4 || strncasecmp((char *)buf, "334", 3)) {RETURN(681);}
|
||||
en64(param->extpassword, buf, (int)strlen((char *)param->extpassword));
|
||||
socksend(param->remsock, buf, (int)strlen((char *)buf), conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (unsigned char *)"\r\n", 2, conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (char *)"\r\n", 2, conf.timeouts[STRING_S]);
|
||||
param->statscli64+=(i+2);
|
||||
param->nwrites+=2;
|
||||
}
|
||||
else if((login & 2)){
|
||||
socksend(param->remsock, (unsigned char *)"AUTH PLAIN\r\n", 12, conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (char *)"AUTH PLAIN\r\n", 12, conf.timeouts[STRING_S]);
|
||||
param->statscli64+=(12);
|
||||
param->nwrites++;
|
||||
i = sockgetlinebuf(param, SERVER, buf, sizeof(buf) - 1, '\n', conf.timeouts[STRING_L]);
|
||||
@ -241,7 +241,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
en64(username, buf, i);
|
||||
i = (int)strlen((char *)buf);
|
||||
socksend(param->remsock, buf, i, conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (unsigned char *)"\r\n", 2, conf.timeouts[STRING_S]);
|
||||
socksend(param->remsock, (char *)"\r\n", 2, conf.timeouts[STRING_S]);
|
||||
param->statscli64+=(i+2);
|
||||
param->nwrites+=2;
|
||||
}
|
||||
@ -256,7 +256,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
if(!strncasecmp(command, "MAIL", 4) || !strncasecmp(command, "RCPT", 4) || !strncasecmp(command, "STARTTLS", 8) || !strncasecmp(command, "TURN", 4)){
|
||||
res = (int)strlen(command);
|
||||
command[res] = 0;
|
||||
res = handlehdrfilterscli(param, (unsigned char **)&command, &res, 0, &res);
|
||||
res = handlehdrfilterscli(param, (char **)&command, &res, 0, &res);
|
||||
if(res != PASS) {
|
||||
if(res == HANDLED) res = 2;
|
||||
else RETURN(677);
|
||||
@ -266,7 +266,7 @@ void * smtppchild(struct clientparam* param) {
|
||||
}
|
||||
#endif
|
||||
i = (int)strlen(command);
|
||||
if(res != 2) socksend(param->remsock, (unsigned char *)command, i, conf.timeouts[STRING_S]);
|
||||
if(res != 2) socksend(param->remsock, (char *)command, i, conf.timeouts[STRING_S]);
|
||||
}
|
||||
#ifndef WITHMAIN
|
||||
|
||||
@ -296,7 +296,7 @@ CLEANRET:
|
||||
}
|
||||
else dolog(param, NULL);
|
||||
if(param->clisock != INVALID_SOCKET) {
|
||||
if ((param->res > 0 && param->res < 100) || (param->res > 661 && param->res <700)) socksend(param->clisock, (unsigned char *)"571 \r\n", 6,conf.timeouts[STRING_S]);
|
||||
if ((param->res > 0 && param->res < 100) || (param->res > 661 && param->res <700)) socksend(param->clisock, (char *)"571 \r\n", 6,conf.timeouts[STRING_S]);
|
||||
}
|
||||
if(command) myfree(command);
|
||||
freeparam(param);
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include "proxy.h"
|
||||
|
||||
int socksend(SOCKET sock, unsigned char * buf, int bufsize, int to){
|
||||
int socksend(SOCKET sock, char * buf, int bufsize, int to){
|
||||
int sent = 0;
|
||||
int res;
|
||||
struct pollfd fds;
|
||||
@ -30,7 +30,7 @@ int socksend(SOCKET sock, unsigned char * buf, int bufsize, int to){
|
||||
}
|
||||
|
||||
|
||||
int socksendto(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to){
|
||||
int socksendto(SOCKET sock, struct sockaddr * sin, char * buf, int bufsize, int to){
|
||||
int sent = 0;
|
||||
int res;
|
||||
struct pollfd fds;
|
||||
@ -52,7 +52,7 @@ int socksendto(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufs
|
||||
return sent;
|
||||
}
|
||||
|
||||
int sockrecvfrom(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to){
|
||||
int sockrecvfrom(SOCKET sock, struct sockaddr * sin, char * buf, int bufsize, int to){
|
||||
struct pollfd fds;
|
||||
SASIZETYPE sasize;
|
||||
int res;
|
||||
@ -153,7 +153,7 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec){
|
||||
return (int)*param->srvbuf;
|
||||
}
|
||||
|
||||
int sockgetlinebuf(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to){
|
||||
int sockgetlinebuf(struct clientparam * param, DIRECTION which, char * buf, int bufsize, int delim, int to){
|
||||
int c;
|
||||
int i=0;
|
||||
|
||||
|
@ -22,9 +22,9 @@ void * sockschild(struct clientparam* param) {
|
||||
unsigned size;
|
||||
SASIZETYPE sasize;
|
||||
unsigned short port = 0;
|
||||
unsigned char * buf=NULL;
|
||||
unsigned char c;
|
||||
unsigned char command=0;
|
||||
char * buf=NULL;
|
||||
char c;
|
||||
char command=0;
|
||||
struct pollfd fds[3];
|
||||
int ver=0;
|
||||
int havepass = 0;
|
||||
|
@ -9,26 +9,26 @@
|
||||
#include <stdio.h>
|
||||
#include "version.h"
|
||||
|
||||
unsigned char * strings[] = {
|
||||
/* 00 */ (unsigned char *)"3proxy tiny proxy server " VERSION " stringtable file",
|
||||
/* 01 */ (unsigned char *)"3proxy",
|
||||
/* 02 */ (unsigned char *)"3proxy tiny proxy server",
|
||||
/* 03 */ (unsigned char *)VERSION " (" BUILDDATE ")",
|
||||
/* 04 */ (unsigned char *)"3proxy allows to share and control Internet connection and count traffic",
|
||||
/* 05 */ (unsigned char *)"SERVR",
|
||||
/* 06 */ (unsigned char *)"PROXY",
|
||||
/* 07 */ (unsigned char *)"TCPPM",
|
||||
/* 08 */ (unsigned char *)"POP3P",
|
||||
/* 09 */ (unsigned char *)"SOCK4",
|
||||
/* 10 */ (unsigned char *)"SOCK5",
|
||||
/* 11 */ (unsigned char *)"UDPPM",
|
||||
/* 12 */ (unsigned char *)"SOCKS",
|
||||
/* 13 */ (unsigned char *)"SOC45",
|
||||
/* 14 */ (unsigned char *)"ADMIN",
|
||||
/* 15 */ (unsigned char *)"DNSPR",
|
||||
/* 16 */ (unsigned char *)"FTPPR",
|
||||
/* 17 */ (unsigned char *)"SMTPP",
|
||||
/* 18 */ (unsigned char *)"ZOMBIE",
|
||||
char * strings[] = {
|
||||
/* 00 */ "3proxy tiny proxy server " VERSION " stringtable file",
|
||||
/* 01 */ "3proxy",
|
||||
/* 02 */ "3proxy tiny proxy server",
|
||||
/* 03 */ VERSION " (" BUILDDATE ")",
|
||||
/* 04 */ "3proxy allows to share and control Internet connection and count traffic",
|
||||
/* 05 */ "SERVR",
|
||||
/* 06 */ "PROXY",
|
||||
/* 07 */ "TCPPM",
|
||||
/* 08 */ "POP3P",
|
||||
/* 09 */ "SOCK4",
|
||||
/* 10 */ "SOCK5",
|
||||
/* 11 */ "UDPPM",
|
||||
/* 12 */ "SOCKS",
|
||||
/* 13 */ "SOC45",
|
||||
/* 14 */ "ADMIN",
|
||||
/* 15 */ "DNSPR",
|
||||
/* 16 */ "FTPPR",
|
||||
/* 17 */ "SMTPP",
|
||||
/* 18 */ "ZOMBIE",
|
||||
/* 19 */ NULL,
|
||||
/* 20 */ NULL,
|
||||
/* 21 */ NULL,
|
||||
@ -37,12 +37,12 @@ unsigned char * strings[] = {
|
||||
/* 24 */ NULL,
|
||||
#ifndef TPROXY_CONF
|
||||
#ifndef _WIN32
|
||||
/* 25 */ (unsigned char *)"/usr/local/etc/3proxy/3proxy.cfg",
|
||||
/* 25 */ "/usr/local/etc/3proxy/3proxy.cfg",
|
||||
#else
|
||||
/* 25 */ (unsigned char *)"3proxy.cfg",
|
||||
/* 25 */ "3proxy.cfg",
|
||||
#endif
|
||||
#else
|
||||
/* 25 */ (unsigned char *)TPROXY_CONF,
|
||||
/* 25 */ TPROXY_CONF,
|
||||
#endif
|
||||
/* 26 */ NULL,
|
||||
/* 27 */ NULL,
|
||||
@ -53,7 +53,7 @@ unsigned char * strings[] = {
|
||||
/* 32 */ NULL,
|
||||
/* 33 */ NULL,
|
||||
/* 34 */ NULL,
|
||||
/* 35 */ (unsigned char *)
|
||||
/* 35 */
|
||||
"<table align=\"center\" width=\"75%\"><tr><td>\n"
|
||||
"<h3>Welcome to 3proxy Web Interface</h3>\n"
|
||||
"Probably you've noticed interface is very ugly currently.\n"
|
||||
|
@ -150,14 +150,14 @@ int
|
||||
|
||||
#ifndef NOIPV6
|
||||
#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 SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (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)))
|
||||
#define SAISNULL(sa) (!memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)))
|
||||
#else
|
||||
#define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port)
|
||||
#define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
|
||||
#define SAADDR(sa) ((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))
|
||||
@ -199,7 +199,7 @@ struct LOGFUNC;
|
||||
struct LOGGER;
|
||||
typedef int (*AUTHFUNC)(struct clientparam * param);
|
||||
typedef void * (*REDIRECTFUNC)(struct clientparam * param);
|
||||
typedef unsigned long (*RESOLVFUNC)(int af, unsigned char *name, unsigned char *value);
|
||||
typedef unsigned long (*RESOLVFUNC)(int af, char *name, char *value);
|
||||
typedef unsigned (*BANDLIMFUNC)(struct clientparam * param, unsigned nbytesin, unsigned nbytesout);
|
||||
typedef void (*TRAFCOUNTFUNC)(struct clientparam * param);
|
||||
typedef void * (*EXTENDFUNC) (struct node *node);
|
||||
@ -249,7 +249,7 @@ struct portlist {
|
||||
|
||||
struct userlist {
|
||||
struct userlist * next;
|
||||
unsigned char * user;
|
||||
char * user;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
@ -263,8 +263,8 @@ typedef enum {
|
||||
|
||||
struct passwords {
|
||||
struct passwords *next;
|
||||
unsigned char * user;
|
||||
unsigned char * password;
|
||||
char * user;
|
||||
char * password;
|
||||
int pwtype;
|
||||
};
|
||||
|
||||
@ -295,9 +295,9 @@ struct chain {
|
||||
struct sockaddr_in addr;
|
||||
#endif
|
||||
unsigned short weight;
|
||||
unsigned char * exthost;
|
||||
unsigned char * extuser;
|
||||
unsigned char * extpass;
|
||||
char * exthost;
|
||||
char * extuser;
|
||||
char * extpass;
|
||||
};
|
||||
|
||||
struct period {
|
||||
@ -311,7 +311,7 @@ struct period {
|
||||
|
||||
struct hostname {
|
||||
struct hostname *next;
|
||||
unsigned char * name;
|
||||
char * name;
|
||||
int matchtype;
|
||||
};
|
||||
|
||||
@ -375,7 +375,7 @@ struct trafcount {
|
||||
struct LOGFUNC {
|
||||
struct LOGFUNC* next;
|
||||
int (*init)(struct LOGGER *logger);
|
||||
int (*dobuf)(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s);
|
||||
int (*dobuf)(struct clientparam * param, char * buf, int bufsize, const char *s);
|
||||
void (*log)(const char * buf, int len, struct LOGGER *logger);
|
||||
void (*rotate)(struct LOGGER *logger);
|
||||
void (*flush)(struct LOGGER *logger);
|
||||
@ -420,7 +420,7 @@ typedef enum {
|
||||
typedef void* FILTER_OPEN(void * idata, struct srvparam * param);
|
||||
typedef FILTER_ACTION FILTER_CLIENT(void *fo, struct clientparam * param, void** fc);
|
||||
typedef FILTER_ACTION FILTER_PREDATA(void *fc, struct clientparam * param);
|
||||
typedef FILTER_ACTION FILTER_BUFFER(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
typedef FILTER_ACTION FILTER_BUFFER(void *fc, struct clientparam * param, char ** buf_p, int * bufsize_p, int offset, int * length_p);
|
||||
typedef void FILTER_CLOSE(void *fo);
|
||||
|
||||
struct filter {
|
||||
@ -487,7 +487,7 @@ struct srvparam {
|
||||
pthread_mutex_t counter_mutex;
|
||||
struct pollfd fds;
|
||||
FILE *stdlog;
|
||||
unsigned char * target;
|
||||
char * target;
|
||||
#ifdef SO_BINDTODEVICE
|
||||
char * ibindtodevice;
|
||||
char * obindtodevice;
|
||||
@ -497,12 +497,12 @@ struct srvparam {
|
||||
struct ace *preacl, *acl;
|
||||
struct auth *authfuncs;
|
||||
struct filter *filter;
|
||||
unsigned char * logtarget;
|
||||
unsigned char * logformat;
|
||||
unsigned char * nonprintable;
|
||||
char * logtarget;
|
||||
char * logformat;
|
||||
char * nonprintable;
|
||||
struct LOGGER *log;
|
||||
unsigned short targetport;
|
||||
unsigned char replace;
|
||||
char replace;
|
||||
time_t time_start;
|
||||
};
|
||||
|
||||
@ -553,7 +553,7 @@ struct clientparam {
|
||||
paused,
|
||||
version;
|
||||
|
||||
unsigned char *hostname,
|
||||
char *hostname,
|
||||
*username,
|
||||
*password,
|
||||
*extusername,
|
||||
@ -610,7 +610,7 @@ struct extparam {
|
||||
demon, maxchild, needreload, timetoexit, version, noforce;
|
||||
int authcachetype, authcachetime;
|
||||
int filtermaxsize;
|
||||
unsigned char **archiver;
|
||||
char **archiver;
|
||||
ROTATION logtype, countertype;
|
||||
char * counterfile;
|
||||
#ifndef NOIPV6
|
||||
@ -627,12 +627,12 @@ struct extparam {
|
||||
BANDLIMFUNC bandlimfunc;
|
||||
TRAFCOUNTFUNC trafcountfunc;
|
||||
void (*prelog)(struct clientparam * param);
|
||||
unsigned char *logtarget, *logformat;
|
||||
char *logtarget, *logformat;
|
||||
struct filemon * fmon;
|
||||
struct filter * filters;
|
||||
struct auth *authfuncs;
|
||||
char* demanddialprog;
|
||||
unsigned char **stringtable;
|
||||
char **stringtable;
|
||||
time_t time;
|
||||
unsigned logdumpsrv, logdumpcli;
|
||||
char delimchar;
|
||||
@ -670,7 +670,7 @@ struct dictionary {
|
||||
struct commands {
|
||||
struct commands *next;
|
||||
char * command;
|
||||
int (* handler)(int argc, unsigned char ** argv);
|
||||
int (* handler)(int argc, char ** argv);
|
||||
int minargs;
|
||||
int maxargs;
|
||||
};
|
||||
@ -694,11 +694,11 @@ extern struct proxydef childdef;
|
||||
|
||||
struct child {
|
||||
int argc;
|
||||
unsigned char **argv;
|
||||
char **argv;
|
||||
};
|
||||
|
||||
struct hashentry {
|
||||
unsigned char hash[sizeof(unsigned)*4];
|
||||
char hash[sizeof(unsigned)*4];
|
||||
time_t expires;
|
||||
struct hashentry *next;
|
||||
char value[4];
|
||||
@ -763,31 +763,31 @@ struct pluginlink {
|
||||
struct auth *authfuncs;
|
||||
struct commands * commandhandlers;
|
||||
void * (*findbyname)(const char *name);
|
||||
int (*socksend)(SOCKET sock, unsigned char * buf, int bufsize, int to);
|
||||
int (*socksendto)(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
|
||||
int (*sockrecvfrom)(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
|
||||
int (*socksend)(SOCKET sock, char * buf, int bufsize, int to);
|
||||
int (*socksendto)(SOCKET sock, struct sockaddr * sin, char * buf, int bufsize, int to);
|
||||
int (*sockrecvfrom)(SOCKET sock, struct sockaddr * sin, char * buf, int bufsize, int to);
|
||||
int (*sockgetcharcli)(struct clientparam * param, int timeosec, int timeousec);
|
||||
int (*sockgetcharsrv)(struct clientparam * param, int timeosec, int timeousec);
|
||||
int (*sockgetlinebuf)(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to);
|
||||
int (*sockgetlinebuf)(struct clientparam * param, DIRECTION which, char * buf, int bufsize, int delim, int to);
|
||||
int (*myinet_ntop)(int af, void *src, char *dst, socklen_t size);
|
||||
int (*dobuf)(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s, const unsigned char * doublec);
|
||||
int (*dobuf2)(struct clientparam * param, unsigned char * buf, int bufsize, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format);
|
||||
int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask);
|
||||
unsigned long (*getip46)(int family, unsigned char *name, struct sockaddr *sa);
|
||||
int (*dobuf)(struct clientparam * param, char * buf, int bufsize, const char *s, const char * doublec);
|
||||
int (*dobuf2)(struct clientparam * param, char * buf, int bufsize, const char *s, const char * doublec, struct tm* tm, char * format);
|
||||
int (*scanaddr)(const char *s, unsigned long * ip, unsigned long * mask);
|
||||
unsigned long (*getip46)(int family, char *name, struct sockaddr *sa);
|
||||
int (*sockmap)(struct clientparam * param, int timeo, int usesplice);
|
||||
int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
|
||||
int (*alwaysauth)(struct clientparam * param);
|
||||
int (*checkACL)(struct clientparam * param);
|
||||
int (*checkpreACL)(struct clientparam * param);
|
||||
void (*nametohash)(const unsigned char * name, unsigned char *hash);
|
||||
unsigned (*hashindex)(const unsigned char* hash);
|
||||
unsigned char* (*en64)(const unsigned char *in, unsigned char *out, int inlen);
|
||||
int (*de64)(const unsigned char *in, unsigned char *out, int maxlen);
|
||||
void (*tohex)(unsigned char *in, unsigned char *out, int len);
|
||||
void (*fromhex)(unsigned char *in, unsigned char *out, int len);
|
||||
void (*decodeurl)(unsigned char *s, int allowcr);
|
||||
int (*parsestr) (unsigned char *str, unsigned char **argm, int nitems, unsigned char ** buff, int *inbuf, int *bufsize);
|
||||
struct ace * (*make_ace) (int argc, unsigned char ** argv);
|
||||
void (*nametohash)(const char * name, char *hash);
|
||||
unsigned (*hashindex)(const char* hash);
|
||||
char* (*en64)(const char *in, char *out, int inlen);
|
||||
int (*de64)(const char *in, char *out, int maxlen);
|
||||
void (*tohex)(char *in, char *out, int len);
|
||||
void (*fromhex)(char *in, char *out, int len);
|
||||
void (*decodeurl)(char *s, int allowcr);
|
||||
int (*parsestr) (char *str, char **argm, int nitems, char ** buff, int *inbuf, int *bufsize);
|
||||
struct ace * (*make_ace) (int argc, char ** argv);
|
||||
void * (*mallocfunc)(size_t size);
|
||||
void (*freefunc)(void *ptr);
|
||||
void *(*reallocfunc)(void *ptr, size_t size);
|
||||
@ -804,11 +804,11 @@ struct pluginlink {
|
||||
int (*parseusername)(char *username, struct clientparam *param, int extpasswd);
|
||||
int (*parseconnusername)(char *username, struct clientparam *param, int extpasswd, unsigned short port);
|
||||
struct sockfuncs *so;
|
||||
unsigned char * (*dologname) (unsigned char *buf, int bufsize, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t);
|
||||
char * (*dologname) (char *buf, int bufsize, char *name, const char *ext, ROTATION lt, time_t t);
|
||||
};
|
||||
|
||||
struct counter_header {
|
||||
unsigned char sig[4];
|
||||
char sig[4];
|
||||
time_t updated;
|
||||
};
|
||||
|
||||
|
@ -28,7 +28,7 @@ struct udpmap {
|
||||
|
||||
|
||||
void * udppmchild(struct clientparam* param) {
|
||||
unsigned char *buf = NULL;
|
||||
char *buf = NULL;
|
||||
int res, i;
|
||||
#ifdef _WIN32
|
||||
SASIZETYPE size;
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
extern FILE *writable;
|
||||
FILE * confopen();
|
||||
extern void decodeurl(unsigned char *s, int filter);
|
||||
extern void decodeurl(char *s, int filter);
|
||||
|
||||
struct printparam {
|
||||
char buf[1024];
|
||||
@ -24,12 +24,12 @@ struct printparam {
|
||||
|
||||
static void stdpr(struct printparam* pp, char *buf, int inbuf){
|
||||
if((pp->inbuf + inbuf > 1024) || !buf) {
|
||||
socksend(pp->cp->clisock, (unsigned char *)pp->buf, pp->inbuf, conf.timeouts[STRING_S]);
|
||||
socksend(pp->cp->clisock, (char *)pp->buf, pp->inbuf, conf.timeouts[STRING_S]);
|
||||
pp->inbuf = 0;
|
||||
if(!buf) return;
|
||||
}
|
||||
if(inbuf >= 1000){
|
||||
socksend(pp->cp->clisock, (unsigned char *)buf, inbuf, conf.timeouts[STRING_S]);
|
||||
socksend(pp->cp->clisock, (char *)buf, inbuf, conf.timeouts[STRING_S]);
|
||||
}
|
||||
else {
|
||||
memcpy(pp->buf + pp->inbuf, buf, inbuf);
|
||||
@ -353,7 +353,7 @@ void * adminchild(struct clientparam* param) {
|
||||
|
||||
buf = myalloc(LINESIZE);
|
||||
if(!buf) {RETURN(555);}
|
||||
i = sockgetlinebuf(param, CLIENT, (unsigned char *)buf, LINESIZE - 1, '\n', conf.timeouts[STRING_S]);
|
||||
i = sockgetlinebuf(param, CLIENT, (char *)buf, LINESIZE - 1, '\n', conf.timeouts[STRING_S]);
|
||||
if(i<5 || ((buf[0]!='G' || buf[1]!='E' || buf[2]!='T' || buf[3]!=' ' || buf[4]!='/') &&
|
||||
(buf[0]!='P' || buf[1]!='O' || buf[2]!='S' || buf[3]!='T' || buf[4]!=' ' || buf[5]!='/')))
|
||||
{
|
||||
@ -366,7 +366,7 @@ void * adminchild(struct clientparam* param) {
|
||||
}
|
||||
*sb = 0;
|
||||
req = mystrdup(buf + ((*buf == 'P')? 6 : 5));
|
||||
while((i = sockgetlinebuf(param, CLIENT, (unsigned char *)buf, LINESIZE - 1, '\n', conf.timeouts[STRING_S])) > 2){
|
||||
while((i = sockgetlinebuf(param, CLIENT, (char *)buf, LINESIZE - 1, '\n', conf.timeouts[STRING_S])) > 2){
|
||||
buf[i] = 0;
|
||||
if(i > 19 && (!strncasecmp(buf, "authorization", 13))){
|
||||
sb = strchr(buf, ':');
|
||||
@ -378,17 +378,17 @@ void * adminchild(struct clientparam* param) {
|
||||
}
|
||||
sb+=5;
|
||||
while(isspace(*sb))sb++;
|
||||
i = de64((unsigned char *)sb, (unsigned char *)username, 255);
|
||||
i = de64((char *)sb, (char *)username, 255);
|
||||
if(i<=0)continue;
|
||||
username[i] = 0;
|
||||
sb = strchr((char *)username, ':');
|
||||
if(sb){
|
||||
*sb = 0;
|
||||
if(param->password)myfree(param->password);
|
||||
param->password = (unsigned char *)mystrdup(sb+1);
|
||||
param->password = (char *)mystrdup(sb+1);
|
||||
}
|
||||
if(param->username) myfree(param->username);
|
||||
param->username = (unsigned char *)mystrdup(username);
|
||||
param->username = (char *)mystrdup(username);
|
||||
continue;
|
||||
}
|
||||
else if(i > 15 && (!strncasecmp(buf, "content-length:", 15))){
|
||||
@ -542,14 +542,14 @@ void * adminchild(struct clientparam* param) {
|
||||
if(!writable || !contentlen || fseek(writable, 0, 0)){
|
||||
error = 1;
|
||||
}
|
||||
while(l < contentlen && (i = sockgetlinebuf(param, CLIENT, (unsigned char *)buf, (contentlen - l) > LINESIZE - 1?LINESIZE - 1:contentlen - l, '+', conf.timeouts[STRING_S])) > 0){
|
||||
if(i > (contentlen - l)) i = (contentlen - l);
|
||||
while(l < contentlen && (i = sockgetlinebuf(param, CLIENT, (char *)buf, (contentlen - l) > LINESIZE - 1?LINESIZE - 1:contentlen - l, '+', conf.timeouts[STRING_S])) > 0){
|
||||
if(((unsigned)i) > (contentlen - l)) i = (int)(contentlen - l);
|
||||
if(!l){
|
||||
if(i<9 || strncasecmp(buf, "conffile=", 9)) error = 1;
|
||||
}
|
||||
if(!error){
|
||||
buf[i] = 0;
|
||||
decodeurl((unsigned char *)buf, 1);
|
||||
decodeurl((char *)buf, 1);
|
||||
fprintf(writable, "%s", l? buf : buf + 9);
|
||||
}
|
||||
l += i;
|
||||
@ -576,7 +576,7 @@ CLEANRET:
|
||||
|
||||
printstr(&pp, NULL);
|
||||
if(buf) myfree(buf);
|
||||
dolog(param, (unsigned char *)req);
|
||||
dolog(param, req);
|
||||
if(req)myfree(req);
|
||||
freeparam(param);
|
||||
return (NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user