783137
INSERT INTO databaseVersion VALUES (NULL, 1, 1);
783137
783137
-- ~ ************
783137
-- ~ ** policy table
783137
-- ~ **
783137
-- ~ **
783137
-- ~ **
783137
-- ~ **
783137
-- ~ ************
783137
783137
INSERT INTO policy 
783137
SELECT id, 1, name, description,
783137
0, 0, 0,
783137
0, 0, 0, 0,
783137
86400, 0, 0,
783137
0, 0, 0,
783137
0, 0, 0,
783137
0, 0, 0,
783137
0, 0, 0,
783137
0, 0, 0,
783137
0, 0, 0,
783137
0, 0, 0,
783137
0
783137
FROM REMOTE.policies;
783137
783137
UPDATE policy
783137
SET signaturesResign = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 1
783137
		AND REMOTE.parameters.name = 'resign');
783137
783137
UPDATE policy
783137
SET signaturesRefresh = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 1
783137
		AND REMOTE.parameters.name = 'refresh') ;
783137
783137
UPDATE policy
783137
SET signaturesJitter = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 1
783137
		AND REMOTE.parameters.name = 'jitter');
783137
783137
UPDATE policy
783137
SET signaturesInceptionOffset = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 1
783137
		AND REMOTE.parameters.name = 'clockskew');
783137
783137
UPDATE policy
783137
SET signaturesValidityDefault = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 1
783137
		AND REMOTE.parameters.name = 'valdefault');
783137
783137
UPDATE policy
783137
SET signaturesValidityDenial = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 1
783137
		AND REMOTE.parameters.name = 'valdenial');
783137
783137
--MaxZoneTTL default 86400
783137
783137
-- We need the following mapping 1.4 -> 2.0 for denialType
783137
-- 0 -> 1
783137
-- 3 -> 0
783137
783137
UPDATE policy
783137
SET denialType = (
783137
	SELECT (~value)&1
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'version');
783137
783137
-- I'm pretty sure this is not the correct way to do it. It is aweful but
783137
-- I can't figure it out how it would work for sqlite.
783137
UPDATE policy
783137
SET denialOptout = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'optout')
783137
WHERE null !=  (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'optout');
783137
783137
UPDATE policy
783137
SET denialTtl = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'ttl')
783137
WHERE null != (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'ttl');
783137
783137
UPDATE policy
783137
SET denialResalt = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'resalt')
783137
WHERE null != (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'resalt');
783137
783137
UPDATE policy
783137
SET denialAlgorithm = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'algorithm')
783137
WHERE null != (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'algorithm');
783137
783137
UPDATE policy
783137
SET denialIterations = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'iterations')
783137
WHERE null != (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'iterations');
783137
783137
UPDATE policy
783137
SET denialSaltLength = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'saltlength')
783137
WHERE null != (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 2
783137
		AND REMOTE.parameters.name = 'saltlength');
783137
783137
-- clumsy salt update. salt is optional in 1.4 but required in 2.0
783137
-- sqlite is limited in what it can do in an update. I hope there is a
783137
-- better way for this?
783137
783137
UPDATE policy
783137
SET denialSalt = (
783137
	SELECT salt
783137
	FROM  REMOTE.policies
783137
	WHERE REMOTE.policies.id = policy.id)
783137
WHERE (
783137
	SELECT salt
783137
	FROM  REMOTE.policies
783137
	WHERE REMOTE.policies.id = policy.id) != null;
783137
783137
UPDATE policy
783137
SET denialSaltLastChange = (
783137
	SELECT salt_stamp
783137
	FROM  REMOTE.policies
783137
	WHERE REMOTE.policies.id = policy.id)
783137
WHERE (
783137
	SELECT salt_stamp
783137
	FROM  REMOTE.policies
783137
	WHERE REMOTE.policies.id = policy.id) != null;
783137
783137
UPDATE policy
783137
SET keysTtl = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 5
783137
		AND REMOTE.parameters.name = 'ttl');
783137
783137
UPDATE policy
783137
SET keysRetireSafety = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 5
783137
		AND REMOTE.parameters.name = 'retiresafety');
783137
783137
UPDATE policy
783137
SET keysPublishSafety = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 5
783137
		AND REMOTE.parameters.name = 'publishsafety');
783137
783137
UPDATE policy
783137
SET keysShared = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 5
783137
		AND REMOTE.parameters.name = 'zones_share_keys');
783137
783137
UPDATE policy
783137
SET keysPurgeAfter = COALESCE((
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 5
783137
		AND REMOTE.parameters.name = 'purge'), 0);
783137
783137
UPDATE policy
783137
SET zonePropagationDelay = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 7
783137
		AND REMOTE.parameters.name = 'propagationdelay');
783137
783137
UPDATE policy
783137
SET zoneSoaTtl = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 7
783137
		AND REMOTE.parameters.name = 'ttl');
783137
783137
UPDATE policy
783137
SET zoneSoaMinimum = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 7
783137
		AND REMOTE.parameters.name = 'min');
783137
783137
-- Temporary mapping table between 1.4 and 2.0 SOA serial strategy
783137
CREATE TABLE mapping (
783137
	soa14 INTEGER,
783137
	soa20 INTEGER
783137
);
783137
INSERT INTO mapping SELECT  1, 2;
783137
INSERT INTO mapping SELECT  2, 0;
783137
INSERT INTO mapping SELECT  3, 1;
783137
INSERT INTO mapping SELECT  4, 3;
783137
783137
UPDATE policy
783137
SET zoneSoaSerial = (
783137
	SELECT mapping.soa20
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
        INNER JOIN mapping
783137
        ON REMOTE.parameters_policies.value = mapping.soa14
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 7
783137
		AND REMOTE.parameters.name = 'serial');
783137
783137
DROP TABLE mapping;
783137
783137
-- parentRegistrationDelay = 0 on 1.4
783137
783137
UPDATE policy
783137
SET parentPropagationDelay = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 8
783137
		AND REMOTE.parameters.name = 'propagationdelay');
783137
783137
UPDATE policy
783137
SET parentDsTtl = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 8
783137
		AND REMOTE.parameters.name = 'ttlds');
783137
783137
UPDATE policy
783137
SET parentSoaTtl = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 8
783137
		AND REMOTE.parameters.name = 'ttl');
783137
783137
UPDATE policy
783137
SET parentSoaMinimum = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id 
783137
	WHERE REMOTE.parameters_policies.policy_id = policy.id 
783137
		AND REMOTE.parameters.category_id = 8
783137
		AND REMOTE.parameters.name = 'min');
783137
783137
-- passthrough = 0
783137
783137
-- ~ ************
783137
-- ~ ** policyKey table
783137
-- ~ **
783137
-- ~ ** For each policy in 1.4 add two keys: KSK and ZSK
783137
-- ~ **
783137
-- ~ **
783137
-- ~ ************
783137
783137
-- Insert each KSK
783137
INSERT INTO policyKey
783137
SELECT null, 1, id,
783137
		1, 0, 0,
783137
		0, 0, 0,
783137
		0, 0, 4
783137
FROM REMOTE.policies;
783137
783137
-- Insert each ZSK
783137
INSERT INTO policyKey
783137
SELECT null, 1, id,
783137
		2, 0, 0,
783137
		0, 0, 0,
783137
		0, 0, 1
783137
FROM REMOTE.policies;
783137
783137
UPDATE policyKey
783137
SET algorithm = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 3
783137
		AND REMOTE.parameters.name = 'algorithm')
783137
WHERE policyKey.role = 1;
783137
783137
UPDATE policyKey
783137
SET algorithm = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 4
783137
		AND REMOTE.parameters.name = 'algorithm')
783137
WHERE policyKey.role = 2;
783137
783137
UPDATE policyKey
783137
SET bits = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 3
783137
		AND REMOTE.parameters.name = 'bits')
783137
WHERE policyKey.role = 1;
783137
783137
UPDATE policyKey
783137
SET bits = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 4
783137
		AND REMOTE.parameters.name = 'bits')
783137
WHERE policyKey.role = 2;
783137
783137
UPDATE policyKey
783137
SET lifetime = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 3
783137
		AND REMOTE.parameters.name = 'lifetime')
783137
WHERE policyKey.role = 1;
783137
783137
UPDATE policyKey
783137
SET lifetime = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 4
783137
		AND REMOTE.parameters.name = 'lifetime')
783137
WHERE policyKey.role = 2;
783137
783137
UPDATE policyKey
783137
SET repository = (
783137
	SELECT REMOTE.securitymodules.name
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	INNER JOIN REMOTE.securitymodules
783137
	ON REMOTE.parameters_policies.value = REMOTE.securitymodules.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 3
783137
		AND REMOTE.parameters.name = 'repository')
783137
WHERE policyKey.role = 1;
783137
783137
UPDATE policyKey
783137
SET repository = (
783137
	SELECT REMOTE.securitymodules.name
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	INNER JOIN REMOTE.securitymodules
783137
	ON REMOTE.parameters_policies.value = REMOTE.securitymodules.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 4
783137
		AND REMOTE.parameters.name = 'repository')
783137
WHERE policyKey.role = 2;
783137
783137
UPDATE policyKey
783137
SET standby = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 3
783137
		AND REMOTE.parameters.name = 'standby')
783137
WHERE policyKey.role = 1;
783137
783137
UPDATE policyKey
783137
SET standby = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 4
783137
		AND REMOTE.parameters.name = 'standby')
783137
WHERE policyKey.role = 2;
783137
783137
UPDATE policyKey
783137
SET manualRollover = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 3
783137
		AND REMOTE.parameters.name = 'manual_rollover')
783137
WHERE policyKey.role = 1;
783137
783137
UPDATE policyKey
783137
SET manualRollover = (
783137
	SELECT value
783137
	FROM  REMOTE.parameters_policies
783137
	INNER JOIN REMOTE.parameters
783137
	ON REMOTE.parameters_policies.parameter_id = REMOTE.parameters.id
783137
	WHERE REMOTE.parameters_policies.policy_id = policyKey.policyId
783137
		AND REMOTE.parameters.category_id = 4
783137
		AND REMOTE.parameters.name = 'manual_rollover')
783137
WHERE policyKey.role = 2;
783137
783137
-- rfc5011 = 0. 2.0 has no support
783137
-- minimize already set
783137
783137
-- ~ ************
783137
-- ~ ** hsmKey table
783137
-- ~ **
783137
-- ~ ** get from keypairs and dnsseckeys
783137
-- ~ **
783137
-- ~ **
783137
-- ~ ************
783137
783137
INSERT INTO hsmKey
783137
SELECT DISTINCT REMOTE.keypairs.id, 1, REMOTE.keypairs.policy_id,
783137
REMOTE.keypairs.HSMkey_id, 2, REMOTE.keypairs.size, 
783137
REMOTE.keypairs.algorithm,  (~(REMOTE.dnsseckeys.keytype)&1)+1, 
783137
CASE WHEN REMOTE.keypairs.generate IS NOT NULL THEN 
783137
	strftime('%s', REMOTE.keypairs.generate) 
783137
	ELSE strftime("%s", "now") END, 
783137
0, 
783137
1, --only RSA supported
783137
 REMOTE.securitymodules.name, 
783137
0 --assume no backup 
783137
FROM REMOTE.keypairs
783137
JOIN REMOTE.dnsseckeys 
783137
	ON REMOTE.keypairs.id = REMOTE.dnsseckeys.keypair_id
783137
JOIN REMOTE.securitymodules 
783137
	ON REMOTE.securitymodules.id = REMOTE.keypairs.securitymodule_id;
783137
783137
-- For some policies put the keys in a shared state
783137
UPDATE hsmKey 
783137
SET state = 3
783137
WHERE EXISTS 
783137
	(SELECT * FROM hsmKey AS h 
783137
	JOIN policy ON policy.id = h.policyId 
783137
	WHERE policy.keysShared AND hsmKey.id = h.id);
783137
783137
-- ~ ************
783137
-- ~ ** zone table
783137
-- ~ **
783137
-- ~ ** 
783137
-- ~ **
783137
-- ~ **
783137
-- ~ ************
783137
783137
INSERT INTO zone
783137
SELECT zones.id, 1, zones.policy_id, 
783137
	zones.name, 1, zones.signconf, 0,  
783137
	0,0,0, 
783137
	0,0,0,
783137
	zones.in_type, zones.input,
783137
	zones.out_type, zones.output,
783137
	0,0,0
783137
	FROM REMOTE.zones;
783137
783137
-- ~ ************
783137
-- ~ ** keyData table
783137
-- ~ **
783137
-- ~ ** 
783137
-- ~ **
783137
-- ~ **
783137
-- ~ ************
783137
783137
-- Temporary mapping table between 1.4 states and 2.0 ds_at_parent states
783137
-- We are ignoring the fact this may set a DS state for a ZSK; We don't care
783137
CREATE TABLE mapping (
783137
	state INTEGER,
783137
	ds_state INTEGER
783137
);
783137
INSERT INTO mapping SELECT  1, 0;
783137
INSERT INTO mapping SELECT  2, 0;
783137
INSERT INTO mapping SELECT  3, 1;
783137
INSERT INTO mapping SELECT  4, 3;
783137
INSERT INTO mapping SELECT  5, 5;
783137
INSERT INTO mapping SELECT  6, 5;
783137
INSERT INTO mapping SELECT  7, 5;
783137
INSERT INTO mapping SELECT  8, 5;
783137
INSERT INTO mapping SELECT  9, 5;
783137
INSERT INTO mapping SELECT 10, 5;
783137
783137
INSERT INTO keyData
783137
SELECT 
783137
	NULL, 1, REMOTE.dnsseckeys.zone_id,
783137
	REMOTE.dnsseckeys.keypair_id, REMOTE.keypairs.algorithm,
783137
	CASE WHEN REMOTE.dnsseckeys.publish IS NOT NULL THEN 
783137
		strftime('%s', REMOTE.dnsseckeys.publish) 
783137
		ELSE strftime("%s", "now") END, 
783137
	(~REMOTE.dnsseckeys.keytype&1)+1,
783137
	REMOTE.dnsseckeys.state <= 4, -- introducing
783137
	0, -- should revoke, not used
783137
	0, -- standby
783137
	REMOTE.dnsseckeys.state  = 4 AND REMOTE.dnsseckeys.keytype = 256, --activeZSK: 
783137
	REMOTE.dnsseckeys.state >= 2 AND REMOTE.dnsseckeys.state <= 5, --publish
783137
	REMOTE.dnsseckeys.state  = 4 AND REMOTE.dnsseckeys.keytype = 257, --activeKSK: 
783137
	mapping.ds_state, --dsatparent
783137
	1<<16, --keytag (crap, will 2.0 regenerate this?)
783137
	(REMOTE.dnsseckeys.keytype&1)*3+1 --minimize
783137
FROM REMOTE.dnsseckeys
783137
JOIN REMOTE.keypairs 
783137
	ON REMOTE.dnsseckeys.keypair_id = REMOTE.keypairs.id
783137
JOIN mapping 
783137
	ON REMOTE.dnsseckeys.state = mapping.state
783137
WHERE EXISTS(select REMOTE.zones.id FROM REMOTE.zones WHERE REMOTE.zones.id = REMOTE.dnsseckeys.zone_id);
783137
783137
-- Everything that is just a ZSK must not have dsatparent set.
783137
UPDATE keyData
783137
SET dsatparent = 0
783137
WHERE role = 2;
783137
783137
DROP TABLE mapping;
783137
783137
-- If a active time is set for a ready KSK dsAtParent is submitted 
783137
-- instead of submit
783137
UPDATE keyData
783137
SET dsatparent = 2
783137
WHERE keyData.dsAtParent = 1 AND keyData.id IN (
783137
	SELECT keyData.id
783137
	FROM keyData
783137
	JOIN REMOTE.dnsseckeys
783137
	ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
	WHERE REMOTE.dnsseckeys.active IS NOT NULL);
783137
783137
783137
-- ~ ************
783137
-- ~ ** Keystate table
783137
-- ~ **
783137
-- ~ ** 
783137
-- ~ **
783137
-- ~ **
783137
-- ~ ************
783137
783137
CREATE TABLE mapping (
783137
	state INTEGER,
783137
	ds INTEGER,
783137
	dk INTEGER,
783137
	ks INTEGER,
783137
	rs INTEGER
783137
);
783137
INSERT INTO mapping SELECT  1, 0, 0, 0, 0;
783137
INSERT INTO mapping SELECT  2, 0, 1, 1, 1;
783137
INSERT INTO mapping SELECT  3, 0, 2, 2, 1;
783137
INSERT INTO mapping SELECT  4, 2, 2, 2, 1;
783137
INSERT INTO mapping SELECT  5, 3, 2, 2, 3;
783137
INSERT INTO mapping SELECT  6, 0, 3, 3, 0;
783137
INSERT INTO mapping SELECT  7, 3, 0, 0, 0;
783137
INSERT INTO mapping SELECT  8, 3, 0, 0, 0;
783137
INSERT INTO mapping SELECT  9, 3, 0, 0, 0;
783137
INSERT INTO mapping SELECT 10, 3, 0, 0, 0;
783137
783137
-- DS RECORDS
783137
INSERT INTO keyState
783137
SELECT NULL, 1, keyData.id, 0, mapping.ds, strftime("%s", "now"), (keyData.minimize>>2)&1, policy.parentDsTtl
783137
FROM keyData
783137
JOIN zone
783137
	ON zone.id = keyData.zoneId
783137
JOIN policy
783137
	ON policy.id = zone.policyId
783137
JOIN REMOTE.dnsseckeys
783137
	ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
JOIN mapping
783137
	ON mapping.state = REMOTE.dnsseckeys.state;
783137
783137
UPDATE keyState
783137
SET state = 1
783137
WHERE keyState.state = 0 AND keyState.type = 0 AND keyState.id IN (
783137
	SELECT keyState.id
783137
	FROM keyState
783137
	JOIN keyData
783137
		ON keyData.id = keyState.keydataId
783137
	JOIN REMOTE.dnsseckeys
783137
		ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
	WHERE REMOTE.dnsseckeys.active IS NOT NULL);
783137
783137
-- DNSKEY RECORDS
783137
INSERT INTO keyState
783137
SELECT NULL, 1, keyData.id, 2, mapping.dk, strftime("%s", "now"), (keyData.minimize>>1)&1, policy.keysTtl
783137
FROM keyData
783137
JOIN zone
783137
	ON zone.id = keyData.zoneId
783137
JOIN policy
783137
	ON policy.id = zone.policyId
783137
JOIN REMOTE.dnsseckeys
783137
	ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
JOIN mapping
783137
	ON mapping.state = REMOTE.dnsseckeys.state;
783137
783137
-- RRSIG DNSKEY RECORDS
783137
INSERT INTO keyState
783137
SELECT NULL, 1, keyData.id, 3, mapping.ks, strftime("%s", "now"), (keyData.minimize>>1)&1, policy.keysTtl
783137
FROM keyData
783137
JOIN zone
783137
	ON zone.id = keyData.zoneId
783137
JOIN policy
783137
	ON policy.id = zone.policyId
783137
JOIN REMOTE.dnsseckeys
783137
	ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
JOIN mapping
783137
	ON mapping.state = REMOTE.dnsseckeys.state;
783137
783137
-- RRSIG RECORDS
783137
INSERT INTO keyState
783137
SELECT NULL, 1, keyData.id, 1, mapping.rs, strftime("%s", "now"), (keyData.minimize>>0)&1, policy.signaturesMaxZoneTtl
783137
FROM keyData
783137
JOIN zone
783137
	ON zone.id = keyData.zoneId
783137
JOIN policy
783137
	ON policy.id = zone.policyId
783137
JOIN REMOTE.dnsseckeys
783137
	ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
JOIN mapping
783137
	ON mapping.state = REMOTE.dnsseckeys.state;
783137
783137
--Set to OMN if Tactive + Dttl < Tnow
783137
UPDATE keyState
783137
SET state = 2
783137
WHERE keyState.state = 1 AND keyState.type = 1 AND keyState.id IN (
783137
        SELECT keyState.id
783137
        FROM keyState
783137
        JOIN keyData
783137
                ON keyData.id = keyState.keydataId
783137
        JOIN REMOTE.dnsseckeys
783137
                ON REMOTE.dnsseckeys.keypair_id = keyData.hsmkeyid
783137
        JOIN zone
783137
                ON keyData.zoneId = zone.id
783137
        JOIN policy
783137
                ON policy.id = zone.policyId
783137
        WHERE CAST(strftime("%s", REMOTE.dnsseckeys.active) + policy.signaturesValidityDefault as INTEGER) < strftime("%s", "now"));
783137
783137
--Force the RRSIG state in omnipresent if rumoured and there is no old ZSK
783137
-- unretentive
783137
UPDATE keyState 
783137
SET state = 2
783137
WHERE keyState.id IN (
783137
SELECT rs.id FROM keyState AS rs 
783137
JOIN keystate AS dk ON dk.keyDataId == rs.keyDataId
783137
WHERE rs.type == 1 AND dk.type == 2 AND rs.state == 1 AND dk.state == 2
783137
AND NOT EXISTS(
783137
	SELECT* FROM keystate AS rs2
783137
	JOIN keystate AS dk2 ON dk2.keyDataId == rs2.keyDataId
783137
	WHERE rs2.type == 1 AND dk2.type == 2 AND rs2.state == 3 AND dk2.state == 2
783137
));
783137
783137
DROP TABLE mapping;
783137
783137
-- We need to create records in the keydependency table in case we are in a
783137
-- rollover. Only done for ZSK. For every introducing ZSK with RRSIG rumoured
783137
-- that has an outroducing ZSK with RRSIG unretentive, we add a record.
783137
INSERT INTO keyDependency
783137
SELECT NULL, 0, keyData.zoneID, SUB.IDout, keyData.id, 1
783137
FROM keyData
783137
JOIN keyState AS KS1 
783137
	ON KS1.keyDataId == keyData.id
783137
JOIN keyState AS KS2 
783137
	ON KS2.keyDataId == keyData.id
783137
JOIN (
783137
	SELECT keyData.id AS IDout, keyData.zoneID 
783137
	FROM keyData
783137
	JOIN keyState AS KS1 
783137
		ON KS1.keyDataId == keyData.id
783137
	JOIN keyState AS KS2 
783137
		ON KS2.keyDataId == keyData.id
783137
	WHERE KS1.type == 2 
783137
		AND ks1.state = 2 
783137
		AND KS2.type == 1 
783137
		AND KS2.state == 3
783137
		AND keyData.introducing == 0 
783137
		AND keyData.role == 2
783137
) AS SUB
783137
	ON SUB.zoneId == keyData.zoneId
783137
WHERE 
783137
	KS1.type == 2 
783137
	AND ks1.state = 2 
783137
	AND KS2.type == 1 
783137
	AND KS2.state == 1
783137
	AND keyData.introducing == 1 
783137
	AND keyData.role == 2;
783137
783137
-- ZSK
783137
UPDATE keyState
783137
SET state = 4
783137
WHERE (keyState.type = 0 OR keyState.type = 3) AND keyDataId IN (
783137
	SELECT keyData.id
783137
	FROM keyData
783137
	WHERE keyData.role = 2);
783137
783137
--KSK
783137
UPDATE keyState
783137
SET state = 4
783137
WHERE keyState.type = 1 AND keyDataId IN (
783137
	SELECT keyData.id
783137
	FROM keyData
783137
	WHERE keyData.role = 1);
783137
783137
-- For rpm based systems to see if db was migrated already. store opendnssec major minor version
783137
CREATE TABLE rpm_migration (
783137
        major INTEGER,
783137
        minor INTEGER
783137
);
783137
INSERT INTO rpm_migration VALUES(2, 1);
783137