2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
20 File: KCEventNotifier.cpp
22 Contains: OS X CF Notifier for Keychain Events
24 Written by: Craig Mortensen
26 Copyright: 2000 by Apple Computer, Inc., All rights reserved.
28 Change History (most recent first):
34 #include "KCEventNotifier.h"
35 #include "KCExceptions.h"
36 #include "Keychains.h"
38 using namespace KeychainCore
;
40 void KCEventNotifier::PostKeychainEvent(SecKeychainEvent whichEvent
, const Keychain
&keychain
, const Item
&kcItem
)
42 DLDbIdentifier dlDbIdentifier
;
43 PrimaryKey primaryKey
;
46 dlDbIdentifier
= keychain
->dLDbIdentifier();
49 primaryKey
= kcItem
->primaryKey();
51 PostKeychainEvent(whichEvent
, dlDbIdentifier
, primaryKey
);
55 void KCEventNotifier::PostKeychainEvent(SecKeychainEvent whichEvent
,
56 const DLDbIdentifier
&dlDbIdentifier
,
57 const PrimaryKey
&primaryKey
)
59 NameValueDictionary nvd
;
61 pid_t thePid
= getpid();
62 nvd
.Insert (new NameValuePair (PID_KEY
, CssmData (reinterpret_cast<void*>(&thePid
), sizeof (pid_t
))));
66 NameValueDictionary::MakeNameValueDictionaryFromDLDbIdentifier (dlDbIdentifier
, nvd
);
69 CssmData
* pKey
= primaryKey
;
73 nvd
.Insert (new NameValuePair (ITEM_KEY
, *pKey
));
76 // flatten the dictionary
80 SecurityServer::ClientSession
cs (CssmAllocator::standard(), CssmAllocator::standard());
81 cs
.postNotification (Listener::databaseNotifications
, whichEvent
, data
);
83 secdebug("kcnotify", "KCEventNotifier::PostKeychainEvent posted event %u", (unsigned int) whichEvent
);