X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/72a12576750f52947eb043106ba5c12c0d07decf..b1ab9ed8d0e0f1c3b66d7daa8fd5564444c56195:/libsecurity_cdsa_utilities/lib/AuthorizationWalkers.h diff --git a/libsecurity_cdsa_utilities/lib/AuthorizationWalkers.h b/libsecurity_cdsa_utilities/lib/AuthorizationWalkers.h new file mode 100644 index 00000000..94631a58 --- /dev/null +++ b/libsecurity_cdsa_utilities/lib/AuthorizationWalkers.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2000-2004,2006 Apple Computer, Inc. All Rights Reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +/* + * AuthorizationWalkers.h + * SecurityCore + */ + +#if !defined(__AuthorizationWalkers__) +#define __AuthorizationWalkers__ 1 + +#include +#include +#include +#include // char * walker + +namespace Security { +namespace DataWalkers { + + +template +void walk(Action &operate, AuthorizationItem &item) +{ + operate(item); + walk(operate, const_cast(item.name)); + operate.blob(item.value, item.valueLength); + // Ignore reserved +} + +template +AuthorizationItemSet *walk(Action &operate, AuthorizationItemSet * &itemSet) +{ + operate(itemSet); + operate.blob(itemSet->items, itemSet->count * sizeof(itemSet->items[0])); + for (uint32 n = 0; n < itemSet->count; n++) + walk(operate, itemSet->items[n]); + return itemSet; +} + +template +void walk(Action &operate, AuthorizationValue &authvalue) +{ + operate.blob(authvalue.data, authvalue.length); +} + +template +AuthorizationValueVector *walk(Action &operate, AuthorizationValueVector * &valueVector) +{ + operate(valueVector); + operate.blob(valueVector->values, valueVector->count * sizeof(valueVector->values[0])); + for (uint32 n = 0; n < valueVector->count; n++) + walk(operate, valueVector->values[n]); + return valueVector; +} + + + +} // end namespace DataWalkers +} // end namespace Security + +#endif /* ! __AuthorizationWalkers__ */