| 253 | } |
| 254 | |
| 255 | int parsehostname(char *hostname, struct clientparam *param, unsigned short port){ |
| 256 | char *sp=NULL,*se=NULL; |
| 257 | int ret = 0; |
| 258 | |
| 259 | if(!hostname || !*hostname)return 2; |
| 260 | if(*hostname == '[') se=strchr(hostname, ']'); |
| 261 | if ( (sp = strchr(se?se:hostname, ':')) && !strchr(sp+1, ':')) *sp = 0; |
| 262 | if(se){ |
| 263 | *se = 0; |
| 264 | } |
| 265 | if(hostname != (char *)param->hostname){ |
| 266 | if(param->hostname) myfree(param->hostname); |
| 267 | param->hostname = (unsigned char *)mystrdup(hostname + (se!=0)); |
| 268 | } |
| 269 | if(sp){ |
| 270 | port = atoi(sp+1); |
| 271 | } |
| 272 | ret = !getip46(param->srv->family, param->hostname, (struct sockaddr *)¶m->req); |
| 273 | if(se) *se = ']'; |
| 274 | if(sp) *sp = ':'; |
| 275 | *SAPORT(¶m->req) = htons(port); |
| 276 | memset(¶m->sinsr, 0, sizeof(param->sinsr)); |
| 277 | return ret; |
| 278 | } |
| 279 | |
| 280 | int parseusername(char *username, struct clientparam *param, int extpasswd){ |
| 281 | char *sb = NULL, *se = NULL, *sp = NULL; |
no test coverage detected