From a2481eda8c29255e8580b6070ea87f46ea7b4300 Mon Sep 17 00:00:00 2001 From: "Gerald (Jerry) Carter" Date: Fri, 21 Dec 2007 11:57:34 -0600 Subject: Add files for new LGPL libwbclient DSO implementing the Winbind client API (based on the winbind_struct_protocol.h). The API in incomplete, but sufficient to merge. See wbclienbt.h for the i interface functions. (This used to be commit 83d274b46078a9ace77edb822a0e336c79dcf40e) --- source3/nsswitch/libwbclient/wbclient.h | 184 ++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 source3/nsswitch/libwbclient/wbclient.h (limited to 'source3/nsswitch/libwbclient/wbclient.h') diff --git a/source3/nsswitch/libwbclient/wbclient.h b/source3/nsswitch/libwbclient/wbclient.h new file mode 100644 index 0000000000..2867aad69e --- /dev/null +++ b/source3/nsswitch/libwbclient/wbclient.h @@ -0,0 +1,184 @@ +/* + Unix SMB/CIFS implementation. + + Winbind client API + + Copyright (C) Gerald (Jerry) Carter 2007 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef _WBCLIENT_H +#define _WBCLIENT_H + +#include +#include + +/* + * Data types used by the Winbind Client API + */ + +#ifndef MAXSUBAUTHS +#define MAXSUBAUTHS 15 /* max sub authorities in a SID */ +#endif + +/** + * @brief Windows Security Identifier + * + **/ + +struct wbcDomainSid { + uint8_t sid_rev_num; + uint8_t num_auths; + uint8_t id_auth[6]; + uint32_t sub_auths[MAXSUBAUTHS]; +}; + +/** + * @brief Security Identifier type + **/ + +enum wbcSidType { + WBC_SID_NAME_USE_NONE=0, + WBC_SID_NAME_USER=1, + WBC_SID_NAME_DOM_GRP=2, + WBC_SID_NAME_DOMAIN=3, + WBC_SID_NAME_ALIAS=4, + WBC_SID_NAME_WKN_GRP=5, + WBC_SID_NAME_DELETED=6, + WBC_SID_NAME_INVALID=7, + WBC_SID_NAME_UNKNOWN=8, + WBC_SID_NAME_COMPUTER=9 +}; + +/** + * @brief Domain Information + **/ + +struct wbcDomainInfo { + char *short_name; + char *dns_name; + struct wbcDomainSid sid; + uint32_t flags; +}; + +/* wbcDomainInfo->flags */ + +#define WBC_DOMINFO_NATIVE 0x00000001 +#define WBC_DOMINFO_AD 0x00000002 +#define WBC_DOMINFO_PRIMARY 0x00000004 + +/* + * Memory Management + */ + +void wbcFreeMemory(void*); + + +/* + * Utility functions for dealing with SIDs + */ + +wbcErr wbcSidToString(const struct wbcDomainSid *sid, + char **sid_string); + +wbcErr wbcStringToSid(const char *sid_string, + struct wbcDomainSid *sid); + +wbcErr wbcPing(void); + +/* + * Name/SID conversion + */ + +wbcErr wbcLookupName(const char *dom_name, + const char *name, + struct wbcDomainSid *sid, + enum wbcSidType *name_type); + +wbcErr wbcLookupSid(const struct wbcDomainSid *sid, + char **domain, + char **name, + enum wbcSidType *name_type); + +wbcErr wbcLookupRids(struct wbcDomainSid *dom_sid, + int num_rids, + uint32_t *rids, + const char **domain_name, + const char ***names, + enum wbcSidType **types); + +/* + * SID/uid/gid Mappings + */ + +wbcErr wbcSidToUid(const struct wbcDomainSid *sid, + uid_t *puid); + +wbcErr wbcUidToSid(uid_t uid, + struct wbcDomainSid *sid); + +wbcErr wbcSidToGid(const struct wbcDomainSid *sid, + gid_t *pgid); + +wbcErr wbcGidToSid(gid_t gid, + struct wbcDomainSid *sid); + +wbcErr wbcAllocateUid(uid_t *puid); + +wbcErr wbcAllocateGid(uid_t *pgid); + +/* + * NSS Lookup User/Group details + */ + +wbcErr wbcGetpwnam(const char *name, struct passwd **pwd); + +wbcErr wbcGetpwuid(uid_t uid, struct passwd **pwd); + +wbcErr wbcGetgrnam(const char *name, struct group **grp); + +wbcErr wbcGetgrgid(gid_t gid, struct group **grp); + +wbcErr wbcSetpwent(void); + +wbcErr wbcEndpwent(void); + +wbcErr wbcGetpwent(struct passwd **pwd); + +wbcErr wbcSetgrent(void); + +wbcErr wbcEndgrent(void); + +wbcErr wbcGetgrent(struct group **grp); + + +/* + * Lookup Domain information + */ + +wbcErr wbcDomainInfo(const char *domain, + struct wbcDomainInfo **info); + +wbcErr wbcDomainSequenceNumbers(void); + +/* + * Athenticate functions + */ + +wbcErr wbcAuthenticateUser(const char *username, + const char *password); + + +#endif /* _WBCLIENT_H */ -- cgit From 2c072ac87910208780a8e03cb3cea687d874b613 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Thu, 3 Jan 2008 12:10:27 +0100 Subject: Some coding convention pedantism. Guenther (This used to be commit 338baf96cb957fa52e312d42fbf0fa227d7dafda) --- source3/nsswitch/libwbclient/wbclient.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/nsswitch/libwbclient/wbclient.h') diff --git a/source3/nsswitch/libwbclient/wbclient.h b/source3/nsswitch/libwbclient/wbclient.h index 2867aad69e..6b85d7e8b3 100644 --- a/source3/nsswitch/libwbclient/wbclient.h +++ b/source3/nsswitch/libwbclient/wbclient.h @@ -177,7 +177,7 @@ wbcErr wbcDomainSequenceNumbers(void); * Athenticate functions */ -wbcErr wbcAuthenticateUser(const char *username, +wbcErr wbcAuthenticateUser(const char *username, const char *password); -- cgit From bfc4e62e61291670b1bcddfa260c59742ed67026 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 15 Jan 2008 10:24:09 +0100 Subject: libwbclient: move wbc_err.h into wbclient.h as we only install one header This makes the installed wbclient.h header usable. metze (This used to be commit 7dd65599a15bf1d164fcfa554c8057d43c51eb6d) --- source3/nsswitch/libwbclient/wbclient.h | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'source3/nsswitch/libwbclient/wbclient.h') diff --git a/source3/nsswitch/libwbclient/wbclient.h b/source3/nsswitch/libwbclient/wbclient.h index 6b85d7e8b3..0b256d343f 100644 --- a/source3/nsswitch/libwbclient/wbclient.h +++ b/source3/nsswitch/libwbclient/wbclient.h @@ -23,7 +23,32 @@ #define _WBCLIENT_H #include -#include +#include + +/* Define error types */ + +/** + * @brief Status codes returned from wbc functions + **/ + +enum _wbcErrType { + WBC_ERR_SUCCESS = 0, /**< Successful completion **/ + WBC_ERR_NOT_IMPLEMENTED,/**< Function not implemented **/ + WBC_ERR_UNKNOWN_FAILURE,/**< General failure **/ + WBC_ERR_NO_MEMORY, /**< Memory allocation error **/ + WBC_ERR_INVALID_SID, /**< Invalid SID format **/ + WBC_ERR_INVALID_PARAM, /**< An Invalid parameter was supplied **/ + WBC_ERR_WINBIND_NOT_AVAILABLE, /**< Winbind daemon is not available **/ + WBC_ERR_DOMAIN_NOT_FOUND, /**< Domain is not trusted or cannot be found **/ + WBC_INVALID_RESPONSE, /**< Winbind returned an invalid response **/ + WBC_ERR_NSS_ERROR /**< NSS_STATUS error **/ +}; + +typedef enum _wbcErrType wbcErr; + +#define WBC_ERROR_IS_OK(x) ((x) == WBC_ERR_SUCCESS) + +char *wbcErrorString(wbcErr error); /* * Data types used by the Winbind Client API -- cgit