diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h index 2b8c01973c..faab3e7802 100644 --- a/lib/dns/include/dns/message.h +++ b/lib/dns/include/dns/message.h @@ -944,11 +944,15 @@ dns_message_gettsig(dns_message_t *msg, dns_name_t **owner); * Requires: * * 'msg' is a valid message. - * 'owner' is not NULL, and *owner is NULL. Contains the owner on return. + * 'owner' is NULL or *owner is NULL. * * Returns: * * The TSIG rdataset of 'msg', or NULL if there isn't one. + * + * Ensures: + * + * If 'owner' is not NULL, it will point to the owner name. */ isc_result_t @@ -1034,11 +1038,15 @@ dns_message_getsig0(dns_message_t *msg, dns_name_t **owner); * Requires: * * 'msg' is a valid message. - * 'owner' is not NULL, and *owner is NULL. Contains the owner on return. + * 'owner' is NULL or *owner is NULL. * * Returns: * * The SIG(0) rdataset of 'msg', or NULL if there isn't one. + * + * Ensures: + * + * If 'owner' is not NULL, it will point to the owner name. */ isc_result_t diff --git a/lib/dns/message.c b/lib/dns/message.c index 4185c6e963..e1fa1e68e0 100644 --- a/lib/dns/message.c +++ b/lib/dns/message.c @@ -2296,9 +2296,10 @@ dns_message_gettsig(dns_message_t *msg, dns_name_t **owner) { */ REQUIRE(DNS_MESSAGE_VALID(msg)); - REQUIRE(owner != NULL && *owner == NULL); + REQUIRE(owner == NULL || *owner == NULL); - *owner = msg->tsigname; + if (owner != NULL) + *owner = msg->tsigname; return (msg->tsig); } @@ -2431,8 +2432,9 @@ dns_message_getsig0(dns_message_t *msg, dns_name_t **owner) { */ REQUIRE(DNS_MESSAGE_VALID(msg)); + REQUIRE(owner == NULL || *owner == NULL); - if (msg->sig0 != NULL) { + if (msg->sig0 != NULL && owner != NULL) { /* If dns_message_getsig0 is called on a rendered message * after the SIG(0) has been applied, we need to return the * root name, not NULL. @@ -2441,12 +2443,8 @@ dns_message_getsig0(dns_message_t *msg, dns_name_t **owner) { *owner = dns_rootname; else *owner = msg->sig0name; - return (msg->sig0); - } - else { - *owner = NULL; - return (NULL); } + return (msg->sig0); } isc_result_t