亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? auth.c

?? 這是一個嵌入式系統上運行的輕量級數據庫
?? C
字號:
/*** 2003 January 11**** 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 file contains code used to implement the sqlite_set_authorizer()** API.  This facility is an optional feature of the library.  Embedded** systems that do not need this facility may omit it by recompiling** the library with -DSQLITE_OMIT_AUTHORIZATION=1**** $Id: auth.c,v 1.12.2.2 2004/09/09 13:54:30 drh Exp $*/#include "sqliteInt.h"/*** All of the code in this file may be omitted by defining a single** macro.*/#ifndef SQLITE_OMIT_AUTHORIZATION/*** Set or clear the access authorization function.**** The access authorization function is be called during the compilation** phase to verify that the user has read and/or write access permission on** various fields of the database.  The first argument to the auth function** is a copy of the 3rd argument to this routine.  The second argument** to the auth function is one of these constants:****       SQLITE_COPY**       SQLITE_CREATE_INDEX**       SQLITE_CREATE_TABLE**       SQLITE_CREATE_TEMP_INDEX**       SQLITE_CREATE_TEMP_TABLE**       SQLITE_CREATE_TEMP_TRIGGER**       SQLITE_CREATE_TEMP_VIEW**       SQLITE_CREATE_TRIGGER**       SQLITE_CREATE_VIEW**       SQLITE_DELETE**       SQLITE_DROP_INDEX**       SQLITE_DROP_TABLE**       SQLITE_DROP_TEMP_INDEX**       SQLITE_DROP_TEMP_TABLE**       SQLITE_DROP_TEMP_TRIGGER**       SQLITE_DROP_TEMP_VIEW**       SQLITE_DROP_TRIGGER**       SQLITE_DROP_VIEW**       SQLITE_INSERT**       SQLITE_PRAGMA**       SQLITE_READ**       SQLITE_SELECT**       SQLITE_TRANSACTION**       SQLITE_UPDATE**** The third and fourth arguments to the auth function are the name of** the table and the column that are being accessed.  The auth function** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE.  If** SQLITE_OK is returned, it means that access is allowed.  SQLITE_DENY** means that the SQL statement will never-run - the sqlite_exec() call** will return with an error.  SQLITE_IGNORE means that the SQL statement** should run but attempts to read the specified column will return NULL** and attempts to write the column will be ignored.**** Setting the auth function to NULL disables this hook.  The default** setting of the auth function is NULL.*/int sqlite_set_authorizer(  sqlite *db,  int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),  void *pArg){  db->xAuth = xAuth;  db->pAuthArg = pArg;  return SQLITE_OK;}/*** Write an error message into pParse->zErrMsg that explains that the** user-supplied authorization function returned an illegal value.*/static void sqliteAuthBadReturnCode(Parse *pParse, int rc){  sqliteErrorMsg(pParse, "illegal return value (%d) from the "    "authorization function - should be SQLITE_OK, SQLITE_IGNORE, "    "or SQLITE_DENY", rc);  pParse->rc = SQLITE_MISUSE;}/*** The pExpr should be a TK_COLUMN expression.  The table referred to** is in pTabList or else it is the NEW or OLD table of a trigger.  ** Check to see if it is OK to read this particular column.**** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN ** instruction into a TK_NULL.  If the auth function returns SQLITE_DENY,** then generate an error.*/void sqliteAuthRead(  Parse *pParse,        /* The parser context */  Expr *pExpr,          /* The expression to check authorization on */  SrcList *pTabList     /* All table that pExpr might refer to */){  sqlite *db = pParse->db;  int rc;  Table *pTab;          /* The table being read */  const char *zCol;     /* Name of the column of the table */  int iSrc;             /* Index in pTabList->a[] of table being read */  const char *zDBase;   /* Name of database being accessed */  TriggerStack *pStack; /* The stack of current triggers */  if( db->xAuth==0 ) return;  assert( pExpr->op==TK_COLUMN );  for(iSrc=0; iSrc<pTabList->nSrc; iSrc++){    if( pExpr->iTable==pTabList->a[iSrc].iCursor ) break;  }  if( iSrc>=0 && iSrc<pTabList->nSrc ){    pTab = pTabList->a[iSrc].pTab;  }else if( (pStack = pParse->trigStack)!=0 ){    /* This must be an attempt to read the NEW or OLD pseudo-tables    ** of a trigger.    */    assert( pExpr->iTable==pStack->newIdx || pExpr->iTable==pStack->oldIdx );    pTab = pStack->pTab;  }else{    return;  }  if( pTab==0 ) return;  if( pExpr->iColumn>=0 ){    assert( pExpr->iColumn<pTab->nCol );    zCol = pTab->aCol[pExpr->iColumn].zName;  }else if( pTab->iPKey>=0 ){    assert( pTab->iPKey<pTab->nCol );    zCol = pTab->aCol[pTab->iPKey].zName;  }else{    zCol = "ROWID";  }  assert( pExpr->iDb<db->nDb );  zDBase = db->aDb[pExpr->iDb].zName;  rc = db->xAuth(db->pAuthArg, SQLITE_READ, pTab->zName, zCol, zDBase,                  pParse->zAuthContext);  if( rc==SQLITE_IGNORE ){    pExpr->op = TK_NULL;  }else if( rc==SQLITE_DENY ){    if( db->nDb>2 || pExpr->iDb!=0 ){      sqliteErrorMsg(pParse, "access to %s.%s.%s is prohibited",          zDBase, pTab->zName, zCol);    }else{      sqliteErrorMsg(pParse, "access to %s.%s is prohibited", pTab->zName,zCol);    }    pParse->rc = SQLITE_AUTH;  }else if( rc!=SQLITE_OK ){    sqliteAuthBadReturnCode(pParse, rc);  }}/*** Do an authorization check using the code and arguments given.  Return** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY.  If SQLITE_DENY** is returned, then the error count and error message in pParse are** modified appropriately.*/int sqliteAuthCheck(  Parse *pParse,  int code,  const char *zArg1,  const char *zArg2,  const char *zArg3){  sqlite *db = pParse->db;  int rc;  if( db->init.busy || db->xAuth==0 ){    return SQLITE_OK;  }  rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);  if( rc==SQLITE_DENY ){    sqliteErrorMsg(pParse, "not authorized");    pParse->rc = SQLITE_AUTH;  }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){    rc = SQLITE_DENY;    sqliteAuthBadReturnCode(pParse, rc);  }  return rc;}/*** Push an authorization context.  After this routine is called, the** zArg3 argument to authorization callbacks will be zContext until** popped.  Or if pParse==0, this routine is a no-op.*/void sqliteAuthContextPush(  Parse *pParse,  AuthContext *pContext,   const char *zContext){  pContext->pParse = pParse;  if( pParse ){    pContext->zAuthContext = pParse->zAuthContext;    pParse->zAuthContext = zContext;  }}/*** Pop an authorization context that was previously pushed** by sqliteAuthContextPush*/void sqliteAuthContextPop(AuthContext *pContext){  if( pContext->pParse ){    pContext->pParse->zAuthContext = pContext->zAuthContext;    pContext->pParse = 0;  }}#endif /* SQLITE_OMIT_AUTHORIZATION */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91搞黄在线观看| 中日韩av电影| 亚洲国产成人私人影院tom| 亚洲日本在线a| 六月丁香综合在线视频| 99久久99久久精品免费观看| 欧美电影影音先锋| 中文字幕在线观看不卡| 久久狠狠亚洲综合| 欧美偷拍一区二区| 中文久久乱码一区二区| 麻豆国产一区二区| 欧美揉bbbbb揉bbbbb| 日韩理论片中文av| 国产白丝网站精品污在线入口| 国产精品美女一区二区三区 | 欧美videos中文字幕| 亚洲猫色日本管| 成人午夜av电影| 亚洲精品一区二区三区99| 日韩成人一级片| 欧美另类videos死尸| 一区二区三区在线看| 99久久免费精品高清特色大片| 久久久精品日韩欧美| 久久成人免费网| 日韩一级二级三级精品视频| 日韩精品电影在线| 欧美日韩综合在线| 亚洲va天堂va国产va久| 欧美视频第二页| 亚洲h在线观看| 欧美日韩精品一区二区三区| 一级精品视频在线观看宜春院| 成+人+亚洲+综合天堂| 久久精品水蜜桃av综合天堂| 国产美女视频91| 久久精品视频一区二区三区| 国产精品一区免费在线观看| 久久精品日产第一区二区三区高清版| 韩国一区二区视频| 2024国产精品| 国产a区久久久| 国产精品久久久久久户外露出| 成人av影视在线观看| 亚洲欧美在线视频观看| 在线视频一区二区三| 亚洲午夜视频在线观看| 555夜色666亚洲国产免| 蜜臀精品一区二区三区在线观看| 欧美成人r级一区二区三区| 国产在线视频一区二区三区| 久久久久久电影| av一二三不卡影片| 亚洲一区二区欧美激情| 欧美一区二区国产| 国产乱人伦精品一区二区在线观看| 久久蜜桃av一区精品变态类天堂| 成人午夜碰碰视频| 亚洲一区二区精品久久av| 欧美一区二区三区啪啪| 91国偷自产一区二区三区成为亚洲经典| 亚洲一二三专区| 精品处破学生在线二十三| 99精品久久久久久| 污片在线观看一区二区| 久久综合九色综合97婷婷| av亚洲产国偷v产偷v自拍| 亚洲国产综合91精品麻豆| 911国产精品| 国产成人一级电影| 亚洲一区二区美女| 久久综合网色—综合色88| 一本一本久久a久久精品综合麻豆| 午夜av区久久| 国产精品伦理在线| 69堂成人精品免费视频| 成人免费三级在线| 日韩av电影免费观看高清完整版 | 亚洲国产成人精品视频| 久久综合资源网| 欧美在线观看视频在线| 极品美女销魂一区二区三区 | 人人超碰91尤物精品国产| 日韩欧美在线一区二区三区| 国产成人亚洲综合a∨婷婷| 亚洲一区精品在线| 香蕉乱码成人久久天堂爱免费| 久久综合久久99| 欧美片网站yy| 91女人视频在线观看| 国内精品国产成人| 日韩影院免费视频| 亚洲免费伊人电影| 中文字幕欧美区| 日韩免费观看2025年上映的电影| 日本电影欧美片| 成人v精品蜜桃久久一区| 久久99久久久久| 三级欧美韩日大片在线看| 亚洲精品你懂的| 国产精品你懂的在线欣赏| 久久综合99re88久久爱| 日韩欧美一二三| 51午夜精品国产| 欧美日韩你懂得| 91蜜桃网址入口| a在线播放不卡| 国产.欧美.日韩| 国产一区二区三区久久久| 免费在线视频一区| 亚洲6080在线| 亚洲一区二区三区四区在线免费观看| 日韩午夜在线影院| 99久久99久久精品免费观看 | 亚洲猫色日本管| 欧美国产丝袜视频| 国产喷白浆一区二区三区| 26uuu欧美| 久久精品在这里| 久久精品视频在线免费观看| 国产无一区二区| 国产性色一区二区| 亚洲国产精品成人综合色在线婷婷 | 国产精品美女久久久久久2018| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产三区在线成人av| 欧美精品一区二区三区久久久| 亚洲精品一线二线三线| 久久久久国产精品人| 国产女人18毛片水真多成人如厕| 国产精品全国免费观看高清 | 色综合久久中文字幕| 一本一道久久a久久精品综合蜜臀| 91麻豆产精品久久久久久| 欧美视频中文字幕| 亚洲美女区一区| 性感美女久久精品| 九九九精品视频| 成人ar影院免费观看视频| 色天天综合久久久久综合片| 欧美日韩国产色站一区二区三区| 欧美一区二区三区人| 国产欧美精品在线观看| 亚洲视频图片小说| 日韩电影在线观看网站| 国产在线不卡视频| 91同城在线观看| 7777精品伊人久久久大香线蕉 | 日韩欧美国产午夜精品| 国产日产欧产精品推荐色 | 久久久久国产成人精品亚洲午夜| 中文一区二区完整视频在线观看 | 久久精品夜色噜噜亚洲a∨| 国产精品九色蝌蚪自拍| 香蕉乱码成人久久天堂爱免费| 黑人精品欧美一区二区蜜桃| 成人黄色777网| 91精品国产综合久久精品app| 久久精品视频免费观看| 亚洲成人综合在线| 成人一区二区三区在线观看| 欧美丝袜丝交足nylons| 久久先锋影音av| 亚洲高清免费在线| 国产精品一二一区| 欧美日本视频在线| 欧美激情在线看| 欧美优质美女网站| 国产乱妇无码大片在线观看| 99久久精品国产导航| 日韩写真欧美这视频| 亚洲少妇屁股交4| 国产在线精品一区二区三区不卡| 日本大香伊一区二区三区| 2020国产精品自拍| 手机精品视频在线观看| 99国产精品久久| 久久综合视频网| 人人爽香蕉精品| 欧美三级日韩三级| 亚洲日本乱码在线观看| 国产精品影视网| 日韩女优av电影在线观看| 亚洲一区二区三区在线| 99久久精品免费看| 久久久99精品免费观看不卡| 美女视频一区二区三区| 欧美日韩一区二区在线观看视频| 国产精品传媒视频| 福利电影一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 精品国产制服丝袜高跟| 五月综合激情日本mⅴ| 在线免费观看视频一区| 日本欧美肥老太交大片| 中文字幕一区二区三区精华液| 久久精品国产精品青草| 欧美三级中文字幕| 亚洲精品国产a久久久久久|