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