Add call to get names from winbind
authorSimo Sorce <simo@redhat.com>
Mon, 4 Aug 2014 16:48:56 +0000 (12:48 -0400)
committerSimo Sorce <simo@redhat.com>
Thu, 7 Aug 2014 16:44:46 +0000 (12:44 -0400)
Based on David Woodhouse work.

src/external.c
src/gss_ntlmssp_winbind.h
src/winbind.c

index 533c29bfe6539cc725c6dd669cf0b054b6f0ee8b..adf8e5edbdfeb561442670d62f88b926640860ab 100644 (file)
 
 uint32_t external_netbios_get_names(char **computer, char **domain)
 {
+#if HAVE_WBCLIENT
+    return winbind_get_names(computer, domain);
+#else
     return ENOSYS;
+#endif
 }
 
 uint32_t external_get_creds(struct gssntlm_name *name,
index 05d8aba96238b761aa906af6d818a58bf860bcf6..b4e050eeb0d3761b076a3c4f4fb0dca438301589 100644 (file)
@@ -1,5 +1,7 @@
 /* Copyright (C) 2014 GSS-NTLMSSP contributors, see COPYING for License */
 
+uint32_t winbind_get_names(char **computer, char **domain);
+
 uint32_t winbind_get_creds(struct gssntlm_name *name,
                            struct gssntlm_cred *cred);
 
index f36e3ffb74827bdd3836d3c5631a758a20b38681..3469f81fe0305b2f2b89ad331f4bf4bd5266b02b 100644 (file)
 
 #include <wbclient.h>
 
+uint32_t winbind_get_names(char **computer, char **domain)
+{
+    struct wbcInterfaceDetails *details = NULL;
+    wbcErr wbc_status;
+    int ret = ENOENT;
+
+    wbc_status = wbcInterfaceDetails(&details);
+    if (!WBC_ERROR_IS_OK(wbc_status)) goto done;
+
+    if (computer) {
+        *computer = strdup(details->netbios_name);
+        if (!*computer) {
+            ret = ENOMEM;
+            goto done;
+        }
+    }
+
+    if (domain) {
+        *domain = strdup(details->netbios_domain);
+        if (!*domain) {
+            ret = ENOMEM;
+            goto done;
+        }
+    }
+
+    ret = 0;
+
+done:
+    if (ret) {
+        if (computer) free(*computer);
+    }
+    wbcFreeMemory(details);
+    return ret;
+}
+
 uint32_t winbind_get_creds(struct gssntlm_name *name,
                            struct gssntlm_cred *cred)
 {