github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/auth2.test (about)

     1  # 2006 Aug 24
     2  #
     3  # The author disclaims copyright to this source code.  In place of
     4  # a legal notice, here is a blessing:
     5  #
     6  #    May you do good and not evil.
     7  #    May you find forgiveness for yourself and forgive others.
     8  #    May you share freely, never taking more than you give.
     9  #
    10  #***********************************************************************
    11  # This file implements regression tests for SQLite library.  The
    12  # focus of this script is testing the sqlite3_set_authorizer() API
    13  # and related functionality.
    14  #
    15  # $Id: auth2.test,v 1.3 2008/07/02 13:13:53 danielk1977 Exp $
    16  #
    17  
    18  set testdir [file dirname $argv0]
    19  source $testdir/tester.tcl
    20  
    21  # disable this test if the SQLITE_OMIT_AUTHORIZATION macro is
    22  # defined during compilation.
    23  if {[catch {db auth {}} msg]} {
    24    finish_test
    25    return
    26  }
    27  
    28  do_test auth2-1.1 {
    29    execsql {
    30      CREATE TABLE t1(a,b,c);
    31      INSERT INTO t1 VALUES(1,2,3);
    32    }
    33    set ::flist {}
    34    proc auth {code arg1 arg2 arg3 arg4 args} {
    35      if {$code=="SQLITE_FUNCTION"} {
    36        lappend ::flist $arg2
    37        if {$arg2=="max"} {
    38          return SQLITE_DENY
    39        } elseif {$arg2=="min"} {
    40          return SQLITE_IGNORE
    41        } else {
    42          return SQLITE_OK
    43        }
    44      }
    45      return SQLITE_OK
    46    }
    47    db authorizer ::auth
    48    catchsql {SELECT max(a,b,c) FROM t1}
    49  } {1 {not authorized to use function: max}}
    50  do_test auth2-1.2 {
    51    set ::flist
    52  } max
    53  do_test auth2-1.3 {
    54    set ::flist {}
    55    catchsql {SELECT min(a,b,c) FROM t1}
    56  } {0 {{}}}
    57  do_test auth2-1.4 {
    58    set ::flist
    59  } min
    60  do_test auth2-1.5 {
    61    set ::flist {}
    62    catchsql {SELECT coalesce(min(a,b,c),999) FROM t1}
    63  } {0 999}
    64  do_test auth2-1.6 {
    65    set ::flist
    66  } {coalesce min}
    67  do_test auth2-1.7 {
    68    set ::flist {}
    69    catchsql {SELECT coalesce(a,b,c) FROM t1}
    70  } {0 1}
    71  do_test auth2-1.8 {
    72    set ::flist
    73  } coalesce
    74  
    75  # Make sure the authorizer is not called when parsing the schema
    76  # and when computing the result set of a view.
    77  #
    78  db close
    79  sqlite3 db test.db
    80  sqlite3 db2 test.db
    81  proc auth {args} {
    82    global authargs
    83    append authargs [lrange $args 0 4]\n
    84    return SQLITE_OK
    85  }
    86  db auth auth
    87  do_test auth2-2.1 {
    88    set ::authargs {}
    89    db eval {
    90      CREATE TABLE t2(x,y,z);
    91    }
    92    set ::authargs
    93  } {SQLITE_INSERT sqlite_master {} main {}
    94  SQLITE_CREATE_TABLE t2 {} main {}
    95  SQLITE_UPDATE sqlite_master type main {}
    96  SQLITE_UPDATE sqlite_master name main {}
    97  SQLITE_UPDATE sqlite_master tbl_name main {}
    98  SQLITE_UPDATE sqlite_master rootpage main {}
    99  SQLITE_UPDATE sqlite_master sql main {}
   100  SQLITE_READ sqlite_master ROWID main {}
   101  }
   102  do_test auth2-2.2 {
   103    set ::authargs {}
   104    db eval {
   105      CREATE VIEW v2 AS SELECT x+y AS a, y+z AS b from t2;
   106    }
   107    set ::authargs
   108  } {SQLITE_INSERT sqlite_master {} main {}
   109  SQLITE_CREATE_VIEW v2 {} main {}
   110  SQLITE_UPDATE sqlite_master type main {}
   111  SQLITE_UPDATE sqlite_master name main {}
   112  SQLITE_UPDATE sqlite_master tbl_name main {}
   113  SQLITE_UPDATE sqlite_master rootpage main {}
   114  SQLITE_UPDATE sqlite_master sql main {}
   115  SQLITE_READ sqlite_master ROWID main {}
   116  }
   117  do_test auth2-2.3 {
   118    set ::authargs {}
   119    db eval {
   120      SELECT a, b FROM v2;
   121    }
   122    set ::authargs
   123  } {SQLITE_SELECT {} {} {} {}
   124  SQLITE_READ t2 x main v2
   125  SQLITE_READ t2 y main v2
   126  SQLITE_READ t2 y main v2
   127  SQLITE_READ t2 z main v2
   128  SQLITE_READ v2 a main {}
   129  SQLITE_READ v2 b main {}
   130  SQLITE_SELECT {} {} {} v2
   131  }
   132  do_test auth2-2.4 {
   133    db2 eval {
   134      CREATE TABLE t3(p,q,r);
   135    }
   136    set ::authargs {}
   137    db eval {
   138      SELECT b, a FROM v2;
   139    }
   140    set ::authargs
   141  } {SQLITE_SELECT {} {} {} {}
   142  SQLITE_READ t2 x main v2
   143  SQLITE_READ t2 y main v2
   144  SQLITE_READ t2 y main v2
   145  SQLITE_READ t2 z main v2
   146  SQLITE_READ v2 b main {}
   147  SQLITE_READ v2 a main {}
   148  SQLITE_SELECT {} {} {} v2
   149  SQLITE_SELECT {} {} {} {}
   150  SQLITE_READ t2 x main v2
   151  SQLITE_READ t2 y main v2
   152  SQLITE_READ t2 y main v2
   153  SQLITE_READ t2 z main v2
   154  SQLITE_READ v2 b main {}
   155  SQLITE_READ v2 a main {}
   156  SQLITE_SELECT {} {} {} v2
   157  }
   158  db2 close
   159  
   160  finish_test