diff --git a/src/storage.cr b/src/storage.cr index 3dd4f84..9c6262e 100644 --- a/src/storage.cr +++ b/src/storage.cr @@ -91,7 +91,7 @@ class DNSManager::Storage # Instead of generating the file for each change (synchronously), # it will be regenerated periodically by a script outside the application. def delegation_token_file - "#{@delegationdir}/regen-token-file" + "#{@delegationdir}/.regen-token-file" end # Updates the token file. @@ -394,12 +394,16 @@ class DNSManager::Storage def remove_delegation_file(domain : String) : Nil Baguette::Log.info "(domain #{domain}) removing a delegation file." File.delete "#{@delegationdir}/#{domain}" + rescue e : File::NotFoundError + Baguette::Log.info "(domain #{domain}) delegation file not found - ignoring." end # Removes a Bind9 zonefile. def remove_bind9_zonefile(domain : String) : Nil Baguette::Log.info "(domain #{domain}) removing a Bind9 zone file." File.delete "#{@zonefiledir}/#{domain}" + rescue e : File::NotFoundError + Baguette::Log.info "(domain #{domain}) zone file not found - ignoring." end # Deletes a domain. @@ -545,12 +549,14 @@ class DNSManager::Storage # WARNING: this function removes a zone with all its related data (zone file, delegation file, indexes, etc.). # + # WARNING: this function doesn't check for ownership authorizations (could cause a chicken-egg problem when + # deleting a domain). + # # RATIONALE: wipe_zone can be used to renew to remove zone-related content (the entry in the zone db, tokens # and generated zone file) while preserving the entry in the domain db. # wipe_zone is called when the domain is deleted or when it is delegated. def wipe_zone(user_id : UserDataID, domain_name : String) zone = zone_must_exist! domain_name - user_should_own! user_id, domain_name Baguette::Log.info "Wiping zone content for #{domain_name}" # Remove the related zone and their registered tokens.