2 * Copyright (c) 2000-2001,2003-2004,2006,2011,2014 Apple 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@
26 // cssmcred - enhanced PodWrappers and construction aids for ACL credentials
28 #include <security_cdsa_utilities/cssmcred.h>
35 // The null credential constant.
37 static const CSSM_ACCESS_CREDENTIALS null_credentials
= { "" }; // and more nulls
39 const AccessCredentials
&AccessCredentials::null
=
40 *static_cast<const AccessCredentials
*>(&null_credentials
);
42 const AccessCredentials
&AccessCredentials::null
=
43 static_cast<const AccessCredentials
&>(null_credentials
);
48 // Scan a SampleGroup for samples with a given CSSM_SAMPLE_TYPE.
49 // Collect all matching samples into a list (which is cleared to begin with).
50 // Return true if any were found, false if none.
51 // Throw if any of the samples are obviously malformed.
53 bool SampleGroup::collect(CSSM_SAMPLE_TYPE sampleType
, list
<CssmSample
> &matches
) const
55 for (uint32 n
= 0; n
< length(); n
++) {
56 TypedList sample
= (*this)[n
];
58 if (sample
.type() == sampleType
) {
59 sample
.snip(); // skip sample type
60 matches
.push_back(sample
);
63 return !matches
.empty();
70 void AccessCredentials::tag(const char *tagString
)
72 if (tagString
== NULL
)
74 else if (strlen(tagString
) > CSSM_MODULE_STRING_SIZE
)
75 CssmError::throwMe(CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG
);
77 strcpy(EntryTag
, tagString
);
82 // AutoCredentials self-constructing credentials structure
84 AutoCredentials::AutoCredentials(Allocator
&alloc
) : allocator(alloc
)
89 AutoCredentials::AutoCredentials(Allocator
&alloc
, uint32 nSamples
) : allocator(alloc
)
92 getSample(nSamples
- 1); // extend array to nSamples elements
95 void AutoCredentials::init()
102 CssmSample
&AutoCredentials::getSample(uint32 n
)
105 sampleArray
= allocator
.alloc
<CssmSample
>(sampleArray
, nSamples
= n
+ 1);
106 Samples
.Samples
= sampleArray
;
107 Samples
.NumberOfSamples
= nSamples
;
109 return sampleArray
[n
];
112 } // end namespace Security