From 78cb0a7bf31554d90eccfe626ba3e2b4c6b2893a Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 4 Aug 2014 12:48:56 -0400 Subject: Add call to get names from winbind Based on David Woodhouse work. --- src/external.c | 4 ++++ src/gss_ntlmssp_winbind.h | 2 ++ src/winbind.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/external.c b/src/external.c index 533c29b..adf8e5e 100644 --- a/src/external.c +++ b/src/external.c @@ -10,7 +10,11 @@ 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, diff --git a/src/gss_ntlmssp_winbind.h b/src/gss_ntlmssp_winbind.h index 05d8aba..b4e050e 100644 --- a/src/gss_ntlmssp_winbind.h +++ b/src/gss_ntlmssp_winbind.h @@ -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); diff --git a/src/winbind.c b/src/winbind.c index f36e3ff..3469f81 100644 --- a/src/winbind.c +++ b/src/winbind.c @@ -10,6 +10,41 @@ #include +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) { -- cgit