security: publish securevirtualresourcetypes.h
[iotivity.git] / resource / csdk / security / include / internal / acl_logging.h
1 //******************************************************************
2 //
3 // Copyright 2017 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #ifndef ACL_LOGGING_H_
22 #define ACL_LOGGING_H_
23
24 #include "logger.h"
25 #include "oic_malloc.h"
26 #include "ocrandom.h"
27 #include "utlist.h"
28 #include "experimental/securevirtualresourcetypes.h"
29
30 #ifdef __cplusplus
31 extern "C"
32 {
33 #endif
34
35 #define ACL_TAG "ACL_LOG"
36
37 #ifdef TB_LOG
38     #define OIC_LOG_ACL(level, acl) printACL((level),(acl))
39     #define OIC_LOG_ACE(level, ace) printACE((level),(ace))
40
41 INLINE_API void printACE(LogLevel level, const OicSecAce_t *ace)
42 {
43     OIC_LOG(level, ACL_TAG, "=================================================");
44     OIC_LOG_V(level, ACL_TAG, "ACE @ %p", ace);
45
46     if (NULL == ace)
47     {
48         return;
49     }
50
51     OIC_LOG_V(level, ACL_TAG, "    aceid = %d", ace->aceid);
52
53     OIC_LOG_V(level, ACL_TAG, "    permission = %#x", (uint32_t)ace->permission);
54
55     // Log the subject
56     if (ace->subjectType == OicSecAceUuidSubject)
57     {
58         char uuidString[UUID_STRING_SIZE] = { 0 };
59         bool convertedUUID = OCConvertUuidToString(ace->subjectuuid.id, uuidString);
60         OIC_LOG_V(level, ACL_TAG, "    subject UUID = %s", convertedUUID ? uuidString : "incorrect format");
61     }
62     else if (ace->subjectType == OicSecAceRoleSubject)
63     {
64         OIC_LOG_V(level, ACL_TAG, "    role id = %s", ace->subjectRole.id);
65         OIC_LOG_V(level, ACL_TAG, "    authority = %s", ace->subjectRole.authority);
66     }
67     else if (ace->subjectType == OicSecAceConntypeSubject)
68     {
69         const char *conntype;
70         if (ANON_CLEAR == ace->subjectConn)
71         {
72             conntype = "ANON_CLEAR";
73         }
74         else if (AUTH_CRYPT == ace->subjectConn)
75         {
76             conntype = "AUTH_CRYPT";
77         }
78         else
79         {
80             conntype = "Unknown conntype in subjectConn";
81         }
82         OIC_LOG_V(level, ACL_TAG, "    conntype = %s", conntype);
83     }
84     else
85     {
86         OIC_LOG(level, ACL_TAG, "    subject = (subject of unknown type)");
87     }
88
89     // Log all resources this ACE applies to.
90     OicSecRsrc_t *resource = NULL;
91     size_t resourceCount = 0;
92     LL_FOREACH(ace->resources, resource)
93     {
94         OIC_LOG_V(level, ACL_TAG, "    resources[%" PRIuPTR "]:", resourceCount);
95         OIC_LOG_V(level, ACL_TAG, "        href = %s", resource->href ? resource->href : "null");
96
97         for (size_t i = 0; i < resource->typeLen; i++)
98         {
99             OIC_LOG_V(level, ACL_TAG, "        types[%" PRIuPTR "] = %s", i,
100                 resource->types[i] ? resource->types[i] : "null");
101         }
102
103         for (size_t i = 0; i < resource->interfaceLen; i++)
104         {
105             OIC_LOG_V(level, ACL_TAG, "        interfaces[%" PRIuPTR "] = %s", i,
106                 resource->interfaces[i] ? resource->interfaces[i] : "null");
107         }
108
109         resourceCount++;
110     }
111
112     // Log the validities.
113     OicSecValidity_t *validity = NULL;
114     size_t validityCount = 0;
115     LL_FOREACH(ace->validities, validity)
116     {
117         OIC_LOG_V(level, ACL_TAG, "    validities[%" PRIuPTR "]:", validityCount);
118         OIC_LOG_V(level, ACL_TAG, "        period = %s", validity->period);
119         for (size_t i = 0; i < validity->recurrenceLen; i++)
120         {
121             OIC_LOG_V(level, ACL_TAG, "    recurrences[%" PRIuPTR "] = %s", i,
122                 validity->recurrences[i] ? validity->recurrences[i] : "null");
123         }
124         validityCount++;
125     }
126
127     OIC_LOG(level, ACL_TAG, "=================================================");
128 }
129
130 INLINE_API void printACL(LogLevel level, const OicSecAcl_t* acl)
131 {
132     OIC_LOG_V(level, ACL_TAG, "Print ACL @ %p:", acl);
133
134     if (NULL == acl)
135     {
136         return;
137     }
138
139     char rowner[UUID_STRING_SIZE] = { 0 };
140     if (OCConvertUuidToString(acl->rownerID.id, rowner))
141     {
142         OIC_LOG_V(level, ACL_TAG, "rowner id = %s", rowner);
143     }
144     else
145     {
146         OIC_LOG(ERROR, ACL_TAG, "Can't convert rowner uuid to string");
147     }
148
149     const OicSecAce_t *ace = acl->aces;
150     size_t ace_count = 0;
151     while (ace)
152     {
153         OIC_LOG_V(level, ACL_TAG, "Print ace[%" PRIuPTR "]:", ace_count);
154         printACE(level, ace);
155         ace = ace->next;
156         ace_count++;
157     }
158 }
159 #else
160     #define OIC_LOG_ACL(level, acl)
161     #define OIC_LOG_ACE(level, ace)
162 #endif
163
164 #ifdef __cplusplus
165 }
166 #endif
167
168 #endif