mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Revise the SQLITE_OPEN_NOFOLLOW so that it actually uses O_NOFOLLOW in the
open() system call. This backs out the SQLITE_ACCESS_SYMLINK value but adds the new SQLITE_OK_SYMLINK return code from the xFullPathname method of sqlite3_vfs when that routine resolves symbolic links. O_NOFOLLOW is always included in open() system calls for journal files. FossilOrigin-Name: 6a64fb6a2da6c98f1e87b55ad5689967e1db4eae2e08345471d95e28cd567e0f
This commit is contained in:
15
src/pager.c
15
src/pager.c
@@ -4790,12 +4790,6 @@ int sqlite3PagerOpen(
|
||||
*/
|
||||
if( zFilename && zFilename[0] ){
|
||||
const char *z;
|
||||
if( (vfsFlags & SQLITE_OPEN_NOFOLLOW)!=0 ){
|
||||
int isLink = 0;
|
||||
int rc = sqlite3OsAccess(pVfs, zFilename, SQLITE_ACCESS_SYMLINK, &isLink);
|
||||
if( rc==SQLITE_OK && isLink ) rc = SQLITE_CANTOPEN_SYMLINK;
|
||||
if( rc ) return rc;
|
||||
}
|
||||
nPathname = pVfs->mxPathname+1;
|
||||
zPathname = sqlite3DbMallocRaw(0, nPathname*2);
|
||||
if( zPathname==0 ){
|
||||
@@ -4803,6 +4797,15 @@ int sqlite3PagerOpen(
|
||||
}
|
||||
zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
|
||||
rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
|
||||
if( rc!=SQLITE_OK ){
|
||||
if( rc==SQLITE_OK_SYMLINK ){
|
||||
if( vfsFlags & SQLITE_OPEN_NOFOLLOW ){
|
||||
rc = SQLITE_CANTOPEN_SYMLINK;
|
||||
}else{
|
||||
rc = SQLITE_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
nPathname = sqlite3Strlen30(zPathname);
|
||||
z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1];
|
||||
while( *z ){
|
||||
|
Reference in New Issue
Block a user