diff --git a/src/apps/relay/dbdrivers/dbd_mongo.c b/src/apps/relay/dbdrivers/dbd_mongo.c index 05707b80..18beef59 100644 --- a/src/apps/relay/dbdrivers/dbd_mongo.c +++ b/src/apps/relay/dbdrivers/dbd_mongo.c @@ -780,7 +780,7 @@ static int mongo_get_ip_list(const char *kind, ip_range_list_t * list) { while(mongoc_cursor_next(cursor, &item)) { if (bson_iter_init(&iter, item) && bson_iter_find(&iter, "ip_range") && BSON_ITER_HOLDS_UTF8(&iter)) { value = bson_iter_utf8(&iter, &length); - add_ip_list_range(value, list); + add_ip_list_range(value, list); } } mongoc_cursor_destroy(cursor); diff --git a/src/apps/relay/userdb.c b/src/apps/relay/userdb.c index 59f75df6..94af2867 100644 --- a/src/apps/relay/userdb.c +++ b/src/apps/relay/userdb.c @@ -1249,8 +1249,10 @@ void update_white_and_black_lists(void) /////////////// add ACL record /////////////////// -int add_ip_list_range(const char * range, ip_range_list_t * list) +int add_ip_list_range(const char * range0, ip_range_list_t * list) { + char *range = strdup(range0); + char* separator = strchr(range, '-'); if (separator) { @@ -1261,12 +1263,14 @@ int add_ip_list_range(const char * range, ip_range_list_t * list) if (make_ioa_addr((const u08bits*) range, 0, &min) < 0) { TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Wrong address format: %s\n", range); + free(range); return -1; } if (separator) { if (make_ioa_addr((const u08bits*) separator + 1, 0, &max) < 0) { TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Wrong address format: %s\n", separator + 1); + free(range); return -1; } } else { @@ -1279,7 +1283,7 @@ int add_ip_list_range(const char * range, ip_range_list_t * list) ++(list->ranges_number); list->ranges = (char**) realloc(list->ranges, sizeof(char*) * list->ranges_number); - list->ranges[list->ranges_number - 1] = strdup(range); + list->ranges[list->ranges_number - 1] = range; list->encaddrsranges = (ioa_addr_range**) realloc(list->encaddrsranges, sizeof(ioa_addr_range*) * list->ranges_number); list->encaddrsranges[list->ranges_number - 1] = (ioa_addr_range*) turn_malloc(sizeof(ioa_addr_range));