aboutsummaryrefslogtreecommitdiff
path: root/src/namestore/plugin_namestore_sqlite.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/namestore/plugin_namestore_sqlite.c')
-rw-r--r--src/namestore/plugin_namestore_sqlite.c122
1 files changed, 86 insertions, 36 deletions
diff --git a/src/namestore/plugin_namestore_sqlite.c b/src/namestore/plugin_namestore_sqlite.c
index e93f800c3..d64ce10a8 100644
--- a/src/namestore/plugin_namestore_sqlite.c
+++ b/src/namestore/plugin_namestore_sqlite.c
@@ -137,16 +137,20 @@ create_indices (sqlite3 * dbh)
137{ 137{
138 /* create indices */ 138 /* create indices */
139 if ( (SQLITE_OK != 139 if ( (SQLITE_OK !=
140 sqlite3_exec (dbh, "CREATE INDEX IF NOT EXISTS ir_pkey_reverse ON ns097records (zone_private_key,pkey)", 140 sqlite3_exec (dbh,
141 "CREATE INDEX IF NOT EXISTS ir_pkey_reverse ON ns097records (zone_private_key,pkey)",
141 NULL, NULL, NULL)) || 142 NULL, NULL, NULL)) ||
142 (SQLITE_OK != 143 (SQLITE_OK !=
143 sqlite3_exec (dbh, "CREATE INDEX IF NOT EXISTS ir_pkey_iter ON ns097records (zone_private_key,rvalue)", 144 sqlite3_exec (dbh,
145 "CREATE INDEX IF NOT EXISTS ir_pkey_iter ON ns097records (zone_private_key,rvalue)",
144 NULL, NULL, NULL)) || 146 NULL, NULL, NULL)) ||
145 (SQLITE_OK != 147 (SQLITE_OK !=
146 sqlite3_exec (dbh, "CREATE INDEX IF NOT EXISTS it_iter ON ns097records (rvalue)", 148 sqlite3_exec (dbh,
149 "CREATE INDEX IF NOT EXISTS it_iter ON ns097records (rvalue)",
147 NULL, NULL, NULL)) ) 150 NULL, NULL, NULL)) )
148 LOG (GNUNET_ERROR_TYPE_ERROR, 151 LOG (GNUNET_ERROR_TYPE_ERROR,
149 "Failed to create indices: %s\n", sqlite3_errmsg (dbh)); 152 "Failed to create indices: %s\n",
153 sqlite3_errmsg (dbh));
150} 154}
151 155
152 156
@@ -178,16 +182,21 @@ database_setup (struct Plugin *plugin)
178#endif 182#endif
179 183
180 if (GNUNET_OK != 184 if (GNUNET_OK !=
181 GNUNET_CONFIGURATION_get_value_filename (plugin->cfg, "namestore-sqlite", 185 GNUNET_CONFIGURATION_get_value_filename (plugin->cfg,
182 "FILENAME", &afsdir)) 186 "namestore-sqlite",
187 "FILENAME",
188 &afsdir))
183 { 189 {
184 GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, 190 GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
185 "namestore-sqlite", "FILENAME"); 191 "namestore-sqlite",
192 "FILENAME");
186 return GNUNET_SYSERR; 193 return GNUNET_SYSERR;
187 } 194 }
188 if (GNUNET_OK != GNUNET_DISK_file_test (afsdir)) 195 if (GNUNET_OK !=
196 GNUNET_DISK_file_test (afsdir))
189 { 197 {
190 if (GNUNET_OK != GNUNET_DISK_directory_create_for_file (afsdir)) 198 if (GNUNET_OK !=
199 GNUNET_DISK_directory_create_for_file (afsdir))
191 { 200 {
192 GNUNET_break (0); 201 GNUNET_break (0);
193 GNUNET_free (afsdir); 202 GNUNET_free (afsdir);
@@ -206,28 +215,37 @@ database_setup (struct Plugin *plugin)
206 return GNUNET_SYSERR; 215 return GNUNET_SYSERR;
207 } 216 }
208 CHECK (SQLITE_OK == 217 CHECK (SQLITE_OK ==
209 sqlite3_exec (plugin->dbh, "PRAGMA temp_store=MEMORY", NULL, NULL, 218 sqlite3_exec (plugin->dbh,
219 "PRAGMA temp_store=MEMORY", NULL, NULL,
210 ENULL)); 220 ENULL));
211 CHECK (SQLITE_OK == 221 CHECK (SQLITE_OK ==
212 sqlite3_exec (plugin->dbh, "PRAGMA synchronous=NORMAL", NULL, NULL, 222 sqlite3_exec (plugin->dbh,
223 "PRAGMA synchronous=NORMAL", NULL, NULL,
213 ENULL)); 224 ENULL));
214 CHECK (SQLITE_OK == 225 CHECK (SQLITE_OK ==
215 sqlite3_exec (plugin->dbh, "PRAGMA legacy_file_format=OFF", NULL, NULL, 226 sqlite3_exec (plugin->dbh,
227 "PRAGMA legacy_file_format=OFF", NULL, NULL,
216 ENULL)); 228 ENULL));
217 CHECK (SQLITE_OK == 229 CHECK (SQLITE_OK ==
218 sqlite3_exec (plugin->dbh, "PRAGMA auto_vacuum=INCREMENTAL", NULL, 230 sqlite3_exec (plugin->dbh,
231 "PRAGMA auto_vacuum=INCREMENTAL", NULL,
219 NULL, ENULL)); 232 NULL, ENULL));
220 CHECK (SQLITE_OK == 233 CHECK (SQLITE_OK ==
221 sqlite3_exec (plugin->dbh, "PRAGMA encoding=\"UTF-8\"", NULL, 234 sqlite3_exec (plugin->dbh,
235 "PRAGMA encoding=\"UTF-8\"", NULL,
222 NULL, ENULL)); 236 NULL, ENULL));
223 CHECK (SQLITE_OK == 237 CHECK (SQLITE_OK ==
224 sqlite3_exec (plugin->dbh, "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL, 238 sqlite3_exec (plugin->dbh,
239 "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL,
225 ENULL)); 240 ENULL));
226 CHECK (SQLITE_OK == 241 CHECK (SQLITE_OK ==
227 sqlite3_exec (plugin->dbh, "PRAGMA page_size=4092", NULL, NULL, 242 sqlite3_exec (plugin->dbh,
243 "PRAGMA page_size=4092", NULL, NULL,
228 ENULL)); 244 ENULL));
229 245
230 CHECK (SQLITE_OK == sqlite3_busy_timeout (plugin->dbh, BUSY_TIMEOUT_MS)); 246 CHECK (SQLITE_OK ==
247 sqlite3_busy_timeout (plugin->dbh,
248 BUSY_TIMEOUT_MS));
231 249
232 250
233 /* Create table */ 251 /* Create table */
@@ -248,7 +266,8 @@ database_setup (struct Plugin *plugin)
248 ")", 266 ")",
249 NULL, NULL, NULL) != SQLITE_OK)) 267 NULL, NULL, NULL) != SQLITE_OK))
250 { 268 {
251 LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR, "sqlite3_exec"); 269 LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR,
270 "sqlite3_exec");
252 sqlite3_finalize (stmt); 271 sqlite3_finalize (stmt);
253 return GNUNET_SYSERR; 272 return GNUNET_SYSERR;
254 } 273 }
@@ -371,14 +390,17 @@ namestore_sqlite_store_records (void *cls,
371 for (i=0;i<rd_count;i++) 390 for (i=0;i<rd_count;i++)
372 if (GNUNET_GNSRECORD_TYPE_PKEY == rd[i].record_type) 391 if (GNUNET_GNSRECORD_TYPE_PKEY == rd[i].record_type)
373 { 392 {
374 GNUNET_break (sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey) == rd[i].data_size); 393 GNUNET_break (sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey) ==
394 rd[i].data_size);
375 GNUNET_memcpy (&pkey, 395 GNUNET_memcpy (&pkey,
376 rd[i].data, 396 rd[i].data,
377 rd[i].data_size); 397 rd[i].data_size);
378 break; 398 break;
379 } 399 }
380 rvalue = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX); 400 rvalue = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
381 data_size = GNUNET_GNSRECORD_records_get_size (rd_count, rd); 401 UINT64_MAX);
402 data_size = GNUNET_GNSRECORD_records_get_size (rd_count,
403 rd);
382 if (data_size > 64 * 65536) 404 if (data_size > 64 * 65536)
383 { 405 {
384 GNUNET_break (0); 406 GNUNET_break (0);
@@ -387,17 +409,29 @@ namestore_sqlite_store_records (void *cls,
387 { 409 {
388 char data[data_size]; 410 char data[data_size];
389 411
390 if (data_size != GNUNET_GNSRECORD_records_serialize (rd_count, rd, 412 if (data_size !=
391 data_size, data)) 413 GNUNET_GNSRECORD_records_serialize (rd_count,
414 rd,
415 data_size,
416 data))
392 { 417 {
393 GNUNET_break (0); 418 GNUNET_break (0);
394 return GNUNET_SYSERR; 419 return GNUNET_SYSERR;
395 } 420 }
396 421
397 /* First delete 'old' records */ 422 /* First delete 'old' records */
398 if ((SQLITE_OK != sqlite3_bind_blob (plugin->delete_records, 1, 423 if ((SQLITE_OK !=
399 zone_key, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), SQLITE_STATIC)) || 424 sqlite3_bind_blob (plugin->delete_records,
400 (SQLITE_OK != sqlite3_bind_text (plugin->delete_records, 2, label, -1, SQLITE_STATIC))) 425 1,
426 zone_key,
427 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey),
428 SQLITE_STATIC)) ||
429 (SQLITE_OK !=
430 sqlite3_bind_text (plugin->delete_records,
431 2,
432 label,
433 -1,
434 SQLITE_STATIC)))
401 { 435 {
402 LOG_SQLITE (plugin, 436 LOG_SQLITE (plugin,
403 GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 437 GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
@@ -416,14 +450,30 @@ namestore_sqlite_store_records (void *cls,
416 450
417 if (0 != rd_count) 451 if (0 != rd_count)
418 { 452 {
419 if ((SQLITE_OK != sqlite3_bind_blob (plugin->store_records, 1, 453 if ((SQLITE_OK !=
420 zone_key, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), SQLITE_STATIC)) || 454 sqlite3_bind_blob (plugin->store_records,
421 (SQLITE_OK != sqlite3_bind_blob (plugin->store_records, 2, 455 1,
422 &pkey, sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), SQLITE_STATIC)) || 456 zone_key,
423 (SQLITE_OK != sqlite3_bind_int64 (plugin->store_records, 3, rvalue)) || 457 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey),
424 (SQLITE_OK != sqlite3_bind_int (plugin->store_records, 4, rd_count)) || 458 SQLITE_STATIC)) ||
425 (SQLITE_OK != sqlite3_bind_blob (plugin->store_records, 5, data, data_size, SQLITE_STATIC)) || 459 (SQLITE_OK !=
426 (SQLITE_OK != sqlite3_bind_text (plugin->store_records, 6, label, -1, SQLITE_STATIC))) 460 sqlite3_bind_blob (plugin->store_records,
461 2,
462 &pkey,
463 sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey),
464 SQLITE_STATIC)) ||
465 (SQLITE_OK !=
466 sqlite3_bind_int64 (plugin->store_records, 3, rvalue)) ||
467 (SQLITE_OK !=
468 sqlite3_bind_int (plugin->store_records, 4, rd_count)) ||
469 (SQLITE_OK !=
470 sqlite3_bind_blob (plugin->store_records, 5,
471 data, data_size,
472 SQLITE_STATIC)) ||
473 (SQLITE_OK !=
474 sqlite3_bind_text (plugin->store_records, 6,
475 label, -1,
476 SQLITE_STATIC)))
427 { 477 {
428 LOG_SQLITE (plugin, 478 LOG_SQLITE (plugin,
429 GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 479 GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,