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
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;
unsigned short port;
unsigned short port=0;
int ret = 0;
if(!host) return 2;
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){
*se = 0;
}
if(sp){
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(sp) *sp = ':';
*SAPORT(sa) = htons(port);
if(port)*SAPORT(sa) = htons(port);
return ret;
}
int parsehostname(char *hostname, struct clientparam *param, unsigned short port){
char *sp=NULL,*se=NULL;
int ret = 0;
if(!hostname || !*hostname)return 1;
if(!hostname || !*hostname)return 2;
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){
*se = 0;
}
@ -255,12 +259,12 @@ int parsehostname(char *hostname, struct clientparam *param, unsigned short port
if(sp){
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(sp) *sp = ':';
*SAPORT(&param->req) = htons(port);
memset(&param->sinsr, 0, sizeof(param->sinsr));
return 0;
return ret;
}
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((str = strchr((char *)argv[1], '/')))
*str = 0;
if(!getip46(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1;
*SAPORT(&nservers[numservers].addr) = htons(53);
if(parsehost(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1;
if(str) {
nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0;
*str = '/';
@ -581,7 +581,7 @@ static int h_authnserver(int argc, unsigned char **argv){
if((str = strchr((char *)argv[1], '/')))
*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);
if(str) {
authnserver.usetcp = strstr(str + 1, "tcp")? 1:0;

View File

@ -233,7 +233,7 @@ void mschap(const unsigned char *win_password,
struct hashtable;
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 parseusername(char *username, struct clientparam *param, int extpasswd);
int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port);