Fossil SCM

Move PRAGMA key handling into its own function.

mistachkin 2017-05-29 01:37 trunk
Commit 95f14fae0044fcb7b57ae47a60ea87f9d9d54c8dbffa8ccb472e8266f47238b4
1 file changed +17 -10
+17 -10
--- src/db.c
+++ src/db.c
@@ -1039,19 +1039,34 @@
10391039
}
10401040
}
10411041
#endif
10421042
}
10431043
1044
+
1045
+/*
1046
+** Sets the encryption key for the database, if necessary.
1047
+*/
1048
+void db_set_key(sqlite3 *db, const char *zDbName){
1049
+ Blob key;
1050
+ blob_init(&key, 0, 0);
1051
+ db_maybe_obtain_encryption_key(zDbName, &key);
1052
+ if( blob_size(&key)>0 ){
1053
+ char *zCmd = sqlite3_mprintf("PRAGMA key(%Q)", blob_str(&key));
1054
+ sqlite3_exec(db, zCmd, 0, 0, 0);
1055
+ fossil_secure_zero(zCmd, strlen(zCmd));
1056
+ sqlite3_free(zCmd);
1057
+ }
1058
+ blob_reset(&key);
1059
+}
10441060
10451061
/*
10461062
** Open a database file. Return a pointer to the new database
10471063
** connection. An error results in process abort.
10481064
*/
10491065
LOCAL sqlite3 *db_open(const char *zDbName){
10501066
int rc;
10511067
sqlite3 *db;
1052
- Blob key;
10531068
10541069
if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName);
10551070
rc = sqlite3_open_v2(
10561071
zDbName, &db,
10571072
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
@@ -1058,19 +1073,11 @@
10581073
g.zVfsName
10591074
);
10601075
if( rc!=SQLITE_OK ){
10611076
db_err("[%s]: %s", zDbName, sqlite3_errmsg(db));
10621077
}
1063
- blob_init(&key, 0, 0);
1064
- db_maybe_obtain_encryption_key(zDbName, &key);
1065
- if( blob_size(&key)>0 ){
1066
- char *zCmd = sqlite3_mprintf("PRAGMA key(%Q)", blob_str(&key));
1067
- sqlite3_exec(db, zCmd, 0, 0, 0);
1068
- fossil_secure_zero(zCmd, strlen(zCmd));
1069
- sqlite3_free(zCmd);
1070
- }
1071
- blob_reset(&key);
1078
+ db_set_key(db, zDbName);
10721079
sqlite3_busy_timeout(db, 5000);
10731080
sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */
10741081
sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0);
10751082
sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
10761083
sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
10771084
--- src/db.c
+++ src/db.c
@@ -1039,19 +1039,34 @@
1039 }
1040 }
1041 #endif
1042 }
1043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1044
1045 /*
1046 ** Open a database file. Return a pointer to the new database
1047 ** connection. An error results in process abort.
1048 */
1049 LOCAL sqlite3 *db_open(const char *zDbName){
1050 int rc;
1051 sqlite3 *db;
1052 Blob key;
1053
1054 if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName);
1055 rc = sqlite3_open_v2(
1056 zDbName, &db,
1057 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
@@ -1058,19 +1073,11 @@
1058 g.zVfsName
1059 );
1060 if( rc!=SQLITE_OK ){
1061 db_err("[%s]: %s", zDbName, sqlite3_errmsg(db));
1062 }
1063 blob_init(&key, 0, 0);
1064 db_maybe_obtain_encryption_key(zDbName, &key);
1065 if( blob_size(&key)>0 ){
1066 char *zCmd = sqlite3_mprintf("PRAGMA key(%Q)", blob_str(&key));
1067 sqlite3_exec(db, zCmd, 0, 0, 0);
1068 fossil_secure_zero(zCmd, strlen(zCmd));
1069 sqlite3_free(zCmd);
1070 }
1071 blob_reset(&key);
1072 sqlite3_busy_timeout(db, 5000);
1073 sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */
1074 sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0);
1075 sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
1076 sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
1077
--- src/db.c
+++ src/db.c
@@ -1039,19 +1039,34 @@
1039 }
1040 }
1041 #endif
1042 }
1043
1044
1045 /*
1046 ** Sets the encryption key for the database, if necessary.
1047 */
1048 void db_set_key(sqlite3 *db, const char *zDbName){
1049 Blob key;
1050 blob_init(&key, 0, 0);
1051 db_maybe_obtain_encryption_key(zDbName, &key);
1052 if( blob_size(&key)>0 ){
1053 char *zCmd = sqlite3_mprintf("PRAGMA key(%Q)", blob_str(&key));
1054 sqlite3_exec(db, zCmd, 0, 0, 0);
1055 fossil_secure_zero(zCmd, strlen(zCmd));
1056 sqlite3_free(zCmd);
1057 }
1058 blob_reset(&key);
1059 }
1060
1061 /*
1062 ** Open a database file. Return a pointer to the new database
1063 ** connection. An error results in process abort.
1064 */
1065 LOCAL sqlite3 *db_open(const char *zDbName){
1066 int rc;
1067 sqlite3 *db;
 
1068
1069 if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName);
1070 rc = sqlite3_open_v2(
1071 zDbName, &db,
1072 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
@@ -1058,19 +1073,11 @@
1073 g.zVfsName
1074 );
1075 if( rc!=SQLITE_OK ){
1076 db_err("[%s]: %s", zDbName, sqlite3_errmsg(db));
1077 }
1078 db_set_key(db, zDbName);
 
 
 
 
 
 
 
 
1079 sqlite3_busy_timeout(db, 5000);
1080 sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */
1081 sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0);
1082 sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
1083 sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
1084

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button