]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_cdsa_client/lib/dlclient.cpp
Security-57740.31.2.tar.gz
[apple/security.git] / OSX / libsecurity_cdsa_client / lib / dlclient.cpp
index 127f9b1308799fd2e2b4350197f5767f9d3142b6..2846d3cf9be9da99e2e3d3d80fdc1143360f2b0a 100644 (file)
@@ -481,7 +481,7 @@ uint32 DbImpl::dbBlobVersion() {
     if(dl()->guid() == gGuidAppleCSPDL) {
         check(CSSM_DL_PassThrough(handle(), CSSM_APPLECSPDL_DB_GET_BLOB_VERSION, NULL, (void**) &dbBlobVersionPtr));
     } else {
-        secdebugfunc("integrity", "Non-Apple CSPDL keychains don't have keychain versions");
+        secnotice("integrity", "Non-Apple CSPDL keychains don't have keychain versions");
     }
     return dbBlobVersion;
 }
@@ -493,6 +493,10 @@ uint32 DbImpl::recodeDbToVersion(uint32 version) {
     return newDbVersion;
 }
 
+void DbImpl::recodeFinished() {
+    check(CSSM_DL_PassThrough(handle(), CSSM_APPLECSPDL_DB_RECODE_FINISHED, NULL, NULL));
+}
+
 void DbImpl::takeFileLock() {
     passThrough(CSSM_APPLECSPDL_DB_TAKE_FILE_LOCK, NULL, NULL);
 }
@@ -505,6 +509,52 @@ void DbImpl::makeBackup() {
     passThrough(CSSM_APPLECSPDL_DB_MAKE_BACKUP, NULL, NULL);
 }
 
+void DbImpl::makeCopy(const char* path) {
+    passThrough(CSSM_APPLECSPDL_DB_MAKE_COPY, path, NULL);
+}
+
+void DbImpl::deleteFile() {
+    passThrough(CSSM_APPLECSPDL_DB_DELETE_FILE, NULL, NULL);
+}
+
+void DbImpl::transferTo(const DLDbIdentifier& dldbidentifier) {
+    if (dldbidentifier.ssuid().subserviceType() & CSSM_SERVICE_CSP) {
+        // if we're an Apple CSPDL, do the fancy transfer:
+        //  clone the file, clone the db, remove the original file
+        string oldPath = name();
+
+        CSSM_DB_HANDLE dbhandle;
+        passThrough(CSSM_APPLECSPDL_DB_CLONE, &dldbidentifier, &dbhandle);
+
+        mDbName = dldbidentifier.dbName();
+        mHandle.DBHandle = dbhandle;
+
+        unlink(oldPath.c_str());
+
+        // Don't cache this name
+        if (mNameFromHandle) {
+            allocator().free(mNameFromHandle);
+            mNameFromHandle = NULL;
+        }
+    } else {
+        // if we're not an Apple CSPDL, just call rename
+        this->rename(dldbidentifier.dbName());
+    }
+}
+
+
+// cloneTo only makes sense if you're on an Apple CSPDL
+Db DbImpl::cloneTo(const DLDbIdentifier& dldbidentifier) {
+    CSSM_DB_HANDLE dbhandle;
+    passThrough(CSSM_APPLECSPDL_DB_CLONE, &dldbidentifier, &dbhandle);
+
+    // This is the only reasonable way to make a SSDbImpl at this layer.
+    CssmClient::Db db(dl(), dldbidentifier.dbName(), dldbidentifier.dbLocation());
+    db->mHandle.DBHandle = dbhandle;
+
+    return db;
+}
+
 //
 // DbCursorMaker
 //