1/* 2 * Copyright (c) 2000-2004,2006 Apple Computer, Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 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 11 * file. 12 * 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. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25/* 26 * AuthorizationWalkers.h 27 * SecurityCore 28 */ 29 30#if !defined(__AuthorizationWalkers__) 31#define __AuthorizationWalkers__ 1 32 33#include <Security/Authorization.h> 34#include <Security/AuthorizationPlugin.h> 35#include <security_cdsa_utilities/walkers.h> 36#include <security_cdsa_utilities/cssmwalkers.h> // char * walker 37 38namespace Security { 39namespace DataWalkers { 40 41 42template <class Action> 43void walk(Action &operate, AuthorizationItem &item) 44{ 45 operate(item); 46 walk(operate, const_cast<char *&>(item.name)); 47 operate.blob(item.value, item.valueLength); 48 // Ignore reserved 49} 50 51template <class Action> 52AuthorizationItemSet *walk(Action &operate, AuthorizationItemSet * &itemSet) 53{ 54 operate(itemSet); 55 operate.blob(itemSet->items, itemSet->count * sizeof(itemSet->items[0])); 56 for (uint32 n = 0; n < itemSet->count; n++) 57 walk(operate, itemSet->items[n]); 58 return itemSet; 59} 60 61template <class Action> 62void walk(Action &operate, AuthorizationValue &authvalue) 63{ 64 operate.blob(authvalue.data, authvalue.length); 65} 66 67template <class Action> 68AuthorizationValueVector *walk(Action &operate, AuthorizationValueVector * &valueVector) 69{ 70 operate(valueVector); 71 operate.blob(valueVector->values, valueVector->count * sizeof(valueVector->values[0])); 72 for (uint32 n = 0; n < valueVector->count; n++) 73 walk(operate, valueVector->values[n]); 74 return valueVector; 75} 76 77 78 79} // end namespace DataWalkers 80} // end namespace Security 81 82#endif /* ! __AuthorizationWalkers__ */ 83