]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
wbinfo: use wbcInterfaceDetails()
authorStefan Metzmacher <metze@samba.org>
Fri, 28 Mar 2008 15:55:53 +0000 (16:55 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 1 Apr 2008 16:30:10 +0000 (18:30 +0200)
metze

source/nsswitch/wbinfo.c

index d62e82a659c989377f7fa95dc7bffaf866fa6f41..6707f9d927fa9d14cf23c43dc5cc59582c05ca25 100644 (file)
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
 
+static struct wbcInterfaceDetails *init_interface_details(void)
+{
+       wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+       static struct wbcInterfaceDetails *details;
+
+       if (details) {
+               return details;
+       }
+
+       wbc_status = wbcInterfaceDetails(&details);
+       if (!WBC_ERROR_IS_OK(wbc_status)) {
+               d_fprintf(stderr, "could not obtain winbind interface details!\n");
+       }
+
+       return details;
+}
+
 static char winbind_separator_int(bool strict)
 {
-       struct winbindd_response response;
+       struct wbcInterfaceDetails *details;
        static bool got_sep;
        static char sep;
 
        if (got_sep)
                return sep;
 
-       ZERO_STRUCT(response);
-
-       /* Send off request */
+       details = init_interface_details();
 
-       if (winbindd_request_response(WINBINDD_INFO, NULL, &response) !=
-           NSS_STATUS_SUCCESS) {
+       if (!details) {
                d_fprintf(stderr, "could not obtain winbind separator!\n");
                if (strict) {
                        return 0;
@@ -50,7 +64,7 @@ static char winbind_separator_int(bool strict)
                return *lp_winbind_separator();
        }
 
-       sep = response.data.info.winbind_separator;
+       sep = details->winbind_separator;
        got_sep = true;
 
        if (!sep) {
@@ -72,26 +86,18 @@ static char winbind_separator(void)
 
 static const char *get_winbind_domain(void)
 {
-       wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-       struct wbcDomainInfo *dinfo = NULL;
-       static fstring winbind_domain;
+       static struct wbcInterfaceDetails *details;
 
-       ZERO_STRUCT(dinfo);
+       details = init_interface_details();
 
-       wbc_status = wbcDomainInfo(".", &dinfo);
-
-       if (!WBC_ERROR_IS_OK(wbc_status)) {
+       if (!details) {
                d_fprintf(stderr, "could not obtain winbind domain name!\n");
 
                /* HACK: (this module should not call lp_ functions) */
                return lp_workgroup();
        }
 
-       fstrcpy(winbind_domain, dinfo->short_name);
-
-       wbcFreeMemory(dinfo);
-
-       return winbind_domain;
+       return details->netbios_domain;
 }
 
 /* Copy of parse_domain_user from winbindd_util.c.  Parse a string of the