mirror of
https://github.com/3proxy/3proxy.git
synced 2026-07-07 13:40:12 +08:00
Authcache fix
This commit is contained in:
parent
c462963d8e
commit
4f99443750
15
src/auth.c
15
src/auth.c
@ -72,31 +72,32 @@ int alwaysauth(struct clientparam * param){
|
|||||||
int cacheauth(struct clientparam * param){
|
int cacheauth(struct clientparam * param){
|
||||||
struct authcache ac;
|
struct authcache ac;
|
||||||
uint32_t ttl;
|
uint32_t ttl;
|
||||||
|
unsigned type = param->srv->authcachetype;
|
||||||
|
|
||||||
|
|
||||||
if(
|
if(
|
||||||
((conf.authcachetype & 2) && !param->username) ||
|
((type & 2) && !param->username) ||
|
||||||
((conf.authcachetype & 4) && !param->password) ||
|
((type & 4) && !param->password) ||
|
||||||
(
|
(
|
||||||
(conf.authcachetype & 1) && *SAFAMILY(¶m->sincr) != AF_INET
|
(type & 1) && *SAFAMILY(¶m->sincr) != AF_INET
|
||||||
#ifndef NOIPv6
|
#ifndef NOIPv6
|
||||||
&& *SAFAMILY(¶m->sincr) != AF_INET6
|
&& *SAFAMILY(¶m->sincr) != AF_INET6
|
||||||
#endif
|
#endif
|
||||||
) || (!hashresolv(&auth_table, param, &ac, &ttl))) {
|
) || (!hashresolv(&auth_table, param, &ac, &ttl))) {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
if((conf.authcachetype & 1) &&(conf.authcachetype & 8) &&
|
if((type & 1) &&(type & 8) &&
|
||||||
(ac.sincr_family != *SAFAMILY(¶m->sincr) ||
|
(ac.sincr_family != *SAFAMILY(¶m->sincr) ||
|
||||||
memcmp(ac.sincr_addr, SAADDR(¶m->sincr), SAADDRLEN(¶m->sincr))
|
memcmp(ac.sincr_addr, SAADDR(¶m->sincr), SAADDRLEN(¶m->sincr))
|
||||||
)) {
|
)) {
|
||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(conf.authcachetype&2) && *ac.username){
|
if(!(type&2) && *ac.username){
|
||||||
if(param->username) free(param->username);
|
if(param->username) free(param->username);
|
||||||
param->username = (unsigned char *)strdup((char *)ac.username);
|
param->username = (unsigned char *)strdup((char *)ac.username);
|
||||||
}
|
}
|
||||||
if((conf.authcachetype & 32)){
|
if((type & 32)){
|
||||||
memset(¶m->sinsl, 0, sizeof(param->sinsl));
|
memset(¶m->sinsl, 0, sizeof(param->sinsl));
|
||||||
*(SAFAMILY(¶m->sinsl)) = ac.sinsl_family;
|
*(SAFAMILY(¶m->sinsl)) = ac.sinsl_family;
|
||||||
memcpy(SAADDR(¶m->sinsl), ac.sinsl_addr, SAADDRLEN(¶m->sinsl));
|
memcpy(SAADDR(¶m->sinsl), ac.sinsl_addr, SAADDRLEN(¶m->sinsl));
|
||||||
@ -116,7 +117,7 @@ int doauth(struct clientparam * param){
|
|||||||
if(authfuncs->authorize &&
|
if(authfuncs->authorize &&
|
||||||
(res = (*authfuncs->authorize)(param)))
|
(res = (*authfuncs->authorize)(param)))
|
||||||
return res;
|
return res;
|
||||||
if(conf.authcachetype && authfuncs->authenticate && authfuncs->authenticate != cacheauth && param->username && (!(conf.authcachetype&4) || (!param->pwtype && param->password))){
|
if(param->srv->authcachetype && authfuncs->authenticate && authfuncs->authenticate != cacheauth && param->username && (!(param->srv->authcachetype&4) || (!param->pwtype && param->password))){
|
||||||
struct authcache ac={.username=""};
|
struct authcache ac={.username=""};
|
||||||
|
|
||||||
if(param->username) {
|
if(param->username) {
|
||||||
|
|||||||
@ -17,6 +17,12 @@ static void char_index2hash(const struct hashtable *ht, void *index, uint8_t *ha
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void param2hash_add(const struct hashtable *ht, void *index, uint8_t *hash){
|
static void param2hash_add(const struct hashtable *ht, void *index, uint8_t *hash){
|
||||||
|
struct clientparam *param = (struct clientparam *)index;
|
||||||
|
|
||||||
|
memcpy(hash, param->hash, ht->hash_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void param2hash_search(const struct hashtable *ht, void *index, uint8_t *hash){
|
||||||
blake2b_state S;
|
blake2b_state S;
|
||||||
struct clientparam *param = (struct clientparam *)index;
|
struct clientparam *param = (struct clientparam *)index;
|
||||||
unsigned type = param->srv->authcachetype;
|
unsigned type = param->srv->authcachetype;
|
||||||
@ -62,12 +68,7 @@ static void param2hash_add(const struct hashtable *ht, void *index, uint8_t *has
|
|||||||
if((type & 2048))blake2b_update(&S, SAPORT(¶m->srv->intsa), 2);
|
if((type & 2048))blake2b_update(&S, SAPORT(¶m->srv->intsa), 2);
|
||||||
blake2b_final(&S, hash, ht->hash_size);
|
blake2b_final(&S, hash, ht->hash_size);
|
||||||
}
|
}
|
||||||
}
|
memcpy(param->hash, hash, ht->hash_size);
|
||||||
|
|
||||||
void param2hash_search(const struct hashtable *ht, void *index, uint8_t *hash){
|
|
||||||
struct clientparam *param = (struct clientparam *)index;
|
|
||||||
|
|
||||||
memcpy(hash, param->hash, ht->hash_size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void udpparam2hash(const struct hashtable *ht, void *index, uint8_t *hash){
|
static void udpparam2hash(const struct hashtable *ht, void *index, uint8_t *hash){
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user