summaryrefslogtreecommitdiffstats
path: root/nsswitch/libwbclient/wbc_util_sssd.c
diff options
context:
space:
mode:
Diffstat (limited to 'nsswitch/libwbclient/wbc_util_sssd.c')
-rw-r--r--nsswitch/libwbclient/wbc_util_sssd.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/nsswitch/libwbclient/wbc_util_sssd.c b/nsswitch/libwbclient/wbc_util_sssd.c
index d1049e239b3..50edc072bc3 100644
--- a/nsswitch/libwbclient/wbc_util_sssd.c
+++ b/nsswitch/libwbclient/wbc_util_sssd.c
@@ -25,13 +25,26 @@
#include "../winbind_client.h"
#include "wbc_sssd_internal.h"
+/* For WINBIND_INTERFACE_VERSION */
+#include "../winbind_struct_protocol.h"
+
/** @brief Ping winbindd to see if the daemon is running
*
* @return #wbcErr
**/
wbcErr wbcPing(void)
{
- WBC_SSSD_NOT_IMPLEMENTED;
+ /* TODO: add real check */
+ return WBC_ERR_SUCCESS;
+}
+
+static void wbcInterfaceDetailsDestructor(void *ptr)
+{
+ struct wbcInterfaceDetails *i = (struct wbcInterfaceDetails *)ptr;
+ free(i->winbind_version);
+ free(i->netbios_name);
+ free(i->netbios_domain);
+ free(i->dns_domain);
}
/**
@@ -44,7 +57,51 @@ wbcErr wbcPing(void)
wbcErr wbcInterfaceDetails(struct wbcInterfaceDetails **_details)
{
- WBC_SSSD_NOT_IMPLEMENTED;
+ wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+ struct wbcInterfaceDetails *info;
+ info = (struct wbcInterfaceDetails *)wbcAllocateMemory(
+ 1, sizeof(struct wbcInterfaceDetails),
+ wbcInterfaceDetailsDestructor);
+ if (info == NULL) {
+ return WBC_ERR_NO_MEMORY;
+ }
+
+ /* TODO: currently this call just returns a suitable winbind_separator
+ * for wbinfo. */
+
+ info->interface_version = WINBIND_INTERFACE_VERSION;
+ info->winbind_version = strdup("libwbclient for SSSD");
+ if (info->winbind_version == NULL) {
+ wbc_status = WBC_ERR_NO_MEMORY;
+ goto done;
+ }
+
+ info->winbind_separator = '\\';
+
+ info->netbios_name = strdup("-not available-");
+ if (info->netbios_name == NULL) {
+ wbc_status = WBC_ERR_NO_MEMORY;
+ goto done;
+ }
+
+ info->netbios_domain = strdup("-not available-");
+ if (info->netbios_domain == NULL) {
+ wbc_status = WBC_ERR_NO_MEMORY;
+ goto done;
+ }
+
+ info->dns_domain = strdup("-not available-");
+ if (info->dns_domain == NULL) {
+ wbc_status = WBC_ERR_NO_MEMORY;
+ goto done;
+ }
+
+ *_details = info;
+ info = NULL;
+ wbc_status = WBC_ERR_SUCCESS;
+done:
+ wbcFreeMemory(info);
+ return wbc_status;
}
/** @brief Lookup the current status of a trusted domain, sync wrapper
@@ -70,12 +127,14 @@ wbcErr wbcDcInfo(const char *domain, size_t *num_dcs,
/* Resolve a NetbiosName via WINS */
wbcErr wbcResolveWinsByName(const char *name, char **ip)
{
+ /* SSSD does not support WINS */
WBC_SSSD_NOT_IMPLEMENTED;
}
/* Resolve an IP address via WINS into a NetbiosName */
wbcErr wbcResolveWinsByIP(const char *ip, char **name)
{
+ /* SSSD does not support WINS */
WBC_SSSD_NOT_IMPLEMENTED;
}