[NETAPI32] Implement DsDeregisterDnsHostRecordsA
authorEric Kohl <eric.kohl@reactos.org>
Sat, 24 Aug 2019 20:57:36 +0000 (22:57 +0200)
committerEric Kohl <eric.kohl@reactos.org>
Sat, 24 Aug 2019 20:57:36 +0000 (22:57 +0200)
dll/win32/netapi32/netlogon.c

index 2c068dc..73a0324 100644 (file)
@@ -313,10 +313,58 @@ DsDeregisterDnsHostRecordsA(
     _In_opt_ GUID *DsaGuid,
     _In_ LPSTR DnsHostName)
 {
-    FIXME("DsDeregisterDnsHostRecordsA(%s, %s, %p, %p, %s)\n",
+    PWSTR pServerNameW = NULL, pDnsDomainNameW = NULL;
+    PWSTR pDnsHostNameW = NULL;
+    NET_API_STATUS status = NERR_Success;
+
+    TRACE("DsDeregisterDnsHostRecordsA(%s, %s, %p, %p, %s)\n",
           debugstr_a(ServerName), debugstr_a(DnsDomainName),
           DomainGuid, DsaGuid, debugstr_a(DnsHostName));
-    return ERROR_CALL_NOT_IMPLEMENTED;
+
+    if (ServerName != NULL)
+    {
+        pServerNameW = NetpAllocWStrFromAnsiStr((PSTR)ServerName);
+        if (pServerNameW == NULL)
+        {
+            status = ERROR_NOT_ENOUGH_MEMORY;
+            goto done;
+        }
+    }
+
+    if (DnsDomainName != NULL)
+    {
+        pDnsDomainNameW = NetpAllocWStrFromAnsiStr((PSTR)DnsDomainName);
+        if (pDnsDomainNameW == NULL)
+        {
+            status = ERROR_NOT_ENOUGH_MEMORY;
+            goto done;
+        }
+    }
+
+    pDnsHostNameW = NetpAllocWStrFromAnsiStr((PSTR)DnsDomainName);
+    if (pDnsHostNameW == NULL)
+    {
+        status = ERROR_NOT_ENOUGH_MEMORY;
+        goto done;
+    }
+
+    status = DsDeregisterDnsHostRecordsW(pServerNameW,
+                                         pDnsDomainNameW,
+                                         DomainGuid,
+                                         DsaGuid,
+                                         pDnsHostNameW);
+
+done:
+    if (pDnsHostNameW != NULL)
+        NetApiBufferFree(pDnsHostNameW);
+
+    if (pDnsDomainNameW != NULL)
+        NetApiBufferFree(pDnsDomainNameW);
+
+    if (pServerNameW != NULL)
+        NetApiBufferFree(pServerNameW);
+
+    return status;
 }