support port number in 'nserver' / 'authnserver'

This commit is contained in:
z3APA3A 2016-05-18 00:05:23 +03:00
parent fbcdcf3d7b
commit f347b37770
3 changed files with 16 additions and 12 deletions

View File

@ -221,30 +221,34 @@ int ceparseargs(const char *str){
#endif #endif
void parsehost(int family, unsigned char *host, struct sockaddr *sa){ int parsehost(int family, unsigned char *host, struct sockaddr *sa){
char *sp=NULL,*se=NULL; char *sp=NULL,*se=NULL;
unsigned short port; unsigned short port=0;
int ret = 0;
if(!host) return 2;
if(*host == '[') se=strchr((char *)host, ']'); if(*host == '[') se=strchr((char *)host, ']');
if ( (sp = strchr(se?se:(char *)host, ':')) ) *sp = 0; if ( (sp = strchr(se?se:(char *)host, ':')) && !strchr(sp+1, ':')) *sp = 0;
if(se){ if(se){
*se = 0; *se = 0;
} }
if(sp){ if(sp){
port = atoi(sp+1); port = atoi(sp+1);
} }
getip46(family, host + (se!=0), (struct sockaddr *)sa); ret = !getip46(family, host + (se!=0), (struct sockaddr *)sa);
if(se) *se = ']'; if(se) *se = ']';
if(sp) *sp = ':'; if(sp) *sp = ':';
*SAPORT(sa) = htons(port); if(port)*SAPORT(sa) = htons(port);
return ret;
} }
int parsehostname(char *hostname, struct clientparam *param, unsigned short port){ int parsehostname(char *hostname, struct clientparam *param, unsigned short port){
char *sp=NULL,*se=NULL; char *sp=NULL,*se=NULL;
int ret = 0;
if(!hostname || !*hostname)return 1; if(!hostname || !*hostname)return 2;
if(*hostname == '[') se=strchr(hostname, ']'); if(*hostname == '[') se=strchr(hostname, ']');
if ( (sp = strchr(se?se:hostname, ':')) ) *sp = 0; if ( (sp = strchr(se?se:hostname, ':')) && !strchr(sp+1, ':')) *sp = 0;
if(se){ if(se){
*se = 0; *se = 0;
} }
@ -255,12 +259,12 @@ int parsehostname(char *hostname, struct clientparam *param, unsigned short port
if(sp){ if(sp){
port = atoi(sp+1); port = atoi(sp+1);
} }
getip46(param->srv->family, param->hostname, (struct sockaddr *)&param->req); ret = !getip46(param->srv->family, param->hostname, (struct sockaddr *)&param->req);
if(se) *se = ']'; if(se) *se = ']';
if(sp) *sp = ':'; if(sp) *sp = ':';
*SAPORT(&param->req) = htons(port); *SAPORT(&param->req) = htons(port);
memset(&param->sinsr, 0, sizeof(param->sinsr)); memset(&param->sinsr, 0, sizeof(param->sinsr));
return 0; return ret;
} }
int parseusername(char *username, struct clientparam *param, int extpasswd){ int parseusername(char *username, struct clientparam *param, int extpasswd){

View File

@ -563,8 +563,8 @@ static int h_nserver(int argc, unsigned char **argv){
if(numservers < MAXNSERVERS) { if(numservers < MAXNSERVERS) {
if((str = strchr((char *)argv[1], '/'))) if((str = strchr((char *)argv[1], '/')))
*str = 0; *str = 0;
if(!getip46(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1;
*SAPORT(&nservers[numservers].addr) = htons(53); *SAPORT(&nservers[numservers].addr) = htons(53);
if(parsehost(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1;
if(str) { if(str) {
nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0; nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0;
*str = '/'; *str = '/';
@ -581,7 +581,7 @@ static int h_authnserver(int argc, unsigned char **argv){
if((str = strchr((char *)argv[1], '/'))) if((str = strchr((char *)argv[1], '/')))
*str = 0; *str = 0;
if(!getip46(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1; if(parsehost(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1;
*SAPORT(&authnserver.addr) = htons(53); *SAPORT(&authnserver.addr) = htons(53);
if(str) { if(str) {
authnserver.usetcp = strstr(str + 1, "tcp")? 1:0; authnserver.usetcp = strstr(str + 1, "tcp")? 1:0;

View File

@ -233,7 +233,7 @@ void mschap(const unsigned char *win_password,
struct hashtable; struct hashtable;
void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires); void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires);
void parsehost(int family, unsigned char *host, struct sockaddr *sa); int parsehost(int family, unsigned char *host, struct sockaddr *sa);
int parsehostname(char *hostname, struct clientparam *param, unsigned short port); int parsehostname(char *hostname, struct clientparam *param, unsigned short port);
int parseusername(char *username, struct clientparam *param, int extpasswd); int parseusername(char *username, struct clientparam *param, int extpasswd);
int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port); int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port);