answer-rotation: BOOL
automatic-acl: BOOL
proxy-allowlist: ADDR[/INT] | ADDR-ADDR ...
- dbus-event: none | running | zone-updated | ksk-submission | dnssec-invalid ...
+ dbus-event: none | running | zone-updated | external-verify | ksk-submission | dnssec-invalid ...
dbus-init-delay: TIME
listen: ADDR[@INT] | STR ...
listen-quic: ADDR[@INT] ...
- ``stopped`` when the server shutdown sequence is initiated.
- ``zone-updated`` – The signal ``zone_updated`` is emitted when a zone has been updated;
the signal parameters are `zone name` and `zone SOA serial`.
+- ``external-verify`` - The signal ``external_verify`` is emitted when a zone is awaiting
+ external validation before applying the changes; the signal parameter is `zone name`.
- ``keys-updated`` - The signal ``keys_updated`` is emitted when a DNSSEC key set
is updated; the signal parameter is `zone name`.
- ``ksk-submission`` – The signal ``zone_ksk_submission`` is emitted if there is
files where the new zone contents and/or differences are written
(in the zone file format) just before every validation.
+.. TIP::
+ If :ref:`server_dbus-event` is set to ``external-verify``, a corresponding
+ signal is emitted when the server is awaiting external validation.
+
*Default:* none
.. _zone_dnssec-signing:
print "Updated zone=$zone to serial=$serial\n";
});
+$knotd_interface->connect_to_signal('external_verify', sub
+{
+ my ($zone) = @_;
+ print "Awaiting external validation for zone=$zone\n";
+});
+
$knotd_interface->connect_to_signal('keys_updated', sub
{
my ($zone) = @_;
(zone, serial) = args
print("Updated zone=%s to serial=%d" % (zone, serial))
+def sig_external(sender, path, interface, signal, args):
+ (zone) = args
+ print("Awaiting external validation for zone=%s" % (zone))
+
def sig_keys_upd(sender, path, interface, signal, args):
(zone) = args
print("Keys updated for zone=%s" % (zone))
connect_to_signal("started", sig_started)
connect_to_signal("stopped", sig_stopped)
connect_to_signal("zone_updated", sig_updated)
+ connect_to_signal("external_verify", sig_external)
connect_to_signal("keys_updated", sig_keys_upd)
connect_to_signal("zone_ksk_submission", sig_submission)
connect_to_signal("zone_dnssec_invalid", sig_invalid)
zone_updated)
echo "Updated zone=${2} to serial=${3}"
;;
+ external_verify)
+ echo "Awaiting external validation for zone=${2}"
+ ;;
zone_dnssec_invalid)
echo "Invalid DNSSEC for zone=${2} remaining=${3} seconds"
;;
#endif // ENABLE_DBUS
}
+void dbus_emit_external_verify(const knot_dname_t *zone_name)
+{
+#if ENABLE_DBUS
+ knot_dname_txt_storage_t buff;
+ char *zone_str = knot_dname_to_str(buff, zone_name, sizeof(buff));
+ if (zone_str != NULL) {
+ emit_event(KNOT_BUS_EVENT_EXTERNAL, "s",
+ VALUE_OF(zone_str));
+ }
+#endif // ENABLE_DBUS
+}
+
void dbus_emit_keys_updated(const knot_dname_t *zone_name)
{
#if ENABLE_DBUS
#define KNOT_BUS_EVENT_STARTED "started"
#define KNOT_BUS_EVENT_STOPPED "stopped"
#define KNOT_BUS_EVENT_ZONE_UPD "zone_updated"
+#define KNOT_BUS_EVENT_EXTERNAL "external_verify"
#define KNOT_BUS_EVENT_ZONE_KEYS_UPD "keys_updated"
#define KNOT_BUS_EVENT_ZONE_KSK_SUBM "zone_ksk_submission"
#define KNOT_BUS_EVENT_ZONE_INVALID "zone_dnssec_invalid"
*/
void dbus_emit_zone_updated(const knot_dname_t *zone_name, uint32_t serial);
+/*!
+ * \brief Emit event signal that external verify shall take place.
+ *
+ * \param zone_name Zone name.
+ */
+void dbus_emit_external_verify(const knot_dname_t *zone_name);
+
/*!
* \brief Emit event signal for updated DNSSEC key set.
*
{ DBUS_EVENT_NONE, "none" },
{ DBUS_EVENT_RUNNING, "running" },
{ DBUS_EVENT_ZONE_UPDATED, "zone-updated" },
+ { DBUS_EVENT_EXTERNAL, "external-verify" },
{ DBUS_EVENT_KEYS_UPDATED, "keys-updated" },
{ DBUS_EVENT_ZONE_SUBMISSION, "ksk-submission" },
{ DBUS_EVENT_ZONE_INVALID, "dnssec-invalid" },
DBUS_EVENT_NONE = 0,
DBUS_EVENT_RUNNING = (1 << 0),
DBUS_EVENT_ZONE_UPDATED = (1 << 1),
- DBUS_EVENT_ZONE_SUBMISSION = (1 << 2),
- DBUS_EVENT_ZONE_INVALID = (1 << 3),
- DBUS_EVENT_KEYS_UPDATED = (1 << 4),
+ DBUS_EVENT_EXTERNAL = (1 << 2),
+ DBUS_EVENT_ZONE_SUBMISSION = (1 << 3),
+ DBUS_EVENT_ZONE_INVALID = (1 << 4),
+ DBUS_EVENT_KEYS_UPDATED = (1 << 5),
};
extern const knot_lookup_t acl_actions[];
log_zone_notice(update->zone->name, "waiting for external validation");
+ if (conf->cache.srv_dbus_event & DBUS_EVENT_EXTERNAL) {
+ dbus_emit_external_verify(update->zone->name);
+ }
+
knot_sem_wait(&update->external);
pthread_mutex_lock(&update->zone->cu_lock);