diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index f29fc79..0d811e4 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -85,6 +85,7 @@ LOW_DEFAULT_PORTS_BOUNDARY,HIGH_DEFAULT_PORTS_BOUNDARY,0,0,0,"", 0,NULL,0,NULL,DEFAULT_GENERAL_RELAY_SERVERS_NUMBER,0, ////////////// Auth server ///////////////////////////////////// {NULL,NULL,NULL,0,NULL}, +"", /////////////// AUX SERVERS //////////////// {NULL,0,{0,NULL}},0, /////////////// ALTERNATE SERVERS //////////////// @@ -1556,7 +1557,7 @@ static int adminmain(int argc, char **argv) static void print_features(unsigned long mfn) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "\nRFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server\nVersion %s\n",TURN_SOFTWARE); - + TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Server name: %s\n",turn_params.oauth_server_name); TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "\nMax number of open files/sockets allowed for this process: %lu\n",mfn); if(turn_params.net_engine_version == 1) mfn = mfn/3; @@ -1678,6 +1679,16 @@ static void drop_privileges(void) } } +static void init_oauth_server_name(void) { + struct utsname name; + if(!uname(&name)) { + STRCPY(turn_params.oauth_server_name,name.nodename); + } + if(!turn_params.oauth_server_name[0]) { + STRCPY(turn_params.oauth_server_name,TURN_SOFTWARE); + } +} + int main(int argc, char **argv) { int c = 0; @@ -1703,6 +1714,7 @@ int main(int argc, char **argv) init_listener(); init_secrets_list(&turn_params.default_users_db.ram_db.static_auth_secrets); init_dynamic_ip_lists(); + init_oauth_server_name(); if (!strstr(argv[0], "turnadmin")) { diff --git a/src/apps/relay/mainrelay.h b/src/apps/relay/mainrelay.h index d105b45..be56bd4 100644 --- a/src/apps/relay/mainrelay.h +++ b/src/apps/relay/mainrelay.h @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -65,8 +66,6 @@ #include #include -#include - #include "ns_turn_utils.h" #include "ns_turn_khash.h" @@ -272,6 +271,7 @@ typedef struct _turn_params_ { ////////////// Auth server //////////////// struct auth_server authserver; + char oauth_server_name[1025]; /////////////// AUX SERVERS //////////////// diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index 030bb2f..6198ebd 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -1797,4 +1797,23 @@ void init_listener(void) ns_bzero(&turn_params.listener,sizeof(struct listener_server)); } +void get_oauth_server_name(const char* realm, char *server_name, size_t server_name_size) +{ + if(server_name && server_name_size) { + strncpy(server_name,turn_params.oauth_server_name,server_name_size); + if(realm && realm[0]) { + char* sat = strstr(server_name,"@"); + if(sat) { + *sat = 0; + } + size_t snl = strlen(server_name); + size_t rl = strlen(realm); + if(snl+1+rlquota_used) && ss->server && ((turn_turnserver*)ss->server)->chquotacb && username) { if(((turn_turnserver*)ss->server)->ct == TURN_CREDENTIALS_LONG_TERM) { - if(!(ss->realm_set)) { + if(!(ss->origin_set)) { return -1; } } @@ -3483,7 +3483,7 @@ static int handle_turn_command(turn_turnserver *server, ts_ur_super_session *ss, } /* check that the realm is the same as in the original request */ - if(ss->realm_set) { + if(ss->origin_set) { stun_attr_ref sar = stun_attr_get_first_str(ioa_network_buffer_data(in_buffer->nbh), ioa_network_buffer_get_size(in_buffer->nbh)); @@ -3540,7 +3540,7 @@ static int handle_turn_command(turn_turnserver *server, ts_ur_super_session *ss, } /* get the initial origin value */ - if(!err_code && !(ss->realm_set) && (method == STUN_METHOD_ALLOCATE)) { + if(!err_code && !(ss->origin_set) && (method == STUN_METHOD_ALLOCATE)) { stun_attr_ref sar = stun_attr_get_first_str(ioa_network_buffer_data(in_buffer->nbh), ioa_network_buffer_get_size(in_buffer->nbh)); @@ -3571,7 +3571,7 @@ static int handle_turn_command(turn_turnserver *server, ts_ur_super_session *ss, ioa_network_buffer_get_size(in_buffer->nbh), sar); } - ss->realm_set = 1; + ss->origin_set = 1; } if(!err_code && !(*resp_constructed) && !no_response) { diff --git a/src/server/ns_turn_session.h b/src/server/ns_turn_session.h index 44886d6..8a85477 100644 --- a/src/server/ns_turn_session.h +++ b/src/server/ns_turn_session.h @@ -101,7 +101,7 @@ struct _ts_ur_super_session { char s_mobile_id[33]; /* Realm */ realm_options_t realm_options; - int realm_set; + int origin_set; s08bits origin[STUN_MAX_ORIGIN_SIZE + 1]; /* Bandwidth */ band_limit_t bps;