Fossil SCM
Enhancements to SEE integration.
Commit
00dfbdbf7edc5a04e898e956bb007add45f850c9dd78372e562bb68f47c61831
Parent
d6422ab0f0a31a2…
9 files changed
+3
+30
-10
+1
-1
+3
-3
+34
-2
+1
-1
+1
-1
+1
-1
+6
+3
| --- src/config.h | ||
| +++ src/config.h | ||
| @@ -185,10 +185,13 @@ | ||
| 185 | 185 | typedef unsigned __int64 uint64_t; |
| 186 | 186 | #else |
| 187 | 187 | # include <stdint.h> |
| 188 | 188 | #endif |
| 189 | 189 | |
| 190 | +#if USE_SEE && !defined(SQLITE_HAS_CODEC) | |
| 191 | +# define SQLITE_HAS_CODEC | |
| 192 | +#endif | |
| 190 | 193 | #include "sqlite3.h" |
| 191 | 194 | |
| 192 | 195 | /* |
| 193 | 196 | ** On Solaris, getpass() will only return up to 8 characters. getpassphrase() returns up to 257. |
| 194 | 197 | */ |
| 195 | 198 |
| --- src/config.h | |
| +++ src/config.h | |
| @@ -185,10 +185,13 @@ | |
| 185 | typedef unsigned __int64 uint64_t; |
| 186 | #else |
| 187 | # include <stdint.h> |
| 188 | #endif |
| 189 | |
| 190 | #include "sqlite3.h" |
| 191 | |
| 192 | /* |
| 193 | ** On Solaris, getpass() will only return up to 8 characters. getpassphrase() returns up to 257. |
| 194 | */ |
| 195 |
| --- src/config.h | |
| +++ src/config.h | |
| @@ -185,10 +185,13 @@ | |
| 185 | typedef unsigned __int64 uint64_t; |
| 186 | #else |
| 187 | # include <stdint.h> |
| 188 | #endif |
| 189 | |
| 190 | #if USE_SEE && !defined(SQLITE_HAS_CODEC) |
| 191 | # define SQLITE_HAS_CODEC |
| 192 | #endif |
| 193 | #include "sqlite3.h" |
| 194 | |
| 195 | /* |
| 196 | ** On Solaris, getpass() will only return up to 8 characters. getpassphrase() returns up to 257. |
| 197 | */ |
| 198 |
M
src/db.c
+30
-10
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -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 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -34,10 +34,13 @@ | |
| 34 | # include <windows.h> |
| 35 | # endif |
| 36 | #else |
| 37 | # include <pwd.h> |
| 38 | #endif |
| 39 | #include <sqlite3.h> |
| 40 | #include <sys/types.h> |
| 41 | #include <sys/stat.h> |
| 42 | #include <unistd.h> |
| 43 | #include <time.h> |
| @@ -1048,14 +1051,20 @@ | |
| 1048 | void db_maybe_set_encryption_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 | /* |
| @@ -1107,19 +1116,30 @@ | |
| 1107 | /* |
| 1108 | ** zDbName is the name of a database file. Attach zDbName using |
| 1109 | ** the name zLabel. |
| 1110 | */ |
| 1111 | void db_attach(const char *zDbName, const char *zLabel){ |
| 1112 | char *zCmd; |
| 1113 | Blob key; |
| 1114 | blob_init(&key, 0, 0); |
| 1115 | 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); |
| 1121 | blob_reset(&key); |
| 1122 | } |
| 1123 | |
| 1124 | /* |
| 1125 | ** Change the schema name of the "main" database to zLabel. |
| 1126 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -34,10 +34,13 @@ | |
| 34 | # include <windows.h> |
| 35 | # endif |
| 36 | #else |
| 37 | # include <pwd.h> |
| 38 | #endif |
| 39 | #if USE_SEE && !defined(SQLITE_HAS_CODEC) |
| 40 | # define SQLITE_HAS_CODEC |
| 41 | #endif |
| 42 | #include <sqlite3.h> |
| 43 | #include <sys/types.h> |
| 44 | #include <sys/stat.h> |
| 45 | #include <unistd.h> |
| 46 | #include <time.h> |
| @@ -1048,14 +1051,20 @@ | |
| 1051 | void db_maybe_set_encryption_key(sqlite3 *db, const char *zDbName){ |
| 1052 | Blob key; |
| 1053 | blob_init(&key, 0, 0); |
| 1054 | db_maybe_obtain_encryption_key(zDbName, &key); |
| 1055 | if( blob_size(&key)>0 ){ |
| 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 | } |
| 1066 | } |
| 1067 | blob_reset(&key); |
| 1068 | } |
| 1069 | |
| 1070 | /* |
| @@ -1107,19 +1116,30 @@ | |
| 1116 | /* |
| 1117 | ** zDbName is the name of a database file. Attach zDbName using |
| 1118 | ** the name zLabel. |
| 1119 | */ |
| 1120 | void db_attach(const char *zDbName, const char *zLabel){ |
| 1121 | Blob key; |
| 1122 | blob_init(&key, 0, 0); |
| 1123 | db_maybe_obtain_encryption_key(zDbName, &key); |
| 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 | } |
| 1141 | blob_reset(&key); |
| 1142 | } |
| 1143 | |
| 1144 | /* |
| 1145 | ** Change the schema name of the "main" database to zLabel. |
| 1146 |
+1
-1
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -569,11 +569,11 @@ | ||
| 569 | 569 | SQLITE3_SHELL_SRC.0 = shell.c |
| 570 | 570 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 571 | 571 | SQLITE3_SHELL_SRC. = shell.c |
| 572 | 572 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 573 | 573 | SEE_FLAGS.0 = |
| 574 | -SEE_FLAGS.1 = -DSQLITE_HAS_CODEC | |
| 574 | +SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 575 | 575 | SEE_FLAGS. = |
| 576 | 576 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 577 | 577 | |
| 578 | 578 | |
| 579 | 579 | EXTRAOBJ = \ |
| 580 | 580 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -569,11 +569,11 @@ | |
| 569 | SQLITE3_SHELL_SRC.0 = shell.c |
| 570 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 571 | SQLITE3_SHELL_SRC. = shell.c |
| 572 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 573 | SEE_FLAGS.0 = |
| 574 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC |
| 575 | SEE_FLAGS. = |
| 576 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 577 | |
| 578 | |
| 579 | EXTRAOBJ = \ |
| 580 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -569,11 +569,11 @@ | |
| 569 | SQLITE3_SHELL_SRC.0 = shell.c |
| 570 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 571 | SQLITE3_SHELL_SRC. = shell.c |
| 572 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 573 | SEE_FLAGS.0 = |
| 574 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 575 | SEE_FLAGS. = |
| 576 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 577 | |
| 578 | |
| 579 | EXTRAOBJ = \ |
| 580 |
+3
-3
| --- src/makemake.tcl | ||
| +++ src/makemake.tcl | ||
| @@ -387,11 +387,11 @@ | ||
| 387 | 387 | SQLITE3_SHELL_SRC.0 = shell.c |
| 388 | 388 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 389 | 389 | SQLITE3_SHELL_SRC. = shell.c |
| 390 | 390 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 391 | 391 | SEE_FLAGS.0 = |
| 392 | -SEE_FLAGS.1 = -DSQLITE_HAS_CODEC | |
| 392 | +SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 393 | 393 | SEE_FLAGS. = |
| 394 | 394 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 395 | 395 | }] |
| 396 | 396 | |
| 397 | 397 | writeln [string map [list <<<NEXT_LINE>>> \\] { |
| @@ -1072,11 +1072,11 @@ | ||
| 1072 | 1072 | SQLITE3_SHELL_SRC.0 = shell.c |
| 1073 | 1073 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 1074 | 1074 | SQLITE3_SHELL_SRC. = shell.c |
| 1075 | 1075 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 1076 | 1076 | SEE_FLAGS.0 = |
| 1077 | -SEE_FLAGS.1 = -DSQLITE_HAS_CODEC | |
| 1077 | +SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 1078 | 1078 | SEE_FLAGS. = |
| 1079 | 1079 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 1080 | 1080 | } |
| 1081 | 1081 | |
| 1082 | 1082 | writeln [string map [list <<<NEXT_LINE>>> \\] { |
| @@ -1850,11 +1850,11 @@ | ||
| 1850 | 1850 | |
| 1851 | 1851 | codecheck1$E: $(SRCDIR)\codecheck1.c |
| 1852 | 1852 | $(BCC) $** |
| 1853 | 1853 | |
| 1854 | 1854 | !if $(USE_SEE)!=0 |
| 1855 | -SEE_FLAGS = /DSQLITE_HAS_CODEC=1 | |
| 1855 | +SEE_FLAGS = /DSQLITE_HAS_CODEC=1 /DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 1856 | 1856 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c |
| 1857 | 1857 | SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c |
| 1858 | 1858 | !else |
| 1859 | 1859 | SEE_FLAGS = |
| 1860 | 1860 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c |
| 1861 | 1861 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -387,11 +387,11 @@ | |
| 387 | SQLITE3_SHELL_SRC.0 = shell.c |
| 388 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 389 | SQLITE3_SHELL_SRC. = shell.c |
| 390 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 391 | SEE_FLAGS.0 = |
| 392 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC |
| 393 | SEE_FLAGS. = |
| 394 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 395 | }] |
| 396 | |
| 397 | writeln [string map [list <<<NEXT_LINE>>> \\] { |
| @@ -1072,11 +1072,11 @@ | |
| 1072 | SQLITE3_SHELL_SRC.0 = shell.c |
| 1073 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 1074 | SQLITE3_SHELL_SRC. = shell.c |
| 1075 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 1076 | SEE_FLAGS.0 = |
| 1077 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC |
| 1078 | SEE_FLAGS. = |
| 1079 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 1080 | } |
| 1081 | |
| 1082 | writeln [string map [list <<<NEXT_LINE>>> \\] { |
| @@ -1850,11 +1850,11 @@ | |
| 1850 | |
| 1851 | codecheck1$E: $(SRCDIR)\codecheck1.c |
| 1852 | $(BCC) $** |
| 1853 | |
| 1854 | !if $(USE_SEE)!=0 |
| 1855 | SEE_FLAGS = /DSQLITE_HAS_CODEC=1 |
| 1856 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c |
| 1857 | SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c |
| 1858 | !else |
| 1859 | SEE_FLAGS = |
| 1860 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c |
| 1861 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -387,11 +387,11 @@ | |
| 387 | SQLITE3_SHELL_SRC.0 = shell.c |
| 388 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 389 | SQLITE3_SHELL_SRC. = shell.c |
| 390 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 391 | SEE_FLAGS.0 = |
| 392 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 393 | SEE_FLAGS. = |
| 394 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 395 | }] |
| 396 | |
| 397 | writeln [string map [list <<<NEXT_LINE>>> \\] { |
| @@ -1072,11 +1072,11 @@ | |
| 1072 | SQLITE3_SHELL_SRC.0 = shell.c |
| 1073 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 1074 | SQLITE3_SHELL_SRC. = shell.c |
| 1075 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 1076 | SEE_FLAGS.0 = |
| 1077 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 1078 | SEE_FLAGS. = |
| 1079 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 1080 | } |
| 1081 | |
| 1082 | writeln [string map [list <<<NEXT_LINE>>> \\] { |
| @@ -1850,11 +1850,11 @@ | |
| 1850 | |
| 1851 | codecheck1$E: $(SRCDIR)\codecheck1.c |
| 1852 | $(BCC) $** |
| 1853 | |
| 1854 | !if $(USE_SEE)!=0 |
| 1855 | SEE_FLAGS = /DSQLITE_HAS_CODEC=1 /DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 1856 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c |
| 1857 | SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c |
| 1858 | !else |
| 1859 | SEE_FLAGS = |
| 1860 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c |
| 1861 |
+34
-2
| --- src/sqlcmd.c | ||
| +++ src/sqlcmd.c | ||
| @@ -151,17 +151,20 @@ | ||
| 151 | 151 | search_sql_setup(db); |
| 152 | 152 | foci_register(db); |
| 153 | 153 | g.repositoryOpen = 1; |
| 154 | 154 | g.db = db; |
| 155 | 155 | sqlite3_db_config(db, SQLITE_DBCONFIG_MAINDBNAME, "repository"); |
| 156 | + db_maybe_set_encryption_key(db, g.zRepositoryName); | |
| 156 | 157 | if( g.zLocalDbName ){ |
| 157 | - char *zSql = sqlite3_mprintf("ATTACH %Q AS 'localdb'", g.zLocalDbName); | |
| 158 | + char *zSql = sqlite3_mprintf("ATTACH %Q AS 'localdb' KEY ''", | |
| 159 | + g.zLocalDbName); | |
| 158 | 160 | sqlite3_exec(db, zSql, 0, 0, 0); |
| 159 | 161 | sqlite3_free(zSql); |
| 160 | 162 | } |
| 161 | 163 | if( g.zConfigDbName ){ |
| 162 | - char *zSql = sqlite3_mprintf("ATTACH %Q AS 'configdb'", g.zConfigDbName); | |
| 164 | + char *zSql = sqlite3_mprintf("ATTACH %Q AS 'configdb' KEY ''", | |
| 165 | + g.zConfigDbName); | |
| 163 | 166 | sqlite3_exec(db, zSql, 0, 0, 0); |
| 164 | 167 | sqlite3_free(zSql); |
| 165 | 168 | } |
| 166 | 169 | return SQLITE_OK; |
| 167 | 170 | } |
| @@ -179,10 +182,39 @@ | ||
| 179 | 182 | */ |
| 180 | 183 | void fossil_open(const char **pzRepoName){ |
| 181 | 184 | sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit); |
| 182 | 185 | *pzRepoName = g.zRepositoryName; |
| 183 | 186 | } |
| 187 | + | |
| 188 | +#if USE_SEE | |
| 189 | +/* | |
| 190 | +** This routine is called by the patched sqlite3 command-line shell in order | |
| 191 | +** to load the encryption key for the open Fossil database. The memory that | |
| 192 | +** is pointed to by the value placed in pzKey must be obtained from SQLite. | |
| 193 | +*/ | |
| 194 | +void fossil_key(const char **pzKey, int *pnKey){ | |
| 195 | + char *zSavedKey = db_get_saved_encryption_key(); | |
| 196 | + char *zKey; | |
| 197 | + size_t savedKeySize = db_get_saved_encryption_key_size(); | |
| 198 | + size_t nByte; | |
| 199 | + | |
| 200 | + if( zSavedKey==0 || savedKeySize==0 ) return; | |
| 201 | + nByte = savedKeySize * sizeof(char); | |
| 202 | + zKey = sqlite3_malloc( (int)nByte ); | |
| 203 | + if( zKey ){ | |
| 204 | + memcpy(zKey, zSavedKey, nByte); | |
| 205 | + *pzKey = zKey; | |
| 206 | + if( fossil_getenv("FOSSIL_USE_SEE_TEXTKEY")==0 ){ | |
| 207 | + *pnKey = (int)strlen(zKey); | |
| 208 | + }else{ | |
| 209 | + *pnKey = -1; | |
| 210 | + } | |
| 211 | + }else{ | |
| 212 | + fossil_fatal("failed to allocate %u bytes for key", nByte); | |
| 213 | + } | |
| 214 | +} | |
| 215 | +#endif | |
| 184 | 216 | |
| 185 | 217 | /* |
| 186 | 218 | ** This routine closes the Fossil databases and/or invalidates the global |
| 187 | 219 | ** state variables that keep track of them. |
| 188 | 220 | */ |
| 189 | 221 |
| --- src/sqlcmd.c | |
| +++ src/sqlcmd.c | |
| @@ -151,17 +151,20 @@ | |
| 151 | search_sql_setup(db); |
| 152 | foci_register(db); |
| 153 | g.repositoryOpen = 1; |
| 154 | g.db = db; |
| 155 | sqlite3_db_config(db, SQLITE_DBCONFIG_MAINDBNAME, "repository"); |
| 156 | if( g.zLocalDbName ){ |
| 157 | char *zSql = sqlite3_mprintf("ATTACH %Q AS 'localdb'", g.zLocalDbName); |
| 158 | sqlite3_exec(db, zSql, 0, 0, 0); |
| 159 | sqlite3_free(zSql); |
| 160 | } |
| 161 | if( g.zConfigDbName ){ |
| 162 | char *zSql = sqlite3_mprintf("ATTACH %Q AS 'configdb'", g.zConfigDbName); |
| 163 | sqlite3_exec(db, zSql, 0, 0, 0); |
| 164 | sqlite3_free(zSql); |
| 165 | } |
| 166 | return SQLITE_OK; |
| 167 | } |
| @@ -179,10 +182,39 @@ | |
| 179 | */ |
| 180 | void fossil_open(const char **pzRepoName){ |
| 181 | sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit); |
| 182 | *pzRepoName = g.zRepositoryName; |
| 183 | } |
| 184 | |
| 185 | /* |
| 186 | ** This routine closes the Fossil databases and/or invalidates the global |
| 187 | ** state variables that keep track of them. |
| 188 | */ |
| 189 |
| --- src/sqlcmd.c | |
| +++ src/sqlcmd.c | |
| @@ -151,17 +151,20 @@ | |
| 151 | search_sql_setup(db); |
| 152 | foci_register(db); |
| 153 | g.repositoryOpen = 1; |
| 154 | g.db = db; |
| 155 | sqlite3_db_config(db, SQLITE_DBCONFIG_MAINDBNAME, "repository"); |
| 156 | db_maybe_set_encryption_key(db, g.zRepositoryName); |
| 157 | if( g.zLocalDbName ){ |
| 158 | char *zSql = sqlite3_mprintf("ATTACH %Q AS 'localdb' KEY ''", |
| 159 | g.zLocalDbName); |
| 160 | sqlite3_exec(db, zSql, 0, 0, 0); |
| 161 | sqlite3_free(zSql); |
| 162 | } |
| 163 | if( g.zConfigDbName ){ |
| 164 | char *zSql = sqlite3_mprintf("ATTACH %Q AS 'configdb' KEY ''", |
| 165 | g.zConfigDbName); |
| 166 | sqlite3_exec(db, zSql, 0, 0, 0); |
| 167 | sqlite3_free(zSql); |
| 168 | } |
| 169 | return SQLITE_OK; |
| 170 | } |
| @@ -179,10 +182,39 @@ | |
| 182 | */ |
| 183 | void fossil_open(const char **pzRepoName){ |
| 184 | sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit); |
| 185 | *pzRepoName = g.zRepositoryName; |
| 186 | } |
| 187 | |
| 188 | #if USE_SEE |
| 189 | /* |
| 190 | ** This routine is called by the patched sqlite3 command-line shell in order |
| 191 | ** to load the encryption key for the open Fossil database. The memory that |
| 192 | ** is pointed to by the value placed in pzKey must be obtained from SQLite. |
| 193 | */ |
| 194 | void fossil_key(const char **pzKey, int *pnKey){ |
| 195 | char *zSavedKey = db_get_saved_encryption_key(); |
| 196 | char *zKey; |
| 197 | size_t savedKeySize = db_get_saved_encryption_key_size(); |
| 198 | size_t nByte; |
| 199 | |
| 200 | if( zSavedKey==0 || savedKeySize==0 ) return; |
| 201 | nByte = savedKeySize * sizeof(char); |
| 202 | zKey = sqlite3_malloc( (int)nByte ); |
| 203 | if( zKey ){ |
| 204 | memcpy(zKey, zSavedKey, nByte); |
| 205 | *pzKey = zKey; |
| 206 | if( fossil_getenv("FOSSIL_USE_SEE_TEXTKEY")==0 ){ |
| 207 | *pnKey = (int)strlen(zKey); |
| 208 | }else{ |
| 209 | *pnKey = -1; |
| 210 | } |
| 211 | }else{ |
| 212 | fossil_fatal("failed to allocate %u bytes for key", nByte); |
| 213 | } |
| 214 | } |
| 215 | #endif |
| 216 | |
| 217 | /* |
| 218 | ** This routine closes the Fossil databases and/or invalidates the global |
| 219 | ** state variables that keep track of them. |
| 220 | */ |
| 221 |
+1
-1
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -980,11 +980,11 @@ | ||
| 980 | 980 | SQLITE3_SHELL_SRC.0 = shell.c |
| 981 | 981 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 982 | 982 | SQLITE3_SHELL_SRC. = shell.c |
| 983 | 983 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 984 | 984 | SEE_FLAGS.0 = |
| 985 | -SEE_FLAGS.1 = -DSQLITE_HAS_CODEC | |
| 985 | +SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 986 | 986 | SEE_FLAGS. = |
| 987 | 987 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 988 | 988 | |
| 989 | 989 | |
| 990 | 990 | EXTRAOBJ = \ |
| 991 | 991 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -980,11 +980,11 @@ | |
| 980 | SQLITE3_SHELL_SRC.0 = shell.c |
| 981 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 982 | SQLITE3_SHELL_SRC. = shell.c |
| 983 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 984 | SEE_FLAGS.0 = |
| 985 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC |
| 986 | SEE_FLAGS. = |
| 987 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 988 | |
| 989 | |
| 990 | EXTRAOBJ = \ |
| 991 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -980,11 +980,11 @@ | |
| 980 | SQLITE3_SHELL_SRC.0 = shell.c |
| 981 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 982 | SQLITE3_SHELL_SRC. = shell.c |
| 983 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 984 | SEE_FLAGS.0 = |
| 985 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 986 | SEE_FLAGS. = |
| 987 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 988 | |
| 989 | |
| 990 | EXTRAOBJ = \ |
| 991 |
+1
-1
| --- win/Makefile.mingw.mistachkin | ||
| +++ win/Makefile.mingw.mistachkin | ||
| @@ -980,11 +980,11 @@ | ||
| 980 | 980 | SQLITE3_SHELL_SRC.0 = shell.c |
| 981 | 981 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 982 | 982 | SQLITE3_SHELL_SRC. = shell.c |
| 983 | 983 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 984 | 984 | SEE_FLAGS.0 = |
| 985 | -SEE_FLAGS.1 = -DSQLITE_HAS_CODEC | |
| 985 | +SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 986 | 986 | SEE_FLAGS. = |
| 987 | 987 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 988 | 988 | |
| 989 | 989 | |
| 990 | 990 | EXTRAOBJ = \ |
| 991 | 991 |
| --- win/Makefile.mingw.mistachkin | |
| +++ win/Makefile.mingw.mistachkin | |
| @@ -980,11 +980,11 @@ | |
| 980 | SQLITE3_SHELL_SRC.0 = shell.c |
| 981 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 982 | SQLITE3_SHELL_SRC. = shell.c |
| 983 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 984 | SEE_FLAGS.0 = |
| 985 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC |
| 986 | SEE_FLAGS. = |
| 987 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 988 | |
| 989 | |
| 990 | EXTRAOBJ = \ |
| 991 |
| --- win/Makefile.mingw.mistachkin | |
| +++ win/Makefile.mingw.mistachkin | |
| @@ -980,11 +980,11 @@ | |
| 980 | SQLITE3_SHELL_SRC.0 = shell.c |
| 981 | SQLITE3_SHELL_SRC.1 = shell-see.c |
| 982 | SQLITE3_SHELL_SRC. = shell.c |
| 983 | SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE)) |
| 984 | SEE_FLAGS.0 = |
| 985 | SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 986 | SEE_FLAGS. = |
| 987 | SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE)) |
| 988 | |
| 989 | |
| 990 | EXTRAOBJ = \ |
| 991 |
+1
-1
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -867,11 +867,11 @@ | ||
| 867 | 867 | |
| 868 | 868 | codecheck1$E: $(SRCDIR)\codecheck1.c |
| 869 | 869 | $(BCC) $** |
| 870 | 870 | |
| 871 | 871 | !if $(USE_SEE)!=0 |
| 872 | -SEE_FLAGS = /DSQLITE_HAS_CODEC=1 | |
| 872 | +SEE_FLAGS = /DSQLITE_HAS_CODEC=1 /DSQLITE_SHELL_DBKEY_PROC=fossil_key | |
| 873 | 873 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c |
| 874 | 874 | SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c |
| 875 | 875 | !else |
| 876 | 876 | SEE_FLAGS = |
| 877 | 877 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c |
| 878 | 878 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -867,11 +867,11 @@ | |
| 867 | |
| 868 | codecheck1$E: $(SRCDIR)\codecheck1.c |
| 869 | $(BCC) $** |
| 870 | |
| 871 | !if $(USE_SEE)!=0 |
| 872 | SEE_FLAGS = /DSQLITE_HAS_CODEC=1 |
| 873 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c |
| 874 | SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c |
| 875 | !else |
| 876 | SEE_FLAGS = |
| 877 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c |
| 878 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -867,11 +867,11 @@ | |
| 867 | |
| 868 | codecheck1$E: $(SRCDIR)\codecheck1.c |
| 869 | $(BCC) $** |
| 870 | |
| 871 | !if $(USE_SEE)!=0 |
| 872 | SEE_FLAGS = /DSQLITE_HAS_CODEC=1 /DSQLITE_SHELL_DBKEY_PROC=fossil_key |
| 873 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c |
| 874 | SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c |
| 875 | !else |
| 876 | SEE_FLAGS = |
| 877 | SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c |
| 878 |
+6
| --- www/env-opts.md | ||
| +++ www/env-opts.md | ||
| @@ -141,10 +141,16 @@ | ||
| 141 | 141 | `FOSSIL_HOME`: Location of the `~/.fossil` file. The first environment |
| 142 | 142 | variable found in the environment from the list `FOSSIL_HOME`, |
| 143 | 143 | `LOCALAPPDATA` (Windows), `APPDATA` (Windows), `HOMEDRIVE` and |
| 144 | 144 | `HOMEPATH` (Windows, used together), and `HOME` is used as the |
| 145 | 145 | location of the `~/.fossil` file. |
| 146 | + | |
| 147 | + | |
| 148 | +`FOSSIL_USE_SEE_TEXTKEY`: If set, treat the encryption key string for | |
| 149 | +SEE as text to be hashed into the actaul encryption key. This has no | |
| 150 | +effect if Fossil was not compiled with SEE support enabled. | |
| 151 | + | |
| 146 | 152 | |
| 147 | 153 | `FOSSIL_USER`: Name of the default user account if the checkout, local |
| 148 | 154 | or global `default-user` setting is not present. The first environment |
| 149 | 155 | variable found in the environment from the list `FOSSIL_USER`, `USER`, |
| 150 | 156 | `LOGNAME`, and `USERNAME` is the user name. If none of those are set, |
| 151 | 157 |
| --- www/env-opts.md | |
| +++ www/env-opts.md | |
| @@ -141,10 +141,16 @@ | |
| 141 | `FOSSIL_HOME`: Location of the `~/.fossil` file. The first environment |
| 142 | variable found in the environment from the list `FOSSIL_HOME`, |
| 143 | `LOCALAPPDATA` (Windows), `APPDATA` (Windows), `HOMEDRIVE` and |
| 144 | `HOMEPATH` (Windows, used together), and `HOME` is used as the |
| 145 | location of the `~/.fossil` file. |
| 146 | |
| 147 | `FOSSIL_USER`: Name of the default user account if the checkout, local |
| 148 | or global `default-user` setting is not present. The first environment |
| 149 | variable found in the environment from the list `FOSSIL_USER`, `USER`, |
| 150 | `LOGNAME`, and `USERNAME` is the user name. If none of those are set, |
| 151 |
| --- www/env-opts.md | |
| +++ www/env-opts.md | |
| @@ -141,10 +141,16 @@ | |
| 141 | `FOSSIL_HOME`: Location of the `~/.fossil` file. The first environment |
| 142 | variable found in the environment from the list `FOSSIL_HOME`, |
| 143 | `LOCALAPPDATA` (Windows), `APPDATA` (Windows), `HOMEDRIVE` and |
| 144 | `HOMEPATH` (Windows, used together), and `HOME` is used as the |
| 145 | location of the `~/.fossil` file. |
| 146 | |
| 147 | |
| 148 | `FOSSIL_USE_SEE_TEXTKEY`: If set, treat the encryption key string for |
| 149 | SEE as text to be hashed into the actaul encryption key. This has no |
| 150 | effect if Fossil was not compiled with SEE support enabled. |
| 151 | |
| 152 | |
| 153 | `FOSSIL_USER`: Name of the default user account if the checkout, local |
| 154 | or global `default-user` setting is not present. The first environment |
| 155 | variable found in the environment from the list `FOSSIL_USER`, `USER`, |
| 156 | `LOGNAME`, and `USERNAME` is the user name. If none of those are set, |
| 157 |