2  * Copyright (c) 2000-2004 Apple Computer, Inc. All Rights Reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. Please obtain a copy of the License at 
  10  * http://www.opensource.apple.com/apsl/ and read it before using this 
  13  * The Original Code and all software distributed under the License are 
  14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  18  * Please see the License for the specific language governing rights and 
  19  * limitations under the License. 
  21  * @APPLE_LICENSE_HEADER_END@ 
  23  * KCEventNotifier.cpp -- OS X CF Notifier for Keychain Events 
  26 #include <securityd_client/ssclient.h> 
  27 #include "KCEventNotifier.h" 
  28 #include "KCExceptions.h" 
  29 #include "Keychains.h" 
  31 using namespace KeychainCore
; 
  33 void KCEventNotifier::PostKeychainEvent(SecKeychainEvent whichEvent
, const Keychain 
&keychain
, const Item 
&kcItem
) 
  35         DLDbIdentifier dlDbIdentifier
; 
  36         PrimaryKey primaryKey
; 
  39                 dlDbIdentifier 
= keychain
->dlDbIdentifier(); 
  42                 primaryKey 
= kcItem
->primaryKey(); 
  44         PostKeychainEvent(whichEvent
, dlDbIdentifier
, primaryKey
); 
  48 void KCEventNotifier::PostKeychainEvent(SecKeychainEvent whichEvent
, 
  49                                                                                 const DLDbIdentifier 
&dlDbIdentifier
,  
  50                                                                                 const PrimaryKey 
&primaryKey
) 
  52         NameValueDictionary nvd
; 
  54         Endian
<pid_t
> thePid 
= getpid(); 
  55         nvd
.Insert (new NameValuePair (PID_KEY
, CssmData (reinterpret_cast<void*>(&thePid
), sizeof (pid_t
)))); 
  59                 NameValueDictionary::MakeNameValueDictionaryFromDLDbIdentifier (dlDbIdentifier
, nvd
); 
  62         CssmData
* pKey 
= primaryKey
; 
  66                 nvd
.Insert (new NameValuePair (ITEM_KEY
, *pKey
)); 
  69         // flatten the dictionary 
  73         SecurityServer::ClientSession 
cs (Allocator::standard(), Allocator::standard()); 
  74         cs
.postNotification (SecurityServer::kNotificationDomainDatabase
, whichEvent
, data
); 
  76     secdebug("kcnotify", "KCEventNotifier::PostKeychainEvent posted event %u", (unsigned int) whichEvent
);