diff options
author | Christof Schmitt <christof.schmitt@us.ibm.com> | 2012-08-10 08:25:14 -0700 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2012-08-15 11:44:42 +1000 |
commit | bdb1f23e1d082830bf887cad0a0b5fed946b8e32 (patch) | |
tree | 73639427c9574493c37d718757474b074ed4212d /nsswitch/libwbclient/wbc_pam.c | |
parent | bd23c8f1ce1caf61a0596c47795d6a21c2234826 (diff) | |
download | samba-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.c | 21 |
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, |