mirror of
				https://github.com/tursodatabase/libsql.git
				synced 2025-11-04 14:09:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
** 2014-09-21
 | 
						|
**
 | 
						|
** The author disclaims copyright to this source code.  In place of
 | 
						|
** a legal notice, here is a blessing:
 | 
						|
**
 | 
						|
**    May you do good and not evil.
 | 
						|
**    May you find forgiveness for yourself and forgive others.
 | 
						|
**    May you share freely, never taking more than you give.
 | 
						|
**
 | 
						|
******************************************************************************
 | 
						|
**
 | 
						|
** This SQLite extension adds a debug "authorizer" callback to the database
 | 
						|
** connection.  The callback merely writes the authorization request to
 | 
						|
** standard output and returns SQLITE_OK.
 | 
						|
**
 | 
						|
** This extension can be used (for example) in the command-line shell to
 | 
						|
** trace the operation of the authorizer.
 | 
						|
*/
 | 
						|
#include "sqlite3ext.h"
 | 
						|
SQLITE_EXTENSION_INIT1
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
/*
 | 
						|
** Display the authorization request
 | 
						|
*/
 | 
						|
static int authCallback(
 | 
						|
  void *pClientData,
 | 
						|
  int op,
 | 
						|
  const char *z1,
 | 
						|
  const char *z2,
 | 
						|
  const char *z3,
 | 
						|
  const char *z4
 | 
						|
){
 | 
						|
  const char *zOp;
 | 
						|
  char zOpSpace[50];
 | 
						|
  switch( op ){
 | 
						|
    case SQLITE_CREATE_INDEX:        zOp = "CREATE_INDEX";        break;
 | 
						|
    case SQLITE_CREATE_TABLE:        zOp = "CREATE_TABLE";        break;
 | 
						|
    case SQLITE_CREATE_TEMP_INDEX:   zOp = "CREATE_TEMP_INDEX";   break;
 | 
						|
    case SQLITE_CREATE_TEMP_TABLE:   zOp = "CREATE_TEMP_TABLE";   break;
 | 
						|
    case SQLITE_CREATE_TEMP_TRIGGER: zOp = "CREATE_TEMP_TRIGGER"; break;
 | 
						|
    case SQLITE_CREATE_TEMP_VIEW:    zOp = "CREATE_TEMP_VIEW";    break;
 | 
						|
    case SQLITE_CREATE_TRIGGER:      zOp = "CREATE_TRIGGER";      break;
 | 
						|
    case SQLITE_CREATE_VIEW:         zOp = "CREATE_VIEW";         break;
 | 
						|
    case SQLITE_DELETE:              zOp = "DELETE";              break;
 | 
						|
    case SQLITE_DROP_INDEX:          zOp = "DROP_INDEX";          break;
 | 
						|
    case SQLITE_DROP_TABLE:          zOp = "DROP_TABLE";          break;
 | 
						|
    case SQLITE_DROP_TEMP_INDEX:     zOp = "DROP_TEMP_INDEX";     break;
 | 
						|
    case SQLITE_DROP_TEMP_TABLE:     zOp = "DROP_TEMP_TABLE";     break;
 | 
						|
    case SQLITE_DROP_TEMP_TRIGGER:   zOp = "DROP_TEMP_TRIGGER";   break;
 | 
						|
    case SQLITE_DROP_TEMP_VIEW:      zOp = "DROP_TEMP_VIEW";      break;
 | 
						|
    case SQLITE_DROP_TRIGGER:        zOp = "DROP_TRIGGER";        break;
 | 
						|
    case SQLITE_DROP_VIEW:           zOp = "DROP_VIEW";           break;
 | 
						|
    case SQLITE_INSERT:              zOp = "INSERT";              break;
 | 
						|
    case SQLITE_PRAGMA:              zOp = "PRAGMA";              break;
 | 
						|
    case SQLITE_READ:                zOp = "READ";                break;
 | 
						|
    case SQLITE_SELECT:              zOp = "SELECT";              break;
 | 
						|
    case SQLITE_TRANSACTION:         zOp = "TRANSACTION";         break;
 | 
						|
    case SQLITE_UPDATE:              zOp = "UPDATE";              break;
 | 
						|
    case SQLITE_ATTACH:              zOp = "ATTACH";              break;
 | 
						|
    case SQLITE_DETACH:              zOp = "DETACH";              break;
 | 
						|
    case SQLITE_ALTER_TABLE:         zOp = "ALTER_TABLE";         break;
 | 
						|
    case SQLITE_REINDEX:             zOp = "REINDEX";             break;
 | 
						|
    case SQLITE_ANALYZE:             zOp = "ANALYZE";             break;
 | 
						|
    case SQLITE_CREATE_VTABLE:       zOp = "CREATE_VTABLE";       break;
 | 
						|
    case SQLITE_DROP_VTABLE:         zOp = "DROP_VTABLE";         break;
 | 
						|
    case SQLITE_FUNCTION:            zOp = "FUNCTION";            break;
 | 
						|
    case SQLITE_SAVEPOINT:           zOp = "SAVEPOINT";           break;
 | 
						|
    case SQLITE_COPY:                zOp = "COPY";                break;
 | 
						|
    case SQLITE_RECURSIVE:           zOp = "RECURSIVE";           break;
 | 
						|
 | 
						|
 | 
						|
    default: {
 | 
						|
      sqlite3_snprintf(sizeof(zOpSpace), zOpSpace, "%d", op);
 | 
						|
      zOp = zOpSpace;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  if( z1==0 ) z1 = "NULL";
 | 
						|
  if( z2==0 ) z2 = "NULL";
 | 
						|
  if( z3==0 ) z3 = "NULL";
 | 
						|
  if( z4==0 ) z4 = "NULL";
 | 
						|
  printf("AUTH: %s,%s,%s,%s,%s\n", zOp, z1, z2, z3, z4);
 | 
						|
  return SQLITE_OK;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#ifdef _WIN32
 | 
						|
__declspec(dllexport)
 | 
						|
#endif
 | 
						|
int sqlite3_showauth_init(
 | 
						|
  sqlite3 *db, 
 | 
						|
  char **pzErrMsg, 
 | 
						|
  const sqlite3_api_routines *pApi
 | 
						|
){
 | 
						|
  int rc = SQLITE_OK;
 | 
						|
  SQLITE_EXTENSION_INIT2(pApi);
 | 
						|
  (void)pzErrMsg;  /* Unused parameter */
 | 
						|
  rc = sqlite3_set_authorizer(db, authCallback, 0);
 | 
						|
  return rc;
 | 
						|
}
 |