libwbclient: add wbcResolveWinsByName() and wbcResolveWinsByIP()
authorStefan Metzmacher <metze@samba.org>
Mon, 14 Apr 2008 07:31:46 +0000 (09:31 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 16 Apr 2008 22:25:00 +0000 (00:25 +0200)
metze

source/nsswitch/libwbclient/wbc_util.c
source/nsswitch/libwbclient/wbclient.h

index 7bdae9154406ad21d29551031e7e55848f7f23a2..edcad282216537c281629b612c0e358192ed6f77 100644 (file)
@@ -187,3 +187,84 @@ wbcErr wbcDomainInfo(const char *domain, struct wbcDomainInfo **dinfo)
 
        return wbc_status;
 }
+
+
+/** @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, const char **ip)
+{
+       struct winbindd_request request;
+       struct winbindd_response response;
+       wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+       const char *ipaddr;
+
+       ZERO_STRUCT(request);
+       ZERO_STRUCT(response);
+
+       /* Send request */
+
+       strncpy(request.data.winsreq, name,
+               sizeof(request.data.winsreq)-1);
+
+       wbc_status = wbcRequestResponse(WINBINDD_WINS_BYNAME,
+                                       &request,
+                                       &response);
+       BAIL_ON_WBC_ERROR(wbc_status);
+
+       /* Display response */
+
+       ipaddr = talloc_strdup(NULL, response.data.winsresp);
+       BAIL_ON_PTR_ERROR(ipaddr, wbc_status);
+
+       *ip = ipaddr;
+       wbc_status = WBC_ERR_SUCCESS;
+
+ done:
+       return wbc_status;
+}
+
+/** @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, const char **name)
+{
+       struct winbindd_request request;
+       struct winbindd_response response;
+       wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+       const char *name_str;
+
+       ZERO_STRUCT(request);
+       ZERO_STRUCT(response);
+
+       /* Send request */
+
+       strncpy(request.data.winsreq, ip,
+               sizeof(request.data.winsreq)-1);
+
+       wbc_status = wbcRequestResponse(WINBINDD_WINS_BYIP,
+                                       &request,
+                                       &response);
+       BAIL_ON_WBC_ERROR(wbc_status);
+
+       /* Display response */
+
+       name_str = talloc_strdup(NULL, response.data.winsresp);
+       BAIL_ON_PTR_ERROR(name_str, wbc_status);
+
+       *name = name_str;
+       wbc_status = WBC_ERR_SUCCESS;
+
+ done:
+       return wbc_status;
+}
index 4e7e5aff259ee1a7cd9fb2d1245f676ec806a12e..1303057b8475870513b0b27b0161b22415514af7 100644 (file)
@@ -401,4 +401,10 @@ wbcErr wbcAuthenticateUserEx(const struct wbcAuthUserParams *params,
                             struct wbcAuthUserInfo **info,
                             struct wbcAuthErrorInfo **error);
 
+/*
+ * Resolve functions
+ */
+wbcErr wbcResolveWinsByName(const char *name, const char **ip);
+wbcErr wbcResolveWinsByIP(const char *ip, const char **name);
+
 #endif      /* _WBCLIENT_H */