[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Mon Mar 9 20:25:05 MDT 2015


The branch, master has been updated
       via  c6cb2d6 Update libwbclient version to 0.12
       via  2664d90 Move wbc global variables into global context instead
       via  063c56d Add context versions of wbclient functions
       via  348f93f Add wbcContext to wbcRequestResponse
       via  bc75e72 Add wbcContext struct, create and free functions
       via  83cfb84 Use global context for winbindd_request_response
       via  60c7571 Make winbind client library thread-safe by adding context
      from  95a6a89 torture/ioctl: add range overflow QAR test

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c6cb2d650872a8c37820b65bb2d5882207263e88
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Sun Mar 1 23:14:07 2015 +0000

    Update libwbclient version to 0.12
    
    Increment the minor version of the libwbclient library after new
    context functions added. (Major version increase not required as
    the only two functions with changed parameters are private to the
    library.)
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Tue Mar 10 03:24:45 CET 2015 on sn-devel-104

commit 2664d9070f3c21231627380822e619fb695db662
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Sun Feb 22 23:31:48 2015 +0000

    Move wbc global variables into global context instead
    
    There are some global variables in use in the libwbclient
    library. Now that we have a context, move these into it so that
    they are thread-safe when the wbcCtx* functions are used.
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 063c56dba590eec69439eb791a420b40505d4cc0
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Sat Feb 21 22:30:11 2015 +0000

    Add context versions of wbclient functions
    
    To make the libwbclient library thread-safe, all functions
    that call through to wb_common winbindd_request_response need
    to have context that they can use. This commit adds all the
    necessary functions.
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 348f93ff6e25c43e0233432bd2134bb9eacb0b87
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Sat Jan 24 00:30:00 2015 +0000

    Add wbcContext to wbcRequestResponse
    
    To enable libwbclient to pass winbindd context through
    to the winbind client library in wb_common.
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit bc75e723ce063149278c95327ef91959718d27be
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Sat Feb 21 00:19:32 2015 +0000

    Add wbcContext struct, create and free functions
    
    The basic context structure and functions for libwbclient so that
    libwbclient can be made thread-safe.
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 83cfb84b78ce7141652f1fdc7f01978cdb69343f
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Fri Jan 23 23:58:53 2015 +0000

    Use global context for winbindd_request_response
    
    Updating API call in libwbclient, wbinfo, ntlm_auth and
    winbind_nss_* as per previous commit to wb_common.c.
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 60c7571984d7f1612828a72fae3ed8e66037d1f7
Author: Matthew Newton <matthew-git at newtoncomputing.co.uk>
Date:   Fri Jan 23 22:35:50 2015 +0000

    Make winbind client library thread-safe by adding context
    
    Rather than keep state in global variables, store the current
    context such as the winbind file descriptor in a struct that is
    passed in. This makes the winbind client library thread-safe.
    
    Signed-off-by: Matthew Newton <matthew-git at newtoncomputing.co.uk>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 nsswitch/libwbclient/ABI/wbclient-0.12.sigs | 130 ++++++
 nsswitch/libwbclient/wbc_idmap.c            |  70 ++-
 nsswitch/libwbclient/wbc_pam.c              | 198 +++++---
 nsswitch/libwbclient/wbc_pwd.c              | 222 ++++++---
 nsswitch/libwbclient/wbc_sid.c              | 169 +++++--
 nsswitch/libwbclient/wbc_util.c             | 123 +++--
 nsswitch/libwbclient/wbclient.c             |  90 +++-
 nsswitch/libwbclient/wbclient.h             | 683 +++++++++++++++++++++++++++-
 nsswitch/libwbclient/wbclient_internal.h    |  13 +-
 nsswitch/libwbclient/wscript                |   2 +-
 nsswitch/wb_common.c                        | 181 +++++---
 nsswitch/wbinfo.c                           |   4 +-
 nsswitch/winbind_client.h                   |  23 +-
 nsswitch/winbind_nss_aix.c                  |  30 +-
 nsswitch/winbind_nss_linux.c                |  49 +-
 nsswitch/winbind_nss_netbsd.c               |   3 +-
 nsswitch/winbind_nss_solaris.c              |   9 +-
 source3/utils/ntlm_auth.c                   |  16 +-
 source4/torture/winbind/struct_based.c      |   2 +-
 19 files changed, 1681 insertions(+), 336 deletions(-)
 create mode 100644 nsswitch/libwbclient/ABI/wbclient-0.12.sigs


Changeset truncated at 500 lines:

diff --git a/nsswitch/libwbclient/ABI/wbclient-0.12.sigs b/nsswitch/libwbclient/ABI/wbclient-0.12.sigs
new file mode 100644
index 0000000..3b71917
--- /dev/null
+++ b/nsswitch/libwbclient/ABI/wbclient-0.12.sigs
@@ -0,0 +1,130 @@
+wbcAddNamedBlob: wbcErr (size_t *, struct wbcNamedBlob **, const char *, uint32_t, uint8_t *, size_t)
+wbcAllocateGid: wbcErr (gid_t *)
+wbcAllocateMemory: void *(size_t, size_t, void (*)(void *))
+wbcAllocateStringArray: const char **(int)
+wbcAllocateUid: wbcErr (uid_t *)
+wbcAuthenticateUser: wbcErr (const char *, const char *)
+wbcAuthenticateUserEx: wbcErr (const struct wbcAuthUserParams *, struct wbcAuthUserInfo **, struct wbcAuthErrorInfo **)
+wbcChangeTrustCredentials: wbcErr (const char *, struct wbcAuthErrorInfo **)
+wbcChangeUserPassword: wbcErr (const char *, const char *, const char *)
+wbcChangeUserPasswordEx: wbcErr (const struct wbcChangePasswordParams *, struct wbcAuthErrorInfo **, enum wbcPasswordChangeRejectReason *, struct wbcUserPasswordPolicyInfo **)
+wbcCheckTrustCredentials: wbcErr (const char *, struct wbcAuthErrorInfo **)
+wbcCredentialCache: wbcErr (struct wbcCredentialCacheParams *, struct wbcCredentialCacheInfo **, struct wbcAuthErrorInfo **)
+wbcCredentialSave: wbcErr (const char *, const char *)
+wbcCtxAllocateGid: wbcErr (struct wbcContext *, gid_t *)
+wbcCtxAllocateUid: wbcErr (struct wbcContext *, uid_t *)
+wbcCtxAuthenticateUser: wbcErr (struct wbcContext *, const char *, const char *)
+wbcCtxAuthenticateUserEx: wbcErr (struct wbcContext *, const struct wbcAuthUserParams *, struct wbcAuthUserInfo **, struct wbcAuthErrorInfo **)
+wbcCtxChangeTrustCredentials: wbcErr (struct wbcContext *, const char *, struct wbcAuthErrorInfo **)
+wbcCtxChangeUserPassword: wbcErr (struct wbcContext *, const char *, const char *, const char *)
+wbcCtxChangeUserPasswordEx: wbcErr (struct wbcContext *, const struct wbcChangePasswordParams *, struct wbcAuthErrorInfo **, enum wbcPasswordChangeRejectReason *, struct wbcUserPasswordPolicyInfo **)
+wbcCtxCheckTrustCredentials: wbcErr (struct wbcContext *, const char *, struct wbcAuthErrorInfo **)
+wbcCtxCreate: struct wbcContext *(void)
+wbcCtxCredentialCache: wbcErr (struct wbcContext *, struct wbcCredentialCacheParams *, struct wbcCredentialCacheInfo **, struct wbcAuthErrorInfo **)
+wbcCtxCredentialSave: wbcErr (struct wbcContext *, const char *, const char *)
+wbcCtxDcInfo: wbcErr (struct wbcContext *, const char *, size_t *, const char ***, const char ***)
+wbcCtxDomainInfo: wbcErr (struct wbcContext *, const char *, struct wbcDomainInfo **)
+wbcCtxEndgrent: wbcErr (struct wbcContext *)
+wbcCtxEndpwent: wbcErr (struct wbcContext *)
+wbcCtxFree: void (struct wbcContext *)
+wbcCtxGetDisplayName: wbcErr (struct wbcContext *, const struct wbcDomainSid *, char **, char **, enum wbcSidType *)
+wbcCtxGetGroups: wbcErr (struct wbcContext *, const char *, uint32_t *, gid_t **)
+wbcCtxGetSidAliases: wbcErr (struct wbcContext *, const struct wbcDomainSid *, struct wbcDomainSid *, uint32_t, uint32_t **, uint32_t *)
+wbcCtxGetgrent: wbcErr (struct wbcContext *, struct group **)
+wbcCtxGetgrgid: wbcErr (struct wbcContext *, gid_t, struct group **)
+wbcCtxGetgrlist: wbcErr (struct wbcContext *, struct group **)
+wbcCtxGetgrnam: wbcErr (struct wbcContext *, const char *, struct group **)
+wbcCtxGetpwent: wbcErr (struct wbcContext *, struct passwd **)
+wbcCtxGetpwnam: wbcErr (struct wbcContext *, const char *, struct passwd **)
+wbcCtxGetpwsid: wbcErr (struct wbcContext *, struct wbcDomainSid *, struct passwd **)
+wbcCtxGetpwuid: wbcErr (struct wbcContext *, uid_t, struct passwd **)
+wbcCtxGidToSid: wbcErr (struct wbcContext *, gid_t, struct wbcDomainSid *)
+wbcCtxInterfaceDetails: wbcErr (struct wbcContext *, struct wbcInterfaceDetails **)
+wbcCtxListGroups: wbcErr (struct wbcContext *, const char *, uint32_t *, const char ***)
+wbcCtxListTrusts: wbcErr (struct wbcContext *, struct wbcDomainInfo **, size_t *)
+wbcCtxListUsers: wbcErr (struct wbcContext *, const char *, uint32_t *, const char ***)
+wbcCtxLogoffUser: wbcErr (struct wbcContext *, const char *, uid_t, const char *)
+wbcCtxLogoffUserEx: wbcErr (struct wbcContext *, const struct wbcLogoffUserParams *, struct wbcAuthErrorInfo **)
+wbcCtxLogonUser: wbcErr (struct wbcContext *, const struct wbcLogonUserParams *, struct wbcLogonUserInfo **, struct wbcAuthErrorInfo **, struct wbcUserPasswordPolicyInfo **)
+wbcCtxLookupDomainController: wbcErr (struct wbcContext *, const char *, uint32_t, struct wbcDomainControllerInfo **)
+wbcCtxLookupDomainControllerEx: wbcErr (struct wbcContext *, const char *, struct wbcGuid *, const char *, uint32_t, struct wbcDomainControllerInfoEx **)
+wbcCtxLookupName: wbcErr (struct wbcContext *, const char *, const char *, struct wbcDomainSid *, enum wbcSidType *)
+wbcCtxLookupRids: wbcErr (struct wbcContext *, struct wbcDomainSid *, int, uint32_t *, const char **, const char ***, enum wbcSidType **)
+wbcCtxLookupSid: wbcErr (struct wbcContext *, const struct wbcDomainSid *, char **, char **, enum wbcSidType *)
+wbcCtxLookupSids: wbcErr (struct wbcContext *, const struct wbcDomainSid *, int, struct wbcDomainInfo **, int *, struct wbcTranslatedName **)
+wbcCtxLookupUserSids: wbcErr (struct wbcContext *, const struct wbcDomainSid *, bool, uint32_t *, struct wbcDomainSid **)
+wbcCtxPing: wbcErr (struct wbcContext *)
+wbcCtxPingDc: wbcErr (struct wbcContext *, const char *, struct wbcAuthErrorInfo **)
+wbcCtxPingDc2: wbcErr (struct wbcContext *, const char *, struct wbcAuthErrorInfo **, char **)
+wbcCtxResolveWinsByIP: wbcErr (struct wbcContext *, const char *, char **)
+wbcCtxResolveWinsByName: wbcErr (struct wbcContext *, const char *, char **)
+wbcCtxSetgrent: wbcErr (struct wbcContext *)
+wbcCtxSetpwent: wbcErr (struct wbcContext *)
+wbcCtxSidToGid: wbcErr (struct wbcContext *, const struct wbcDomainSid *, gid_t *)
+wbcCtxSidToUid: wbcErr (struct wbcContext *, const struct wbcDomainSid *, uid_t *)
+wbcCtxSidsToUnixIds: wbcErr (struct wbcContext *, const struct wbcDomainSid *, uint32_t, struct wbcUnixId *)
+wbcCtxUidToSid: wbcErr (struct wbcContext *, uid_t, struct wbcDomainSid *)
+wbcDcInfo: wbcErr (const char *, size_t *, const char ***, const char ***)
+wbcDomainInfo: wbcErr (const char *, struct wbcDomainInfo **)
+wbcEndgrent: wbcErr (void)
+wbcEndpwent: wbcErr (void)
+wbcErrorString: const char *(wbcErr)
+wbcFreeMemory: void (void *)
+wbcGetDisplayName: wbcErr (const struct wbcDomainSid *, char **, char **, enum wbcSidType *)
+wbcGetGlobalCtx: struct wbcContext *(void)
+wbcGetGroups: wbcErr (const char *, uint32_t *, gid_t **)
+wbcGetSidAliases: wbcErr (const struct wbcDomainSid *, struct wbcDomainSid *, uint32_t, uint32_t **, uint32_t *)
+wbcGetgrent: wbcErr (struct group **)
+wbcGetgrgid: wbcErr (gid_t, struct group **)
+wbcGetgrlist: wbcErr (struct group **)
+wbcGetgrnam: wbcErr (const char *, struct group **)
+wbcGetpwent: wbcErr (struct passwd **)
+wbcGetpwnam: wbcErr (const char *, struct passwd **)
+wbcGetpwsid: wbcErr (struct wbcDomainSid *, struct passwd **)
+wbcGetpwuid: wbcErr (uid_t, struct passwd **)
+wbcGidToSid: wbcErr (gid_t, struct wbcDomainSid *)
+wbcGuidToString: wbcErr (const struct wbcGuid *, char **)
+wbcInterfaceDetails: wbcErr (struct wbcInterfaceDetails **)
+wbcLibraryDetails: wbcErr (struct wbcLibraryDetails **)
+wbcListGroups: wbcErr (const char *, uint32_t *, const char ***)
+wbcListTrusts: wbcErr (struct wbcDomainInfo **, size_t *)
+wbcListUsers: wbcErr (const char *, uint32_t *, const char ***)
+wbcLogoffUser: wbcErr (const char *, uid_t, const char *)
+wbcLogoffUserEx: wbcErr (const struct wbcLogoffUserParams *, struct wbcAuthErrorInfo **)
+wbcLogonUser: wbcErr (const struct wbcLogonUserParams *, struct wbcLogonUserInfo **, struct wbcAuthErrorInfo **, struct wbcUserPasswordPolicyInfo **)
+wbcLookupDomainController: wbcErr (const char *, uint32_t, struct wbcDomainControllerInfo **)
+wbcLookupDomainControllerEx: wbcErr (const char *, struct wbcGuid *, const char *, uint32_t, struct wbcDomainControllerInfoEx **)
+wbcLookupName: wbcErr (const char *, const char *, struct wbcDomainSid *, enum wbcSidType *)
+wbcLookupRids: wbcErr (struct wbcDomainSid *, int, uint32_t *, const char **, const char ***, enum wbcSidType **)
+wbcLookupSid: wbcErr (const struct wbcDomainSid *, char **, char **, enum wbcSidType *)
+wbcLookupSids: wbcErr (const struct wbcDomainSid *, int, struct wbcDomainInfo **, int *, struct wbcTranslatedName **)
+wbcLookupUserSids: wbcErr (const struct wbcDomainSid *, bool, uint32_t *, struct wbcDomainSid **)
+wbcPing: wbcErr (void)
+wbcPingDc: wbcErr (const char *, struct wbcAuthErrorInfo **)
+wbcPingDc2: wbcErr (const char *, struct wbcAuthErrorInfo **, char **)
+wbcQueryGidToSid: wbcErr (gid_t, struct wbcDomainSid *)
+wbcQuerySidToGid: wbcErr (const struct wbcDomainSid *, gid_t *)
+wbcQuerySidToUid: wbcErr (const struct wbcDomainSid *, uid_t *)
+wbcQueryUidToSid: wbcErr (uid_t, struct wbcDomainSid *)
+wbcRemoveGidMapping: wbcErr (gid_t, const struct wbcDomainSid *)
+wbcRemoveUidMapping: wbcErr (uid_t, const struct wbcDomainSid *)
+wbcRequestResponse: wbcErr (struct wbcContext *, int, struct winbindd_request *, struct winbindd_response *)
+wbcRequestResponsePriv: wbcErr (struct wbcContext *, int, struct winbindd_request *, struct winbindd_response *)
+wbcResolveWinsByIP: wbcErr (const char *, char **)
+wbcResolveWinsByName: wbcErr (const char *, char **)
+wbcSetGidHwm: wbcErr (gid_t)
+wbcSetGidMapping: wbcErr (gid_t, const struct wbcDomainSid *)
+wbcSetUidHwm: wbcErr (uid_t)
+wbcSetUidMapping: wbcErr (uid_t, const struct wbcDomainSid *)
+wbcSetgrent: wbcErr (void)
+wbcSetpwent: wbcErr (void)
+wbcSidToGid: wbcErr (const struct wbcDomainSid *, gid_t *)
+wbcSidToString: wbcErr (const struct wbcDomainSid *, char **)
+wbcSidToStringBuf: int (const struct wbcDomainSid *, char *, int)
+wbcSidToUid: wbcErr (const struct wbcDomainSid *, uid_t *)
+wbcSidTypeString: const char *(enum wbcSidType)
+wbcSidsToUnixIds: wbcErr (const struct wbcDomainSid *, uint32_t, struct wbcUnixId *)
+wbcStrDup: char *(const char *)
+wbcStringToGuid: wbcErr (const char *, struct wbcGuid *)
+wbcStringToSid: wbcErr (const char *, struct wbcDomainSid *)
+wbcUidToSid: wbcErr (uid_t, struct wbcDomainSid *)
diff --git a/nsswitch/libwbclient/wbc_idmap.c b/nsswitch/libwbclient/wbc_idmap.c
index 04e7d02..3e8366a 100644
--- a/nsswitch/libwbclient/wbc_idmap.c
+++ b/nsswitch/libwbclient/wbc_idmap.c
@@ -26,7 +26,8 @@
 #include "../winbind_client.h"
 
 /* Convert a Windows SID to a Unix uid, allocating an uid if needed */
-wbcErr wbcSidToUid(const struct wbcDomainSid *sid, uid_t *puid)
+wbcErr wbcCtxSidToUid(struct wbcContext *ctx, const struct wbcDomainSid *sid,
+		      uid_t *puid)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -46,7 +47,7 @@ wbcErr wbcSidToUid(const struct wbcDomainSid *sid, uid_t *puid)
 
 	/* Make request */
 
-	wbc_status = wbcRequestResponse(WINBINDD_SID_TO_UID,
+	wbc_status = wbcRequestResponse(ctx, WINBINDD_SID_TO_UID,
 					&request,
 					&response);
 	BAIL_ON_WBC_ERROR(wbc_status);
@@ -59,6 +60,11 @@ wbcErr wbcSidToUid(const struct wbcDomainSid *sid, uid_t *puid)
 	return wbc_status;
 }
 
+wbcErr wbcSidToUid(const struct wbcDomainSid *sid, uid_t *puid)
+{
+	return wbcCtxSidToUid(NULL, sid, puid);
+}
+
 /* Convert a Windows SID to a Unix uid if there already is a mapping */
 wbcErr wbcQuerySidToUid(const struct wbcDomainSid *sid,
 			uid_t *puid)
@@ -67,7 +73,8 @@ wbcErr wbcQuerySidToUid(const struct wbcDomainSid *sid,
 }
 
 /* Convert a Unix uid to a Windows SID, allocating a SID if needed */
-wbcErr wbcUidToSid(uid_t uid, struct wbcDomainSid *sid)
+wbcErr wbcCtxUidToSid(struct wbcContext *ctx, uid_t uid,
+		      struct wbcDomainSid *sid)
 {
 	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
 	struct winbindd_request request;
@@ -87,7 +94,7 @@ wbcErr wbcUidToSid(uid_t uid, struct wbcDomainSid *sid)
 
 	/* Make request */
 
-	wbc_status = wbcRequestResponse(WINBINDD_UID_TO_SID,
+	wbc_status = wbcRequestResponse(ctx, WINBINDD_UID_TO_SID,
 					&request,
 					&response);
 	BAIL_ON_WBC_ERROR(wbc_status);
@@ -99,6 +106,11 @@ done:
 	return wbc_status;
 }
 
+wbcErr wbcUidToSid(uid_t uid, struct wbcDomainSid *sid)
+{
+	return wbcCtxUidToSid(NULL, uid, sid);
+}
+
 /* Convert a Unix uid to a Windows SID if there already is a mapping */
 wbcErr wbcQueryUidToSid(uid_t uid,
 			struct wbcDomainSid *sid)
@@ -115,7 +127,8 @@ wbcErr wbcQueryUidToSid(uid_t uid,
  *
  **/
 
-wbcErr wbcSidToGid(const struct wbcDomainSid *sid, gid_t *pgid)
+wbcErr wbcCtxSidToGid(struct wbcContext *ctx, const struct wbcDomainSid *sid,
+		      gid_t *pgid)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -135,7 +148,7 @@ wbcErr wbcSidToGid(const struct wbcDomainSid *sid, gid_t *pgid)
 
 	/* Make request */
 
-	wbc_status = wbcRequestResponse(WINBINDD_SID_TO_GID,
+	wbc_status = wbcRequestResponse(ctx, WINBINDD_SID_TO_GID,
 					&request,
 					&response);
 	BAIL_ON_WBC_ERROR(wbc_status);
@@ -148,6 +161,10 @@ wbcErr wbcSidToGid(const struct wbcDomainSid *sid, gid_t *pgid)
 	return wbc_status;
 }
 
+wbcErr wbcSidToGid(const struct wbcDomainSid *sid, gid_t *pgid)
+{
+	return wbcCtxSidToGid(NULL, sid, pgid);
+}
 
 /* Convert a Windows SID to a Unix gid if there already is a mapping */
 
@@ -159,7 +176,8 @@ wbcErr wbcQuerySidToGid(const struct wbcDomainSid *sid,
 
 
 /* Convert a Unix gid to a Windows SID, allocating a SID if needed */
-wbcErr wbcGidToSid(gid_t gid, struct wbcDomainSid *sid)
+wbcErr wbcCtxGidToSid(struct wbcContext *ctx, gid_t gid,
+		      struct wbcDomainSid *sid)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -179,7 +197,7 @@ wbcErr wbcGidToSid(gid_t gid, struct wbcDomainSid *sid)
 
 	/* Make request */
 
-	wbc_status = wbcRequestResponse(WINBINDD_GID_TO_SID,
+	wbc_status = wbcRequestResponse(ctx, WINBINDD_GID_TO_SID,
 					&request,
 					&response);
 	BAIL_ON_WBC_ERROR(wbc_status);
@@ -191,6 +209,11 @@ done:
 	return wbc_status;
 }
 
+wbcErr wbcGidToSid(gid_t gid, struct wbcDomainSid *sid)
+{
+	return wbcCtxGidToSid(NULL, gid, sid);
+}
+
 /* Convert a Unix gid to a Windows SID if there already is a mapping */
 wbcErr wbcQueryGidToSid(gid_t gid,
 			struct wbcDomainSid *sid)
@@ -199,7 +222,7 @@ wbcErr wbcQueryGidToSid(gid_t gid,
 }
 
 /* Obtain a new uid from Winbind */
-wbcErr wbcAllocateUid(uid_t *puid)
+wbcErr wbcCtxAllocateUid(struct wbcContext *ctx, uid_t *puid)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -215,7 +238,7 @@ wbcErr wbcAllocateUid(uid_t *puid)
 
 	/* Make request */
 
-	wbc_status = wbcRequestResponsePriv(WINBINDD_ALLOCATE_UID,
+	wbc_status = wbcRequestResponsePriv(ctx, WINBINDD_ALLOCATE_UID,
 					    &request, &response);
 	BAIL_ON_WBC_ERROR(wbc_status);
 
@@ -228,8 +251,13 @@ wbcErr wbcAllocateUid(uid_t *puid)
 	return wbc_status;
 }
 
+wbcErr wbcAllocateUid(uid_t *puid)
+{
+	return wbcCtxAllocateUid(NULL, puid);
+}
+
 /* Obtain a new gid from Winbind */
-wbcErr wbcAllocateGid(gid_t *pgid)
+wbcErr wbcCtxAllocateGid(struct wbcContext *ctx, gid_t *pgid)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -245,7 +273,7 @@ wbcErr wbcAllocateGid(gid_t *pgid)
 
 	/* Make request */
 
-	wbc_status = wbcRequestResponsePriv(WINBINDD_ALLOCATE_GID,
+	wbc_status = wbcRequestResponsePriv(ctx, WINBINDD_ALLOCATE_GID,
 					    &request, &response);
 	BAIL_ON_WBC_ERROR(wbc_status);
 
@@ -258,6 +286,11 @@ wbcErr wbcAllocateGid(gid_t *pgid)
 	return wbc_status;
 }
 
+wbcErr wbcAllocateGid(gid_t *pgid)
+{
+	return wbcCtxAllocateGid(NULL, pgid);
+}
+
 /* we can't include smb.h here... */
 #define _ID_TYPE_UID 1
 #define _ID_TYPE_GID 2
@@ -299,8 +332,9 @@ wbcErr wbcSetGidHwm(gid_t gid_hwm)
 }
 
 /* Convert a list of SIDs */
-wbcErr wbcSidsToUnixIds(const struct wbcDomainSid *sids, uint32_t num_sids,
-			struct wbcUnixId *ids)
+wbcErr wbcCtxSidsToUnixIds(struct wbcContext *ctx,
+			   const struct wbcDomainSid *sids,
+			   uint32_t num_sids, struct wbcUnixId *ids)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -341,7 +375,7 @@ wbcErr wbcSidsToUnixIds(const struct wbcDomainSid *sids, uint32_t num_sids,
 	request.extra_data.data = sidlist;
 	request.extra_len = p - sidlist;
 
-	wbc_status = wbcRequestResponse(WINBINDD_SIDS_TO_XIDS,
+	wbc_status = wbcRequestResponse(ctx, WINBINDD_SIDS_TO_XIDS,
 					&request, &response);
 	free(sidlist);
 	if (!WBC_ERROR_IS_OK(wbc_status)) {
@@ -393,3 +427,9 @@ done:
 	winbindd_free_response(&response);
 	return wbc_status;
 }
+
+wbcErr wbcSidsToUnixIds(const struct wbcDomainSid *sids, uint32_t num_sids,
+			struct wbcUnixId *ids)
+{
+	return wbcCtxSidsToUnixIds(NULL, sids, num_sids, ids);
+}
diff --git a/nsswitch/libwbclient/wbc_pam.c b/nsswitch/libwbclient/wbc_pam.c
index e243538..672cf37 100644
--- a/nsswitch/libwbclient/wbc_pam.c
+++ b/nsswitch/libwbclient/wbc_pam.c
@@ -28,8 +28,8 @@
 #include "../winbind_client.h"
 
 /* Authenticate a username/password pair */
-wbcErr wbcAuthenticateUser(const char *username,
-			   const char *password)
+wbcErr wbcCtxAuthenticateUser(struct wbcContext *ctx,
+			      const char *username, const char *password)
 {
 	wbcErr wbc_status = WBC_ERR_SUCCESS;
 	struct wbcAuthUserParams params;
@@ -40,13 +40,18 @@ wbcErr wbcAuthenticateUser(const char *username,
 	params.level			= WBC_AUTH_USER_LEVEL_PLAIN;
 	params.password.plaintext	= password;
 
-	wbc_status = wbcAuthenticateUserEx(&params, NULL, NULL);
+	wbc_status = wbcCtxAuthenticateUserEx(ctx, &params, NULL, NULL);
 	BAIL_ON_WBC_ERROR(wbc_status);
 
 done:
 	return wbc_status;
 }
 
+wbcErr wbcAuthenticateUser(const char *username, const char *password)
+{
+	return wbcCtxAuthenticateUser(NULL, username, password);
+}
+
 static bool sid_attr_compose(struct wbcSidWithAttr *s,
 			     const struct wbcDomainSid *d,
 			     uint32_t rid, uint32_t attr)
@@ -342,9 +347,10 @@ done:
 
 
 /* Authenticate with more detailed information */
-wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
-			     struct wbcAuthUserInfo **info,
-			     struct wbcAuthErrorInfo **error)
+wbcErr wbcCtxAuthenticateUserEx(struct wbcContext *ctx,
+				const struct wbcAuthUserParams *params,
+				struct wbcAuthUserInfo **info,
+				struct wbcAuthErrorInfo **error)
 {
 	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
 	int cmd = 0;
@@ -388,7 +394,7 @@ wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
 
 			ZERO_STRUCT(sep_response);
 
-			wbc_status = wbcRequestResponse(WINBINDD_INFO,
+			wbc_status = wbcRequestResponse(ctx, WINBINDD_INFO,
 							NULL, &sep_response);
 			BAIL_ON_WBC_ERROR(wbc_status);
 
@@ -518,9 +524,11 @@ wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
 	}
 
 	if (cmd == WINBINDD_PAM_AUTH_CRAP) {
-		wbc_status = wbcRequestResponsePriv(cmd, &request, &response);
+		wbc_status = wbcRequestResponsePriv(ctx, cmd,
+						    &request, &response);
 	} else {
-		wbc_status = wbcRequestResponse(cmd, &request, &response);
+		wbc_status = wbcRequestResponse(ctx, cmd,
+						&request, &response);
 	}
 	if (response.data.auth.nt_status != 0) {
 		if (error) {
@@ -547,9 +555,16 @@ done:
 	return wbc_status;
 }
 
+wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
+			     struct wbcAuthUserInfo **info,
+			     struct wbcAuthErrorInfo **error)
+{
+	return wbcCtxAuthenticateUserEx(NULL, params, info, error);
+}
+
 /* Trigger a verification of the trust credentials of a specific domain */
-wbcErr wbcCheckTrustCredentials(const char *domain,
-				struct wbcAuthErrorInfo **error)
+wbcErr wbcCtxCheckTrustCredentials(struct wbcContext *ctx, const char *domain,
+				   struct wbcAuthErrorInfo **error)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -565,7 +580,7 @@ wbcErr wbcCheckTrustCredentials(const char *domain,
 
 	/* Send request */
 
-	wbc_status = wbcRequestResponsePriv(WINBINDD_CHECK_MACHACC,
+	wbc_status = wbcRequestResponsePriv(ctx, WINBINDD_CHECK_MACHACC,
 					    &request, &response);
 	if (response.data.auth.nt_status != 0) {
 		if (error) {
@@ -583,9 +598,15 @@ wbcErr wbcCheckTrustCredentials(const char *domain,
 	return wbc_status;
 }
 
+wbcErr wbcCheckTrustCredentials(const char *domain,
+				struct wbcAuthErrorInfo **error)
+{
+	return wbcCtxCheckTrustCredentials(NULL, domain, error);
+}
+
 /* Trigger a change of the trust credentials for a specific domain */
-wbcErr wbcChangeTrustCredentials(const char *domain,
-				 struct wbcAuthErrorInfo **error)
+wbcErr wbcCtxChangeTrustCredentials(struct wbcContext *ctx, const char *domain,
+				    struct wbcAuthErrorInfo **error)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -601,8 +622,8 @@ wbcErr wbcChangeTrustCredentials(const char *domain,
 
 	/* Send request */
 
-	wbc_status = wbcRequestResponsePriv(WINBINDD_CHANGE_MACHACC,
-					&request, &response);
+	wbc_status = wbcRequestResponsePriv(ctx, WINBINDD_CHANGE_MACHACC,
+					    &request, &response);
 	if (response.data.auth.nt_status != 0) {
 		if (error) {
 			wbc_status = wbc_create_error_info(&response,
@@ -619,10 +640,22 @@ wbcErr wbcChangeTrustCredentials(const char *domain,
 	return wbc_status;
 }
 
+wbcErr wbcChangeTrustCredentials(const char *domain,
+				 struct wbcAuthErrorInfo **error)
+{
+	return wbcCtxChangeTrustCredentials(NULL, domain, error);
+}
+
 /*
  * Trigger a no-op NETLOGON call. Lightweight version of
  * wbcCheckTrustCredentials
  */
+wbcErr wbcCtxPingDc(struct wbcContext *ctx, const char *domain,
+		    struct wbcAuthErrorInfo **error)
+{
+	return wbcCtxPingDc2(ctx, domain, error, NULL);
+}
+
 wbcErr wbcPingDc(const char *domain, struct wbcAuthErrorInfo **error)
 {
 	return wbcPingDc2(domain, error, NULL);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list