persistentstorage/sql/SRC/Server/SqlSrvAuthorizer.cpp
branchRCL_3
changeset 24 cc28652e0254
parent 23 26645d81f48d
equal deleted inserted replaced
23:26645d81f48d 24:cc28652e0254
   152 	};
   152 	};
   153 
   153 
   154 //The function returns the argument number where the table name is.
   154 //The function returns the argument number where the table name is.
   155 inline TInt DbOp2TableNameArgIndex(TInt aDbOpType)
   155 inline TInt DbOp2TableNameArgIndex(TInt aDbOpType)
   156 	{
   156 	{
   157 	__ASSERT_DEBUG(aDbOpType > 0 && aDbOpType <= SQLITE_FUNCTION, __SQLPANIC2(ESqlPanicInternalError));
   157 	__SQLASSERT(aDbOpType > 0 && aDbOpType <= SQLITE_FUNCTION, ESqlPanicInternalError);
   158 	return KTableNameArgIndex[aDbOpType];
   158 	return KTableNameArgIndex[aDbOpType];
   159 	}
   159 	}
   160 
   160 
   161 //The function returns the table name, which may be in aDbObjName1 or aDbObjName2, depending on aDbOpType value.
   161 //The function returns the table name, which may be in aDbObjName1 or aDbObjName2, depending on aDbOpType value.
   162 //The return value is "const char" pointer to a zero terminated string.
   162 //The return value is "const char" pointer to a zero terminated string.
   163 inline const char* DbOp2TableName(TInt aDbOpType, const char* aDbObjName1, const char* aDbObjName2)
   163 inline const char* DbOp2TableName(TInt aDbOpType, const char* aDbObjName1, const char* aDbObjName2)
   164 	{
   164 	{
   165 	TInt pos = DbOp2TableNameArgIndex(aDbOpType);
   165 	TInt pos = DbOp2TableNameArgIndex(aDbOpType);
   166 	if(pos == 2)
   166 	if(pos == 2)
   167 		{
   167 		{
   168 		__ASSERT_DEBUG(aDbObjName2 != NULL, __SQLPANIC2(ESqlPanicInternalError));
   168 		__SQLASSERT(aDbObjName2 != NULL, ESqlPanicInternalError);
   169 		return aDbObjName2;
   169 		return aDbObjName2;
   170 		}
   170 		}
   171 	else if(pos == 1)
   171 	else if(pos == 1)
   172 		{
   172 		{
   173 		__ASSERT_DEBUG(aDbObjName1 != NULL, __SQLPANIC2(ESqlPanicInternalError));
   173 		__SQLASSERT(aDbObjName1 != NULL, ESqlPanicInternalError);
   174 		return aDbObjName1;
   174 		return aDbObjName1;
   175 		}
   175 		}
   176 	return NULL;//Some database operations do not use table name
   176 	return NULL;//Some database operations do not use table name
   177 	}
   177 	}
   178 
   178 
   180 //The return value is "const char" pointer to a zero terminated string.
   180 //The return value is "const char" pointer to a zero terminated string.
   181 inline const char* DbOp2DbName(TInt aDbOpType, const char* aDbObjName1, const char* aDbName)
   181 inline const char* DbOp2DbName(TInt aDbOpType, const char* aDbObjName1, const char* aDbName)
   182 	{
   182 	{
   183 	if(aDbOpType == SQLITE_DETACH || aDbOpType == SQLITE_ALTER_TABLE)
   183 	if(aDbOpType == SQLITE_DETACH || aDbOpType == SQLITE_ALTER_TABLE)
   184 		{
   184 		{
   185 		__ASSERT_DEBUG(aDbObjName1 != NULL, __SQLPANIC2(ESqlPanicInternalError));
   185 		__SQLASSERT(aDbObjName1 != NULL, ESqlPanicInternalError);
   186 		return aDbObjName1;
   186 		return aDbObjName1;
   187 		}
   187 		}
   188 	return aDbName;//It may be NULL for some database operations
   188 	return aDbName;//It may be NULL for some database operations
   189 	}
   189 	}
   190 
   190 
   296 //      case SQLITE_DROP_TEMP_VIEW://        View Name       NULL
   296 //      case SQLITE_DROP_TEMP_VIEW://        View Name       NULL
   297 //"CREATE VIRTUAL TABLE" and "DROP VIRTUAL TABLE" sql statements are not supported
   297 //"CREATE VIRTUAL TABLE" and "DROP VIRTUAL TABLE" sql statements are not supported
   298 //		case SQLITE_CREATE_VTABLE:
   298 //		case SQLITE_CREATE_VTABLE:
   299 //		case SQLITE_DROP_VTABLE:
   299 //		case SQLITE_DROP_VTABLE:
   300 		default:
   300 		default:
   301 			__ASSERT_DEBUG(EFalse, __SQLPANIC2(ESqlPanicInternalError));
   301 			__SQLASSERT(EFalse, ESqlPanicInternalError);
   302 			break;
   302 			break;
   303 			}
   303 			}
   304 	return res;
   304 	return res;
   305 	}
   305 	}
   306 
   306 
   426 //      case SQLITE_DROP_TEMP_VIEW://        View Name       NULL            
   426 //      case SQLITE_DROP_TEMP_VIEW://        View Name       NULL            
   427 //"CREATE VIRTUAL TABLE" and "DROP VIRTUAL TABLE" sql statements are not supported
   427 //"CREATE VIRTUAL TABLE" and "DROP VIRTUAL TABLE" sql statements are not supported
   428 //		case SQLITE_CREATE_VTABLE:
   428 //		case SQLITE_CREATE_VTABLE:
   429 //		case SQLITE_DROP_VTABLE:
   429 //		case SQLITE_DROP_VTABLE:
   430 		default:
   430 		default:
   431 			__ASSERT_DEBUG(EFalse, __SQLPANIC2(ESqlPanicInternalError));
   431 			__SQLASSERT(EFalse, ESqlPanicInternalError);
   432 			break;
   432 			break;
   433 		}
   433 		}
   434 	return res;
   434 	return res;
   435 	}
   435 	}
   436 
   436 
   501 TInt CSqlSrvDatabase::AuthorizeCallback(void* aDb, TInt aDbOpType, 
   501 TInt CSqlSrvDatabase::AuthorizeCallback(void* aDb, TInt aDbOpType, 
   502 										const char* aDbObjName1, const char* aDbObjName2, 
   502 										const char* aDbObjName1, const char* aDbObjName2, 
   503 										const char* aDbName, const char* aTrgOrViewName)
   503 										const char* aDbName, const char* aTrgOrViewName)
   504 	{
   504 	{
   505 	UNUSED_ARG(aTrgOrViewName);
   505 	UNUSED_ARG(aTrgOrViewName);
   506  	__ASSERT_DEBUG(aDb != NULL, __SQLPANIC2(ESqlPanicBadArgument));
   506  	__SQLASSERT(aDb != NULL, ESqlPanicBadArgument);
   507 	
   507 	
   508 #ifdef _SQL_AUTHORIZER_TRACE_ENABLED
   508 #ifdef _NOTIFY
   509     enum TDbOpType {EOpCreateIndex = 1, EOpCreateTable, EOpCreateTempIndex, EOpCreateTempTable, 
   509     enum TDbOpType {EOpCreateIndex = 1, EOpCreateTable, EOpCreateTempIndex, EOpCreateTempTable, 
   510         EOpCreateTempTrigger, EOpCreateTempView, EOpCreateTrigger, EOpCreateView, EOpDelete, EOpDropIndex, 
   510         EOpCreateTempTrigger, EOpCreateTempView, EOpCreateTrigger, EOpCreateView, EOpDelete, EOpDropIndex, 
   511         EOpDropTable, EOpDropTempIndex, EOpDropTempTable, EOpDropTempTrigger, EOpDropTempView, EOpDropTrigger,
   511         EOpDropTable, EOpDropTempIndex, EOpDropTempTable, EOpDropTempTrigger, EOpDropTempView, EOpDropTrigger,
   512 		EOpDropView, EOpInsert, EOpPragma, EOpRead, EOpSelect, EOpTransaction, EOpUpdate, EOpAttach, EOpDettach,
   512 		EOpDropView, EOpInsert, EOpPragma, EOpRead, EOpSelect, EOpTransaction, EOpUpdate, EOpAttach, EOpDettach,
   513 		EOpAlterTable, EOpReindex, EOpAnalyze, EOpCreateVTable, EOpDropVTable, EOpFunctionCall};
   513 		EOpAlterTable, EOpReindex, EOpAnalyze, EOpCreateVTable, EOpDropVTable, EOpFunctionCall};
   514 	TDbOpType dbOpType = static_cast <TDbOpType> (aDbOpType);//can be seen now in the debugger
   514 	TDbOpType dbOpType = static_cast <TDbOpType> (aDbOpType);//can be seen now in the debugger
   515 	::PrintAuthorizerArguments(dbOpType, aDbObjName1, aDbObjName2, aDbName, aTrgOrViewName);
   515 	::PrintAuthorizerArguments(dbOpType, aDbObjName1, aDbObjName2, aDbName, aTrgOrViewName);
   516 #endif
   516 #endif//_NOTIFY
   517 
   517 
   518 	CSqlSrvDatabase& db = *static_cast <CSqlSrvDatabase*> (aDb);
   518 	CSqlSrvDatabase& db = *static_cast <CSqlSrvDatabase*> (aDb);
   519 
   519 
   520 	//1. If the authorizer is currently disabled - return SQLITE_OK.
   520 	//1. If the authorizer is currently disabled - return SQLITE_OK.
   521 	//   (This happens when a database is attached/detached)
   521 	//   (This happens when a database is attached/detached)