[SSSD] [PATCHES] libwbclient: user _sssd suffix to avoid collision with Samba version
Sumit Bose
sbose at redhat.com
Mon Sep 8 16:20:46 UTC 2014
On Mon, Sep 08, 2014 at 03:06:08PM +0200, Lukas Slebodnik wrote:
> On (08/09/14 14:58), Lukas Slebodnik wrote:
> >On (05/09/14 18:07), Sumit Bose wrote:
> >>Hi,
> >>
> >>currently if libwbclient is enabled (and it is enabled be default) 'make
> >>install' might overwrite the already installed Samba version of the
> >>library.
> >>
> >>To make this more robust but keep the library enabled by default I would
> >>suggest to add a _sssd suffix to all installed files to avoid
> >>collisions. If an admin want to use the SSSD version instead of the
> >>Samba version the libraries must be replaced manually. Distributions can
> >>you their scheme to handle different implementations of the same binary
> >>during building the packages, e.g. for Fedora and RHEL this would be
> >>/sbin/alternatives.
> >>
> >>All renaming is done in the second patch. The first patch just fixes an
> >>issue during make test when disabling libwbclient and should be applied
> >>even if the second is NACKed.
> >>
> >>bye,
> >>Sumit
> >
> >>From e2243251fe5917fbcb7ec28128697936966fa9eb Mon Sep 17 00:00:00 2001
> >>From: Sumit Bose <sbose at redhat.com>
> >>Date: Fri, 5 Sep 2014 10:33:21 +0200
> >>Subject: [PATCH 1/2] dlopen test: only test libwbclient when it is build
> >>
> >>---
> >> src/tests/dlopen-tests.c | 2 ++
> >> 1 file changed, 2 insertions(+)
> >>
> >Obvious ACK
> >
> >>From 9ebb9b66fdd730448014d4bf3b984fd861214a86 Mon Sep 17 00:00:00 2001
> >>From: Sumit Bose <sbose at redhat.com>
> >>Date: Fri, 5 Sep 2014 12:30:43 +0200
> >>Subject: [PATCH 2/2] libwbclient: user _sssd suffix to avoid collision with
> >> Samba version
> >>
> >>---
> >> Makefile.am | 15 +-
> >> configure.ac | 2 +-
> >> contrib/sssd.spec.in | 8 +-
> >> src/sss_client/libwbclient/libwbclient.h | 2 +-
> >> src/sss_client/libwbclient/wbclient.h | 1372 ------------------------
> >> src/sss_client/libwbclient/wbclient.pc.in | 11 -
> >> src/sss_client/libwbclient/wbclient_sssd.h | 1372 ++++++++++++++++++++++++
> >> src/sss_client/libwbclient/wbclient_sssd.pc.in | 11 +
> >> src/tests/dlopen-tests.c | 2 +-
> >> 9 files changed, 1398 insertions(+), 1397 deletions(-)
> >> delete mode 100644 src/sss_client/libwbclient/wbclient.h
> >> delete mode 100644 src/sss_client/libwbclient/wbclient.pc.in
> >> create mode 100644 src/sss_client/libwbclient/wbclient_sssd.h
> >> create mode 100644 src/sss_client/libwbclient/wbclient_sssd.pc.in
> >>
> >>diff --git a/Makefile.am b/Makefile.am
> >>index ce9063e..a8ab100 100644
> >>--- a/Makefile.am
> >>+++ b/Makefile.am
> >>@@ -793,11 +793,12 @@ include_HEADERS = \
> >> $(NULL)
> >>
> >> if BUILD_LIBWBCLIENT
> >>-lib_LTLIBRARIES += libwbclient.la
> >>-pkgconfig_DATA += src/sss_client/libwbclient/wbclient.pc
> >>+lib_LTLIBRARIES += libwbclient_sssd.la
> >>+pkgconfig_DATA += src/sss_client/libwbclient/wbclient_sssd.pc
> >>
> >>-EXTRA_libwbclient_la_DEPENDENCIES = src/sss_client/libwbclient/wbclient.exports
> >>-libwbclient_la_SOURCES = \
> >>+EXTRA_libwbclient_sssd_la_DEPENDENCIES = \
> >>+ src/sss_client/libwbclient/wbclient.exports
> >>+libwbclient_sssd_la_SOURCES = \
> >> src/sss_client/libwbclient/wbc_guid.c \
> >> src/sss_client/libwbclient/wbc_idmap_common.c \
> >> src/sss_client/libwbclient/wbc_idmap_sssd.c \
> >>@@ -810,16 +811,16 @@ libwbclient_la_SOURCES = \
> >> src/sss_client/libwbclient/wbc_sssd_internal.h \
> >> src/sss_client/libwbclient/wbc_util_common.c \
> >> src/sss_client/libwbclient/wbc_util_sssd.c
> >>-libwbclient_la_LIBADD = \
> >>+libwbclient_sssd_la_LIBADD = \
> >> libsss_nss_idmap.la \
> >> $(CLIENT_LIBS)
> >>-libwbclient_la_LDFLAGS = \
> >>+libwbclient_sssd_la_LDFLAGS = \
> >> -Wl,--version-script,$(srcdir)/src/sss_client/libwbclient/wbclient.exports \
> >> -version-info 11:0:11
> >I am not really sure it will work.
> >The problem with colliding names is fixed, but utilities will not work with
> >this new library. The side effect of renaming is that soname is changed.
> >
> > sh-4.3$ objdump -p .libs/libwbclient_sssd.so | grep -i wbclient
> > .libs/libwbclient_sssd.so: file format elf64-x86-64
> > SONAME libwbclient_sssd.so.0
> > 1 0x01 0x0af71cb0 libwbclient_sssd.so.0
> > 2 0x00 0x0d90a3c9 WBCLIENT_0.9
> > 3 0x00 0x090a3c90 WBCLIENT_0.10
> > WBCLIENT_0.9
> > 4 0x00 0x090a3c91 WBCLIENT_0.11
> >
> >
> > sh-4.3$ objdump -p /usr/lib64/libwbclient.so | grep -i wbclient
> > /usr/lib64/libwbclient.so: file format elf64-x86-64
> > SONAME libwbclient.so.0
> > 1 0x01 0x08faa220 libwbclient.so.0
> > 2 0x00 0x0d90a3c9 WBCLIENT_0.9
> > 3 0x00 0x090a3c90 WBCLIENT_0.10
> > WBCLIENT_0.9
> > 4 0x00 0x090a3c91 WBCLIENT_0.11
> >
> >And winbind utilities require different soname than we have.
> > bash-4.3$ objdump -p /usr/bin/wbinfo | grep -A2 wbclient
> > NEEDED libwbclient.so.0
> > NEEDED libreplace.so
> > NEEDED libsamba-hostconfig.so.0
> > --
> > required from libwbclient.so.0:
> > 0x090a3c90 0x00 13 WBCLIENT_0.10
> > 0x0d90a3c9 0x00 07 WBCLIENT_0.9
> >
>
> I tried to override soname, but it does not work.
>
> libwbclient_sssd_la_LDFLAGS = \
> -Wl,--version-script,$(srcdir)/src/sss_client/libwbclient/wbclient.exports \
> - -version-info 11:0:11
> + -version-info 11:0:11 -Wl,-soname=libwbclient.so.0
>
> libtool put autogenerated soname at the end.
>
> # lot of lines omited
> -O2 -Wl,--version-script -Wl,./src/sss_client/libwbclient/wbclient.exports \
> -Wl,-soname=libwbclient.so.0 -Wl,--as-needed \
> -Wl,-soname -Wl,libwbclient_sssd.so.0 -o .libs/libwbclient_sssd.so.0.11.0
>
> I can see two possible solutions.
> a) rename library after building and before installation
> #not sure if it is possible, maybe some automake hooks
> b) build library with "noinst_" prefix => will not be installed by default
> and do all magic ourself (renaming, installation ...)
>
> Solutions A and B require more time and careful testing.
Thank you for your comments. Although e.g. the wbinfo binary does not
have any issues with just renaming libwbclient_sssd to libwbclient I
agree that the different soname is not nice. To fix this I have taken
solution c :-).
I realized that there is no reason to install the library in %{_libdir}
by default if it has to be renamed or handled with alternatives anyway.
Hence I reverted the name change and install the libraries in
%{appmoddir}. *.h and *.pc file still have the prefix to avoid
collisions.
As a positive side effect testing e.g. with wbinfo is even easier,
because you only have to set LD_LIBRARY_PATH to %{appmoddir}.
New patch attached.
bye,
Sumit
>
> LS
> _______________________________________________
> sssd-devel mailing list
> sssd-devel at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
-------------- next part --------------
From 844a3d4eabdb7044ec4ec755f031df08793244e1 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Fri, 5 Sep 2014 12:30:43 +0200
Subject: [PATCH] libwbclient: avoid collision with Samba version
---
Makefile.am | 10 +-
configure.ac | 2 +-
contrib/sssd.spec.in | 8 +-
src/sss_client/libwbclient/libwbclient.h | 2 +-
src/sss_client/libwbclient/wbclient.h | 1372 ------------------------
src/sss_client/libwbclient/wbclient.pc.in | 11 -
src/sss_client/libwbclient/wbclient_sssd.h | 1372 ++++++++++++++++++++++++
src/sss_client/libwbclient/wbclient_sssd.pc.in | 11 +
8 files changed, 1395 insertions(+), 1393 deletions(-)
delete mode 100644 src/sss_client/libwbclient/wbclient.h
delete mode 100644 src/sss_client/libwbclient/wbclient.pc.in
create mode 100644 src/sss_client/libwbclient/wbclient_sssd.h
create mode 100644 src/sss_client/libwbclient/wbclient_sssd.pc.in
diff --git a/Makefile.am b/Makefile.am
index ce9063e..441d3db 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -793,10 +793,12 @@ include_HEADERS = \
$(NULL)
if BUILD_LIBWBCLIENT
-lib_LTLIBRARIES += libwbclient.la
-pkgconfig_DATA += src/sss_client/libwbclient/wbclient.pc
+libwbclient_LTLIBRARIES = libwbclient.la
+libwbclientdir = @appmodpath@
+pkgconfig_DATA += src/sss_client/libwbclient/wbclient_sssd.pc
-EXTRA_libwbclient_la_DEPENDENCIES = src/sss_client/libwbclient/wbclient.exports
+EXTRA_libwbclient_la_DEPENDENCIES = \
+ src/sss_client/libwbclient/wbclient.exports
libwbclient_la_SOURCES = \
src/sss_client/libwbclient/wbc_guid.c \
src/sss_client/libwbclient/wbc_idmap_common.c \
@@ -819,7 +821,7 @@ libwbclient_la_LDFLAGS = \
dist_noinst_DATA += src/sss_client/libwbclient/wbclient.exports
-include_HEADERS += src/sss_client/libwbclient/wbclient.h
+include_HEADERS += src/sss_client/libwbclient/wbclient_sssd.h
endif #BUILD_LIBWBCLIENT
if BUILD_IFP
diff --git a/configure.ac b/configure.ac
index 8f3465e..2e1722d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -334,7 +334,7 @@ AC_CONFIG_FILES([Makefile contrib/sssd.spec src/examples/rwtab src/doxy.config
src/sss_client/sudo/sss_sudo.doxy
src/sss_client/idmap/sss_nss_idmap.pc
src/sss_client/idmap/sss_nss_idmap.doxy
- src/sss_client/libwbclient/wbclient.pc
+ src/sss_client/libwbclient/wbclient_sssd.pc
src/lib/sifp/sss_simpleifp.pc
src/lib/sifp/sss_simpleifp.doxy
src/config/setup.py
diff --git a/contrib/sssd.spec.in b/contrib/sssd.spec.in
index b35b2e5..611730c 100644
--- a/contrib/sssd.spec.in
+++ b/contrib/sssd.spec.in
@@ -790,13 +790,13 @@ rm -rf $RPM_BUILD_ROOT
%files libwbclient
%defattr(-,root,root,-)
-%{_libdir}/libwbclient.so.*
+%{_libdir}/%{name}/modules/libwbclient.so.*
%files libwbclient-devel
%defattr(-,root,root,-)
-%{_includedir}/wbclient.h
-%{_libdir}/libwbclient.so
-%{_libdir}/pkgconfig/wbclient.pc
+%{_includedir}/wbclient_sssd.h
+%{_libdir}/%{name}/modules/libwbclient.so
+%{_libdir}/pkgconfig/wbclient_sssd.pc
%if (0%{?use_systemd} == 1)
# systemd
diff --git a/src/sss_client/libwbclient/libwbclient.h b/src/sss_client/libwbclient/libwbclient.h
index 79d9be2..4be65f5 100644
--- a/src/sss_client/libwbclient/libwbclient.h
+++ b/src/sss_client/libwbclient/libwbclient.h
@@ -35,7 +35,7 @@
/* Public headers */
-#include "wbclient.h"
+#include "wbclient_sssd.h"
/* Private headers */
diff --git a/src/sss_client/libwbclient/wbclient.h b/src/sss_client/libwbclient/wbclient.h
deleted file mode 100644
index 4f0e957..0000000
--- a/src/sss_client/libwbclient/wbclient.h
+++ /dev/null
@@ -1,1372 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
-
- Winbind client API
-
- Copyright (C) Gerald (Jerry) Carter 2007
- Copyright (C) Volker Lendecke 2009
-
- 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 <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef _WBCLIENT_H
-#define _WBCLIENT_H
-
-#include <pwd.h>
-#include <grp.h>
-
-/* 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_ERR_INVALID_RESPONSE, /**< Winbind returned an invalid response **/
- WBC_ERR_NSS_ERROR, /**< NSS_STATUS error **/
- WBC_ERR_AUTH_ERROR, /**< Authentication failed **/
- WBC_ERR_UNKNOWN_USER, /**< User account cannot be found */
- WBC_ERR_UNKNOWN_GROUP, /**< Group account cannot be found */
- WBC_ERR_PWD_CHANGE_FAILED /**< Password Change has failed */
-};
-
-typedef enum _wbcErrType wbcErr;
-
-#define WBC_ERROR_IS_OK(x) ((x) == WBC_ERR_SUCCESS)
-
-const char *wbcErrorString(wbcErr error);
-
-/**
- * @brief Some useful details about the wbclient library
- *
- * 0.1: Initial version
- * 0.2: Added wbcRemoveUidMapping()
- * Added wbcRemoveGidMapping()
- * 0.3: Added wbcGetpwsid()
- * Added wbcGetSidAliases()
- * 0.4: Added wbcSidTypeString()
- * 0.5: Added wbcChangeTrustCredentials()
- * 0.6: Made struct wbcInterfaceDetails char* members non-const
- * 0.7: Added wbcSidToStringBuf()
- * 0.8: Added wbcSidsToUnixIds() and wbcLookupSids()
- * 0.9: Added support for WBC_ID_TYPE_BOTH
- * 0.10: Added wbcPingDc2()
- * 0.11: Extended wbcAuthenticateUserEx to provide PAC parsing
- **/
-#define WBCLIENT_MAJOR_VERSION 0
-#define WBCLIENT_MINOR_VERSION 11
-#define WBCLIENT_VENDOR_VERSION "Samba libwbclient"
-struct wbcLibraryDetails {
- uint16_t major_version;
- uint16_t minor_version;
- const char *vendor_version;
-};
-
-/**
- * @brief Some useful details about the running winbindd
- *
- **/
-struct wbcInterfaceDetails {
- uint32_t interface_version;
- char *winbind_version;
- char winbind_separator;
- char *netbios_name;
- char *netbios_domain;
- char *dns_domain;
-};
-
-/*
- * Data types used by the Winbind Client API
- */
-
-#ifndef WBC_MAXSUBAUTHS
-#define WBC_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[WBC_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 Security Identifier with attributes
- **/
-
-struct wbcSidWithAttr {
- struct wbcDomainSid sid;
- uint32_t attributes;
-};
-
-/* wbcSidWithAttr->attributes */
-
-#define WBC_SID_ATTR_GROUP_MANDATORY 0x00000001
-#define WBC_SID_ATTR_GROUP_ENABLED_BY_DEFAULT 0x00000002
-#define WBC_SID_ATTR_GROUP_ENABLED 0x00000004
-#define WBC_SID_ATTR_GROUP_OWNER 0x00000008
-#define WBC_SID_ATTR_GROUP_USEFOR_DENY_ONLY 0x00000010
-#define WBC_SID_ATTR_GROUP_RESOURCE 0x20000000
-#define WBC_SID_ATTR_GROUP_LOGON_ID 0xC0000000
-
-/**
- * @brief Windows GUID
- *
- **/
-
-struct wbcGuid {
- uint32_t time_low;
- uint16_t time_mid;
- uint16_t time_hi_and_version;
- uint8_t clock_seq[2];
- uint8_t node[6];
-};
-
-/**
- * @brief Domain Information
- **/
-
-struct wbcDomainInfo {
- char *short_name;
- char *dns_name;
- struct wbcDomainSid sid;
- uint32_t domain_flags;
- uint32_t trust_flags;
- uint32_t trust_type;
-};
-
-/* wbcDomainInfo->domain_flags */
-
-#define WBC_DOMINFO_DOMAIN_UNKNOWN 0x00000000
-#define WBC_DOMINFO_DOMAIN_NATIVE 0x00000001
-#define WBC_DOMINFO_DOMAIN_AD 0x00000002
-#define WBC_DOMINFO_DOMAIN_PRIMARY 0x00000004
-#define WBC_DOMINFO_DOMAIN_OFFLINE 0x00000008
-
-/* wbcDomainInfo->trust_flags */
-
-#define WBC_DOMINFO_TRUST_TRANSITIVE 0x00000001
-#define WBC_DOMINFO_TRUST_INCOMING 0x00000002
-#define WBC_DOMINFO_TRUST_OUTGOING 0x00000004
-
-/* wbcDomainInfo->trust_type */
-
-#define WBC_DOMINFO_TRUSTTYPE_NONE 0x00000000
-#define WBC_DOMINFO_TRUSTTYPE_FOREST 0x00000001
-#define WBC_DOMINFO_TRUSTTYPE_IN_FOREST 0x00000002
-#define WBC_DOMINFO_TRUSTTYPE_EXTERNAL 0x00000003
-
-/**
- * @brief Generic Blob
- **/
-
-struct wbcBlob {
- uint8_t *data;
- size_t length;
-};
-
-/**
- * @brief Named Blob
- **/
-
-struct wbcNamedBlob {
- const char *name;
- uint32_t flags;
- struct wbcBlob blob;
-};
-
-/**
- * @brief Auth User Parameters
- **/
-
-struct wbcAuthUserParams {
- const char *account_name;
- const char *domain_name;
- const char *workstation_name;
-
- uint32_t flags;
-
- uint32_t parameter_control;
-
- enum wbcAuthUserLevel {
- WBC_AUTH_USER_LEVEL_PLAIN = 1,
- WBC_AUTH_USER_LEVEL_HASH = 2,
- WBC_AUTH_USER_LEVEL_RESPONSE = 3,
- WBC_AUTH_USER_LEVEL_PAC = 4
- } level;
- union {
- const char *plaintext;
- struct {
- uint8_t nt_hash[16];
- uint8_t lm_hash[16];
- } hash;
- struct {
- uint8_t challenge[8];
- uint32_t nt_length;
- uint8_t *nt_data;
- uint32_t lm_length;
- uint8_t *lm_data;
- } response;
- struct wbcBlob pac;
- } password;
-};
-
-/**
- * @brief Logon User Parameters
- **/
-
-struct wbcLogonUserParams {
- const char *username;
- const char *password;
- size_t num_blobs;
- struct wbcNamedBlob *blobs;
-};
-
-/**
- * @brief ChangePassword Parameters
- **/
-
-struct wbcChangePasswordParams {
- const char *account_name;
- const char *domain_name;
-
- uint32_t flags;
-
- enum wbcChangePasswordLevel {
- WBC_CHANGE_PASSWORD_LEVEL_PLAIN = 1,
- WBC_CHANGE_PASSWORD_LEVEL_RESPONSE = 2
- } level;
-
- union {
- const char *plaintext;
- struct {
- uint32_t old_nt_hash_enc_length;
- uint8_t *old_nt_hash_enc_data;
- uint32_t old_lm_hash_enc_length;
- uint8_t *old_lm_hash_enc_data;
- } response;
- } old_password;
- union {
- const char *plaintext;
- struct {
- uint32_t nt_length;
- uint8_t *nt_data;
- uint32_t lm_length;
- uint8_t *lm_data;
- } response;
- } new_password;
-};
-
-/* wbcAuthUserParams->parameter_control */
-
-#define WBC_MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x00000002
-#define WBC_MSV1_0_UPDATE_LOGON_STATISTICS 0x00000004
-#define WBC_MSV1_0_RETURN_USER_PARAMETERS 0x00000008
-#define WBC_MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x00000020
-#define WBC_MSV1_0_RETURN_PROFILE_PATH 0x00000200
-#define WBC_MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x00000800
-
-/* wbcAuthUserParams->flags */
-
-#define WBC_AUTH_PARAM_FLAGS_INTERACTIVE_LOGON 0x00000001
-
-/**
- * @brief Auth User Information
- *
- * Some of the strings are maybe NULL
- **/
-
-struct wbcAuthUserInfo {
- uint32_t user_flags;
-
- char *account_name;
- char *user_principal;
- char *full_name;
- char *domain_name;
- char *dns_domain_name;
-
- uint32_t acct_flags;
- uint8_t user_session_key[16];
- uint8_t lm_session_key[8];
-
- uint16_t logon_count;
- uint16_t bad_password_count;
-
- uint64_t logon_time;
- uint64_t logoff_time;
- uint64_t kickoff_time;
- uint64_t pass_last_set_time;
- uint64_t pass_can_change_time;
- uint64_t pass_must_change_time;
-
- char *logon_server;
- char *logon_script;
- char *profile_path;
- char *home_directory;
- char *home_drive;
-
- /*
- * the 1st one is the account sid
- * the 2nd one is the primary_group sid
- * followed by the rest of the groups
- */
- uint32_t num_sids;
- struct wbcSidWithAttr *sids;
-};
-
-/**
- * @brief Logon User Information
- *
- * Some of the strings are maybe NULL
- **/
-
-struct wbcLogonUserInfo {
- struct wbcAuthUserInfo *info;
- size_t num_blobs;
- struct wbcNamedBlob *blobs;
-};
-
-/* wbcAuthUserInfo->user_flags */
-
-#define WBC_AUTH_USER_INFO_GUEST 0x00000001
-#define WBC_AUTH_USER_INFO_NOENCRYPTION 0x00000002
-#define WBC_AUTH_USER_INFO_CACHED_ACCOUNT 0x00000004
-#define WBC_AUTH_USER_INFO_USED_LM_PASSWORD 0x00000008
-#define WBC_AUTH_USER_INFO_EXTRA_SIDS 0x00000020
-#define WBC_AUTH_USER_INFO_SUBAUTH_SESSION_KEY 0x00000040
-#define WBC_AUTH_USER_INFO_SERVER_TRUST_ACCOUNT 0x00000080
-#define WBC_AUTH_USER_INFO_NTLMV2_ENABLED 0x00000100
-#define WBC_AUTH_USER_INFO_RESOURCE_GROUPS 0x00000200
-#define WBC_AUTH_USER_INFO_PROFILE_PATH_RETURNED 0x00000400
-#define WBC_AUTH_USER_INFO_GRACE_LOGON 0x01000000
-
-/* wbcAuthUserInfo->acct_flags */
-
-#define WBC_ACB_DISABLED 0x00000001 /* 1 User account disabled */
-#define WBC_ACB_HOMDIRREQ 0x00000002 /* 1 Home directory required */
-#define WBC_ACB_PWNOTREQ 0x00000004 /* 1 User password not required */
-#define WBC_ACB_TEMPDUP 0x00000008 /* 1 Temporary duplicate account */
-#define WBC_ACB_NORMAL 0x00000010 /* 1 Normal user account */
-#define WBC_ACB_MNS 0x00000020 /* 1 MNS logon user account */
-#define WBC_ACB_DOMTRUST 0x00000040 /* 1 Interdomain trust account */
-#define WBC_ACB_WSTRUST 0x00000080 /* 1 Workstation trust account */
-#define WBC_ACB_SVRTRUST 0x00000100 /* 1 Server trust account */
-#define WBC_ACB_PWNOEXP 0x00000200 /* 1 User password does not expire */
-#define WBC_ACB_AUTOLOCK 0x00000400 /* 1 Account auto locked */
-#define WBC_ACB_ENC_TXT_PWD_ALLOWED 0x00000800 /* 1 Encryped text password is allowed */
-#define WBC_ACB_SMARTCARD_REQUIRED 0x00001000 /* 1 Smart Card required */
-#define WBC_ACB_TRUSTED_FOR_DELEGATION 0x00002000 /* 1 Trusted for Delegation */
-#define WBC_ACB_NOT_DELEGATED 0x00004000 /* 1 Not delegated */
-#define WBC_ACB_USE_DES_KEY_ONLY 0x00008000 /* 1 Use DES key only */
-#define WBC_ACB_DONT_REQUIRE_PREAUTH 0x00010000 /* 1 Preauth not required */
-#define WBC_ACB_PW_EXPIRED 0x00020000 /* 1 Password Expired */
-#define WBC_ACB_NO_AUTH_DATA_REQD 0x00080000 /* 1 = No authorization data required */
-
-struct wbcAuthErrorInfo {
- uint32_t nt_status;
- char *nt_string;
- int32_t pam_error;
- char *display_string;
-};
-
-/**
- * @brief User Password Policy Information
- **/
-
-/* wbcUserPasswordPolicyInfo->password_properties */
-
-#define WBC_DOMAIN_PASSWORD_COMPLEX 0x00000001
-#define WBC_DOMAIN_PASSWORD_NO_ANON_CHANGE 0x00000002
-#define WBC_DOMAIN_PASSWORD_NO_CLEAR_CHANGE 0x00000004
-#define WBC_DOMAIN_PASSWORD_LOCKOUT_ADMINS 0x00000008
-#define WBC_DOMAIN_PASSWORD_STORE_CLEARTEXT 0x00000010
-#define WBC_DOMAIN_REFUSE_PASSWORD_CHANGE 0x00000020
-
-struct wbcUserPasswordPolicyInfo {
- uint32_t min_length_password;
- uint32_t password_history;
- uint32_t password_properties;
- uint64_t expire;
- uint64_t min_passwordage;
-};
-
-/**
- * @brief Change Password Reject Reason
- **/
-
-enum wbcPasswordChangeRejectReason {
- WBC_PWD_CHANGE_NO_ERROR=0,
- WBC_PWD_CHANGE_PASSWORD_TOO_SHORT=1,
- WBC_PWD_CHANGE_PWD_IN_HISTORY=2,
- WBC_PWD_CHANGE_USERNAME_IN_PASSWORD=3,
- WBC_PWD_CHANGE_FULLNAME_IN_PASSWORD=4,
- WBC_PWD_CHANGE_NOT_COMPLEX=5,
- WBC_PWD_CHANGE_MACHINE_NOT_DEFAULT=6,
- WBC_PWD_CHANGE_FAILED_BY_FILTER=7,
- WBC_PWD_CHANGE_PASSWORD_TOO_LONG=8
-};
-
-/* Note: this defines exist for compatibility reasons with existing code */
-#define WBC_PWD_CHANGE_REJECT_OTHER WBC_PWD_CHANGE_NO_ERROR
-#define WBC_PWD_CHANGE_REJECT_TOO_SHORT WBC_PWD_CHANGE_PASSWORD_TOO_SHORT
-#define WBC_PWD_CHANGE_REJECT_IN_HISTORY WBC_PWD_CHANGE_PWD_IN_HISTORY
-#define WBC_PWD_CHANGE_REJECT_COMPLEXITY WBC_PWD_CHANGE_NOT_COMPLEX
-
-/**
- * @brief Logoff User Parameters
- **/
-
-struct wbcLogoffUserParams {
- const char *username;
- size_t num_blobs;
- struct wbcNamedBlob *blobs;
-};
-
-/** @brief Credential cache log-on parameters
- *
- */
-
-struct wbcCredentialCacheParams {
- const char *account_name;
- const char *domain_name;
- enum wbcCredentialCacheLevel {
- WBC_CREDENTIAL_CACHE_LEVEL_NTLMSSP = 1
- } level;
- size_t num_blobs;
- struct wbcNamedBlob *blobs;
-};
-
-
-/** @brief Info returned by credential cache auth
- *
- */
-
-struct wbcCredentialCacheInfo {
- size_t num_blobs;
- struct wbcNamedBlob *blobs;
-};
-
-/*
- * DomainControllerInfo struct
- */
-struct wbcDomainControllerInfo {
- char *dc_name;
-};
-
-/*
- * DomainControllerInfoEx struct
- */
-struct wbcDomainControllerInfoEx {
- const char *dc_unc;
- const char *dc_address;
- uint16_t dc_address_type;
- struct wbcGuid *domain_guid;
- const char *domain_name;
- const char *forest_name;
- uint32_t dc_flags;
- const char *dc_site_name;
- const char *client_site_name;
-};
-
-/**********************************************************
- * Memory Management
- **********************************************************/
-
-/**
- * @brief Free library allocated memory
- *
- * @param * Pointer to free
- *
- * @return void
- **/
-void wbcFreeMemory(void*);
-
-
-/*
- * Utility functions for dealing with SIDs
- */
-
-/**
- * @brief Get a string representation of the SID type
- *
- * @param type type of the SID
- *
- * @return string representation of the SID type
- */
-const char* wbcSidTypeString(enum wbcSidType type);
-
-#define WBC_SID_STRING_BUFLEN (15*11+25)
-
-/*
- * @brief Print a sid into a buffer
- *
- * @param sid Binary Security Identifier
- * @param buf Target buffer
- * @param buflen Target buffer length
- *
- * @return Resulting string length.
- */
-int wbcSidToStringBuf(const struct wbcDomainSid *sid, char *buf, int buflen);
-
-/**
- * @brief Convert a binary SID to a character string
- *
- * @param sid Binary Security Identifier
- * @param **sid_string Resulting character string
- *
- * @return #wbcErr
- **/
-wbcErr wbcSidToString(const struct wbcDomainSid *sid,
- char **sid_string);
-
-/**
- * @brief Convert a character string to a binary SID
- *
- * @param *sid_string Character string in the form of S-...
- * @param sid Resulting binary SID
- *
- * @return #wbcErr
- **/
-wbcErr wbcStringToSid(const char *sid_string,
- struct wbcDomainSid *sid);
-
-/*
- * Utility functions for dealing with GUIDs
- */
-
-/**
- * @brief Convert a binary GUID to a character string
- *
- * @param guid Binary Guid
- * @param **guid_string Resulting character string
- *
- * @return #wbcErr
- **/
-wbcErr wbcGuidToString(const struct wbcGuid *guid,
- char **guid_string);
-
-/**
- * @brief Convert a character string to a binary GUID
- *
- * @param *guid_string Character string
- * @param guid Resulting binary GUID
- *
- * @return #wbcErr
- **/
-wbcErr wbcStringToGuid(const char *guid_string,
- struct wbcGuid *guid);
-
-/**
- * @brief Ping winbindd to see if the daemon is running
- *
- * @return #wbcErr
- **/
-wbcErr wbcPing(void);
-
-wbcErr wbcLibraryDetails(struct wbcLibraryDetails **details);
-
-wbcErr wbcInterfaceDetails(struct wbcInterfaceDetails **details);
-
-/**********************************************************
- * Name/SID conversion
- **********************************************************/
-
-/**
- * @brief Convert a domain and name to SID
- *
- * @param dom_name Domain name (possibly "")
- * @param name User or group name
- * @param *sid Pointer to the resolved domain SID
- * @param *name_type Pointer to the SID type
- *
- * @return #wbcErr
- **/
-wbcErr wbcLookupName(const char *dom_name,
- const char *name,
- struct wbcDomainSid *sid,
- enum wbcSidType *name_type);
-
-/**
- * @brief Convert a SID to a domain and name
- *
- * @param *sid Pointer to the domain SID to be resolved
- * @param domain Resolved Domain name (possibly "")
- * @param name Resolved User or group name
- * @param *name_type Pointer to the resolved SID type
- *
- * @return #wbcErr
- **/
-wbcErr wbcLookupSid(const struct wbcDomainSid *sid,
- char **domain,
- char **name,
- enum wbcSidType *name_type);
-
-struct wbcTranslatedName {
- enum wbcSidType type;
- char *name;
- int domain_index;
-};
-
-wbcErr wbcLookupSids(const struct wbcDomainSid *sids, int num_sids,
- struct wbcDomainInfo **domains, int *num_domains,
- struct wbcTranslatedName **names);
-
-/**
- * @brief Translate a collection of RIDs within a domain to names
- */
-wbcErr wbcLookupRids(struct wbcDomainSid *dom_sid,
- int num_rids,
- uint32_t *rids,
- const char **domain_name,
- const char ***names,
- enum wbcSidType **types);
-
-/*
- * @brief Get the groups a user belongs to
- **/
-wbcErr wbcLookupUserSids(const struct wbcDomainSid *user_sid,
- bool domain_groups_only,
- uint32_t *num_sids,
- struct wbcDomainSid **sids);
-
-/*
- * @brief Get alias membership for sids
- **/
-wbcErr wbcGetSidAliases(const struct wbcDomainSid *dom_sid,
- struct wbcDomainSid *sids,
- uint32_t num_sids,
- uint32_t **alias_rids,
- uint32_t *num_alias_rids);
-
-/**
- * @brief Lists Users
- **/
-wbcErr wbcListUsers(const char *domain_name,
- uint32_t *num_users,
- const char ***users);
-
-/**
- * @brief Lists Groups
- **/
-wbcErr wbcListGroups(const char *domain_name,
- uint32_t *num_groups,
- const char ***groups);
-
-wbcErr wbcGetDisplayName(const struct wbcDomainSid *sid,
- char **pdomain,
- char **pfullname,
- enum wbcSidType *pname_type);
-
-/**********************************************************
- * SID/uid/gid Mappings
- **********************************************************/
-
-/**
- * @brief Convert a Windows SID to a Unix uid, allocating an uid if needed
- *
- * @param *sid Pointer to the domain SID to be resolved
- * @param *puid Pointer to the resolved uid_t value
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcSidToUid(const struct wbcDomainSid *sid,
- uid_t *puid);
-
-/**
- * @brief Convert a Windows SID to a Unix uid if there already is a mapping
- *
- * @param *sid Pointer to the domain SID to be resolved
- * @param *puid Pointer to the resolved uid_t value
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcQuerySidToUid(const struct wbcDomainSid *sid,
- uid_t *puid);
-
-/**
- * @brief Convert a Unix uid to a Windows SID, allocating a SID if needed
- *
- * @param uid Unix uid to be resolved
- * @param *sid Pointer to the resolved domain SID
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcUidToSid(uid_t uid,
- struct wbcDomainSid *sid);
-
-/**
- * @brief Convert a Unix uid to a Windows SID if there already is a mapping
- *
- * @param uid Unix uid to be resolved
- * @param *sid Pointer to the resolved domain SID
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcQueryUidToSid(uid_t uid,
- struct wbcDomainSid *sid);
-
-/**
- * @brief Convert a Windows SID to a Unix gid, allocating a gid if needed
- *
- * @param *sid Pointer to the domain SID to be resolved
- * @param *pgid Pointer to the resolved gid_t value
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcSidToGid(const struct wbcDomainSid *sid,
- gid_t *pgid);
-
-/**
- * @brief Convert a Windows SID to a Unix gid if there already is a mapping
- *
- * @param *sid Pointer to the domain SID to be resolved
- * @param *pgid Pointer to the resolved gid_t value
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcQuerySidToGid(const struct wbcDomainSid *sid,
- gid_t *pgid);
-
-/**
- * @brief Convert a Unix gid to a Windows SID, allocating a SID if needed
- *
- * @param gid Unix gid to be resolved
- * @param *sid Pointer to the resolved domain SID
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcGidToSid(gid_t gid,
- struct wbcDomainSid *sid);
-
-/**
- * @brief Convert a Unix gid to a Windows SID if there already is a mapping
- *
- * @param gid Unix gid to be resolved
- * @param *sid Pointer to the resolved domain SID
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcQueryGidToSid(gid_t gid,
- struct wbcDomainSid *sid);
-
-enum wbcIdType {
- WBC_ID_TYPE_NOT_SPECIFIED,
- WBC_ID_TYPE_UID,
- WBC_ID_TYPE_GID,
- WBC_ID_TYPE_BOTH
-};
-
-union wbcUnixIdContainer {
- uid_t uid;
- gid_t gid;
-};
-
-struct wbcUnixId {
- enum wbcIdType type;
- union wbcUnixIdContainer id;
-};
-
-/**
- * @brief Convert a list of sids to unix ids
- *
- * @param sids Pointer to an array of SIDs to convert
- * @param num_sids Number of SIDs
- * @param ids Preallocated output array for translated IDs
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcSidsToUnixIds(const struct wbcDomainSid *sids, uint32_t num_sids,
- struct wbcUnixId *ids);
-
-/**
- * @brief Obtain a new uid from Winbind
- *
- * @param *puid *pointer to the allocated uid
- *
- * @return #wbcErr
- **/
-wbcErr wbcAllocateUid(uid_t *puid);
-
-/**
- * @brief Obtain a new gid from Winbind
- *
- * @param *pgid Pointer to the allocated gid
- *
- * @return #wbcErr
- **/
-wbcErr wbcAllocateGid(gid_t *pgid);
-
-/**
- * @brief Set an user id mapping
- *
- * @param uid Uid of the desired mapping.
- * @param *sid Pointer to the sid of the desired mapping.
- *
- * @return #wbcErr
- *
- * @deprecated This method is not impemented any more and should
- * be removed in the next major version change.
- **/
-wbcErr wbcSetUidMapping(uid_t uid, const struct wbcDomainSid *sid);
-
-/**
- * @brief Set a group id mapping
- *
- * @param gid Gid of the desired mapping.
- * @param *sid Pointer to the sid of the desired mapping.
- *
- * @return #wbcErr
- *
- * @deprecated This method is not impemented any more and should
- * be removed in the next major version change.
- **/
-wbcErr wbcSetGidMapping(gid_t gid, const struct wbcDomainSid *sid);
-
-/**
- * @brief Remove a user id mapping
- *
- * @param uid Uid of the mapping to remove.
- * @param *sid Pointer to the sid of the mapping to remove.
- *
- * @return #wbcErr
- *
- * @deprecated This method is not impemented any more and should
- * be removed in the next major version change.
- **/
-wbcErr wbcRemoveUidMapping(uid_t uid, const struct wbcDomainSid *sid);
-
-/**
- * @brief Remove a group id mapping
- *
- * @param gid Gid of the mapping to remove.
- * @param *sid Pointer to the sid of the mapping to remove.
- *
- * @return #wbcErr
- *
- * @deprecated This method is not impemented any more and should
- * be removed in the next major version change.
- **/
-wbcErr wbcRemoveGidMapping(gid_t gid, const struct wbcDomainSid *sid);
-
-/**
- * @brief Set the highwater mark for allocated uids.
- *
- * @param uid_hwm The new uid highwater mark value
- *
- * @return #wbcErr
- *
- * @deprecated This method is not impemented any more and should
- * be removed in the next major version change.
- **/
-wbcErr wbcSetUidHwm(uid_t uid_hwm);
-
-/**
- * @brief Set the highwater mark for allocated gids.
- *
- * @param gid_hwm The new gid highwater mark value
- *
- * @return #wbcErr
- *
- * @deprecated This method is not impemented any more and should
- * be removed in the next major version change.
- **/
-wbcErr wbcSetGidHwm(gid_t gid_hwm);
-
-/**********************************************************
- * NSS Lookup User/Group details
- **********************************************************/
-
-/**
- * @brief Fill in a struct passwd* for a domain user based
- * on username
- *
- * @param *name Username to lookup
- * @param **pwd Pointer to resulting struct passwd* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetpwnam(const char *name, struct passwd **pwd);
-
-/**
- * @brief Fill in a struct passwd* for a domain user based
- * on uid
- *
- * @param uid Uid to lookup
- * @param **pwd Pointer to resulting struct passwd* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetpwuid(uid_t uid, struct passwd **pwd);
-
-/**
- * @brief Fill in a struct passwd* for a domain user based
- * on sid
- *
- * @param sid Sid to lookup
- * @param **pwd Pointer to resulting struct passwd* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetpwsid(struct wbcDomainSid * sid, struct passwd **pwd);
-
-/**
- * @brief Fill in a struct passwd* for a domain user based
- * on username
- *
- * @param *name Username to lookup
- * @param **grp Pointer to resulting struct group* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetgrnam(const char *name, struct group **grp);
-
-/**
- * @brief Fill in a struct passwd* for a domain user based
- * on uid
- *
- * @param gid Uid to lookup
- * @param **grp Pointer to resulting struct group* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetgrgid(gid_t gid, struct group **grp);
-
-/**
- * @brief Reset the passwd iterator
- *
- * @return #wbcErr
- **/
-wbcErr wbcSetpwent(void);
-
-/**
- * @brief Close the passwd iterator
- *
- * @return #wbcErr
- **/
-wbcErr wbcEndpwent(void);
-
-/**
- * @brief Return the next struct passwd* entry from the pwent iterator
- *
- * @param **pwd Pointer to resulting struct passwd* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetpwent(struct passwd **pwd);
-
-/**
- * @brief Reset the group iterator
- *
- * @return #wbcErr
- **/
-wbcErr wbcSetgrent(void);
-
-/**
- * @brief Close the group iterator
- *
- * @return #wbcErr
- **/
-wbcErr wbcEndgrent(void);
-
-/**
- * @brief Return the next struct group* entry from the pwent iterator
- *
- * @param **grp Pointer to resulting struct group* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetgrent(struct group **grp);
-
-/**
- * @brief Return the next struct group* entry from the pwent iterator
- *
- * This is similar to #wbcGetgrent, just that the member list is empty
- *
- * @param **grp Pointer to resulting struct group* from the query.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetgrlist(struct group **grp);
-
-/**
- * @brief Return the unix group array belonging to the given user
- *
- * @param *account The given user name
- * @param *num_groups Number of elements returned in the groups array
- * @param **_groups Pointer to resulting gid_t array.
- *
- * @return #wbcErr
- **/
-wbcErr wbcGetGroups(const char *account,
- uint32_t *num_groups,
- gid_t **_groups);
-
-
-/**********************************************************
- * Lookup Domain information
- **********************************************************/
-
-/**
- * @brief Lookup the current status of a trusted domain
- *
- * @param domain The domain to query
- *
- * @param dinfo A pointer to store the returned domain_info struct.
- *
- * @return #wbcErr
- **/
-wbcErr wbcDomainInfo(const char *domain,
- struct wbcDomainInfo **dinfo);
-
-/**
- * @brief Lookup the currently contacted DCs
- *
- * @param domain The domain to query
- *
- * @param num_dcs Number of DCs currently known
- * @param dc_names Names of the currently known DCs
- * @param dc_ips IP addresses of the currently known DCs
- *
- * @return #wbcErr
- **/
-wbcErr wbcDcInfo(const char *domain, size_t *num_dcs,
- const char ***dc_names, const char ***dc_ips);
-
-/**
- * @brief Enumerate the domain trusts known by Winbind
- *
- * @param **domains Pointer to the allocated domain list array
- * @param *num_domains Pointer to number of domains returned
- *
- * @return #wbcErr
- **/
-wbcErr wbcListTrusts(struct wbcDomainInfo **domains,
- size_t *num_domains);
-
-/* Flags for wbcLookupDomainController */
-
-#define WBC_LOOKUP_DC_FORCE_REDISCOVERY 0x00000001
-#define WBC_LOOKUP_DC_DS_REQUIRED 0x00000010
-#define WBC_LOOKUP_DC_DS_PREFERRED 0x00000020
-#define WBC_LOOKUP_DC_GC_SERVER_REQUIRED 0x00000040
-#define WBC_LOOKUP_DC_PDC_REQUIRED 0x00000080
-#define WBC_LOOKUP_DC_BACKGROUND_ONLY 0x00000100
-#define WBC_LOOKUP_DC_IP_REQUIRED 0x00000200
-#define WBC_LOOKUP_DC_KDC_REQUIRED 0x00000400
-#define WBC_LOOKUP_DC_TIMESERV_REQUIRED 0x00000800
-#define WBC_LOOKUP_DC_WRITABLE_REQUIRED 0x00001000
-#define WBC_LOOKUP_DC_GOOD_TIMESERV_PREFERRED 0x00002000
-#define WBC_LOOKUP_DC_AVOID_SELF 0x00004000
-#define WBC_LOOKUP_DC_ONLY_LDAP_NEEDED 0x00008000
-#define WBC_LOOKUP_DC_IS_FLAT_NAME 0x00010000
-#define WBC_LOOKUP_DC_IS_DNS_NAME 0x00020000
-#define WBC_LOOKUP_DC_TRY_NEXTCLOSEST_SITE 0x00040000
-#define WBC_LOOKUP_DC_DS_6_REQUIRED 0x00080000
-#define WBC_LOOKUP_DC_RETURN_DNS_NAME 0x40000000
-#define WBC_LOOKUP_DC_RETURN_FLAT_NAME 0x80000000
-
-/**
- * @brief Enumerate the domain trusts known by Winbind
- *
- * @param domain Name of the domain to query for a DC
- * @param flags Bit flags used to control the domain location query
- * @param *dc_info Pointer to the returned domain controller information
- *
- * @return #wbcErr
- **/
-wbcErr wbcLookupDomainController(const char *domain,
- uint32_t flags,
- struct wbcDomainControllerInfo **dc_info);
-
-/**
- * @brief Get extended domain controller information
- *
- * @param domain Name of the domain to query for a DC
- * @param guid Guid of the domain to query for a DC
- * @param site Site of the domain to query for a DC
- * @param flags Bit flags used to control the domain location query
- * @param *dc_info Pointer to the returned extended domain controller information
- *
- * @return #wbcErr
- **/
-wbcErr wbcLookupDomainControllerEx(const char *domain,
- struct wbcGuid *guid,
- const char *site,
- uint32_t flags,
- struct wbcDomainControllerInfoEx **dc_info);
-
-/**********************************************************
- * Athenticate functions
- **********************************************************/
-
-/**
- * @brief Authenticate a username/password pair
- *
- * @param username Name of user to authenticate
- * @param password Clear text password os user
- *
- * @return #wbcErr
- **/
-wbcErr wbcAuthenticateUser(const char *username,
- const char *password);
-
-/**
- * @brief Authenticate with more detailed information
- *
- * @param params Input parameters, WBC_AUTH_USER_LEVEL_HASH
- * is not supported yet
- * @param info Output details on WBC_ERR_SUCCESS
- * @param error Output details on WBC_ERR_AUTH_ERROR
- *
- * @return #wbcErr
- **/
-wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
- struct wbcAuthUserInfo **info,
- struct wbcAuthErrorInfo **error);
-
-/**
- * @brief Logon a User
- *
- * @param[in] params Pointer to a wbcLogonUserParams structure
- * @param[out] info Pointer to a pointer to a wbcLogonUserInfo structure
- * @param[out] error Pointer to a pointer to a wbcAuthErrorInfo structure
- * @param[out] policy Pointer to a pointer to a wbcUserPasswordPolicyInfo structure
- *
- * @return #wbcErr
- **/
-wbcErr wbcLogonUser(const struct wbcLogonUserParams *params,
- struct wbcLogonUserInfo **info,
- struct wbcAuthErrorInfo **error,
- struct wbcUserPasswordPolicyInfo **policy);
-
-/**
- * @brief Trigger a logoff notification to Winbind for a specific user
- *
- * @param username Name of user to remove from Winbind's list of
- * logged on users.
- * @param uid Uid assigned to the username
- * @param ccfilename Absolute path to the Krb5 credentials cache to
- * be removed
- *
- * @return #wbcErr
- **/
-wbcErr wbcLogoffUser(const char *username,
- uid_t uid,
- const char *ccfilename);
-
-/**
- * @brief Trigger an extended logoff notification to Winbind for a specific user
- *
- * @param params A wbcLogoffUserParams structure
- * @param error User output details on error
- *
- * @return #wbcErr
- **/
-wbcErr wbcLogoffUserEx(const struct wbcLogoffUserParams *params,
- struct wbcAuthErrorInfo **error);
-
-/**
- * @brief Change a password for a user
- *
- * @param username Name of user to authenticate
- * @param old_password Old clear text password of user
- * @param new_password New clear text password of user
- *
- * @return #wbcErr
- **/
-wbcErr wbcChangeUserPassword(const char *username,
- const char *old_password,
- const char *new_password);
-
-/**
- * @brief Change a password for a user with more detailed information upon
- * failure
- *
- * @param params Input parameters
- * @param error User output details on WBC_ERR_PWD_CHANGE_FAILED
- * @param reject_reason New password reject reason on WBC_ERR_PWD_CHANGE_FAILED
- * @param policy Password policy output details on WBC_ERR_PWD_CHANGE_FAILED
- *
- * @return #wbcErr
- **/
-wbcErr wbcChangeUserPasswordEx(const struct wbcChangePasswordParams *params,
- struct wbcAuthErrorInfo **error,
- enum wbcPasswordChangeRejectReason *reject_reason,
- struct wbcUserPasswordPolicyInfo **policy);
-
-/**
- * @brief Authenticate a user with cached credentials
- *
- * @param *params Pointer to a wbcCredentialCacheParams structure
- * @param **info Pointer to a pointer to a wbcCredentialCacheInfo structure
- * @param **error Pointer to a pointer to a wbcAuthErrorInfo structure
- *
- * @return #wbcErr
- **/
-wbcErr wbcCredentialCache(struct wbcCredentialCacheParams *params,
- struct wbcCredentialCacheInfo **info,
- struct wbcAuthErrorInfo **error);
-
-/**
- * @brief Save a password with winbind for doing wbcCredentialCache() later
- *
- * @param *user Username
- * @param *password Password
- *
- * @return #wbcErr
- **/
-wbcErr wbcCredentialSave(const char *user, const char *password);
-
-/**********************************************************
- * Resolve functions
- **********************************************************/
-
-/**
- * @brief Resolve a NetbiosName via WINS
- *
- * @param name Name to resolve
- * @param *ip Pointer to the ip address string
- *
- * @return #wbcErr
- **/
-wbcErr wbcResolveWinsByName(const char *name, char **ip);
-
-/**
- * @brief Resolve an IP address via WINS into a NetbiosName
- *
- * @param ip The ip address string
- * @param *name Pointer to the name
- *
- * @return #wbcErr
- *
- **/
-wbcErr wbcResolveWinsByIP(const char *ip, char **name);
-
-/**********************************************************
- * Trusted domain functions
- **********************************************************/
-
-/**
- * @brief Trigger a verification of the trust credentials of a specific domain
- *
- * @param *domain The name of the domain.
- * @param error Output details on WBC_ERR_AUTH_ERROR
- *
- * @return #wbcErr
- **/
-wbcErr wbcCheckTrustCredentials(const char *domain,
- struct wbcAuthErrorInfo **error);
-
-/**
- * @brief Trigger a change of the trust credentials for a specific domain
- *
- * @param *domain The name of the domain.
- * @param error Output details on WBC_ERR_AUTH_ERROR
- *
- * @return #wbcErr
- **/
-wbcErr wbcChangeTrustCredentials(const char *domain,
- struct wbcAuthErrorInfo **error);
-
-/**
- * @brief Trigger a no-op call through the NETLOGON pipe. Low-cost
- * version of wbcCheckTrustCredentials
- *
- * @param *domain The name of the domain, only NULL for the default domain is
- * supported yet. Other values than NULL will result in
- * WBC_ERR_NOT_IMPLEMENTED.
- * @param error Output details on WBC_ERR_AUTH_ERROR
- *
- * @return #wbcErr
- **/
-wbcErr wbcPingDc(const char *domain, struct wbcAuthErrorInfo **error);
-
-/**
- * @brief Trigger a no-op call through the NETLOGON pipe. Low-cost
- * version of wbcCheckTrustCredentials
- *
- * @param *domain The name of the domain, only NULL for the default domain is
- * supported yet. Other values than NULL will result in
- * WBC_ERR_NOT_IMPLEMENTED.
- * @param error Output details on WBC_ERR_AUTH_ERROR
- * @param dcname DC that was attempted to ping
- *
- * @return #wbcErr
- **/
-wbcErr wbcPingDc2(const char *domain, struct wbcAuthErrorInfo **error,
- char **dcname);
-
-/**********************************************************
- * Helper functions
- **********************************************************/
-
-/**
- * @brief Initialize a named blob and add to list of blobs
- *
- * @param[in,out] num_blobs Pointer to the number of blobs
- * @param[in,out] blobs Pointer to an array of blobs
- * @param[in] name Name of the new named blob
- * @param[in] flags Flags of the new named blob
- * @param[in] data Blob data of new blob
- * @param[in] length Blob data length of new blob
- *
- * @return #wbcErr
- **/
-wbcErr wbcAddNamedBlob(size_t *num_blobs,
- struct wbcNamedBlob **blobs,
- const char *name,
- uint32_t flags,
- uint8_t *data,
- size_t length);
-
-#endif /* _WBCLIENT_H */
diff --git a/src/sss_client/libwbclient/wbclient.pc.in b/src/sss_client/libwbclient/wbclient.pc.in
deleted file mode 100644
index 83ae794..0000000
--- a/src/sss_client/libwbclient/wbclient.pc.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: wbclient
-Description: SSSD implementation of Samba wbclient API
-Version: 0.11
-Libs: -L${libdir} -lwbclient
-Cflags:
-URL: http://fedorahosted.org/sssd/, http://www.samba.org
diff --git a/src/sss_client/libwbclient/wbclient_sssd.h b/src/sss_client/libwbclient/wbclient_sssd.h
new file mode 100644
index 0000000..4f0e957
--- /dev/null
+++ b/src/sss_client/libwbclient/wbclient_sssd.h
@@ -0,0 +1,1372 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Winbind client API
+
+ Copyright (C) Gerald (Jerry) Carter 2007
+ Copyright (C) Volker Lendecke 2009
+
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _WBCLIENT_H
+#define _WBCLIENT_H
+
+#include <pwd.h>
+#include <grp.h>
+
+/* 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_ERR_INVALID_RESPONSE, /**< Winbind returned an invalid response **/
+ WBC_ERR_NSS_ERROR, /**< NSS_STATUS error **/
+ WBC_ERR_AUTH_ERROR, /**< Authentication failed **/
+ WBC_ERR_UNKNOWN_USER, /**< User account cannot be found */
+ WBC_ERR_UNKNOWN_GROUP, /**< Group account cannot be found */
+ WBC_ERR_PWD_CHANGE_FAILED /**< Password Change has failed */
+};
+
+typedef enum _wbcErrType wbcErr;
+
+#define WBC_ERROR_IS_OK(x) ((x) == WBC_ERR_SUCCESS)
+
+const char *wbcErrorString(wbcErr error);
+
+/**
+ * @brief Some useful details about the wbclient library
+ *
+ * 0.1: Initial version
+ * 0.2: Added wbcRemoveUidMapping()
+ * Added wbcRemoveGidMapping()
+ * 0.3: Added wbcGetpwsid()
+ * Added wbcGetSidAliases()
+ * 0.4: Added wbcSidTypeString()
+ * 0.5: Added wbcChangeTrustCredentials()
+ * 0.6: Made struct wbcInterfaceDetails char* members non-const
+ * 0.7: Added wbcSidToStringBuf()
+ * 0.8: Added wbcSidsToUnixIds() and wbcLookupSids()
+ * 0.9: Added support for WBC_ID_TYPE_BOTH
+ * 0.10: Added wbcPingDc2()
+ * 0.11: Extended wbcAuthenticateUserEx to provide PAC parsing
+ **/
+#define WBCLIENT_MAJOR_VERSION 0
+#define WBCLIENT_MINOR_VERSION 11
+#define WBCLIENT_VENDOR_VERSION "Samba libwbclient"
+struct wbcLibraryDetails {
+ uint16_t major_version;
+ uint16_t minor_version;
+ const char *vendor_version;
+};
+
+/**
+ * @brief Some useful details about the running winbindd
+ *
+ **/
+struct wbcInterfaceDetails {
+ uint32_t interface_version;
+ char *winbind_version;
+ char winbind_separator;
+ char *netbios_name;
+ char *netbios_domain;
+ char *dns_domain;
+};
+
+/*
+ * Data types used by the Winbind Client API
+ */
+
+#ifndef WBC_MAXSUBAUTHS
+#define WBC_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[WBC_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 Security Identifier with attributes
+ **/
+
+struct wbcSidWithAttr {
+ struct wbcDomainSid sid;
+ uint32_t attributes;
+};
+
+/* wbcSidWithAttr->attributes */
+
+#define WBC_SID_ATTR_GROUP_MANDATORY 0x00000001
+#define WBC_SID_ATTR_GROUP_ENABLED_BY_DEFAULT 0x00000002
+#define WBC_SID_ATTR_GROUP_ENABLED 0x00000004
+#define WBC_SID_ATTR_GROUP_OWNER 0x00000008
+#define WBC_SID_ATTR_GROUP_USEFOR_DENY_ONLY 0x00000010
+#define WBC_SID_ATTR_GROUP_RESOURCE 0x20000000
+#define WBC_SID_ATTR_GROUP_LOGON_ID 0xC0000000
+
+/**
+ * @brief Windows GUID
+ *
+ **/
+
+struct wbcGuid {
+ uint32_t time_low;
+ uint16_t time_mid;
+ uint16_t time_hi_and_version;
+ uint8_t clock_seq[2];
+ uint8_t node[6];
+};
+
+/**
+ * @brief Domain Information
+ **/
+
+struct wbcDomainInfo {
+ char *short_name;
+ char *dns_name;
+ struct wbcDomainSid sid;
+ uint32_t domain_flags;
+ uint32_t trust_flags;
+ uint32_t trust_type;
+};
+
+/* wbcDomainInfo->domain_flags */
+
+#define WBC_DOMINFO_DOMAIN_UNKNOWN 0x00000000
+#define WBC_DOMINFO_DOMAIN_NATIVE 0x00000001
+#define WBC_DOMINFO_DOMAIN_AD 0x00000002
+#define WBC_DOMINFO_DOMAIN_PRIMARY 0x00000004
+#define WBC_DOMINFO_DOMAIN_OFFLINE 0x00000008
+
+/* wbcDomainInfo->trust_flags */
+
+#define WBC_DOMINFO_TRUST_TRANSITIVE 0x00000001
+#define WBC_DOMINFO_TRUST_INCOMING 0x00000002
+#define WBC_DOMINFO_TRUST_OUTGOING 0x00000004
+
+/* wbcDomainInfo->trust_type */
+
+#define WBC_DOMINFO_TRUSTTYPE_NONE 0x00000000
+#define WBC_DOMINFO_TRUSTTYPE_FOREST 0x00000001
+#define WBC_DOMINFO_TRUSTTYPE_IN_FOREST 0x00000002
+#define WBC_DOMINFO_TRUSTTYPE_EXTERNAL 0x00000003
+
+/**
+ * @brief Generic Blob
+ **/
+
+struct wbcBlob {
+ uint8_t *data;
+ size_t length;
+};
+
+/**
+ * @brief Named Blob
+ **/
+
+struct wbcNamedBlob {
+ const char *name;
+ uint32_t flags;
+ struct wbcBlob blob;
+};
+
+/**
+ * @brief Auth User Parameters
+ **/
+
+struct wbcAuthUserParams {
+ const char *account_name;
+ const char *domain_name;
+ const char *workstation_name;
+
+ uint32_t flags;
+
+ uint32_t parameter_control;
+
+ enum wbcAuthUserLevel {
+ WBC_AUTH_USER_LEVEL_PLAIN = 1,
+ WBC_AUTH_USER_LEVEL_HASH = 2,
+ WBC_AUTH_USER_LEVEL_RESPONSE = 3,
+ WBC_AUTH_USER_LEVEL_PAC = 4
+ } level;
+ union {
+ const char *plaintext;
+ struct {
+ uint8_t nt_hash[16];
+ uint8_t lm_hash[16];
+ } hash;
+ struct {
+ uint8_t challenge[8];
+ uint32_t nt_length;
+ uint8_t *nt_data;
+ uint32_t lm_length;
+ uint8_t *lm_data;
+ } response;
+ struct wbcBlob pac;
+ } password;
+};
+
+/**
+ * @brief Logon User Parameters
+ **/
+
+struct wbcLogonUserParams {
+ const char *username;
+ const char *password;
+ size_t num_blobs;
+ struct wbcNamedBlob *blobs;
+};
+
+/**
+ * @brief ChangePassword Parameters
+ **/
+
+struct wbcChangePasswordParams {
+ const char *account_name;
+ const char *domain_name;
+
+ uint32_t flags;
+
+ enum wbcChangePasswordLevel {
+ WBC_CHANGE_PASSWORD_LEVEL_PLAIN = 1,
+ WBC_CHANGE_PASSWORD_LEVEL_RESPONSE = 2
+ } level;
+
+ union {
+ const char *plaintext;
+ struct {
+ uint32_t old_nt_hash_enc_length;
+ uint8_t *old_nt_hash_enc_data;
+ uint32_t old_lm_hash_enc_length;
+ uint8_t *old_lm_hash_enc_data;
+ } response;
+ } old_password;
+ union {
+ const char *plaintext;
+ struct {
+ uint32_t nt_length;
+ uint8_t *nt_data;
+ uint32_t lm_length;
+ uint8_t *lm_data;
+ } response;
+ } new_password;
+};
+
+/* wbcAuthUserParams->parameter_control */
+
+#define WBC_MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x00000002
+#define WBC_MSV1_0_UPDATE_LOGON_STATISTICS 0x00000004
+#define WBC_MSV1_0_RETURN_USER_PARAMETERS 0x00000008
+#define WBC_MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x00000020
+#define WBC_MSV1_0_RETURN_PROFILE_PATH 0x00000200
+#define WBC_MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x00000800
+
+/* wbcAuthUserParams->flags */
+
+#define WBC_AUTH_PARAM_FLAGS_INTERACTIVE_LOGON 0x00000001
+
+/**
+ * @brief Auth User Information
+ *
+ * Some of the strings are maybe NULL
+ **/
+
+struct wbcAuthUserInfo {
+ uint32_t user_flags;
+
+ char *account_name;
+ char *user_principal;
+ char *full_name;
+ char *domain_name;
+ char *dns_domain_name;
+
+ uint32_t acct_flags;
+ uint8_t user_session_key[16];
+ uint8_t lm_session_key[8];
+
+ uint16_t logon_count;
+ uint16_t bad_password_count;
+
+ uint64_t logon_time;
+ uint64_t logoff_time;
+ uint64_t kickoff_time;
+ uint64_t pass_last_set_time;
+ uint64_t pass_can_change_time;
+ uint64_t pass_must_change_time;
+
+ char *logon_server;
+ char *logon_script;
+ char *profile_path;
+ char *home_directory;
+ char *home_drive;
+
+ /*
+ * the 1st one is the account sid
+ * the 2nd one is the primary_group sid
+ * followed by the rest of the groups
+ */
+ uint32_t num_sids;
+ struct wbcSidWithAttr *sids;
+};
+
+/**
+ * @brief Logon User Information
+ *
+ * Some of the strings are maybe NULL
+ **/
+
+struct wbcLogonUserInfo {
+ struct wbcAuthUserInfo *info;
+ size_t num_blobs;
+ struct wbcNamedBlob *blobs;
+};
+
+/* wbcAuthUserInfo->user_flags */
+
+#define WBC_AUTH_USER_INFO_GUEST 0x00000001
+#define WBC_AUTH_USER_INFO_NOENCRYPTION 0x00000002
+#define WBC_AUTH_USER_INFO_CACHED_ACCOUNT 0x00000004
+#define WBC_AUTH_USER_INFO_USED_LM_PASSWORD 0x00000008
+#define WBC_AUTH_USER_INFO_EXTRA_SIDS 0x00000020
+#define WBC_AUTH_USER_INFO_SUBAUTH_SESSION_KEY 0x00000040
+#define WBC_AUTH_USER_INFO_SERVER_TRUST_ACCOUNT 0x00000080
+#define WBC_AUTH_USER_INFO_NTLMV2_ENABLED 0x00000100
+#define WBC_AUTH_USER_INFO_RESOURCE_GROUPS 0x00000200
+#define WBC_AUTH_USER_INFO_PROFILE_PATH_RETURNED 0x00000400
+#define WBC_AUTH_USER_INFO_GRACE_LOGON 0x01000000
+
+/* wbcAuthUserInfo->acct_flags */
+
+#define WBC_ACB_DISABLED 0x00000001 /* 1 User account disabled */
+#define WBC_ACB_HOMDIRREQ 0x00000002 /* 1 Home directory required */
+#define WBC_ACB_PWNOTREQ 0x00000004 /* 1 User password not required */
+#define WBC_ACB_TEMPDUP 0x00000008 /* 1 Temporary duplicate account */
+#define WBC_ACB_NORMAL 0x00000010 /* 1 Normal user account */
+#define WBC_ACB_MNS 0x00000020 /* 1 MNS logon user account */
+#define WBC_ACB_DOMTRUST 0x00000040 /* 1 Interdomain trust account */
+#define WBC_ACB_WSTRUST 0x00000080 /* 1 Workstation trust account */
+#define WBC_ACB_SVRTRUST 0x00000100 /* 1 Server trust account */
+#define WBC_ACB_PWNOEXP 0x00000200 /* 1 User password does not expire */
+#define WBC_ACB_AUTOLOCK 0x00000400 /* 1 Account auto locked */
+#define WBC_ACB_ENC_TXT_PWD_ALLOWED 0x00000800 /* 1 Encryped text password is allowed */
+#define WBC_ACB_SMARTCARD_REQUIRED 0x00001000 /* 1 Smart Card required */
+#define WBC_ACB_TRUSTED_FOR_DELEGATION 0x00002000 /* 1 Trusted for Delegation */
+#define WBC_ACB_NOT_DELEGATED 0x00004000 /* 1 Not delegated */
+#define WBC_ACB_USE_DES_KEY_ONLY 0x00008000 /* 1 Use DES key only */
+#define WBC_ACB_DONT_REQUIRE_PREAUTH 0x00010000 /* 1 Preauth not required */
+#define WBC_ACB_PW_EXPIRED 0x00020000 /* 1 Password Expired */
+#define WBC_ACB_NO_AUTH_DATA_REQD 0x00080000 /* 1 = No authorization data required */
+
+struct wbcAuthErrorInfo {
+ uint32_t nt_status;
+ char *nt_string;
+ int32_t pam_error;
+ char *display_string;
+};
+
+/**
+ * @brief User Password Policy Information
+ **/
+
+/* wbcUserPasswordPolicyInfo->password_properties */
+
+#define WBC_DOMAIN_PASSWORD_COMPLEX 0x00000001
+#define WBC_DOMAIN_PASSWORD_NO_ANON_CHANGE 0x00000002
+#define WBC_DOMAIN_PASSWORD_NO_CLEAR_CHANGE 0x00000004
+#define WBC_DOMAIN_PASSWORD_LOCKOUT_ADMINS 0x00000008
+#define WBC_DOMAIN_PASSWORD_STORE_CLEARTEXT 0x00000010
+#define WBC_DOMAIN_REFUSE_PASSWORD_CHANGE 0x00000020
+
+struct wbcUserPasswordPolicyInfo {
+ uint32_t min_length_password;
+ uint32_t password_history;
+ uint32_t password_properties;
+ uint64_t expire;
+ uint64_t min_passwordage;
+};
+
+/**
+ * @brief Change Password Reject Reason
+ **/
+
+enum wbcPasswordChangeRejectReason {
+ WBC_PWD_CHANGE_NO_ERROR=0,
+ WBC_PWD_CHANGE_PASSWORD_TOO_SHORT=1,
+ WBC_PWD_CHANGE_PWD_IN_HISTORY=2,
+ WBC_PWD_CHANGE_USERNAME_IN_PASSWORD=3,
+ WBC_PWD_CHANGE_FULLNAME_IN_PASSWORD=4,
+ WBC_PWD_CHANGE_NOT_COMPLEX=5,
+ WBC_PWD_CHANGE_MACHINE_NOT_DEFAULT=6,
+ WBC_PWD_CHANGE_FAILED_BY_FILTER=7,
+ WBC_PWD_CHANGE_PASSWORD_TOO_LONG=8
+};
+
+/* Note: this defines exist for compatibility reasons with existing code */
+#define WBC_PWD_CHANGE_REJECT_OTHER WBC_PWD_CHANGE_NO_ERROR
+#define WBC_PWD_CHANGE_REJECT_TOO_SHORT WBC_PWD_CHANGE_PASSWORD_TOO_SHORT
+#define WBC_PWD_CHANGE_REJECT_IN_HISTORY WBC_PWD_CHANGE_PWD_IN_HISTORY
+#define WBC_PWD_CHANGE_REJECT_COMPLEXITY WBC_PWD_CHANGE_NOT_COMPLEX
+
+/**
+ * @brief Logoff User Parameters
+ **/
+
+struct wbcLogoffUserParams {
+ const char *username;
+ size_t num_blobs;
+ struct wbcNamedBlob *blobs;
+};
+
+/** @brief Credential cache log-on parameters
+ *
+ */
+
+struct wbcCredentialCacheParams {
+ const char *account_name;
+ const char *domain_name;
+ enum wbcCredentialCacheLevel {
+ WBC_CREDENTIAL_CACHE_LEVEL_NTLMSSP = 1
+ } level;
+ size_t num_blobs;
+ struct wbcNamedBlob *blobs;
+};
+
+
+/** @brief Info returned by credential cache auth
+ *
+ */
+
+struct wbcCredentialCacheInfo {
+ size_t num_blobs;
+ struct wbcNamedBlob *blobs;
+};
+
+/*
+ * DomainControllerInfo struct
+ */
+struct wbcDomainControllerInfo {
+ char *dc_name;
+};
+
+/*
+ * DomainControllerInfoEx struct
+ */
+struct wbcDomainControllerInfoEx {
+ const char *dc_unc;
+ const char *dc_address;
+ uint16_t dc_address_type;
+ struct wbcGuid *domain_guid;
+ const char *domain_name;
+ const char *forest_name;
+ uint32_t dc_flags;
+ const char *dc_site_name;
+ const char *client_site_name;
+};
+
+/**********************************************************
+ * Memory Management
+ **********************************************************/
+
+/**
+ * @brief Free library allocated memory
+ *
+ * @param * Pointer to free
+ *
+ * @return void
+ **/
+void wbcFreeMemory(void*);
+
+
+/*
+ * Utility functions for dealing with SIDs
+ */
+
+/**
+ * @brief Get a string representation of the SID type
+ *
+ * @param type type of the SID
+ *
+ * @return string representation of the SID type
+ */
+const char* wbcSidTypeString(enum wbcSidType type);
+
+#define WBC_SID_STRING_BUFLEN (15*11+25)
+
+/*
+ * @brief Print a sid into a buffer
+ *
+ * @param sid Binary Security Identifier
+ * @param buf Target buffer
+ * @param buflen Target buffer length
+ *
+ * @return Resulting string length.
+ */
+int wbcSidToStringBuf(const struct wbcDomainSid *sid, char *buf, int buflen);
+
+/**
+ * @brief Convert a binary SID to a character string
+ *
+ * @param sid Binary Security Identifier
+ * @param **sid_string Resulting character string
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcSidToString(const struct wbcDomainSid *sid,
+ char **sid_string);
+
+/**
+ * @brief Convert a character string to a binary SID
+ *
+ * @param *sid_string Character string in the form of S-...
+ * @param sid Resulting binary SID
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcStringToSid(const char *sid_string,
+ struct wbcDomainSid *sid);
+
+/*
+ * Utility functions for dealing with GUIDs
+ */
+
+/**
+ * @brief Convert a binary GUID to a character string
+ *
+ * @param guid Binary Guid
+ * @param **guid_string Resulting character string
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGuidToString(const struct wbcGuid *guid,
+ char **guid_string);
+
+/**
+ * @brief Convert a character string to a binary GUID
+ *
+ * @param *guid_string Character string
+ * @param guid Resulting binary GUID
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcStringToGuid(const char *guid_string,
+ struct wbcGuid *guid);
+
+/**
+ * @brief Ping winbindd to see if the daemon is running
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcPing(void);
+
+wbcErr wbcLibraryDetails(struct wbcLibraryDetails **details);
+
+wbcErr wbcInterfaceDetails(struct wbcInterfaceDetails **details);
+
+/**********************************************************
+ * Name/SID conversion
+ **********************************************************/
+
+/**
+ * @brief Convert a domain and name to SID
+ *
+ * @param dom_name Domain name (possibly "")
+ * @param name User or group name
+ * @param *sid Pointer to the resolved domain SID
+ * @param *name_type Pointer to the SID type
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLookupName(const char *dom_name,
+ const char *name,
+ struct wbcDomainSid *sid,
+ enum wbcSidType *name_type);
+
+/**
+ * @brief Convert a SID to a domain and name
+ *
+ * @param *sid Pointer to the domain SID to be resolved
+ * @param domain Resolved Domain name (possibly "")
+ * @param name Resolved User or group name
+ * @param *name_type Pointer to the resolved SID type
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLookupSid(const struct wbcDomainSid *sid,
+ char **domain,
+ char **name,
+ enum wbcSidType *name_type);
+
+struct wbcTranslatedName {
+ enum wbcSidType type;
+ char *name;
+ int domain_index;
+};
+
+wbcErr wbcLookupSids(const struct wbcDomainSid *sids, int num_sids,
+ struct wbcDomainInfo **domains, int *num_domains,
+ struct wbcTranslatedName **names);
+
+/**
+ * @brief Translate a collection of RIDs within a domain to names
+ */
+wbcErr wbcLookupRids(struct wbcDomainSid *dom_sid,
+ int num_rids,
+ uint32_t *rids,
+ const char **domain_name,
+ const char ***names,
+ enum wbcSidType **types);
+
+/*
+ * @brief Get the groups a user belongs to
+ **/
+wbcErr wbcLookupUserSids(const struct wbcDomainSid *user_sid,
+ bool domain_groups_only,
+ uint32_t *num_sids,
+ struct wbcDomainSid **sids);
+
+/*
+ * @brief Get alias membership for sids
+ **/
+wbcErr wbcGetSidAliases(const struct wbcDomainSid *dom_sid,
+ struct wbcDomainSid *sids,
+ uint32_t num_sids,
+ uint32_t **alias_rids,
+ uint32_t *num_alias_rids);
+
+/**
+ * @brief Lists Users
+ **/
+wbcErr wbcListUsers(const char *domain_name,
+ uint32_t *num_users,
+ const char ***users);
+
+/**
+ * @brief Lists Groups
+ **/
+wbcErr wbcListGroups(const char *domain_name,
+ uint32_t *num_groups,
+ const char ***groups);
+
+wbcErr wbcGetDisplayName(const struct wbcDomainSid *sid,
+ char **pdomain,
+ char **pfullname,
+ enum wbcSidType *pname_type);
+
+/**********************************************************
+ * SID/uid/gid Mappings
+ **********************************************************/
+
+/**
+ * @brief Convert a Windows SID to a Unix uid, allocating an uid if needed
+ *
+ * @param *sid Pointer to the domain SID to be resolved
+ * @param *puid Pointer to the resolved uid_t value
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcSidToUid(const struct wbcDomainSid *sid,
+ uid_t *puid);
+
+/**
+ * @brief Convert a Windows SID to a Unix uid if there already is a mapping
+ *
+ * @param *sid Pointer to the domain SID to be resolved
+ * @param *puid Pointer to the resolved uid_t value
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcQuerySidToUid(const struct wbcDomainSid *sid,
+ uid_t *puid);
+
+/**
+ * @brief Convert a Unix uid to a Windows SID, allocating a SID if needed
+ *
+ * @param uid Unix uid to be resolved
+ * @param *sid Pointer to the resolved domain SID
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcUidToSid(uid_t uid,
+ struct wbcDomainSid *sid);
+
+/**
+ * @brief Convert a Unix uid to a Windows SID if there already is a mapping
+ *
+ * @param uid Unix uid to be resolved
+ * @param *sid Pointer to the resolved domain SID
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcQueryUidToSid(uid_t uid,
+ struct wbcDomainSid *sid);
+
+/**
+ * @brief Convert a Windows SID to a Unix gid, allocating a gid if needed
+ *
+ * @param *sid Pointer to the domain SID to be resolved
+ * @param *pgid Pointer to the resolved gid_t value
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcSidToGid(const struct wbcDomainSid *sid,
+ gid_t *pgid);
+
+/**
+ * @brief Convert a Windows SID to a Unix gid if there already is a mapping
+ *
+ * @param *sid Pointer to the domain SID to be resolved
+ * @param *pgid Pointer to the resolved gid_t value
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcQuerySidToGid(const struct wbcDomainSid *sid,
+ gid_t *pgid);
+
+/**
+ * @brief Convert a Unix gid to a Windows SID, allocating a SID if needed
+ *
+ * @param gid Unix gid to be resolved
+ * @param *sid Pointer to the resolved domain SID
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcGidToSid(gid_t gid,
+ struct wbcDomainSid *sid);
+
+/**
+ * @brief Convert a Unix gid to a Windows SID if there already is a mapping
+ *
+ * @param gid Unix gid to be resolved
+ * @param *sid Pointer to the resolved domain SID
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcQueryGidToSid(gid_t gid,
+ struct wbcDomainSid *sid);
+
+enum wbcIdType {
+ WBC_ID_TYPE_NOT_SPECIFIED,
+ WBC_ID_TYPE_UID,
+ WBC_ID_TYPE_GID,
+ WBC_ID_TYPE_BOTH
+};
+
+union wbcUnixIdContainer {
+ uid_t uid;
+ gid_t gid;
+};
+
+struct wbcUnixId {
+ enum wbcIdType type;
+ union wbcUnixIdContainer id;
+};
+
+/**
+ * @brief Convert a list of sids to unix ids
+ *
+ * @param sids Pointer to an array of SIDs to convert
+ * @param num_sids Number of SIDs
+ * @param ids Preallocated output array for translated IDs
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcSidsToUnixIds(const struct wbcDomainSid *sids, uint32_t num_sids,
+ struct wbcUnixId *ids);
+
+/**
+ * @brief Obtain a new uid from Winbind
+ *
+ * @param *puid *pointer to the allocated uid
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcAllocateUid(uid_t *puid);
+
+/**
+ * @brief Obtain a new gid from Winbind
+ *
+ * @param *pgid Pointer to the allocated gid
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcAllocateGid(gid_t *pgid);
+
+/**
+ * @brief Set an user id mapping
+ *
+ * @param uid Uid of the desired mapping.
+ * @param *sid Pointer to the sid of the desired mapping.
+ *
+ * @return #wbcErr
+ *
+ * @deprecated This method is not impemented any more and should
+ * be removed in the next major version change.
+ **/
+wbcErr wbcSetUidMapping(uid_t uid, const struct wbcDomainSid *sid);
+
+/**
+ * @brief Set a group id mapping
+ *
+ * @param gid Gid of the desired mapping.
+ * @param *sid Pointer to the sid of the desired mapping.
+ *
+ * @return #wbcErr
+ *
+ * @deprecated This method is not impemented any more and should
+ * be removed in the next major version change.
+ **/
+wbcErr wbcSetGidMapping(gid_t gid, const struct wbcDomainSid *sid);
+
+/**
+ * @brief Remove a user id mapping
+ *
+ * @param uid Uid of the mapping to remove.
+ * @param *sid Pointer to the sid of the mapping to remove.
+ *
+ * @return #wbcErr
+ *
+ * @deprecated This method is not impemented any more and should
+ * be removed in the next major version change.
+ **/
+wbcErr wbcRemoveUidMapping(uid_t uid, const struct wbcDomainSid *sid);
+
+/**
+ * @brief Remove a group id mapping
+ *
+ * @param gid Gid of the mapping to remove.
+ * @param *sid Pointer to the sid of the mapping to remove.
+ *
+ * @return #wbcErr
+ *
+ * @deprecated This method is not impemented any more and should
+ * be removed in the next major version change.
+ **/
+wbcErr wbcRemoveGidMapping(gid_t gid, const struct wbcDomainSid *sid);
+
+/**
+ * @brief Set the highwater mark for allocated uids.
+ *
+ * @param uid_hwm The new uid highwater mark value
+ *
+ * @return #wbcErr
+ *
+ * @deprecated This method is not impemented any more and should
+ * be removed in the next major version change.
+ **/
+wbcErr wbcSetUidHwm(uid_t uid_hwm);
+
+/**
+ * @brief Set the highwater mark for allocated gids.
+ *
+ * @param gid_hwm The new gid highwater mark value
+ *
+ * @return #wbcErr
+ *
+ * @deprecated This method is not impemented any more and should
+ * be removed in the next major version change.
+ **/
+wbcErr wbcSetGidHwm(gid_t gid_hwm);
+
+/**********************************************************
+ * NSS Lookup User/Group details
+ **********************************************************/
+
+/**
+ * @brief Fill in a struct passwd* for a domain user based
+ * on username
+ *
+ * @param *name Username to lookup
+ * @param **pwd Pointer to resulting struct passwd* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetpwnam(const char *name, struct passwd **pwd);
+
+/**
+ * @brief Fill in a struct passwd* for a domain user based
+ * on uid
+ *
+ * @param uid Uid to lookup
+ * @param **pwd Pointer to resulting struct passwd* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetpwuid(uid_t uid, struct passwd **pwd);
+
+/**
+ * @brief Fill in a struct passwd* for a domain user based
+ * on sid
+ *
+ * @param sid Sid to lookup
+ * @param **pwd Pointer to resulting struct passwd* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetpwsid(struct wbcDomainSid * sid, struct passwd **pwd);
+
+/**
+ * @brief Fill in a struct passwd* for a domain user based
+ * on username
+ *
+ * @param *name Username to lookup
+ * @param **grp Pointer to resulting struct group* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetgrnam(const char *name, struct group **grp);
+
+/**
+ * @brief Fill in a struct passwd* for a domain user based
+ * on uid
+ *
+ * @param gid Uid to lookup
+ * @param **grp Pointer to resulting struct group* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetgrgid(gid_t gid, struct group **grp);
+
+/**
+ * @brief Reset the passwd iterator
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcSetpwent(void);
+
+/**
+ * @brief Close the passwd iterator
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcEndpwent(void);
+
+/**
+ * @brief Return the next struct passwd* entry from the pwent iterator
+ *
+ * @param **pwd Pointer to resulting struct passwd* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetpwent(struct passwd **pwd);
+
+/**
+ * @brief Reset the group iterator
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcSetgrent(void);
+
+/**
+ * @brief Close the group iterator
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcEndgrent(void);
+
+/**
+ * @brief Return the next struct group* entry from the pwent iterator
+ *
+ * @param **grp Pointer to resulting struct group* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetgrent(struct group **grp);
+
+/**
+ * @brief Return the next struct group* entry from the pwent iterator
+ *
+ * This is similar to #wbcGetgrent, just that the member list is empty
+ *
+ * @param **grp Pointer to resulting struct group* from the query.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetgrlist(struct group **grp);
+
+/**
+ * @brief Return the unix group array belonging to the given user
+ *
+ * @param *account The given user name
+ * @param *num_groups Number of elements returned in the groups array
+ * @param **_groups Pointer to resulting gid_t array.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcGetGroups(const char *account,
+ uint32_t *num_groups,
+ gid_t **_groups);
+
+
+/**********************************************************
+ * Lookup Domain information
+ **********************************************************/
+
+/**
+ * @brief Lookup the current status of a trusted domain
+ *
+ * @param domain The domain to query
+ *
+ * @param dinfo A pointer to store the returned domain_info struct.
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcDomainInfo(const char *domain,
+ struct wbcDomainInfo **dinfo);
+
+/**
+ * @brief Lookup the currently contacted DCs
+ *
+ * @param domain The domain to query
+ *
+ * @param num_dcs Number of DCs currently known
+ * @param dc_names Names of the currently known DCs
+ * @param dc_ips IP addresses of the currently known DCs
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcDcInfo(const char *domain, size_t *num_dcs,
+ const char ***dc_names, const char ***dc_ips);
+
+/**
+ * @brief Enumerate the domain trusts known by Winbind
+ *
+ * @param **domains Pointer to the allocated domain list array
+ * @param *num_domains Pointer to number of domains returned
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcListTrusts(struct wbcDomainInfo **domains,
+ size_t *num_domains);
+
+/* Flags for wbcLookupDomainController */
+
+#define WBC_LOOKUP_DC_FORCE_REDISCOVERY 0x00000001
+#define WBC_LOOKUP_DC_DS_REQUIRED 0x00000010
+#define WBC_LOOKUP_DC_DS_PREFERRED 0x00000020
+#define WBC_LOOKUP_DC_GC_SERVER_REQUIRED 0x00000040
+#define WBC_LOOKUP_DC_PDC_REQUIRED 0x00000080
+#define WBC_LOOKUP_DC_BACKGROUND_ONLY 0x00000100
+#define WBC_LOOKUP_DC_IP_REQUIRED 0x00000200
+#define WBC_LOOKUP_DC_KDC_REQUIRED 0x00000400
+#define WBC_LOOKUP_DC_TIMESERV_REQUIRED 0x00000800
+#define WBC_LOOKUP_DC_WRITABLE_REQUIRED 0x00001000
+#define WBC_LOOKUP_DC_GOOD_TIMESERV_PREFERRED 0x00002000
+#define WBC_LOOKUP_DC_AVOID_SELF 0x00004000
+#define WBC_LOOKUP_DC_ONLY_LDAP_NEEDED 0x00008000
+#define WBC_LOOKUP_DC_IS_FLAT_NAME 0x00010000
+#define WBC_LOOKUP_DC_IS_DNS_NAME 0x00020000
+#define WBC_LOOKUP_DC_TRY_NEXTCLOSEST_SITE 0x00040000
+#define WBC_LOOKUP_DC_DS_6_REQUIRED 0x00080000
+#define WBC_LOOKUP_DC_RETURN_DNS_NAME 0x40000000
+#define WBC_LOOKUP_DC_RETURN_FLAT_NAME 0x80000000
+
+/**
+ * @brief Enumerate the domain trusts known by Winbind
+ *
+ * @param domain Name of the domain to query for a DC
+ * @param flags Bit flags used to control the domain location query
+ * @param *dc_info Pointer to the returned domain controller information
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLookupDomainController(const char *domain,
+ uint32_t flags,
+ struct wbcDomainControllerInfo **dc_info);
+
+/**
+ * @brief Get extended domain controller information
+ *
+ * @param domain Name of the domain to query for a DC
+ * @param guid Guid of the domain to query for a DC
+ * @param site Site of the domain to query for a DC
+ * @param flags Bit flags used to control the domain location query
+ * @param *dc_info Pointer to the returned extended domain controller information
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLookupDomainControllerEx(const char *domain,
+ struct wbcGuid *guid,
+ const char *site,
+ uint32_t flags,
+ struct wbcDomainControllerInfoEx **dc_info);
+
+/**********************************************************
+ * Athenticate functions
+ **********************************************************/
+
+/**
+ * @brief Authenticate a username/password pair
+ *
+ * @param username Name of user to authenticate
+ * @param password Clear text password os user
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcAuthenticateUser(const char *username,
+ const char *password);
+
+/**
+ * @brief Authenticate with more detailed information
+ *
+ * @param params Input parameters, WBC_AUTH_USER_LEVEL_HASH
+ * is not supported yet
+ * @param info Output details on WBC_ERR_SUCCESS
+ * @param error Output details on WBC_ERR_AUTH_ERROR
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
+ struct wbcAuthUserInfo **info,
+ struct wbcAuthErrorInfo **error);
+
+/**
+ * @brief Logon a User
+ *
+ * @param[in] params Pointer to a wbcLogonUserParams structure
+ * @param[out] info Pointer to a pointer to a wbcLogonUserInfo structure
+ * @param[out] error Pointer to a pointer to a wbcAuthErrorInfo structure
+ * @param[out] policy Pointer to a pointer to a wbcUserPasswordPolicyInfo structure
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLogonUser(const struct wbcLogonUserParams *params,
+ struct wbcLogonUserInfo **info,
+ struct wbcAuthErrorInfo **error,
+ struct wbcUserPasswordPolicyInfo **policy);
+
+/**
+ * @brief Trigger a logoff notification to Winbind for a specific user
+ *
+ * @param username Name of user to remove from Winbind's list of
+ * logged on users.
+ * @param uid Uid assigned to the username
+ * @param ccfilename Absolute path to the Krb5 credentials cache to
+ * be removed
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLogoffUser(const char *username,
+ uid_t uid,
+ const char *ccfilename);
+
+/**
+ * @brief Trigger an extended logoff notification to Winbind for a specific user
+ *
+ * @param params A wbcLogoffUserParams structure
+ * @param error User output details on error
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcLogoffUserEx(const struct wbcLogoffUserParams *params,
+ struct wbcAuthErrorInfo **error);
+
+/**
+ * @brief Change a password for a user
+ *
+ * @param username Name of user to authenticate
+ * @param old_password Old clear text password of user
+ * @param new_password New clear text password of user
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcChangeUserPassword(const char *username,
+ const char *old_password,
+ const char *new_password);
+
+/**
+ * @brief Change a password for a user with more detailed information upon
+ * failure
+ *
+ * @param params Input parameters
+ * @param error User output details on WBC_ERR_PWD_CHANGE_FAILED
+ * @param reject_reason New password reject reason on WBC_ERR_PWD_CHANGE_FAILED
+ * @param policy Password policy output details on WBC_ERR_PWD_CHANGE_FAILED
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcChangeUserPasswordEx(const struct wbcChangePasswordParams *params,
+ struct wbcAuthErrorInfo **error,
+ enum wbcPasswordChangeRejectReason *reject_reason,
+ struct wbcUserPasswordPolicyInfo **policy);
+
+/**
+ * @brief Authenticate a user with cached credentials
+ *
+ * @param *params Pointer to a wbcCredentialCacheParams structure
+ * @param **info Pointer to a pointer to a wbcCredentialCacheInfo structure
+ * @param **error Pointer to a pointer to a wbcAuthErrorInfo structure
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcCredentialCache(struct wbcCredentialCacheParams *params,
+ struct wbcCredentialCacheInfo **info,
+ struct wbcAuthErrorInfo **error);
+
+/**
+ * @brief Save a password with winbind for doing wbcCredentialCache() later
+ *
+ * @param *user Username
+ * @param *password Password
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcCredentialSave(const char *user, const char *password);
+
+/**********************************************************
+ * Resolve functions
+ **********************************************************/
+
+/**
+ * @brief Resolve a NetbiosName via WINS
+ *
+ * @param name Name to resolve
+ * @param *ip Pointer to the ip address string
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcResolveWinsByName(const char *name, char **ip);
+
+/**
+ * @brief Resolve an IP address via WINS into a NetbiosName
+ *
+ * @param ip The ip address string
+ * @param *name Pointer to the name
+ *
+ * @return #wbcErr
+ *
+ **/
+wbcErr wbcResolveWinsByIP(const char *ip, char **name);
+
+/**********************************************************
+ * Trusted domain functions
+ **********************************************************/
+
+/**
+ * @brief Trigger a verification of the trust credentials of a specific domain
+ *
+ * @param *domain The name of the domain.
+ * @param error Output details on WBC_ERR_AUTH_ERROR
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcCheckTrustCredentials(const char *domain,
+ struct wbcAuthErrorInfo **error);
+
+/**
+ * @brief Trigger a change of the trust credentials for a specific domain
+ *
+ * @param *domain The name of the domain.
+ * @param error Output details on WBC_ERR_AUTH_ERROR
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcChangeTrustCredentials(const char *domain,
+ struct wbcAuthErrorInfo **error);
+
+/**
+ * @brief Trigger a no-op call through the NETLOGON pipe. Low-cost
+ * version of wbcCheckTrustCredentials
+ *
+ * @param *domain The name of the domain, only NULL for the default domain is
+ * supported yet. Other values than NULL will result in
+ * WBC_ERR_NOT_IMPLEMENTED.
+ * @param error Output details on WBC_ERR_AUTH_ERROR
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcPingDc(const char *domain, struct wbcAuthErrorInfo **error);
+
+/**
+ * @brief Trigger a no-op call through the NETLOGON pipe. Low-cost
+ * version of wbcCheckTrustCredentials
+ *
+ * @param *domain The name of the domain, only NULL for the default domain is
+ * supported yet. Other values than NULL will result in
+ * WBC_ERR_NOT_IMPLEMENTED.
+ * @param error Output details on WBC_ERR_AUTH_ERROR
+ * @param dcname DC that was attempted to ping
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcPingDc2(const char *domain, struct wbcAuthErrorInfo **error,
+ char **dcname);
+
+/**********************************************************
+ * Helper functions
+ **********************************************************/
+
+/**
+ * @brief Initialize a named blob and add to list of blobs
+ *
+ * @param[in,out] num_blobs Pointer to the number of blobs
+ * @param[in,out] blobs Pointer to an array of blobs
+ * @param[in] name Name of the new named blob
+ * @param[in] flags Flags of the new named blob
+ * @param[in] data Blob data of new blob
+ * @param[in] length Blob data length of new blob
+ *
+ * @return #wbcErr
+ **/
+wbcErr wbcAddNamedBlob(size_t *num_blobs,
+ struct wbcNamedBlob **blobs,
+ const char *name,
+ uint32_t flags,
+ uint8_t *data,
+ size_t length);
+
+#endif /* _WBCLIENT_H */
diff --git a/src/sss_client/libwbclient/wbclient_sssd.pc.in b/src/sss_client/libwbclient/wbclient_sssd.pc.in
new file mode 100644
index 0000000..124c3ad
--- /dev/null
+++ b/src/sss_client/libwbclient/wbclient_sssd.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@appmodpath@
+includedir=@includedir@
+
+Name: wbclient
+Description: SSSD implementation of Samba wbclient API
+Version: 0.11
+Libs: -L${libdir} -lwbclient
+Cflags:
+URL: http://fedorahosted.org/sssd/, http://www.samba.org
--
1.8.3.1
More information about the sssd-devel
mailing list