persistentstorage/sql/SRC/Server/SqlSrvAuthorizer.cpp
branchRCL_3
changeset 23 26645d81f48d
parent 12 6b6fd149daa2
child 24 cc28652e0254
equal deleted inserted replaced
21:28839de615b4 23:26645d81f48d
   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 	__SQLASSERT(aDbOpType > 0 && aDbOpType <= SQLITE_FUNCTION, ESqlPanicInternalError);
   157 	__ASSERT_DEBUG(aDbOpType > 0 && aDbOpType <= SQLITE_FUNCTION, __SQLPANIC2(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 		__SQLASSERT(aDbObjName2 != NULL, ESqlPanicInternalError);
   168 		__ASSERT_DEBUG(aDbObjName2 != NULL, __SQLPANIC2(ESqlPanicInternalError));
   169 		return aDbObjName2;
   169 		return aDbObjName2;
   170 		}
   170 		}
   171 	else if(pos == 1)
   171 	else if(pos == 1)
   172 		{
   172 		{
   173 		__SQLASSERT(aDbObjName1 != NULL, ESqlPanicInternalError);
   173 		__ASSERT_DEBUG(aDbObjName1 != NULL, __SQLPANIC2(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 		__SQLASSERT(aDbObjName1 != NULL, ESqlPanicInternalError);
   185 		__ASSERT_DEBUG(aDbObjName1 != NULL, __SQLPANIC2(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 			__SQLASSERT(EFalse, ESqlPanicInternalError);
   301 			__ASSERT_DEBUG(EFalse, __SQLPANIC2(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 			__SQLASSERT(EFalse, ESqlPanicInternalError);
   431 			__ASSERT_DEBUG(EFalse, __SQLPANIC2(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  	__SQLASSERT(aDb != NULL, ESqlPanicBadArgument);
   506  	__ASSERT_DEBUG(aDb != NULL, __SQLPANIC2(ESqlPanicBadArgument));
   507 	
   507 	
   508 #ifdef _NOTIFY
   508 #ifdef _SQL_AUTHORIZER_TRACE_ENABLED
   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//_NOTIFY
   516 #endif
   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)