X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/e3d460c9de4426da6c630c3ae3f46173a99f82d8..914fc88e61be54aed6b18205ff2775b48793a3b6:/OSX/libsecurity_filedb/lib/AppleDatabase.cpp diff --git a/OSX/libsecurity_filedb/lib/AppleDatabase.cpp b/OSX/libsecurity_filedb/lib/AppleDatabase.cpp index aa307033..61fca878 100644 --- a/OSX/libsecurity_filedb/lib/AppleDatabase.cpp +++ b/OSX/libsecurity_filedb/lib/AppleDatabase.cpp @@ -1687,7 +1687,7 @@ DbModifier::commit() return; try { - secdebugfunc("integrity", "committing to %s", mAtomicFile.path().c_str()); + secnotice("integrity", "committing to %s", mAtomicFile.path().c_str()); WriteSection aHeaderSection(Allocator::standard(), size_t(HeaderSize)); // Set aHeaderSection to the correct size. @@ -2550,6 +2550,14 @@ AppleDatabase::passThrough(DbContext &dbContext, dbMakeBackup(); break; + case CSSM_APPLEFILEDL_MAKE_COPY: + dbMakeCopy((const char *) inputParams); + break; + + case CSSM_APPLEFILEDL_DELETE_FILE: + dbDeleteFile(); + break; + case CSSM_APPLECSPDL_DB_RELATION_EXISTS: { CSSM_BOOL returnValue; @@ -2570,7 +2578,6 @@ AppleDatabase::passThrough(DbContext &dbContext, default: CssmError::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); - break; } } @@ -2581,11 +2588,20 @@ AppleDatabase::dbMakeBackup() { string filename_temp(filename_temp_cstr); filename_temp += "_backup"; - const char * dstFilename = filename_temp.c_str(); free(filename_temp_cstr); - if(copyfile(mAtomicFile.path().c_str(), dstFilename, NULL, COPYFILE_ALL) < 0) { + dbMakeCopy(filename_temp.c_str()); +} + +void +AppleDatabase::dbMakeCopy(const char* path) { + if(copyfile(mAtomicFile.path().c_str(), path, NULL, COPYFILE_UNLINK | COPYFILE_ALL) < 0) { UnixError::throwMe(errno); } } +void AppleDatabase::dbDeleteFile() { + if(unlink(mAtomicFile.path().c_str()) < 0) { + UnixError::throwMe(errno); + } +}