1 // Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of "Eclipse Public License v1.0" |
4 // under the terms of "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
41 |
41 |
42 @return CSqlSecurityPolicy::TPolicyItem pointer, which can be used for R/W operations on the database security policy data. |
42 @return CSqlSecurityPolicy::TPolicyItem pointer, which can be used for R/W operations on the database security policy data. |
43 */ |
43 */ |
44 inline CSqlSecurityPolicy::TPolicyItem* CSqlSecurityPolicy::PolicyItemPtr(const RSqlBufFlat::TCell* aBegin, const RSqlBufFlat::TCell* aCurrent) |
44 inline CSqlSecurityPolicy::TPolicyItem* CSqlSecurityPolicy::PolicyItemPtr(const RSqlBufFlat::TCell* aBegin, const RSqlBufFlat::TCell* aCurrent) |
45 { |
45 { |
46 __ASSERT_DEBUG(aBegin != NULL && aCurrent != NULL, __SQLPANIC2(ESqlPanicBadArgument)); |
46 __SQLASSERT(aBegin != NULL && aCurrent != NULL, ESqlPanicBadArgument); |
47 __ASSERT_DEBUG(aCurrent->iPos != 0, __SQLPANIC2(ESqlPanicBadArgument)); |
47 __SQLASSERT(aCurrent->iPos != 0, ESqlPanicBadArgument); |
48 const TUint8* begin = reinterpret_cast <const TUint8*> (aBegin); |
48 const TUint8* begin = reinterpret_cast <const TUint8*> (aBegin); |
49 return reinterpret_cast <CSqlSecurityPolicy::TPolicyItem*> (const_cast <TUint8*> (begin) + aCurrent->iPos); |
49 return reinterpret_cast <CSqlSecurityPolicy::TPolicyItem*> (const_cast <TUint8*> (begin) + aCurrent->iPos); |
50 } |
50 } |
51 |
51 |
52 /** |
52 /** |
61 */ |
61 */ |
62 const CSqlSecurityPolicy::TPolicyItem* CSqlSecurityPolicy::FindPolicyItemPtr(RSqlSecurityPolicy::TObjectType aObjectType, |
62 const CSqlSecurityPolicy::TPolicyItem* CSqlSecurityPolicy::FindPolicyItemPtr(RSqlSecurityPolicy::TObjectType aObjectType, |
63 const TDesC& aObjectName) const |
63 const TDesC& aObjectName) const |
64 { |
64 { |
65 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
65 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
66 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
66 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
67 const RSqlBufFlat::TCell* end = begin + Count(); |
67 const RSqlBufFlat::TCell* end = begin + Count(); |
68 const RSqlBufFlat::TCell* current = begin + CSqlSecurityPolicy::EDbPolicyIdx;//ignore default and database policiy types ("current" points before the first non-database policy) |
68 const RSqlBufFlat::TCell* current = begin + CSqlSecurityPolicy::EDbPolicyIdx;//ignore default and database policiy types ("current" points before the first non-database policy) |
69 while(++current < end) |
69 while(++current < end) |
70 { |
70 { |
71 if(current->iPos > 0 && current->Type() == (TInt)aObjectType) //if present and the same type as aObjectType |
71 if(current->iPos > 0 && current->Type() == (TInt)aObjectType) //if present and the same type as aObjectType |
72 { |
72 { |
73 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, current); |
73 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, current); |
74 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
74 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
75 __ASSERT_DEBUG(((current->Size() - sizeof(CSqlSecurityPolicy::TPolicyItem) - sizeof(TInt)) / sizeof(TUint16)) == item->NameSize(), __SQLPANIC(ESqlPanicInternalError)); |
75 __SQLASSERT(((current->Size() - sizeof(CSqlSecurityPolicy::TPolicyItem) - sizeof(TInt)) / sizeof(TUint16)) == item->NameSize(), ESqlPanicInternalError); |
76 if(::CompareNoCase16(aObjectName, TPtrC(item->NamePtr(), item->NameSize())) == 0) |
76 if(::CompareNoCase16(aObjectName, TPtrC(item->NamePtr(), item->NameSize())) == 0) |
77 { |
77 { |
78 return item; |
78 return item; |
79 } |
79 } |
80 } |
80 } |
145 one default security policy entry and one database security policy entry. |
145 one default security policy entry and one database security policy entry. |
146 */ |
146 */ |
147 TInt CSqlSecurityPolicy::Count() const |
147 TInt CSqlSecurityPolicy::Count() const |
148 { |
148 { |
149 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
149 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
150 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
150 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
151 return *reinterpret_cast <const TInt*> (reinterpret_cast <const TUint8*> (begin) + (begin + CSqlSecurityPolicy::ECountIdx)->iPos); |
151 return *reinterpret_cast <const TInt*> (reinterpret_cast <const TUint8*> (begin) + (begin + CSqlSecurityPolicy::ECountIdx)->iPos); |
152 } |
152 } |
153 |
153 |
154 /** |
154 /** |
155 Sets the number of database security entries. |
155 Sets the number of database security entries. |
156 */ |
156 */ |
157 void CSqlSecurityPolicy::SetCount(TInt aCount) |
157 void CSqlSecurityPolicy::SetCount(TInt aCount) |
158 { |
158 { |
159 __ASSERT_DEBUG(aCount >= 0, __SQLPANIC(ESqlPanicBadArgument)); |
159 __SQLASSERT(aCount >= 0, ESqlPanicBadArgument); |
160 RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
160 RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
161 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
161 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
162 *reinterpret_cast <TInt*> (reinterpret_cast <TUint8*> (begin) + (begin + CSqlSecurityPolicy::ECountIdx)->iPos) = aCount; |
162 *reinterpret_cast <TInt*> (reinterpret_cast <TUint8*> (begin) + (begin + CSqlSecurityPolicy::ECountIdx)->iPos) = aCount; |
163 } |
163 } |
164 |
164 |
165 /** |
165 /** |
166 Sets the default policy. |
166 Sets the default policy. |
167 */ |
167 */ |
168 void CSqlSecurityPolicy::SetDefaultPolicy(const TSecurityPolicy& aPolicy) |
168 void CSqlSecurityPolicy::SetDefaultPolicy(const TSecurityPolicy& aPolicy) |
169 { |
169 { |
170 RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
170 RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
171 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
171 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
172 CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDefaultPolicyIdx); |
172 CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDefaultPolicyIdx); |
173 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
173 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
174 item->iPolicy[0] = aPolicy; |
174 item->iPolicy[0] = aPolicy; |
175 } |
175 } |
176 |
176 |
177 /** |
177 /** |
178 @param aPolicyType Database security policy type: RSqlSecurityPolicy::ESchemaPolicy, |
178 @param aPolicyType Database security policy type: RSqlSecurityPolicy::ESchemaPolicy, |
182 @panic SqlDb 4 In _DEBUG mode. Invalid policy type. |
182 @panic SqlDb 4 In _DEBUG mode. Invalid policy type. |
183 */ |
183 */ |
184 void CSqlSecurityPolicy::SetDbPolicy(RSqlSecurityPolicy::TPolicyType aPolicyType, const TSecurityPolicy& aPolicy) |
184 void CSqlSecurityPolicy::SetDbPolicy(RSqlSecurityPolicy::TPolicyType aPolicyType, const TSecurityPolicy& aPolicy) |
185 { |
185 { |
186 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
186 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
187 __ASSERT_DEBUG((TUint)KPolicyIndex < EPolicyTypeCount, __SQLPANIC(ESqlPanicBadArgument)); |
187 __SQLASSERT((TUint)KPolicyIndex < EPolicyTypeCount, ESqlPanicBadArgument); |
188 RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
188 RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
189 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
189 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
190 CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDbPolicyIdx); |
190 CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDbPolicyIdx); |
191 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
191 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
192 //KPolicyIndex value is tested at the beginning of the function |
192 //KPolicyIndex value is tested at the beginning of the function |
193 //coverity[overrun-local] |
193 //coverity[overrun-local] |
194 item->iPolicy[KPolicyIndex] = aPolicy; |
194 item->iPolicy[KPolicyIndex] = aPolicy; |
195 } |
195 } |
196 |
196 |
218 */ |
218 */ |
219 TInt CSqlSecurityPolicy::SetPolicy(RSqlSecurityPolicy::TObjectType aObjectType, const TDesC& aObjectName, |
219 TInt CSqlSecurityPolicy::SetPolicy(RSqlSecurityPolicy::TObjectType aObjectType, const TDesC& aObjectName, |
220 RSqlSecurityPolicy::TPolicyType aPolicyType, const TSecurityPolicy& aPolicy) |
220 RSqlSecurityPolicy::TPolicyType aPolicyType, const TSecurityPolicy& aPolicy) |
221 { |
221 { |
222 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
222 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
223 __ASSERT_DEBUG((TUint)KPolicyIndex < EPolicyTypeCount, __SQLPANIC(ESqlPanicBadArgument)); |
223 __SQLASSERT((TUint)KPolicyIndex < EPolicyTypeCount, ESqlPanicBadArgument); |
224 __ASSERT_DEBUG(aObjectName.Length() > 0, __SQLPANIC(ESqlPanicBadArgument)); |
224 __SQLASSERT(aObjectName.Length() > 0, ESqlPanicBadArgument); |
225 CSqlSecurityPolicy::TPolicyItem* item = const_cast <CSqlSecurityPolicy::TPolicyItem*> (FindPolicyItemPtr(aObjectType, aObjectName)); |
225 CSqlSecurityPolicy::TPolicyItem* item = const_cast <CSqlSecurityPolicy::TPolicyItem*> (FindPolicyItemPtr(aObjectType, aObjectName)); |
226 if(item) |
226 if(item) |
227 {//There is a field in the flat buffer for {aObjectType, aObjectName}. Set the policy. |
227 {//There is a field in the flat buffer for {aObjectType, aObjectName}. Set the policy. |
228 //KPolicyIndex value is tested at the beginning of the function |
228 //KPolicyIndex value is tested at the beginning of the function |
229 //coverity[overrun-local] |
229 //coverity[overrun-local] |
244 return KErrNoMemory; |
244 return KErrNoMemory; |
245 } |
245 } |
246 item = reinterpret_cast <CSqlSecurityPolicy::TPolicyItem*> (buf); |
246 item = reinterpret_cast <CSqlSecurityPolicy::TPolicyItem*> (buf); |
247 //coverity[DEADCODE] |
247 //coverity[DEADCODE] |
248 //The ASSERT might be useful in catching future defect in this function |
248 //The ASSERT might be useful in catching future defect in this function |
249 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
249 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
250 TSecurityPolicy defaultPolicy = DefaultPolicy(); |
250 TSecurityPolicy defaultPolicy = DefaultPolicy(); |
251 for(TInt i=0;i<CSqlSecurityPolicy::EPolicyTypeCount;++i) |
251 for(TInt i=0;i<CSqlSecurityPolicy::EPolicyTypeCount;++i) |
252 { |
252 { |
253 item->iPolicy[i] = defaultPolicy; |
253 item->iPolicy[i] = defaultPolicy; |
254 } |
254 } |
271 @return The default security policy. |
271 @return The default security policy. |
272 */ |
272 */ |
273 TSecurityPolicy CSqlSecurityPolicy::DefaultPolicy() const |
273 TSecurityPolicy CSqlSecurityPolicy::DefaultPolicy() const |
274 { |
274 { |
275 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
275 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
276 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
276 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
277 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDefaultPolicyIdx); |
277 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDefaultPolicyIdx); |
278 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
278 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
279 return item->iPolicy[0]; |
279 return item->iPolicy[0]; |
280 } |
280 } |
281 |
281 |
282 /** |
282 /** |
283 @param aPolicyType Database security policy type: RSqlSecurityPolicy::ESchemaPolicy, |
283 @param aPolicyType Database security policy type: RSqlSecurityPolicy::ESchemaPolicy, |
290 @panic SqlDb 4 In _DEBUG mode. Invalid policy type. |
290 @panic SqlDb 4 In _DEBUG mode. Invalid policy type. |
291 */ |
291 */ |
292 TSecurityPolicy CSqlSecurityPolicy::DbPolicy(RSqlSecurityPolicy::TPolicyType aPolicyType) const |
292 TSecurityPolicy CSqlSecurityPolicy::DbPolicy(RSqlSecurityPolicy::TPolicyType aPolicyType) const |
293 { |
293 { |
294 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
294 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
295 __ASSERT_DEBUG((TUint)KPolicyIndex < EPolicyTypeCount, __SQLPANIC(ESqlPanicBadArgument)); |
295 __SQLASSERT((TUint)KPolicyIndex < EPolicyTypeCount, ESqlPanicBadArgument); |
296 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
296 const RSqlBufFlat::TCell* begin = iBufFlat.Header(); |
297 __ASSERT_DEBUG(begin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
297 __SQLASSERT(begin != NULL, ESqlPanicInternalError); |
298 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDbPolicyIdx); |
298 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(begin, begin + CSqlSecurityPolicy::EDbPolicyIdx); |
299 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
299 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
300 //KPolicyIndex value is tested at the beginning of the function |
300 //KPolicyIndex value is tested at the beginning of the function |
301 //coverity[overrun-local] |
301 //coverity[overrun-local] |
302 return item->iPolicy[KPolicyIndex]; |
302 return item->iPolicy[KPolicyIndex]; |
303 } |
303 } |
304 |
304 |
322 */ |
322 */ |
323 TSecurityPolicy CSqlSecurityPolicy::Policy(RSqlSecurityPolicy::TObjectType aObjectType, |
323 TSecurityPolicy CSqlSecurityPolicy::Policy(RSqlSecurityPolicy::TObjectType aObjectType, |
324 const TDesC& aObjectName, RSqlSecurityPolicy::TPolicyType aPolicyType) |
324 const TDesC& aObjectName, RSqlSecurityPolicy::TPolicyType aPolicyType) |
325 { |
325 { |
326 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
326 const TInt KPolicyIndex = CSqlSecurityPolicy::PolicyType2Index(aPolicyType); |
327 __ASSERT_DEBUG((TUint)KPolicyIndex < EPolicyTypeCount, __SQLPANIC(ESqlPanicBadArgument)); |
327 __SQLASSERT((TUint)KPolicyIndex < EPolicyTypeCount, ESqlPanicBadArgument); |
328 __ASSERT_DEBUG(aObjectName.Length() > 0, __SQLPANIC(ESqlPanicBadArgument)); |
328 __SQLASSERT(aObjectName.Length() > 0, ESqlPanicBadArgument); |
329 const CSqlSecurityPolicy::TPolicyItem* item = FindPolicyItemPtr(aObjectType, aObjectName); |
329 const CSqlSecurityPolicy::TPolicyItem* item = FindPolicyItemPtr(aObjectType, aObjectName); |
330 //KPolicyIndex value is tested at the beginning of the function |
330 //KPolicyIndex value is tested at the beginning of the function |
331 //coverity[overrun-local] |
331 //coverity[overrun-local] |
332 return item ? item->iPolicy[KPolicyIndex] : DefaultPolicy(); |
332 return item ? item->iPolicy[KPolicyIndex] : DefaultPolicy(); |
333 } |
333 } |
375 iBegin(aSqlSecurityPolicy.iBufFlat.Header()), |
375 iBegin(aSqlSecurityPolicy.iBufFlat.Header()), |
376 iCurrent(iBegin + CSqlSecurityPolicy::EDbPolicyIdx),//ignore the default and database policies |
376 iCurrent(iBegin + CSqlSecurityPolicy::EDbPolicyIdx),//ignore the default and database policies |
377 iEnd(iBegin + aSqlSecurityPolicy.Count()), |
377 iEnd(iBegin + aSqlSecurityPolicy.Count()), |
378 iCurPolicyIdx(CSqlSecurityPolicy::EPolicyTypeCount) |
378 iCurPolicyIdx(CSqlSecurityPolicy::EPolicyTypeCount) |
379 { |
379 { |
380 __ASSERT_DEBUG(iBegin != NULL, __SQLPANIC(ESqlPanicInternalError)); |
380 __SQLASSERT(iBegin != NULL, ESqlPanicInternalError); |
381 } |
381 } |
382 |
382 |
383 /** |
383 /** |
384 Moves the iterator one step forward and gives a read-only access to the next database object security policy. |
384 Moves the iterator one step forward and gives a read-only access to the next database object security policy. |
385 |
385 |
400 { |
400 { |
401 return EFalse; |
401 return EFalse; |
402 } |
402 } |
403 } |
403 } |
404 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(iBegin, iCurrent); |
404 const CSqlSecurityPolicy::TPolicyItem* item = CSqlSecurityPolicy::PolicyItemPtr(iBegin, iCurrent); |
405 __ASSERT_DEBUG(item != NULL, __SQLPANIC(ESqlPanicInternalError)); |
405 __SQLASSERT(item != NULL, ESqlPanicInternalError); |
406 aObjectType = static_cast <RSqlSecurityPolicy::TObjectType> (iCurrent->Type()); |
406 aObjectType = static_cast <RSqlSecurityPolicy::TObjectType> (iCurrent->Type()); |
407 aPolicyType = static_cast <RSqlSecurityPolicy::TPolicyType> (iCurPolicyIdx); |
407 aPolicyType = static_cast <RSqlSecurityPolicy::TPolicyType> (iCurPolicyIdx); |
408 aPolicy = item->iPolicy[iCurPolicyIdx]; |
408 aPolicy = item->iPolicy[iCurPolicyIdx]; |
409 aObjectName.Set(item->NamePtr(), item->NameSize()); |
409 aObjectName.Set(item->NamePtr(), item->NameSize()); |
410 return ETrue; |
410 return ETrue; |