Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lavabit/magma.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLadar Levison <ladar@lavabit.com>2018-08-07 02:13:56 +0300
committerLadar Levison <ladar@lavabit.com>2018-08-07 02:31:38 +0300
commit07734d8fbab7e9a40e2fc7250f8594a989241a4b (patch)
tree30d5ca163920684d8f3fc0d1aa034b1d4c278a4d
parent67b77d8400720dd96b5c6d0b2af90a834152540c (diff)
Major version bump, because of incompatible changes to the magma schema.v7.0.0
A `magma.version` host config value was added to the schema scripts so magma can check for incompatible schema version revisions at launch. Additional users were added to the SQL data file that is used to seed the sandbox with data for unit testing. The schema shell scripts were tweaked. The schema.init.sh script no longer loads the sandbox seed data.
-rw-r--r--Makefile2
-rwxr-xr-xdev/scripts/database/schema.init.sh22
-rwxr-xr-xdev/scripts/database/schema.reset.sh25
-rw-r--r--res/sql/Data.sql69
-rw-r--r--res/sql/Hostname.sql2
-rw-r--r--res/sql/Version.sql1
-rw-r--r--src/engine/config/global/global.c5
7 files changed, 93 insertions, 33 deletions
diff --git a/Makefile b/Makefile
index 45747f59..15ae4081 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ MAKEFLAGS = --output-sync=target
# Identity of this package.
PACKAGE_NAME = Magma Daemon
PACKAGE_TARNAME = magma
-PACKAGE_VERSION = 6.4
+PACKAGE_VERSION = 7.0
PACKAGE_STRING = $(PACKAGE_NAME) $(PACKAGE_VERSION)
PACKAGE_BUGREPORT = support@lavabit.com
PACKAGE_URL = https://lavabit.com
diff --git a/dev/scripts/database/schema.init.sh b/dev/scripts/database/schema.init.sh
index d6c291df..ea0cc7b2 100755
--- a/dev/scripts/database/schema.init.sh
+++ b/dev/scripts/database/schema.init.sh
@@ -63,35 +63,43 @@ if [ ! -d $MAGMA_RES_SQL ]; then
exit 1
fi
-# Generate Start.sql from the user-provided Schema
-echo "CREATE DATABASE IF NOT EXISTS \`${MYSQL_SCHEMA}\`;
+# Generate a Start.sql file using the user-provided schema name.
+cat <<-EOF > $MAGMA_RES_SQL/Start.sql
+CREATE DATABASE IF NOT EXISTS \`${MYSQL_SCHEMA}\`;
USE \`${MYSQL_SCHEMA}\`;
SET SESSION sql_mode = 'ALLOW_INVALID_DATES';
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
-SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" > $MAGMA_RES_SQL/Start.sql
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+EOF
if [ -z "$HOSTNAME" ]; then
HOSTNAME=$(hostname)
fi
-# Generate Hostname.sql with the system's Hostname
-echo "UPDATE Hosts SET hostname = '$HOSTNAME' WHERE hostnum = 1;" > $MAGMA_RES_SQL/Hostname.sql
+# Generate the Hostname.sql file using the system host name.
+echo "INSERT INTO \`Hosts\` (\`hostnum\`, \`hostname\`, \`timestamp\`) VALUES (1,'$HOSTNAME',NOW());" > $MAGMA_RES_SQL/Hostname.sql
+
+# Generate Version.sql file with the correct version number.
+MAGMA_VERSION=`grep --extended-regexp "^PACKAGE_VERSION" Makefile | awk --field-separator='=' '{print \$2}' | awk --field-separator='.' '{print \$1}' | tr --delete [:blank:]`
+echo "INSERT INTO \`Host_Config\` (\`confignum\`, \`hostnum\`, \`application\`, \`name\`, \`value\`, \`timestamp\`) VALUES (1,NULL,'magmad','magma.version','$MAGMA_VERSION',NOW());" > $MAGMA_RES_SQL/Version.sql
# Tell git to skip checking for changes to these SQL files, but we only do this if git is on the system and the files
# are stored inside a repo.
GIT_IS_AVAILABLE=`which git &> /dev/null && git log &> /dev/null && echo 1`
if [[ "$GIT_IS_AVAILABLE" == "1" ]]; then
git update-index --skip-worktree "$MAGMA_RES_SQL/Start.sql"
+ git update-index --skip-worktree "$MAGMA_RES_SQL/Version.sql"
git update-index --skip-worktree "$MAGMA_RES_SQL/Hostname.sql"
fi
+# Add -vvv to the mysql command line option when the batch fails to assist in troubleshooting.
cat $MAGMA_RES_SQL/Start.sql \
$MAGMA_RES_SQL/Schema.sql \
- $MAGMA_RES_SQL/Data.sql \
$MAGMA_RES_SQL/Migration.sql \
- $MAGMA_RES_SQL/Finish.sql \
$MAGMA_RES_SQL/Hostname.sql \
+ $MAGMA_RES_SQL/Version.sql \
+ $MAGMA_RES_SQL/Finish.sql \
| mysql --batch -u "${MYSQL_USER}" --password="${MYSQL_PASSWORD}"
diff --git a/dev/scripts/database/schema.reset.sh b/dev/scripts/database/schema.reset.sh
index 2708d404..0311fe33 100755
--- a/dev/scripts/database/schema.reset.sh
+++ b/dev/scripts/database/schema.reset.sh
@@ -74,37 +74,46 @@ if [ ! -d $MAGMA_RES_STORAGE ]; then
echo "The local storage directory appears to be missing. It will be created. { path = $MAGMA_RES_STORAGE }"
fi
-# Generate Start.sql from the user-provided Schema
-echo "DROP DATABASE IF EXISTS \`${MYSQL_SCHEMA}\`;
+# Generate a Start.sql file using the user-provided schema name.
+cat <<-EOF > $MAGMA_RES_SQL/Start.sql
+DROP DATABASE IF EXISTS \`${MYSQL_SCHEMA}\`;
CREATE DATABASE IF NOT EXISTS \`${MYSQL_SCHEMA}\`;
USE \`${MYSQL_SCHEMA}\`;
SET SESSION sql_mode = 'ALLOW_INVALID_DATES';
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
-SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" > $MAGMA_RES_SQL/Start.sql
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+EOF
if [ -z "$HOSTNAME" ]; then
HOSTNAME=$(hostname)
fi
-# Generate Hostname.sql with the system's Hostname
-echo "UPDATE Hosts SET hostname = '$HOSTNAME' WHERE hostnum = 1;" > $MAGMA_RES_SQL/Hostname.sql
+# Generate the Hostname.sql file using the system host name.
+echo "INSERT INTO \`Hosts\` (\`hostnum\`, \`hostname\`, \`timestamp\`) VALUES (1,'$HOSTNAME',NOW());" > $MAGMA_RES_SQL/Hostname.sql
+
+# Generate Version.sql file with the correct version number.
+MAGMA_VERSION=`grep --extended-regexp "^PACKAGE_VERSION" Makefile | awk --field-separator='=' '{print \$2}' | awk --field-separator='.' '{print \$1}' | tr --delete [:blank:]`
+echo "INSERT INTO \`Host_Config\` (\`confignum\`, \`hostnum\`, \`application\`, \`name\`, \`value\`, \`timestamp\`) VALUES (1,NULL,'magmad','magma.version','$MAGMA_VERSION',NOW());" > $MAGMA_RES_SQL/Version.sql
# Tell git to skip checking for changes to these SQL files, but we only do this if git is on the system and the files
# are stored inside a repo.
GIT_IS_AVAILABLE=`which git &> /dev/null && git log &> /dev/null && echo 1`
if [[ "$GIT_IS_AVAILABLE" == "1" ]]; then
git update-index --skip-worktree "$MAGMA_RES_SQL/Start.sql"
+ git update-index --skip-worktree "$MAGMA_RES_SQL/Version.sql"
git update-index --skip-worktree "$MAGMA_RES_SQL/Hostname.sql"
fi
+# Add -vvv to the mysql command line option when the batch fails to assist in troubleshooting.
cat $MAGMA_RES_SQL/Start.sql \
$MAGMA_RES_SQL/Schema.sql \
- $MAGMA_RES_SQL/Data.sql \
$MAGMA_RES_SQL/Migration.sql \
- $MAGMA_RES_SQL/Finish.sql \
$MAGMA_RES_SQL/Hostname.sql \
-| mysql --batch -u "${MYSQL_USER}" --password="${MYSQL_PASSWORD}"
+ $MAGMA_RES_SQL/Version.sql \
+ $MAGMA_RES_SQL/Data.sql \
+ $MAGMA_RES_SQL/Finish.sql \
+| mysql -vvv --batch -u "${MYSQL_USER}" --password="${MYSQL_PASSWORD}"
# Remove the storage tanks.
rm --force "$MAGMA_RES_TANKS/system.data"
diff --git a/res/sql/Data.sql b/res/sql/Data.sql
index 5e920df5..0e50d146 100644
--- a/res/sql/Data.sql
+++ b/res/sql/Data.sql
@@ -79,7 +79,7 @@ INSERT INTO `Domains` VALUES (1,'dark.lavabit.com',0,0,0,0,0,'2010-05-18 02:08:5
-- ORDER BY: `foldernum`
/*!40000 ALTER TABLE `Folders` DISABLE KEYS */;
-INSERT INTO `Folders` VALUES (1,1,'Inbox',0,NULL),(2,2,'Inbox',0,NULL),(3,3,'Inbox',0,NULL),(4,4,'Inbox',0,NULL);
+INSERT INTO `Folders` (`foldernum`, `usernum`, `foldername`, `order`, `parent`) VALUES (1,1,'Inbox',0,NULL),(2,2,'Inbox',0,NULL),(3,3,'Inbox',0,NULL),(4,4,'Inbox',0,NULL);
/*!40000 ALTER TABLE `Folders` ENABLE KEYS */;
--
@@ -96,19 +96,10 @@ INSERT INTO `Folders` VALUES (1,1,'Inbox',0,NULL),(2,2,'Inbox',0,NULL),(3,3,'Inb
-- ORDER BY: `confignum`
/*!40000 ALTER TABLE `Host_Config` DISABLE KEYS */;
-INSERT INTO `Host_Config` VALUES (1,NULL,'magmad','magma.system.increase_resource_limits','false','2009-12-16 04:32:54'),(2,NULL,'magmad','magma.storage.default','local','2011-03-24 12:11:22'),(3,NULL,'magmad','magma.smtp.blacklist','bl.spamcop.net.','2011-04-13 16:03:55');
+INSERT INTO `Host_Config` (`hostnum`,`application`,`name`,`value`,`timestamp`) VALUES (NULL,'magmad','magma.system.increase_resource_limits','false','2009-12-16 04:32:54'),(NULL,'magmad','magma.storage.default','local','2011-03-24 12:11:22'),(NULL,'magmad','magma.smtp.blacklist','bl.spamcop.net.','2011-04-13 16:03:55');
/*!40000 ALTER TABLE `Host_Config` ENABLE KEYS */;
--
--- Dumping data for table `Hosts`
---
--- ORDER BY: `hostnum`
-
-/*!40000 ALTER TABLE `Hosts` DISABLE KEYS */;
-INSERT INTO `Hosts` VALUES (1,'dark.lavabit.com','2009-12-16 04:32:54');
-/*!40000 ALTER TABLE `Hosts` ENABLE KEYS */;
-
---
-- Dumping data for table `Keys`
--
-- ORDER BY: `usernum`
@@ -140,7 +131,7 @@ INSERT INTO `Limits` VALUES ('BASIC','The Lavabit basic account plan.',0,0,0,0,1
-- ORDER BY: `usernum`
/*!40000 ALTER TABLE `Log` DISABLE KEYS */;
-INSERT INTO `Log` VALUES (1,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:15:59','0.0.0.0'),(2,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:16:03','0.0.0.0'),(3,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:16:09','0.0.0.0'),(4,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:15:59','0.0.0.0');
+INSERT INTO `Log` VALUES (1,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:15:59','0.0.0.0'),(2,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:16:03','0.0.0.0'),(3,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:16:09','0.0.0.0'),(4,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2011-05-05 14:15:59','127.0.0.1');
/*!40000 ALTER TABLE `Log` ENABLE KEYS */;
--
@@ -149,7 +140,7 @@ INSERT INTO `Log` VALUES (1,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00
-- ORDER BY: `address`
/*!40000 ALTER TABLE `Mailboxes` DISABLE KEYS */;
-INSERT INTO `Mailboxes` VALUES ('magma@lavabit.com',1),('magma@example.com',1),('princess@lavabit.com',2),('princess@example.com',2),('ladar@mailshack.com',3),('ladar@nerdshack.com',3),('ladar@lavabit.com',3),('ladar@example.com',3),('stacie@lavabit.com',4),('stacie@example.com',4);
+INSERT INTO `Mailboxes` (`address`, `usernum`) VALUES ('magma@lavabit.com',1),('magma@example.com',1),('princess@lavabit.com',2),('princess@example.com',2),('ladar@mailshack.com',3),('ladar@nerdshack.com',3),('ladar@lavabit.com',3),('ladar@example.com',3),('stacie@lavabit.com',4),('stacie@example.com',4);
/*!40000 ALTER TABLE `Mailboxes` ENABLE KEYS */;
--
@@ -231,4 +222,54 @@ INSERT INTO `Users` VALUES (1,'magma',NULL, NULL,0,'42a7ead6550ee52360222a0e8783
INSERT INTO `Codes` VALUES (1,'A',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(2,'B',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(3,'C',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(4,'D',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(5,'E',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(6,'F',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(7,'G',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(8,'H',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(9,'I',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(10,'J',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(11,'K',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(12,'L',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(13,'M',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(14,'N',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(15,'O',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(16,'P',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(17,'Q',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(18,'R',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(19,'S',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(20,'T',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(21,'U',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(22,'V',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(23,'W',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(24,'X',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(25,'Y',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(26,'Z',NULL,'MANUAL','STANDARD',NULL,'0000-00-00 00:00:00',NOW()),(27,'AA',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(28,'BB',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(29,'CC',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(30,'DD',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(31,'EE',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(32,'FF',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(33,'GG',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(34,'HH',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(35,'II',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(36,'JJ',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(37,'KK',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(38,'LL',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(39,'MM',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(40,'NN',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(41,'OO',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(42,'PP',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(43,'QQ',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(44,'RR',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(45,'SS',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(46,'TT',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(47,'UU',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(48,'VV',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(49,'WW',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(50,'XX',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(51,'YY',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW()),(52,'ZZ',NULL,'MANUAL','PREMIER',NULL,'0000-00-00 00:00:00',NOW());
/*!40000 ALTER TABLE `Codes` ENABLE KEYS */;
-
+--
+-- The User Accounts Needed to Test Account Locking
+--
+
+INSERT INTO `Users` (`usernum`, `userid`, `salt`, `auth`, `bonus`, `legacy`, `tls`, `plan`, `locked`, `advertising`, `domain`, `email`, `chat`, `timezone`, `size`, `quota`, `overquota`, `plan_expiration`, `lock_expiration`) VALUES (5,'lock_inactive','JDIjkrTqVJi1a4UQeJdxpak6Z23_mA1UXLeMBQ-0vT0OVztYpXL4UKscyF-CZzWbrHLNFAsBjWWPkZyXchNythFrpJ051tdtjapKCQ0lb_dLDTeU8OxMj_E5RcnVU9ewzslBwwXSgGr2DUB4EJ2ELqPwMpddJYDg1jnFTabXPIw','G1_5u-jdaY4V8R4rNPtCfXNT7oGRcXdy3Z5KgPgXkGDiscu-kMetqLX2_J2MUe3PmCY7Uklyz6b3GNzZhzXtzg',0,NULL,0,'STANDARD',1,1,NULL,1,1,0,0,134217728,0,DATE(NOW()),DATE_ADD(DATE(NOW()),INTERVAL 120 DAY));
+INSERT INTO `Users` (`usernum`, `userid`, `salt`, `auth`, `bonus`, `legacy`, `tls`, `plan`, `locked`, `advertising`, `domain`, `email`, `chat`, `timezone`, `size`, `quota`, `overquota`, `plan_expiration`, `lock_expiration`) VALUES (6,'lock_expired','MZ5-PVVxojRkV6HSnb-GOY5_hQbH-uH4M8COwrhNs7ozOtqThR8XOxzNLU7RnTGDoCjzzAmCcBvpz2gy3n3x9qSEpFpB60p33xEwPlJcuFLGeTj3976z79MDu_nGb50P4Y2DNqM0I9-UW-hKq45uvPvOJc2yAzChm4ut2EIlPQM','OI7fmRBNBwhGaM4e4vwTRBNEnXw6Amd2DShn7GzMkr34s7tGE46uGjzQq4JF4vSHGMtRDWcogDxu685MtGywbg',0,NULL,0,'STANDARD',2,1,NULL,1,1,0,0,134217728,0,DATE(NOW()),DATE_ADD(DATE(NOW()),INTERVAL 120 DAY));
+INSERT INTO `Users` (`usernum`, `userid`, `salt`, `auth`, `bonus`, `legacy`, `tls`, `plan`, `locked`, `advertising`, `domain`, `email`, `chat`, `timezone`, `size`, `quota`, `overquota`, `plan_expiration`, `lock_expiration`) VALUES (7,'lock_admin','Lw0ba4RDXRkamDBDFWgvRif_EQ7GYaBR7c0ALg12EkFW-MNDOHuAf3SVGIRqJpXLqEnhDEHtO1zpoA49oW46nDU9CwBZjPoPKKDOUKJ2ziGp6iGCTRaaK8xTcjqUGpKxELV59QMcJe7JglaKqANOSiKSc0Oyhd1jSFIUmeWQLfg','rORS460yz49n9KqgD1CvkCDXKXqbXBNKmm8OeQ3HknqGbeXHpEnvTP_wvgVM3kUxkl8jO0G4jiMRTCgWFemGKw',0,NULL,0,'STANDARD',3,1,NULL,1,1,0,0,134217728,0,DATE(NOW()),DATE_ADD(DATE(NOW()),INTERVAL 120 DAY));
+INSERT INTO `Users` (`usernum`, `userid`, `salt`, `auth`, `bonus`, `legacy`, `tls`, `plan`, `locked`, `advertising`, `domain`, `email`, `chat`, `timezone`, `size`, `quota`, `overquota`, `plan_expiration`, `lock_expiration`) VALUES (8,'lock_abuse','JQ9l3rf3V78HjBgTRbmLFGt0ez-uifQoDjUQEnTq02CaM3by3iwIJNd8VMks6J2c1R3DDpbYclUdLV7NviBw9u3bUMdVE1yThhYWuCIslcvNd5v7GXdIJFRretWpgsumpBCBHtjubpnaoHumlkWG-BXrcTafI60DEd9_YRfUoG0','oOh6Ti-oIr2aveFofBwoXYBBYWDcG4e1lzS44g43vBskmcoazItOVlwPjV9LCrraOqZhUN-R2T12W8lpnw0mEg',0,NULL,0,'PREMIER',4,1,NULL,1,1,0,0,134217728,0,DATE(NOW()),DATE_ADD(DATE(NOW()),INTERVAL 120 DAY));
+INSERT INTO `Users` (`usernum`, `userid`, `salt`, `auth`, `bonus`, `legacy`, `tls`, `plan`, `locked`, `advertising`, `domain`, `email`, `chat`, `timezone`, `size`, `quota`, `overquota`, `plan_expiration`, `lock_expiration`) VALUES (9,'lock_user','8z7c-S7Jh_dfWhEe66rQ9_9JjnhJZCHfwnRYTcTK2ix-Ma23Jy68wU87-xsuZnwjEd0KeA8wCmhnBbcuVnEZyxqi1AgMTi_wwXs1pfkEdSwwiUoaAWHeXiPR00_79g2pBvAaKzFdQDxYiTqrTwbndgmO9vXXEkB47Ef6o2_RVEQ','F86hxmgFnGDksS4JtQ_dwt2C3R6d6spmLMBVn3aTlD2dzeEP0LYQmaS6fuwVEF119j6W5jhoFmH1iaBZGbaDbw',0,NULL,0,'PREMIER',5,1,NULL,1,1,0,0,134217728,0,DATE(NOW()),DATE_ADD(DATE(NOW()),INTERVAL 120 DAY));
+
+INSERT INTO `Dispatch` (`usernum`, `secure`, `forwarded`, `rollout`, `bounces`, `greylist`, `greytime`, `rbl`, `rblaction`, `spf`, `spfaction`, `dkim`, `dkimaction`, `spam`, `spamaction`, `spamfolder`, `virus`, `virusaction`, `phish`, `phishaction`, `filters`, `autoreply`, `inbox`, `send_size_limit`, `recv_size_limit`, `daily_send_limit`, `daily_recv_limit`, `daily_recv_limit_ip`, `class`) VALUES (5,1,'',0,1,0,1,0,'REJECT',0,'REJECT',0,'MARK',0,'MARK',5,1,'DELETE',1,'DELETE',0,NULL,5,33554432,33554432,256,1024,1024,0);
+INSERT INTO `Dispatch` (`usernum`, `secure`, `forwarded`, `rollout`, `bounces`, `greylist`, `greytime`, `rbl`, `rblaction`, `spf`, `spfaction`, `dkim`, `dkimaction`, `spam`, `spamaction`, `spamfolder`, `virus`, `virusaction`, `phish`, `phishaction`, `filters`, `autoreply`, `inbox`, `send_size_limit`, `recv_size_limit`, `daily_send_limit`, `daily_recv_limit`, `daily_recv_limit_ip`, `class`) VALUES (6,1,'',0,1,0,1,0,'REJECT',0,'REJECT',0,'MARK',0,'MARK',6,1,'DELETE',1,'DELETE',0,NULL,6,33554432,33554432,256,1024,1024,0);
+INSERT INTO `Dispatch` (`usernum`, `secure`, `forwarded`, `rollout`, `bounces`, `greylist`, `greytime`, `rbl`, `rblaction`, `spf`, `spfaction`, `dkim`, `dkimaction`, `spam`, `spamaction`, `spamfolder`, `virus`, `virusaction`, `phish`, `phishaction`, `filters`, `autoreply`, `inbox`, `send_size_limit`, `recv_size_limit`, `daily_send_limit`, `daily_recv_limit`, `daily_recv_limit_ip`, `class`) VALUES (7,1,'',0,1,0,1,0,'REJECT',0,'REJECT',0,'MARK',0,'MARK',7,1,'DELETE',1,'DELETE',0,NULL,7,33554432,33554432,256,1024,1024,0);
+INSERT INTO `Dispatch` (`usernum`, `secure`, `forwarded`, `rollout`, `bounces`, `greylist`, `greytime`, `rbl`, `rblaction`, `spf`, `spfaction`, `dkim`, `dkimaction`, `spam`, `spamaction`, `spamfolder`, `virus`, `virusaction`, `phish`, `phishaction`, `filters`, `autoreply`, `inbox`, `send_size_limit`, `recv_size_limit`, `daily_send_limit`, `daily_recv_limit`, `daily_recv_limit_ip`, `class`) VALUES (8,1,'',0,1,0,1,0,'REJECT',0,'REJECT',0,'MARK',0,'MARK',8,1,'DELETE',1,'DELETE',0,NULL,8,33554432,33554432,256,1024,1024,0);
+INSERT INTO `Dispatch` (`usernum`, `secure`, `forwarded`, `rollout`, `bounces`, `greylist`, `greytime`, `rbl`, `rblaction`, `spf`, `spfaction`, `dkim`, `dkimaction`, `spam`, `spamaction`, `spamfolder`, `virus`, `virusaction`, `phish`, `phishaction`, `filters`, `autoreply`, `inbox`, `send_size_limit`, `recv_size_limit`, `daily_send_limit`, `daily_recv_limit`, `daily_recv_limit_ip`, `class`) VALUES (9,1,'',0,1,0,1,0,'REJECT',0,'REJECT',0,'MARK',0,'MARK',9,1,'DELETE',1,'DELETE',0,NULL,9,33554432,33554432,256,1024,1024,0);
+
+INSERT INTO `Folders` (`foldernum`, `usernum`, `foldername`, `order`, `type`, `parent`) VALUES (5,5,'Inbox',0,1,0);
+INSERT INTO `Folders` (`foldernum`, `usernum`, `foldername`, `order`, `type`, `parent`) VALUES (6,6,'Inbox',0,1,0);
+INSERT INTO `Folders` (`foldernum`, `usernum`, `foldername`, `order`, `type`, `parent`) VALUES (7,7,'Inbox',0,1,0);
+INSERT INTO `Folders` (`foldernum`, `usernum`, `foldername`, `order`, `type`, `parent`) VALUES (8,8,'Inbox',0,1,0);
+INSERT INTO `Folders` (`foldernum`, `usernum`, `foldername`, `order`, `type`, `parent`) VALUES (9,9,'Inbox',0,1,0);
+
+INSERT INTO `Keys` (`usernum`, `signet`, `key`) VALUES (5,'Bv0AAMcBICcoIIlYlOHp6VdaGEvEXN-UqJAT2cb-8WowPihsy0DvAiEC8jqMxQunZdsiUawkOYdtM1A-N9JM5xswQqqug7Wp6LUFttNrqGHydY6lmPE35KzX4RNKtop5KoBcP3zg-01Disjomea6zKaY-tnwULXCV8Uj3y1hmw_6Rt_EHgNiTQvDDAb6z1w5Il-FBjF_nPMO-os8zbIgmniobKF1kkWBn8LRYYhVGR0FkIJYXA6fPEDIp9PdXTOIly72D4RJSptzwWYO','B7gAAABwzM_6qBfFNEGEPY5mCa3s25BqpP05vk7UZH1h8i28aBu0zRyQtGbMi4kChFbO-5uGtwUJwnYuYCqi7ACSmgyZFrrQj557wI-wm3heHVxdOCl6B0XBZst_kqpDVrZasAn0fn2W4ZXTXnqmv9on3eD3KA');
+INSERT INTO `Keys` (`usernum`, `signet`, `key`) VALUES (6,'Bv0AAMcBIGjq9I1m8mw-fbxNzdUHaQqMfAr-zq0_gSs1Hl5XuFD7AiECLoiw3N4j-rlqg1EptpTjUKMu8rjKoWJWv_Zz04U2AxQFCY9T25b0pPCwgYYqyal_-TTVHSgCWY18xmTaqrk9o7C07lZxKnUWl0_onELSDVoaFloJmlrcRJeujK-2qiGiBgaSHvbXZtf6fePTQHwc2_D1KgcYZL1Nui4tX5I6l9rZkLxBVbVKfaEF4H7E1usRD504hvDyXSNbMEXKq3mUWjAI','B7gAAABww6rMYLCkmrT9mmNZavsy4ekH1CchJMA4D2LDHeJf1zsVqXfBS-T8Qlu4dcq2jBT3ZP1443DBWnNNVhlMjOO-hSfWi7KCCdNqydqocdqTWVcp_XMLsn6vdz_OCkwzckK73-5E3cW_t8zq5nR9Cnx3og');
+INSERT INTO `Keys` (`usernum`, `signet`, `key`) VALUES (7,'Bv0AAMcBIHv8SGmB2PaDyXVX49wsfnn9p2Tkf-jFfm6ykKSaFY0zAiEDc_Q1aKqcZKQf5EPC0AJP6tVFvgfKzmNqNVLcarTjV_sFMhOwQ1gyggO-Zk5wi7Ay4FmJSETcMkr0aR1q_NskOocQn5XVoLb_I_0AEVq2BdMNx6K8WilwKzbNJ-POLmC9Dgbr7kq8mvObKd234DSO-8NNA8ZWAj5hqeIQdDifhuYXXuLA0XRmQJg9vvd6L-ldcKEAb8GsGZTkfbCziByHwyUC','B7gAAABwnFuBNqYlG5mN0p10Q3CAhvv8rwldAT8lRGiCxr3CmGdnJ-ZSL0VKvSD_NH4r-QGsTR1mDTAg8dEPVUFEfBE6mn1jekUwFQwYPmV4PM6IBEVZds6z8H-FMu_pHz4jlBnrr9vx6xVn9k72pPtW0j_y_w');
+INSERT INTO `Keys` (`usernum`, `signet`, `key`) VALUES (8,'Bv0AAMcBIGvSUm1_jMfKTyz5AzpzP8YY5MHjDiC0iDhigsijoMxnAiECdpYzZi2cvo_KVsQmIfeBXcaJPPH3Qo1b3LyV0qL_d7wFKN0MYCRbJ6GdSJnfn40z-UdLhVHCQmZut9SrQ4F6A45QRy8m6_-eCnZBQqydC_MgApHYffaxieGxTS0q4HGUBgaEquhsypHqPTb6WP4-i5KtleTQa4vdgL5EwhLgO5XyvnCqItvMJNDKax5M1aWzcEuDyVJiGhfO1_W7ZCFPFqYD','B7gAAABwS-LvSjwjeyCYsy_T0RFAHoi-Rst38JDl3kf4tZyXE6RBD64l2nucsVz5cN2V6nZt_2e0P6lSHmR1Eh2mgPjM1Zcl7eskWfew98cLTfhCLcTs6rdXnIM9MTqHXtaUVz95o_7l7ZBPSsg_6apA7XvOQw');
+INSERT INTO `Keys` (`usernum`, `signet`, `key`) VALUES (9,'Bv0AAMcBIGyoHRHDS_ExrEOvd41pZVbqjTL9r5qvmIi--bzhFqmMAiECQh7-Y3SeSa5Yw0ncNnEw4bOcH8y9EawwmbhczHXUotwFkwdlFVYjRB0EIBHCPjxvf5OmQX_p1xhCr3s0l8GChg0KlJcMjZUZfVWzKRrK2RA6f7bMQ5NtEUCkyxfDY6VHBAa6tMsBWAqCzI9NANVBwHdEbjWAUjd_yYaPtRm51ROhsLwljHWJBPn1tlsKAOKqd_c85pdInIePfBeZXITjLGYI','B7gAAABw_7LafljuUhrjp8i5xWiD6MBX7HkAhC_ZzyXuFxpDEmLhl3ftyXjDtX4OnzKBoQI-MZ3OAKWSB2Cge-F_C794Go-cZDO31aWtQH_ZAZ0OU_wuVA3Jc3RIyH33dxqIfBVTdQ9qgls3IFRXxe6yrK-pnw');
+
+INSERT INTO `Log` (`usernum`, `lastpop`, `lastmap`, `lastweb`, `lastchat`, `lastsent`, `lastreceived`, `popsessions`, `mapsessions`, `websessions`, `chatsessions`, `totalsent`, `totalreceived`, `totalbounces`, `created`, `created_ip`) VALUES (5,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2018-08-06 16:59:46','127.0.0.1');
+INSERT INTO `Log` (`usernum`, `lastpop`, `lastmap`, `lastweb`, `lastchat`, `lastsent`, `lastreceived`, `popsessions`, `mapsessions`, `websessions`, `chatsessions`, `totalsent`, `totalreceived`, `totalbounces`, `created`, `created_ip`) VALUES (6,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2018-08-06 16:59:46','127.0.0.1');
+INSERT INTO `Log` (`usernum`, `lastpop`, `lastmap`, `lastweb`, `lastchat`, `lastsent`, `lastreceived`, `popsessions`, `mapsessions`, `websessions`, `chatsessions`, `totalsent`, `totalreceived`, `totalbounces`, `created`, `created_ip`) VALUES (7,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2018-08-06 16:59:46','127.0.0.1');
+INSERT INTO `Log` (`usernum`, `lastpop`, `lastmap`, `lastweb`, `lastchat`, `lastsent`, `lastreceived`, `popsessions`, `mapsessions`, `websessions`, `chatsessions`, `totalsent`, `totalreceived`, `totalbounces`, `created`, `created_ip`) VALUES (8,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2018-08-06 16:59:46','127.0.0.1');
+INSERT INTO `Log` (`usernum`, `lastpop`, `lastmap`, `lastweb`, `lastchat`, `lastsent`, `lastreceived`, `popsessions`, `mapsessions`, `websessions`, `chatsessions`, `totalsent`, `totalreceived`, `totalbounces`, `created`, `created_ip`) VALUES (9,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,0,0,0,0,0,'2018-08-06 16:59:46','127.0.0.1');
+
+INSERT INTO `Mailboxes` (`mailboxnum`, `address`, `usernum`) VALUES (11,'lock_inactive@lavabit.com',5);
+INSERT INTO `Mailboxes` (`mailboxnum`, `address`, `usernum`) VALUES (12,'lock_expired@lavabit.com',6);
+INSERT INTO `Mailboxes` (`mailboxnum`, `address`, `usernum`) VALUES (13,'lock_admin@lavabit.com',7);
+INSERT INTO `Mailboxes` (`mailboxnum`, `address`, `usernum`) VALUES (14,'lock_abuse@lavabit.com',8);
+INSERT INTO `Mailboxes` (`mailboxnum`, `address`, `usernum`) VALUES (15,'lock_user@lavabit.com',9);
+
+INSERT INTO `Profile` (`usernum`, `name`, `address_one`, `address_two`, `city`, `state`, `zip`, `country`, `profile`, `phone`, `mobile`, `fax`, `gender`, `language`, `birthdate`, `industry`, `website`, `accessible`) VALUES (5,'','','','','',0,'',NULL,'','','',NULL,'','0000-00-00','','',0);
+INSERT INTO `Profile` (`usernum`, `name`, `address_one`, `address_two`, `city`, `state`, `zip`, `country`, `profile`, `phone`, `mobile`, `fax`, `gender`, `language`, `birthdate`, `industry`, `website`, `accessible`) VALUES (6,'','','','','',0,'',NULL,'','','',NULL,'','0000-00-00','','',0);
+INSERT INTO `Profile` (`usernum`, `name`, `address_one`, `address_two`, `city`, `state`, `zip`, `country`, `profile`, `phone`, `mobile`, `fax`, `gender`, `language`, `birthdate`, `industry`, `website`, `accessible`) VALUES (7,'','','','','',0,'',NULL,'','','',NULL,'','0000-00-00','','',0);
+INSERT INTO `Profile` (`usernum`, `name`, `address_one`, `address_two`, `city`, `state`, `zip`, `country`, `profile`, `phone`, `mobile`, `fax`, `gender`, `language`, `birthdate`, `industry`, `website`, `accessible`) VALUES (8,'','','','','',0,'',NULL,'','','',NULL,'','0000-00-00','','',0);
+INSERT INTO `Profile` (`usernum`, `name`, `address_one`, `address_two`, `city`, `state`, `zip`, `country`, `profile`, `phone`, `mobile`, `fax`, `gender`, `language`, `birthdate`, `industry`, `website`, `accessible`) VALUES (9,'','','','','',0,'',NULL,'','','',NULL,'','0000-00-00','','',0);
+
+INSERT INTO `Realms` (`usernum`, `serial`, `label`, `shard`, `rotated`) VALUES (5,0,'mail','LWreVSWaVRKV4Xdw9GlsqlcPFbxythMTGtzO5xCoQWlaIjH5vLjE9rXTuOhaLBVsxOxbvtQNeUXILBZm0JfJKQ',1);
+INSERT INTO `Realms` (`usernum`, `serial`, `label`, `shard`, `rotated`) VALUES (6,0,'mail','WBHWPFx2khiY7uChvtpWIeXfHXJXSuTBsdyHjUPmusy5IvmOCKJ2BPSQrADXhFjhYnmOdr340ZNRRQXfurtZrQ',1);
+INSERT INTO `Realms` (`usernum`, `serial`, `label`, `shard`, `rotated`) VALUES (7,0,'mail','bOdEnn0D6YpNNnFFA-lcvCFnJJqz20VDRc7TJfNj7RahfaXonIb0lQd8ZXlJQvQyx-P1HpmWUO19ofhdx1ENTw',1);
+INSERT INTO `Realms` (`usernum`, `serial`, `label`, `shard`, `rotated`) VALUES (8,0,'mail','mL7galUcnyDDTHMNHJuLxuqINhqzASqz9PIeKbSPGwLV3rCbzzfVsvbX_iXPkvhv4RforM_QgswhQ7u27ZA6wg',1);
+INSERT INTO `Realms` (`usernum`, `serial`, `label`, `shard`, `rotated`) VALUES (9,0,'mail','vRVBZSMt4iw3_7bhhs2V51roTBePg6nnt7oxdha1cOzPaRXP2xcua12Fr7XQ8OXDQghI1gvbheFTlpz4TTF6Ww',1);
diff --git a/res/sql/Hostname.sql b/res/sql/Hostname.sql
index 20b36e39..99c4c31b 100644
--- a/res/sql/Hostname.sql
+++ b/res/sql/Hostname.sql
@@ -1 +1 @@
-UPDATE Hosts SET hostname = 'dark.local' WHERE hostnum = 1;
+INSERT INTO `Hosts` (`hostnum`, `hostname`, `timestamp`) VALUES (1,'dark.local',NOW());
diff --git a/res/sql/Version.sql b/res/sql/Version.sql
new file mode 100644
index 00000000..0df298f2
--- /dev/null
+++ b/res/sql/Version.sql
@@ -0,0 +1 @@
+INSERT INTO `Host_Config` (`confignum`, `hostnum`, `application`, `name`, `value`, `timestamp`) VALUES (1,NULL,'magmad','magma.version','6',NOW());
diff --git a/src/engine/config/global/global.c b/src/engine/config/global/global.c
index c2cbf255..8603a3d0 100644
--- a/src/engine/config/global/global.c
+++ b/src/engine/config/global/global.c
@@ -897,8 +897,9 @@ bool_t config_load_database_settings(void) {
cache_config(name, value);
}
- // Otherwise if we still haven't matched a value, report an error.
- else {
+ // Otherwise if we still haven't matched a value, and it's not one of the valid keys that aren't stored in the
+ // global configuration, we print the error and exit.
+ else if (st_cmp_ci_eq(name, CONSTANT("magma.version"))) {
log_critical("%.*s is not a valid setting.", st_length_int(name), st_char_get(name));
res_table_free(database_pairs);
return false;