Fossil SCM

Enhancements to SEE integration.

mistachkin 2017-05-30 19:23 trunk merge
Commit 00dfbdbf7edc5a04e898e956bb007add45f850c9dd78372e562bb68f47c61831
--- src/config.h
+++ src/config.h
@@ -185,10 +185,13 @@
185185
typedef unsigned __int64 uint64_t;
186186
#else
187187
# include <stdint.h>
188188
#endif
189189
190
+#if USE_SEE && !defined(SQLITE_HAS_CODEC)
191
+# define SQLITE_HAS_CODEC
192
+#endif
190193
#include "sqlite3.h"
191194
192195
/*
193196
** On Solaris, getpass() will only return up to 8 characters. getpassphrase() returns up to 257.
194197
*/
195198
--- 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
+30 -10
--- src/db.c
+++ src/db.c
@@ -34,10 +34,13 @@
3434
# include <windows.h>
3535
# endif
3636
#else
3737
# include <pwd.h>
3838
#endif
39
+#if USE_SEE && !defined(SQLITE_HAS_CODEC)
40
+# define SQLITE_HAS_CODEC
41
+#endif
3942
#include <sqlite3.h>
4043
#include <sys/types.h>
4144
#include <sys/stat.h>
4245
#include <unistd.h>
4346
#include <time.h>
@@ -1048,14 +1051,20 @@
10481051
void db_maybe_set_encryption_key(sqlite3 *db, const char *zDbName){
10491052
Blob key;
10501053
blob_init(&key, 0, 0);
10511054
db_maybe_obtain_encryption_key(zDbName, &key);
10521055
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
+ }
10571066
}
10581067
blob_reset(&key);
10591068
}
10601069
10611070
/*
@@ -1107,19 +1116,30 @@
11071116
/*
11081117
** zDbName is the name of a database file. Attach zDbName using
11091118
** the name zLabel.
11101119
*/
11111120
void db_attach(const char *zDbName, const char *zLabel){
1112
- char *zCmd;
11131121
Blob key;
11141122
blob_init(&key, 0, 0);
11151123
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
+ }
11211141
blob_reset(&key);
11221142
}
11231143
11241144
/*
11251145
** Change the schema name of the "main" database to zLabel.
11261146
--- 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 @@
569569
SQLITE3_SHELL_SRC.0 = shell.c
570570
SQLITE3_SHELL_SRC.1 = shell-see.c
571571
SQLITE3_SHELL_SRC. = shell.c
572572
SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE))
573573
SEE_FLAGS.0 =
574
-SEE_FLAGS.1 = -DSQLITE_HAS_CODEC
574
+SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key
575575
SEE_FLAGS. =
576576
SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE))
577577
578578
579579
EXTRAOBJ = \
580580
--- 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
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -387,11 +387,11 @@
387387
SQLITE3_SHELL_SRC.0 = shell.c
388388
SQLITE3_SHELL_SRC.1 = shell-see.c
389389
SQLITE3_SHELL_SRC. = shell.c
390390
SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE))
391391
SEE_FLAGS.0 =
392
-SEE_FLAGS.1 = -DSQLITE_HAS_CODEC
392
+SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key
393393
SEE_FLAGS. =
394394
SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE))
395395
}]
396396
397397
writeln [string map [list <<<NEXT_LINE>>> \\] {
@@ -1072,11 +1072,11 @@
10721072
SQLITE3_SHELL_SRC.0 = shell.c
10731073
SQLITE3_SHELL_SRC.1 = shell-see.c
10741074
SQLITE3_SHELL_SRC. = shell.c
10751075
SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE))
10761076
SEE_FLAGS.0 =
1077
-SEE_FLAGS.1 = -DSQLITE_HAS_CODEC
1077
+SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key
10781078
SEE_FLAGS. =
10791079
SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE))
10801080
}
10811081
10821082
writeln [string map [list <<<NEXT_LINE>>> \\] {
@@ -1850,11 +1850,11 @@
18501850
18511851
codecheck1$E: $(SRCDIR)\codecheck1.c
18521852
$(BCC) $**
18531853
18541854
!if $(USE_SEE)!=0
1855
-SEE_FLAGS = /DSQLITE_HAS_CODEC=1
1855
+SEE_FLAGS = /DSQLITE_HAS_CODEC=1 /DSQLITE_SHELL_DBKEY_PROC=fossil_key
18561856
SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c
18571857
SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c
18581858
!else
18591859
SEE_FLAGS =
18601860
SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c
18611861
--- 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 @@
151151
search_sql_setup(db);
152152
foci_register(db);
153153
g.repositoryOpen = 1;
154154
g.db = db;
155155
sqlite3_db_config(db, SQLITE_DBCONFIG_MAINDBNAME, "repository");
156
+ db_maybe_set_encryption_key(db, g.zRepositoryName);
156157
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);
158160
sqlite3_exec(db, zSql, 0, 0, 0);
159161
sqlite3_free(zSql);
160162
}
161163
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);
163166
sqlite3_exec(db, zSql, 0, 0, 0);
164167
sqlite3_free(zSql);
165168
}
166169
return SQLITE_OK;
167170
}
@@ -179,10 +182,39 @@
179182
*/
180183
void fossil_open(const char **pzRepoName){
181184
sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit);
182185
*pzRepoName = g.zRepositoryName;
183186
}
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
184216
185217
/*
186218
** This routine closes the Fossil databases and/or invalidates the global
187219
** state variables that keep track of them.
188220
*/
189221
--- 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
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -980,11 +980,11 @@
980980
SQLITE3_SHELL_SRC.0 = shell.c
981981
SQLITE3_SHELL_SRC.1 = shell-see.c
982982
SQLITE3_SHELL_SRC. = shell.c
983983
SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE))
984984
SEE_FLAGS.0 =
985
-SEE_FLAGS.1 = -DSQLITE_HAS_CODEC
985
+SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key
986986
SEE_FLAGS. =
987987
SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE))
988988
989989
990990
EXTRAOBJ = \
991991
--- 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
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -980,11 +980,11 @@
980980
SQLITE3_SHELL_SRC.0 = shell.c
981981
SQLITE3_SHELL_SRC.1 = shell-see.c
982982
SQLITE3_SHELL_SRC. = shell.c
983983
SQLITE3_SHELL_SRC = $(SRCDIR)/$(SQLITE3_SHELL_SRC.$(USE_SEE))
984984
SEE_FLAGS.0 =
985
-SEE_FLAGS.1 = -DSQLITE_HAS_CODEC
985
+SEE_FLAGS.1 = -DSQLITE_HAS_CODEC -DSQLITE_SHELL_DBKEY_PROC=fossil_key
986986
SEE_FLAGS. =
987987
SEE_FLAGS = $(SEE_FLAGS.$(USE_SEE))
988988
989989
990990
EXTRAOBJ = \
991991
--- 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
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -867,11 +867,11 @@
867867
868868
codecheck1$E: $(SRCDIR)\codecheck1.c
869869
$(BCC) $**
870870
871871
!if $(USE_SEE)!=0
872
-SEE_FLAGS = /DSQLITE_HAS_CODEC=1
872
+SEE_FLAGS = /DSQLITE_HAS_CODEC=1 /DSQLITE_SHELL_DBKEY_PROC=fossil_key
873873
SQLITE3_SHELL_SRC = $(SRCDIR)\shell-see.c
874874
SQLITE3_SRC = $(SRCDIR)\sqlite3-see.c
875875
!else
876876
SEE_FLAGS =
877877
SQLITE3_SHELL_SRC = $(SRCDIR)\shell.c
878878
--- 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
--- www/env-opts.md
+++ www/env-opts.md
@@ -141,10 +141,16 @@
141141
`FOSSIL_HOME`: Location of the `~/.fossil` file. The first environment
142142
variable found in the environment from the list `FOSSIL_HOME`,
143143
`LOCALAPPDATA` (Windows), `APPDATA` (Windows), `HOMEDRIVE` and
144144
`HOMEPATH` (Windows, used together), and `HOME` is used as the
145145
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
+
146152
147153
`FOSSIL_USER`: Name of the default user account if the checkout, local
148154
or global `default-user` setting is not present. The first environment
149155
variable found in the environment from the list `FOSSIL_USER`, `USER`,
150156
`LOGNAME`, and `USERNAME` is the user name. If none of those are set,
151157
--- 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

Keyboard Shortcuts

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