]> git.saurik.com Git - apple/security.git/blob - OSX/sec/SOSCircle/SecureObjectSync/SOSAccountCircles.m
Security-58286.60.28.tar.gz
[apple/security.git] / OSX / sec / SOSCircle / SecureObjectSync / SOSAccountCircles.m
1 //
2 // SOSAccountCircles.c
3 // sec
4 //
5
6 #import <Security/SecureObjectSync/SOSAccountPriv.h>
7 #import <Security/SecureObjectSync/SOSTransport.h>
8 #import <Security/SecureObjectSync/SOSTransportKeyParameter.h>
9 #import <Security/SecureObjectSync/SOSTransportMessageKVS.h>
10 #import <Security/SecureObjectSync/SOSTransportMessageIDS.h>
11 #import <Security/SecureObjectSync/SOSTransportCircleKVS.h>
12 #import <Security/SecureObjectSync/SOSTransportCircleCK.h>
13 #import <Security/SecureObjectSync/SOSAccountTrust.h>
14 #import <Security/SecureObjectSync/SOSAccountTrustClassic.h>
15
16 #include <Security/SecureObjectSync/SOSPeerInfoCollections.h>
17 #include "SOSCloudKeychainClient.h"
18
19 //
20 // MARK: Circle management
21 //
22
23
24 SOSCircleRef CF_RETURNS_RETAINED SOSAccountEnsureCircle(SOSAccount* a, CFStringRef name, CFErrorRef *error)
25 {
26 CFErrorRef localError = NULL;
27 SOSAccountTrustClassic *trust = a.trust;
28 SOSCircleRef circle = trust.trustedCircle;
29
30 if (circle == NULL) {
31 circle = SOSCircleCreate(NULL, name, NULL);
32 a.key_interests_need_updating = true;
33 [trust setTrustedCircle:circle];
34 } else {
35 CFRetainSafe(circle);
36 }
37
38 require_action_quiet(circle || !isSOSErrorCoded(localError, kSOSErrorIncompatibleCircle), fail,
39 if (error) { *error = localError; localError = NULL; });
40
41 fail:
42 CFReleaseNull(localError);
43 return circle;
44 }
45