| | @@ -34,10 +34,13 @@ |
| 34 | 34 | # include <windows.h> |
| 35 | 35 | # endif |
| 36 | 36 | #else |
| 37 | 37 | # include <pwd.h> |
| 38 | 38 | #endif |
| 39 | +#if USE_SEE && !defined(SQLITE_HAS_CODEC) |
| 40 | +# define SQLITE_HAS_CODEC |
| 41 | +#endif |
| 39 | 42 | #include <sqlite3.h> |
| 40 | 43 | #include <sys/types.h> |
| 41 | 44 | #include <sys/stat.h> |
| 42 | 45 | #include <unistd.h> |
| 43 | 46 | #include <time.h> |
| | @@ -1048,14 +1051,20 @@ |
| 1048 | 1051 | void db_maybe_set_encryption_key(sqlite3 *db, const char *zDbName){ |
| 1049 | 1052 | Blob key; |
| 1050 | 1053 | blob_init(&key, 0, 0); |
| 1051 | 1054 | db_maybe_obtain_encryption_key(zDbName, &key); |
| 1052 | 1055 | 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); |
| 1056 | + if( fossil_getenv("FOSSIL_USE_SEE_TEXTKEY")==0 ){ |
| 1057 | + char *zCmd = sqlite3_mprintf("PRAGMA key(%Q)", blob_str(&key)); |
| 1058 | + sqlite3_exec(db, zCmd, 0, 0, 0); |
| 1059 | + fossil_secure_zero(zCmd, strlen(zCmd)); |
| 1060 | + sqlite3_free(zCmd); |
| 1061 | +#if USE_SEE |
| 1062 | + }else{ |
| 1063 | + sqlite3_key(db, blob_str(&key), -1); |
| 1064 | +#endif |
| 1065 | + } |
| 1057 | 1066 | } |
| 1058 | 1067 | blob_reset(&key); |
| 1059 | 1068 | } |
| 1060 | 1069 | |
| 1061 | 1070 | /* |
| | @@ -1107,19 +1116,30 @@ |
| 1107 | 1116 | /* |
| 1108 | 1117 | ** zDbName is the name of a database file. Attach zDbName using |
| 1109 | 1118 | ** the name zLabel. |
| 1110 | 1119 | */ |
| 1111 | 1120 | void db_attach(const char *zDbName, const char *zLabel){ |
| 1112 | | - char *zCmd; |
| 1113 | 1121 | Blob key; |
| 1114 | 1122 | blob_init(&key, 0, 0); |
| 1115 | 1123 | db_maybe_obtain_encryption_key(zDbName, &key); |
| 1116 | | - zCmd = sqlite3_mprintf("ATTACH DATABASE %Q AS %Q KEY %Q", |
| 1117 | | - zDbName, zLabel, blob_str(&key)); |
| 1118 | | - db_multi_exec(zCmd /*works-like:""*/); |
| 1119 | | - fossil_secure_zero(zCmd, strlen(zCmd)); |
| 1120 | | - sqlite3_free(zCmd); |
| 1124 | + if( fossil_getenv("FOSSIL_USE_SEE_TEXTKEY")==0 ){ |
| 1125 | + char *zCmd = sqlite3_mprintf("ATTACH DATABASE %Q AS %Q KEY %Q", |
| 1126 | + zDbName, zLabel, blob_str(&key)); |
| 1127 | + db_multi_exec(zCmd /*works-like:""*/); |
| 1128 | + fossil_secure_zero(zCmd, strlen(zCmd)); |
| 1129 | + sqlite3_free(zCmd); |
| 1130 | + }else{ |
| 1131 | + char *zCmd = sqlite3_mprintf("ATTACH DATABASE %Q AS %Q KEY ''", |
| 1132 | + zDbName, zLabel); |
| 1133 | + db_multi_exec(zCmd /*works-like:""*/); |
| 1134 | + sqlite3_free(zCmd); |
| 1135 | +#if USE_SEE |
| 1136 | + if( blob_size(&key)>0 ){ |
| 1137 | + sqlite3_key_v2(g.db, zLabel, blob_str(&key), -1); |
| 1138 | + } |
| 1139 | +#endif |
| 1140 | + } |
| 1121 | 1141 | blob_reset(&key); |
| 1122 | 1142 | } |
| 1123 | 1143 | |
| 1124 | 1144 | /* |
| 1125 | 1145 | ** Change the schema name of the "main" database to zLabel. |
| 1126 | 1146 | |