diff --git a/plugins/janus_videoroom.c b/plugins/janus_videoroom.c index e11688db8d..8498fba6ad 100644 --- a/plugins/janus_videoroom.c +++ b/plugins/janus_videoroom.c @@ -3546,13 +3546,28 @@ static json_t *janus_videoroom_process_synchronous_request(janus_videoroom_sessi GHashTableIter iter; gpointer value; g_hash_table_iter_init(&iter, rooms); + gboolean lock_room_list = TRUE; + if(admin_key != NULL) { + json_t *admin_key_json = json_object_get(root, "admin_key"); + /* Verify admin_key if it was provided */ + if(admin_key_json != NULL && json_is_string(admin_key_json) && strlen(json_string_value(admin_key_json)) > 0) { + JANUS_CHECK_SECRET(admin_key, root, "admin_key", error_code, error_cause, + JANUS_VIDEOROOM_ERROR_MISSING_ELEMENT, JANUS_VIDEOROOM_ERROR_INVALID_ELEMENT, JANUS_VIDEOROOM_ERROR_UNAUTHORIZED); + if(error_code != 0) { + janus_mutex_unlock(&rooms_mutex); + goto prepare_response; + } else { + lock_room_list = FALSE; + } + } + } while(g_hash_table_iter_next(&iter, NULL, &value)) { janus_videoroom *room = value; if(!room) continue; janus_refcount_increase(&room->ref); - if(room->is_private) { - /* Skip private room */ + if(room->is_private && lock_room_list) { + /* Skip private room if no valid admin_key was provided */ JANUS_LOG(LOG_VERB, "Skipping private room '%s'\n", room->room_name); janus_refcount_decrease(&room->ref); continue;