fixes
This commit is contained in:
parent
e95d9736aa
commit
40043a9afc
Binary file not shown.
@ -1765,7 +1765,7 @@ static void https_print_ip_range_list(struct str_buffer* sb, ip_range_list_t *va
|
||||
|
||||
if(dynamic) {
|
||||
sbprintf(sb,"<tr><td> %s</td><td>",name);
|
||||
sbprintf(sb,"<form action=\"%s?%s=%s\" method=\"POST\">IP range:<input required type=\"text\" name=\"%s\" value=\"\">",form_names[AS_FORM_UPDATE].name,HR_ADD_IP_KIND,kind,HR_ADD_IP);
|
||||
sbprintf(sb,"<form action=\"%s?%s=%s\" method=\"POST\">IP range:<input required type=\"text\" name=\"%s\" value=\"\" >",form_names[AS_FORM_UPDATE].name,HR_ADD_IP_KIND,kind,HR_ADD_IP);
|
||||
sbprintf(sb,"Realm: <input type=\"text\" name=\"%s\" value=\"%s\" ",HR_ADD_IP_REALM,current_eff_realm());
|
||||
if(!is_superuser()) {
|
||||
sbprintf(sb," disabled ");
|
||||
@ -1960,20 +1960,6 @@ static void write_pc_page(ioa_socket_handle s)
|
||||
https_print_uint(sb,(unsigned long)turn_params.min_port,"min-port",0);
|
||||
https_print_uint(sb,(unsigned long)turn_params.max_port,"max-port",0);
|
||||
|
||||
https_print_ip_range_list(sb,&turn_params.ip_whitelist,"Whitelist IP (static)",NULL,0);
|
||||
{
|
||||
ip_range_list_t* l = get_ip_list("allowed");
|
||||
https_print_ip_range_list(sb,l,"Whitelist IP (dynamic)","allowed",1);
|
||||
ip_list_free(l);
|
||||
}
|
||||
|
||||
https_print_ip_range_list(sb,&turn_params.ip_blacklist,"Blacklist IP (static)", NULL, 0);
|
||||
{
|
||||
ip_range_list_t* l = get_ip_list("denied");
|
||||
https_print_ip_range_list(sb,l,"Blacklist IP (dynamic)", "denied", 1);
|
||||
ip_list_free(l);
|
||||
}
|
||||
|
||||
https_print_flag(sb,turn_params.no_multicast_peers,"no-multicast-peers","no-multicast-peers");
|
||||
https_print_flag(sb,turn_params.no_loopback_peers,"no-loopback-peers","no-loopback-peers");
|
||||
|
||||
@ -2069,6 +2055,24 @@ static void write_pc_page(ioa_socket_handle s)
|
||||
https_print_uint(sb,(unsigned long)get_bps_capacity(),"Total bps-capacity (per server)","bps-capacity");
|
||||
https_print_uint(sb,(unsigned long)get_bps_capacity_allocated(),"Allocated bps-capacity (per server)",0);
|
||||
https_print_uint(sb,(unsigned long)get_max_bps(),"Default max-bps (per session)","max-bps");
|
||||
|
||||
https_print_empty_row(sb,2);
|
||||
|
||||
https_print_ip_range_list(sb,&turn_params.ip_whitelist,"Whitelist IP (static)",NULL,0);
|
||||
{
|
||||
ip_range_list_t* l = get_ip_list("allowed");
|
||||
https_print_ip_range_list(sb,l,"Whitelist IP (dynamic)","allowed",1);
|
||||
ip_list_free(l);
|
||||
}
|
||||
|
||||
https_print_empty_row(sb,2);
|
||||
|
||||
https_print_ip_range_list(sb,&turn_params.ip_blacklist,"Blacklist IP (static)", NULL, 0);
|
||||
{
|
||||
ip_range_list_t* l = get_ip_list("denied");
|
||||
https_print_ip_range_list(sb,l,"Blacklist IP (dynamic)", "denied", 1);
|
||||
ip_list_free(l);
|
||||
}
|
||||
}
|
||||
|
||||
str_buffer_append(sb,"\r\n</table> </body>\r\n</html>\r\n");
|
||||
@ -2922,7 +2926,7 @@ static void write_https_oauth_page(ioa_socket_handle s, const char* add_kid, con
|
||||
str_buffer_append(sb,HR_ADD_OAUTH_IKM);
|
||||
str_buffer_append(sb,"\" value=\"");
|
||||
str_buffer_append(sb,(const char*)add_ikm);
|
||||
str_buffer_append(sb,"\" maxlength=256 size=48 required ");
|
||||
str_buffer_append(sb,"\" maxlength=256 size=64 ");
|
||||
str_buffer_append(sb,"><br>\r\n");
|
||||
}
|
||||
{
|
||||
@ -3107,24 +3111,30 @@ static void handle_update_request(ioa_socket_handle s, struct http_request* hr)
|
||||
const char* eip = get_http_header_value(hr, HR_ADD_IP,NULL);
|
||||
if(eip && eip[0]) {
|
||||
char* ip = evhttp_decode_uri(eip);
|
||||
const char* r = get_http_header_value(hr, HR_ADD_IP_REALM,"");
|
||||
const char* kind = get_http_header_value(hr, HR_ADD_IP_KIND,"");
|
||||
|
||||
const turn_dbdriver_t * dbd = get_dbdriver();
|
||||
if (dbd && dbd->set_permission_ip) {
|
||||
if(check_ip_list_range(ip)<0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Wrong address range format: %s\n", ip);
|
||||
} else {
|
||||
|
||||
if(!r || !r[0]) {
|
||||
r = current_realm();
|
||||
}
|
||||
const char* r = get_http_header_value(hr, HR_ADD_IP_REALM,"");
|
||||
const char* kind = get_http_header_value(hr, HR_ADD_IP_KIND,"");
|
||||
|
||||
if(current_realm()[0] && strcmp(current_realm(),r)) {
|
||||
//forbidden
|
||||
} else {
|
||||
const turn_dbdriver_t * dbd = get_dbdriver();
|
||||
if (dbd && dbd->set_permission_ip) {
|
||||
|
||||
u08bits realm[STUN_MAX_REALM_SIZE+1]="\0";
|
||||
STRCPY(realm,r);
|
||||
if(!r || !r[0]) {
|
||||
r = current_realm();
|
||||
}
|
||||
|
||||
dbd->set_permission_ip(kind, realm, ip, 0);
|
||||
if(current_realm()[0] && strcmp(current_realm(),r)) {
|
||||
//forbidden
|
||||
} else {
|
||||
|
||||
u08bits realm[STUN_MAX_REALM_SIZE+1]="\0";
|
||||
STRCPY(realm,r);
|
||||
|
||||
dbd->set_permission_ip(kind, realm, ip, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
free(ip);
|
||||
|
||||
@ -1266,6 +1266,43 @@ int add_ip_list_range(const char * range0, const char * realm, ip_range_list_t *
|
||||
return 0;
|
||||
}
|
||||
|
||||
int check_ip_list_range(const char * range0)
|
||||
{
|
||||
char *range = turn_strdup(range0);
|
||||
|
||||
char* separator = strchr(range, '-');
|
||||
|
||||
if (separator) {
|
||||
*separator = '\0';
|
||||
}
|
||||
|
||||
ioa_addr min, max;
|
||||
|
||||
if (make_ioa_addr((const u08bits*) range, 0, &min) < 0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Wrong address range format: %s\n", range);
|
||||
turn_free(range,0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (separator) {
|
||||
if (make_ioa_addr((const u08bits*) separator + 1, 0, &max) < 0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Wrong address range format: %s\n", separator + 1);
|
||||
turn_free(range,0);
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
// Doesn't have a '-' character in it, so assume that this is a single address
|
||||
addr_cpy(&max, &min);
|
||||
}
|
||||
|
||||
if (separator)
|
||||
*separator = '-';
|
||||
|
||||
turn_free(range,0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/////////// REALM //////////////
|
||||
|
||||
void reread_realms(void)
|
||||
|
||||
@ -202,6 +202,7 @@ int add_static_user_account(char *user);
|
||||
int adminuser(u08bits *user, u08bits *realm, u08bits *pwd, u08bits *secret, u08bits *origin, TURNADMIN_COMMAND_TYPE ct, perf_options_t* po, int is_admin);
|
||||
|
||||
int add_ip_list_range(const char* range, const char* realm, ip_range_list_t * list);
|
||||
int check_ip_list_range(const char* range);
|
||||
ip_range_list_t* get_ip_list(const char *kind);
|
||||
void ip_list_free(ip_range_list_t *l);
|
||||
|
||||
|
||||
@ -185,19 +185,35 @@ int addr_eq_no_port(const ioa_addr* a1, const ioa_addr *a2) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int make_ioa_addr(const u08bits* saddr, int port, ioa_addr *addr) {
|
||||
int make_ioa_addr(const u08bits* saddr0, int port, ioa_addr *addr) {
|
||||
|
||||
if(!saddr || !addr) return -1;
|
||||
if(!saddr0 || !addr) return -1;
|
||||
|
||||
char ssaddr[257];
|
||||
STRCPY(ssaddr,saddr0);
|
||||
|
||||
char* saddr=ssaddr;
|
||||
while(*saddr == ' ') ++saddr;
|
||||
|
||||
size_t len=strlen(saddr);
|
||||
while(len>0) {
|
||||
if(saddr[len-1]==' ') {
|
||||
saddr[len-1]=0;
|
||||
--len;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ns_bzero(addr, sizeof(ioa_addr));
|
||||
if((strlen((const s08bits*)saddr) == 0)||
|
||||
(inet_pton(AF_INET, (const s08bits*)saddr, &addr->s4.sin_addr) == 1)) {
|
||||
if((len == 0)||
|
||||
(inet_pton(AF_INET, saddr, &addr->s4.sin_addr) == 1)) {
|
||||
addr->s4.sin_family = AF_INET;
|
||||
#if defined(TURN_HAS_SIN_LEN) /* tested when configured */
|
||||
addr->s4.sin_len = sizeof(struct sockaddr_in);
|
||||
#endif
|
||||
addr->s4.sin_port = nswap16(port);
|
||||
} else if (inet_pton(AF_INET6, (const s08bits*)saddr, &addr->s6.sin6_addr) == 1) {
|
||||
} else if (inet_pton(AF_INET6, saddr, &addr->s6.sin6_addr) == 1) {
|
||||
addr->s6.sin6_family = AF_INET6;
|
||||
#if defined(SIN6_LEN) /* this define is required by IPv6 if used */
|
||||
addr->s6.sin6_len = sizeof(struct sockaddr_in6);
|
||||
@ -217,7 +233,7 @@ int make_ioa_addr(const u08bits* saddr, int port, ioa_addr *addr) {
|
||||
addr_hints.ai_addr = NULL;
|
||||
addr_hints.ai_next = NULL;
|
||||
|
||||
err = getaddrinfo((const char*)saddr, NULL, &addr_hints, &addr_result);
|
||||
err = getaddrinfo(saddr, NULL, &addr_hints, &addr_result);
|
||||
if ((err != 0)||(!addr_result)) {
|
||||
fprintf(stderr,"error resolving '%s' hostname: %s\n",saddr,gai_strerror(err));
|
||||
return -1;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user