Fossil SCM
Move PRAGMA key handling into its own function.
Commit
95f14fae0044fcb7b57ae47a60ea87f9d9d54c8dbffa8ccb472e8266f47238b4
Parent
1c6a6fa1a911e4b…
1 file changed
+17
-10
M
src/db.c
+17
-10
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -1039,19 +1039,34 @@ | ||
| 1039 | 1039 | } |
| 1040 | 1040 | } |
| 1041 | 1041 | #endif |
| 1042 | 1042 | } |
| 1043 | 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 | +} | |
| 1044 | 1060 | |
| 1045 | 1061 | /* |
| 1046 | 1062 | ** Open a database file. Return a pointer to the new database |
| 1047 | 1063 | ** connection. An error results in process abort. |
| 1048 | 1064 | */ |
| 1049 | 1065 | LOCAL sqlite3 *db_open(const char *zDbName){ |
| 1050 | 1066 | int rc; |
| 1051 | 1067 | sqlite3 *db; |
| 1052 | - Blob key; | |
| 1053 | 1068 | |
| 1054 | 1069 | if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName); |
| 1055 | 1070 | rc = sqlite3_open_v2( |
| 1056 | 1071 | zDbName, &db, |
| 1057 | 1072 | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, |
| @@ -1058,19 +1073,11 @@ | ||
| 1058 | 1073 | g.zVfsName |
| 1059 | 1074 | ); |
| 1060 | 1075 | if( rc!=SQLITE_OK ){ |
| 1061 | 1076 | db_err("[%s]: %s", zDbName, sqlite3_errmsg(db)); |
| 1062 | 1077 | } |
| 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); | |
| 1072 | 1079 | sqlite3_busy_timeout(db, 5000); |
| 1073 | 1080 | sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */ |
| 1074 | 1081 | sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0); |
| 1075 | 1082 | sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0); |
| 1076 | 1083 | sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0); |
| 1077 | 1084 |
| --- 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 |