Browse Source
check if sqlite folder exists
instead of creating the parent folders to a sqlite database
vaultwarden should just exit if it does not.
this should fix issues like #2835 when a wrongly configured
`DATABASE_URL` falls back to using sqlite
pull/2873/head
Stefan Melmuk
2 years ago
No known key found for this signature in database
GPG Key ID: 817020C608FE9C09
2 changed files with
14 additions and
13 deletions
src/config.rs
src/db/mod.rs
@ -630,7 +630,15 @@ make_config! {
fn validate_config ( cfg : & ConfigItems ) -> Result < ( ) , Error > {
// Validate connection URL is valid and DB feature is enabled
DbConnType ::from_url ( & cfg . database_url ) ? ;
let url = & cfg . database_url ;
if DbConnType ::from_url ( url ) ? = = DbConnType ::sqlite {
let path = std ::path ::Path ::new ( & url ) ;
if let Some ( parent ) = path . parent ( ) {
if ! parent . exists ( ) {
err ! ( format ! ( "SQLite database directory `{}` does not exist" , parent . display ( ) ) ) ;
}
}
}
let limit = 256 ;
if cfg . database_max_conns < 1 | | cfg . database_max_conns > limit {
@ -424,22 +424,15 @@ mod sqlite_migrations {
pub const MIGRATIONS : EmbeddedMigrations = embed_migrations ! ( "migrations/sqlite" ) ;
pub fn run_migrations ( ) -> Result < ( ) , super ::Error > {
// Make sure the directory exists
use diesel ::{ Connection , RunQueryDsl } ;
let url = crate ::CONFIG . database_url ( ) ;
let path = std ::path ::Path ::new ( & url ) ;
if let Some ( parent ) = path . parent ( ) {
if std ::fs ::create_dir_all ( parent ) . is_err ( ) {
error ! ( "Error creating database directory" ) ;
std ::process ::exit ( 1 ) ;
}
}
// Establish a connection to the sqlite database (this will create a new one, if it does
// not exist, and exit if there is an error).
let mut connection = diesel ::sqlite ::SqliteConnection ::establish ( & url ) ? ;
use diesel ::{ Connection , RunQueryDsl } ;
// Make sure the database is up to date (create if it doesn't exist, or run the migrations)
let mut connection = diesel ::sqlite ::SqliteConnection ::establish ( & crate ::CONFIG . database_url ( ) ) ? ;
// Run the migrations after successfully establishing a connection
// Disable Foreign Key Checks during migration
// Scoped to a connection.
diesel ::sql_query ( "PRAGMA foreign_keys = OFF" )
. execute ( & mut connection )