Alexandre Julliard : dnsapi: Fix the DNS_KEY_DATA and DNS_SIG_DATA structure definitions.

Alexandre Julliard julliard at winehq.org
Tue Nov 2 17:27:45 CDT 2021


Module: wine
Branch: master
Commit: 0b7dba8c71ea5d9808d2108e29719328b40e6b1f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0b7dba8c71ea5d9808d2108e29719328b40e6b1f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Nov  2 12:46:28 2021 +0100

dnsapi: Fix the DNS_KEY_DATA and DNS_SIG_DATA structure definitions.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dnsapi/libresolv.c |  2 ++
 dlls/dnsapi/record.c    | 12 ++++++------
 include/windns.h        | 10 ++++++----
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/dlls/dnsapi/libresolv.c b/dlls/dnsapi/libresolv.c
index 197ca84aeae..e5c520a0a32 100644
--- a/dlls/dnsapi/libresolv.c
+++ b/dlls/dnsapi/libresolv.c
@@ -581,6 +581,7 @@ static DNS_STATUS copy_rdata( ns_msg msg, const ns_rr *rr, DNS_RECORDA *r, WORD
         r->Data.KEY.chAlgorithm = *pos++;
 
         size = rr->rdata + rr->rdlength - pos;
+        r->Data.KEY.wKeyLength = size;
 
         for (i = 0; i < size; i++)
             r->Data.KEY.Key[i] = *pos++;
@@ -668,6 +669,7 @@ static DNS_STATUS copy_rdata( ns_msg msg, const ns_rr *rr, DNS_RECORDA *r, WORD
         r->Data.SIG.wKeyTag       = *(const WORD *)pos;
 
         size = rr->rdata + rr->rdlength - pos;
+        r->Data.SIG.wSignatureLength = size;
 
         for (i = 0; i < size; i++)
             r->Data.SIG.Signature[i] = *pos++;
diff --git a/dlls/dnsapi/record.c b/dlls/dnsapi/record.c
index 5a75503d892..014d788cf5e 100644
--- a/dlls/dnsapi/record.c
+++ b/dlls/dnsapi/record.c
@@ -221,10 +221,10 @@ BOOL WINAPI DnsRecordCompare( PDNS_RECORD r1, PDNS_RECORD r2 )
     {
         if (r1->Data.KEY.wFlags      != r2->Data.KEY.wFlags      ||
             r1->Data.KEY.chProtocol  != r2->Data.KEY.chProtocol  ||
-            r1->Data.KEY.chAlgorithm != r2->Data.KEY.chAlgorithm)
+            r1->Data.KEY.chAlgorithm != r2->Data.KEY.chAlgorithm ||
+            r1->Data.KEY.wKeyLength  != r2->Data.KEY.wKeyLength)
             return FALSE;
-        if (memcmp( r1->Data.KEY.Key, r2->Data.KEY.Key,
-                    r1->wDataLength - sizeof(DNS_KEY_DATA) + 1 ))
+        if (memcmp( r1->Data.KEY.Key, r2->Data.KEY.Key, r1->Data.KEY.wKeyLength ))
             return FALSE;
         break;
     }
@@ -238,10 +238,10 @@ BOOL WINAPI DnsRecordCompare( PDNS_RECORD r1, PDNS_RECORD r2 )
             r1->Data.SIG.dwOriginalTtl != r2->Data.SIG.dwOriginalTtl ||
             r1->Data.SIG.dwExpiration  != r2->Data.SIG.dwExpiration  ||
             r1->Data.SIG.dwTimeSigned  != r2->Data.SIG.dwTimeSigned  ||
-            r1->Data.SIG.wKeyTag       != r2->Data.SIG.wKeyTag)
+            r1->Data.SIG.wKeyTag       != r2->Data.SIG.wKeyTag       ||
+            r1->Data.SIG.wSignatureLength != r2->Data.SIG.wSignatureLength)
             return FALSE;
-        if (memcmp( r1->Data.SIG.Signature, r2->Data.SIG.Signature,
-                    r1->wDataLength - sizeof(DNS_SIG_DATAA) + 1 ))
+        if (memcmp( r1->Data.SIG.Signature, r2->Data.SIG.Signature, r1->Data.SIG.wSignatureLength ))
             return FALSE;
         break;
     }
diff --git a/include/windns.h b/include/windns.h
index f1f2184281c..9796a299d04 100644
--- a/include/windns.h
+++ b/include/windns.h
@@ -339,6 +339,8 @@ typedef struct
     WORD wFlags;
     BYTE chProtocol;
     BYTE chAlgorithm;
+    WORD wKeyLength;
+    WORD wPad;
     BYTE Key[1];
 } DNS_KEY_DATA, *PDNS_KEY_DATA;
 
@@ -355,7 +357,6 @@ typedef struct
 
 typedef struct
 {
-    PSTR pNameSigner;
     WORD wTypeCovered;
     BYTE chAlgorithm;
     BYTE chLabelCount;
@@ -363,13 +364,13 @@ typedef struct
     DWORD dwExpiration;
     DWORD dwTimeSigned;
     WORD wKeyTag;
-    WORD Pad;
+    WORD wSignatureLength;
+    PSTR pNameSigner;
     BYTE Signature[1];
 } DNS_SIG_DATAA, *PDNS_SIG_DATAA;
 
 typedef struct
 {
-    PWSTR pNameSigner;
     WORD wTypeCovered;
     BYTE chAlgorithm;
     BYTE chLabelCount;
@@ -377,7 +378,8 @@ typedef struct
     DWORD dwExpiration;
     DWORD dwTimeSigned;
     WORD wKeyTag;
-    WORD Pad;
+    WORD wSignatureLength;
+    PWSTR pNameSigner;
     BYTE Signature[1];
 } DNS_SIG_DATAW, *PDNS_SIG_DATAW;
 




More information about the wine-cvs mailing list