summaryrefslogtreecommitdiff
path: root/nsswitch/libwbclient/wbc_pam.c
diff options
context:
space:
mode:
authorChristof Schmitt <christof.schmitt@us.ibm.com>2012-08-10 08:25:14 -0700
committerAndrew Bartlett <abartlet@samba.org>2012-08-15 11:44:42 +1000
commitbdb1f23e1d082830bf887cad0a0b5fed946b8e32 (patch)
tree73639427c9574493c37d718757474b074ed4212d /nsswitch/libwbclient/wbc_pam.c
parentbd23c8f1ce1caf61a0596c47795d6a21c2234826 (diff)
downloadsamba-bdb1f23e1d082830bf887cad0a0b5fed946b8e32.tar.gz
samba-bdb1f23e1d082830bf887cad0a0b5fed946b8e32.tar.bz2
samba-bdb1f23e1d082830bf887cad0a0b5fed946b8e32.zip
libwbclient: Add wbcPingDc2
Add wbcPingDc2 that optionally returns the DC that was attempted to ping. wbcPing is implemented as a wrapper around wbcPingDc2. Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'nsswitch/libwbclient/wbc_pam.c')
-rw-r--r--nsswitch/libwbclient/wbc_pam.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/nsswitch/libwbclient/wbc_pam.c b/nsswitch/libwbclient/wbc_pam.c
index 0aa180ca05..f7fb9f23f6 100644
--- a/nsswitch/libwbclient/wbc_pam.c
+++ b/nsswitch/libwbclient/wbc_pam.c
@@ -612,6 +612,16 @@ wbcErr wbcChangeTrustCredentials(const char *domain,
*/
wbcErr wbcPingDc(const char *domain, struct wbcAuthErrorInfo **error)
{
+ return wbcPingDc2(domain, error, NULL);
+}
+
+/*
+ * Trigger a no-op NETLOGON call. Lightweight version of
+ * wbcCheckTrustCredentials, optionally return attempted DC
+ */
+wbcErr wbcPingDc2(const char *domain, struct wbcAuthErrorInfo **error,
+ char **dcname)
+{
struct winbindd_request request;
struct winbindd_response response;
wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
@@ -633,6 +643,17 @@ wbcErr wbcPingDc(const char *domain, struct wbcAuthErrorInfo **error)
wbc_status = wbcRequestResponse(WINBINDD_PING_DC,
&request,
&response);
+
+ if (dcname && response.extra_data.data) {
+ size_t len;
+
+ len = response.length - sizeof(struct winbindd_response);
+ *dcname = wbcAllocateMemory(1, len, NULL);
+ BAIL_ON_PTR_ERROR(*dcname, wbc_status);
+
+ strlcpy(*dcname, response.extra_data.data, len);
+ }
+
if (response.data.auth.nt_status != 0) {
if (error) {
wbc_status = wbc_create_error_info(&response,