Annotation of embedaddon/sqlite3/src/loadext.c, revision 1.1.1.1
1.1 misho 1: /*
2: ** 2006 June 7
3: **
4: ** The author disclaims copyright to this source code. In place of
5: ** a legal notice, here is a blessing:
6: **
7: ** May you do good and not evil.
8: ** May you find forgiveness for yourself and forgive others.
9: ** May you share freely, never taking more than you give.
10: **
11: *************************************************************************
12: ** This file contains code used to dynamically load extensions into
13: ** the SQLite library.
14: */
15:
16: #ifndef SQLITE_CORE
17: #define SQLITE_CORE 1 /* Disable the API redefinition in sqlite3ext.h */
18: #endif
19: #include "sqlite3ext.h"
20: #include "sqliteInt.h"
21: #include <string.h>
22:
23: #ifndef SQLITE_OMIT_LOAD_EXTENSION
24:
25: /*
26: ** Some API routines are omitted when various features are
27: ** excluded from a build of SQLite. Substitute a NULL pointer
28: ** for any missing APIs.
29: */
30: #ifndef SQLITE_ENABLE_COLUMN_METADATA
31: # define sqlite3_column_database_name 0
32: # define sqlite3_column_database_name16 0
33: # define sqlite3_column_table_name 0
34: # define sqlite3_column_table_name16 0
35: # define sqlite3_column_origin_name 0
36: # define sqlite3_column_origin_name16 0
37: # define sqlite3_table_column_metadata 0
38: #endif
39:
40: #ifdef SQLITE_OMIT_AUTHORIZATION
41: # define sqlite3_set_authorizer 0
42: #endif
43:
44: #ifdef SQLITE_OMIT_UTF16
45: # define sqlite3_bind_text16 0
46: # define sqlite3_collation_needed16 0
47: # define sqlite3_column_decltype16 0
48: # define sqlite3_column_name16 0
49: # define sqlite3_column_text16 0
50: # define sqlite3_complete16 0
51: # define sqlite3_create_collation16 0
52: # define sqlite3_create_function16 0
53: # define sqlite3_errmsg16 0
54: # define sqlite3_open16 0
55: # define sqlite3_prepare16 0
56: # define sqlite3_prepare16_v2 0
57: # define sqlite3_result_error16 0
58: # define sqlite3_result_text16 0
59: # define sqlite3_result_text16be 0
60: # define sqlite3_result_text16le 0
61: # define sqlite3_value_text16 0
62: # define sqlite3_value_text16be 0
63: # define sqlite3_value_text16le 0
64: # define sqlite3_column_database_name16 0
65: # define sqlite3_column_table_name16 0
66: # define sqlite3_column_origin_name16 0
67: #endif
68:
69: #ifdef SQLITE_OMIT_COMPLETE
70: # define sqlite3_complete 0
71: # define sqlite3_complete16 0
72: #endif
73:
74: #ifdef SQLITE_OMIT_DECLTYPE
75: # define sqlite3_column_decltype16 0
76: # define sqlite3_column_decltype 0
77: #endif
78:
79: #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
80: # define sqlite3_progress_handler 0
81: #endif
82:
83: #ifdef SQLITE_OMIT_VIRTUALTABLE
84: # define sqlite3_create_module 0
85: # define sqlite3_create_module_v2 0
86: # define sqlite3_declare_vtab 0
87: # define sqlite3_vtab_config 0
88: # define sqlite3_vtab_on_conflict 0
89: #endif
90:
91: #ifdef SQLITE_OMIT_SHARED_CACHE
92: # define sqlite3_enable_shared_cache 0
93: #endif
94:
95: #ifdef SQLITE_OMIT_TRACE
96: # define sqlite3_profile 0
97: # define sqlite3_trace 0
98: #endif
99:
100: #ifdef SQLITE_OMIT_GET_TABLE
101: # define sqlite3_free_table 0
102: # define sqlite3_get_table 0
103: #endif
104:
105: #ifdef SQLITE_OMIT_INCRBLOB
106: #define sqlite3_bind_zeroblob 0
107: #define sqlite3_blob_bytes 0
108: #define sqlite3_blob_close 0
109: #define sqlite3_blob_open 0
110: #define sqlite3_blob_read 0
111: #define sqlite3_blob_write 0
112: #define sqlite3_blob_reopen 0
113: #endif
114:
115: /*
116: ** The following structure contains pointers to all SQLite API routines.
117: ** A pointer to this structure is passed into extensions when they are
118: ** loaded so that the extension can make calls back into the SQLite
119: ** library.
120: **
121: ** When adding new APIs, add them to the bottom of this structure
122: ** in order to preserve backwards compatibility.
123: **
124: ** Extensions that use newer APIs should first call the
125: ** sqlite3_libversion_number() to make sure that the API they
126: ** intend to use is supported by the library. Extensions should
127: ** also check to make sure that the pointer to the function is
128: ** not NULL before calling it.
129: */
130: static const sqlite3_api_routines sqlite3Apis = {
131: sqlite3_aggregate_context,
132: #ifndef SQLITE_OMIT_DEPRECATED
133: sqlite3_aggregate_count,
134: #else
135: 0,
136: #endif
137: sqlite3_bind_blob,
138: sqlite3_bind_double,
139: sqlite3_bind_int,
140: sqlite3_bind_int64,
141: sqlite3_bind_null,
142: sqlite3_bind_parameter_count,
143: sqlite3_bind_parameter_index,
144: sqlite3_bind_parameter_name,
145: sqlite3_bind_text,
146: sqlite3_bind_text16,
147: sqlite3_bind_value,
148: sqlite3_busy_handler,
149: sqlite3_busy_timeout,
150: sqlite3_changes,
151: sqlite3_close,
152: sqlite3_collation_needed,
153: sqlite3_collation_needed16,
154: sqlite3_column_blob,
155: sqlite3_column_bytes,
156: sqlite3_column_bytes16,
157: sqlite3_column_count,
158: sqlite3_column_database_name,
159: sqlite3_column_database_name16,
160: sqlite3_column_decltype,
161: sqlite3_column_decltype16,
162: sqlite3_column_double,
163: sqlite3_column_int,
164: sqlite3_column_int64,
165: sqlite3_column_name,
166: sqlite3_column_name16,
167: sqlite3_column_origin_name,
168: sqlite3_column_origin_name16,
169: sqlite3_column_table_name,
170: sqlite3_column_table_name16,
171: sqlite3_column_text,
172: sqlite3_column_text16,
173: sqlite3_column_type,
174: sqlite3_column_value,
175: sqlite3_commit_hook,
176: sqlite3_complete,
177: sqlite3_complete16,
178: sqlite3_create_collation,
179: sqlite3_create_collation16,
180: sqlite3_create_function,
181: sqlite3_create_function16,
182: sqlite3_create_module,
183: sqlite3_data_count,
184: sqlite3_db_handle,
185: sqlite3_declare_vtab,
186: sqlite3_enable_shared_cache,
187: sqlite3_errcode,
188: sqlite3_errmsg,
189: sqlite3_errmsg16,
190: sqlite3_exec,
191: #ifndef SQLITE_OMIT_DEPRECATED
192: sqlite3_expired,
193: #else
194: 0,
195: #endif
196: sqlite3_finalize,
197: sqlite3_free,
198: sqlite3_free_table,
199: sqlite3_get_autocommit,
200: sqlite3_get_auxdata,
201: sqlite3_get_table,
202: 0, /* Was sqlite3_global_recover(), but that function is deprecated */
203: sqlite3_interrupt,
204: sqlite3_last_insert_rowid,
205: sqlite3_libversion,
206: sqlite3_libversion_number,
207: sqlite3_malloc,
208: sqlite3_mprintf,
209: sqlite3_open,
210: sqlite3_open16,
211: sqlite3_prepare,
212: sqlite3_prepare16,
213: sqlite3_profile,
214: sqlite3_progress_handler,
215: sqlite3_realloc,
216: sqlite3_reset,
217: sqlite3_result_blob,
218: sqlite3_result_double,
219: sqlite3_result_error,
220: sqlite3_result_error16,
221: sqlite3_result_int,
222: sqlite3_result_int64,
223: sqlite3_result_null,
224: sqlite3_result_text,
225: sqlite3_result_text16,
226: sqlite3_result_text16be,
227: sqlite3_result_text16le,
228: sqlite3_result_value,
229: sqlite3_rollback_hook,
230: sqlite3_set_authorizer,
231: sqlite3_set_auxdata,
232: sqlite3_snprintf,
233: sqlite3_step,
234: sqlite3_table_column_metadata,
235: #ifndef SQLITE_OMIT_DEPRECATED
236: sqlite3_thread_cleanup,
237: #else
238: 0,
239: #endif
240: sqlite3_total_changes,
241: sqlite3_trace,
242: #ifndef SQLITE_OMIT_DEPRECATED
243: sqlite3_transfer_bindings,
244: #else
245: 0,
246: #endif
247: sqlite3_update_hook,
248: sqlite3_user_data,
249: sqlite3_value_blob,
250: sqlite3_value_bytes,
251: sqlite3_value_bytes16,
252: sqlite3_value_double,
253: sqlite3_value_int,
254: sqlite3_value_int64,
255: sqlite3_value_numeric_type,
256: sqlite3_value_text,
257: sqlite3_value_text16,
258: sqlite3_value_text16be,
259: sqlite3_value_text16le,
260: sqlite3_value_type,
261: sqlite3_vmprintf,
262: /*
263: ** The original API set ends here. All extensions can call any
264: ** of the APIs above provided that the pointer is not NULL. But
265: ** before calling APIs that follow, extension should check the
266: ** sqlite3_libversion_number() to make sure they are dealing with
267: ** a library that is new enough to support that API.
268: *************************************************************************
269: */
270: sqlite3_overload_function,
271:
272: /*
273: ** Added after 3.3.13
274: */
275: sqlite3_prepare_v2,
276: sqlite3_prepare16_v2,
277: sqlite3_clear_bindings,
278:
279: /*
280: ** Added for 3.4.1
281: */
282: sqlite3_create_module_v2,
283:
284: /*
285: ** Added for 3.5.0
286: */
287: sqlite3_bind_zeroblob,
288: sqlite3_blob_bytes,
289: sqlite3_blob_close,
290: sqlite3_blob_open,
291: sqlite3_blob_read,
292: sqlite3_blob_write,
293: sqlite3_create_collation_v2,
294: sqlite3_file_control,
295: sqlite3_memory_highwater,
296: sqlite3_memory_used,
297: #ifdef SQLITE_MUTEX_OMIT
298: 0,
299: 0,
300: 0,
301: 0,
302: 0,
303: #else
304: sqlite3_mutex_alloc,
305: sqlite3_mutex_enter,
306: sqlite3_mutex_free,
307: sqlite3_mutex_leave,
308: sqlite3_mutex_try,
309: #endif
310: sqlite3_open_v2,
311: sqlite3_release_memory,
312: sqlite3_result_error_nomem,
313: sqlite3_result_error_toobig,
314: sqlite3_sleep,
315: sqlite3_soft_heap_limit,
316: sqlite3_vfs_find,
317: sqlite3_vfs_register,
318: sqlite3_vfs_unregister,
319:
320: /*
321: ** Added for 3.5.8
322: */
323: sqlite3_threadsafe,
324: sqlite3_result_zeroblob,
325: sqlite3_result_error_code,
326: sqlite3_test_control,
327: sqlite3_randomness,
328: sqlite3_context_db_handle,
329:
330: /*
331: ** Added for 3.6.0
332: */
333: sqlite3_extended_result_codes,
334: sqlite3_limit,
335: sqlite3_next_stmt,
336: sqlite3_sql,
337: sqlite3_status,
338:
339: /*
340: ** Added for 3.7.4
341: */
342: sqlite3_backup_finish,
343: sqlite3_backup_init,
344: sqlite3_backup_pagecount,
345: sqlite3_backup_remaining,
346: sqlite3_backup_step,
347: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
348: sqlite3_compileoption_get,
349: sqlite3_compileoption_used,
350: #else
351: 0,
352: 0,
353: #endif
354: sqlite3_create_function_v2,
355: sqlite3_db_config,
356: sqlite3_db_mutex,
357: sqlite3_db_status,
358: sqlite3_extended_errcode,
359: sqlite3_log,
360: sqlite3_soft_heap_limit64,
361: sqlite3_sourceid,
362: sqlite3_stmt_status,
363: sqlite3_strnicmp,
364: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
365: sqlite3_unlock_notify,
366: #else
367: 0,
368: #endif
369: #ifndef SQLITE_OMIT_WAL
370: sqlite3_wal_autocheckpoint,
371: sqlite3_wal_checkpoint,
372: sqlite3_wal_hook,
373: #else
374: 0,
375: 0,
376: 0,
377: #endif
378: sqlite3_blob_reopen,
379: sqlite3_vtab_config,
380: sqlite3_vtab_on_conflict,
381: };
382:
383: /*
384: ** Attempt to load an SQLite extension library contained in the file
385: ** zFile. The entry point is zProc. zProc may be 0 in which case a
386: ** default entry point name (sqlite3_extension_init) is used. Use
387: ** of the default name is recommended.
388: **
389: ** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
390: **
391: ** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with
392: ** error message text. The calling function should free this memory
393: ** by calling sqlite3DbFree(db, ).
394: */
395: static int sqlite3LoadExtension(
396: sqlite3 *db, /* Load the extension into this database connection */
397: const char *zFile, /* Name of the shared library containing extension */
398: const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */
399: char **pzErrMsg /* Put error message here if not 0 */
400: ){
401: sqlite3_vfs *pVfs = db->pVfs;
402: void *handle;
403: int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
404: char *zErrmsg = 0;
405: void **aHandle;
406: int nMsg = 300 + sqlite3Strlen30(zFile);
407:
408: if( pzErrMsg ) *pzErrMsg = 0;
409:
410: /* Ticket #1863. To avoid a creating security problems for older
411: ** applications that relink against newer versions of SQLite, the
412: ** ability to run load_extension is turned off by default. One
413: ** must call sqlite3_enable_load_extension() to turn on extension
414: ** loading. Otherwise you get the following error.
415: */
416: if( (db->flags & SQLITE_LoadExtension)==0 ){
417: if( pzErrMsg ){
418: *pzErrMsg = sqlite3_mprintf("not authorized");
419: }
420: return SQLITE_ERROR;
421: }
422:
423: if( zProc==0 ){
424: zProc = "sqlite3_extension_init";
425: }
426:
427: handle = sqlite3OsDlOpen(pVfs, zFile);
428: if( handle==0 ){
429: if( pzErrMsg ){
430: *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
431: if( zErrmsg ){
432: sqlite3_snprintf(nMsg, zErrmsg,
433: "unable to open shared library [%s]", zFile);
434: sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
435: }
436: }
437: return SQLITE_ERROR;
438: }
439: xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
440: sqlite3OsDlSym(pVfs, handle, zProc);
441: if( xInit==0 ){
442: if( pzErrMsg ){
443: nMsg += sqlite3Strlen30(zProc);
444: *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
445: if( zErrmsg ){
446: sqlite3_snprintf(nMsg, zErrmsg,
447: "no entry point [%s] in shared library [%s]", zProc,zFile);
448: sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
449: }
450: sqlite3OsDlClose(pVfs, handle);
451: }
452: return SQLITE_ERROR;
453: }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){
454: if( pzErrMsg ){
455: *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);
456: }
457: sqlite3_free(zErrmsg);
458: sqlite3OsDlClose(pVfs, handle);
459: return SQLITE_ERROR;
460: }
461:
462: /* Append the new shared library handle to the db->aExtension array. */
463: aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1));
464: if( aHandle==0 ){
465: return SQLITE_NOMEM;
466: }
467: if( db->nExtension>0 ){
468: memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension);
469: }
470: sqlite3DbFree(db, db->aExtension);
471: db->aExtension = aHandle;
472:
473: db->aExtension[db->nExtension++] = handle;
474: return SQLITE_OK;
475: }
476: int sqlite3_load_extension(
477: sqlite3 *db, /* Load the extension into this database connection */
478: const char *zFile, /* Name of the shared library containing extension */
479: const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */
480: char **pzErrMsg /* Put error message here if not 0 */
481: ){
482: int rc;
483: sqlite3_mutex_enter(db->mutex);
484: rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg);
485: rc = sqlite3ApiExit(db, rc);
486: sqlite3_mutex_leave(db->mutex);
487: return rc;
488: }
489:
490: /*
491: ** Call this routine when the database connection is closing in order
492: ** to clean up loaded extensions
493: */
494: void sqlite3CloseExtensions(sqlite3 *db){
495: int i;
496: assert( sqlite3_mutex_held(db->mutex) );
497: for(i=0; i<db->nExtension; i++){
498: sqlite3OsDlClose(db->pVfs, db->aExtension[i]);
499: }
500: sqlite3DbFree(db, db->aExtension);
501: }
502:
503: /*
504: ** Enable or disable extension loading. Extension loading is disabled by
505: ** default so as not to open security holes in older applications.
506: */
507: int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
508: sqlite3_mutex_enter(db->mutex);
509: if( onoff ){
510: db->flags |= SQLITE_LoadExtension;
511: }else{
512: db->flags &= ~SQLITE_LoadExtension;
513: }
514: sqlite3_mutex_leave(db->mutex);
515: return SQLITE_OK;
516: }
517:
518: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
519:
520: /*
521: ** The auto-extension code added regardless of whether or not extension
522: ** loading is supported. We need a dummy sqlite3Apis pointer for that
523: ** code if regular extension loading is not available. This is that
524: ** dummy pointer.
525: */
526: #ifdef SQLITE_OMIT_LOAD_EXTENSION
527: static const sqlite3_api_routines sqlite3Apis = { 0 };
528: #endif
529:
530:
531: /*
532: ** The following object holds the list of automatically loaded
533: ** extensions.
534: **
535: ** This list is shared across threads. The SQLITE_MUTEX_STATIC_MASTER
536: ** mutex must be held while accessing this list.
537: */
538: typedef struct sqlite3AutoExtList sqlite3AutoExtList;
539: static SQLITE_WSD struct sqlite3AutoExtList {
540: int nExt; /* Number of entries in aExt[] */
541: void (**aExt)(void); /* Pointers to the extension init functions */
542: } sqlite3Autoext = { 0, 0 };
543:
544: /* The "wsdAutoext" macro will resolve to the autoextension
545: ** state vector. If writable static data is unsupported on the target,
546: ** we have to locate the state vector at run-time. In the more common
547: ** case where writable static data is supported, wsdStat can refer directly
548: ** to the "sqlite3Autoext" state vector declared above.
549: */
550: #ifdef SQLITE_OMIT_WSD
551: # define wsdAutoextInit \
552: sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext)
553: # define wsdAutoext x[0]
554: #else
555: # define wsdAutoextInit
556: # define wsdAutoext sqlite3Autoext
557: #endif
558:
559:
560: /*
561: ** Register a statically linked extension that is automatically
562: ** loaded by every new database connection.
563: */
564: int sqlite3_auto_extension(void (*xInit)(void)){
565: int rc = SQLITE_OK;
566: #ifndef SQLITE_OMIT_AUTOINIT
567: rc = sqlite3_initialize();
568: if( rc ){
569: return rc;
570: }else
571: #endif
572: {
573: int i;
574: #if SQLITE_THREADSAFE
575: sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
576: #endif
577: wsdAutoextInit;
578: sqlite3_mutex_enter(mutex);
579: for(i=0; i<wsdAutoext.nExt; i++){
580: if( wsdAutoext.aExt[i]==xInit ) break;
581: }
582: if( i==wsdAutoext.nExt ){
583: int nByte = (wsdAutoext.nExt+1)*sizeof(wsdAutoext.aExt[0]);
584: void (**aNew)(void);
585: aNew = sqlite3_realloc(wsdAutoext.aExt, nByte);
586: if( aNew==0 ){
587: rc = SQLITE_NOMEM;
588: }else{
589: wsdAutoext.aExt = aNew;
590: wsdAutoext.aExt[wsdAutoext.nExt] = xInit;
591: wsdAutoext.nExt++;
592: }
593: }
594: sqlite3_mutex_leave(mutex);
595: assert( (rc&0xff)==rc );
596: return rc;
597: }
598: }
599:
600: /*
601: ** Reset the automatic extension loading mechanism.
602: */
603: void sqlite3_reset_auto_extension(void){
604: #ifndef SQLITE_OMIT_AUTOINIT
605: if( sqlite3_initialize()==SQLITE_OK )
606: #endif
607: {
608: #if SQLITE_THREADSAFE
609: sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
610: #endif
611: wsdAutoextInit;
612: sqlite3_mutex_enter(mutex);
613: sqlite3_free(wsdAutoext.aExt);
614: wsdAutoext.aExt = 0;
615: wsdAutoext.nExt = 0;
616: sqlite3_mutex_leave(mutex);
617: }
618: }
619:
620: /*
621: ** Load all automatic extensions.
622: **
623: ** If anything goes wrong, set an error in the database connection.
624: */
625: void sqlite3AutoLoadExtensions(sqlite3 *db){
626: int i;
627: int go = 1;
628: int rc;
629: int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
630:
631: wsdAutoextInit;
632: if( wsdAutoext.nExt==0 ){
633: /* Common case: early out without every having to acquire a mutex */
634: return;
635: }
636: for(i=0; go; i++){
637: char *zErrmsg;
638: #if SQLITE_THREADSAFE
639: sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
640: #endif
641: sqlite3_mutex_enter(mutex);
642: if( i>=wsdAutoext.nExt ){
643: xInit = 0;
644: go = 0;
645: }else{
646: xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
647: wsdAutoext.aExt[i];
648: }
649: sqlite3_mutex_leave(mutex);
650: zErrmsg = 0;
651: if( xInit && (rc = xInit(db, &zErrmsg, &sqlite3Apis))!=0 ){
652: sqlite3Error(db, rc,
653: "automatic extension loading failed: %s", zErrmsg);
654: go = 0;
655: }
656: sqlite3_free(zErrmsg);
657: }
658: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>