diff options
-rw-r--r-- | source3/nsswitch/winbindd_util.c | 22 | ||||
-rw-r--r-- | source3/smbd/password.c | 5 |
2 files changed, 20 insertions, 7 deletions
diff --git a/source3/nsswitch/winbindd_util.c b/source3/nsswitch/winbindd_util.c index b3e5780f93..daffb1ef8c 100644 --- a/source3/nsswitch/winbindd_util.c +++ b/source3/nsswitch/winbindd_util.c @@ -26,7 +26,9 @@ BOOL domain_handles_open(struct winbindd_domain *domain) { return domain->sam_handle_open && - domain->sam_dom_handle_open; + domain->sam_dom_handle_open && + rpc_hnd_ok(&domain->sam_handle) && + rpc_hnd_ok(&domain->sam_dom_handle); } static BOOL resolve_dc_name(char *domain_name, fstring domain_controller) @@ -36,8 +38,7 @@ static BOOL resolve_dc_name(char *domain_name, fstring domain_controller) /* if its our primary domain and password server is not '*' then use the password server parameter */ - if (strcmp(domain_name,lp_workgroup()) == 0 && - strcmp(lp_passwordserver(),"*") != 0) { + if (strcmp(domain_name,lp_workgroup()) == 0 && !lp_wildcard_dc()) { fstrcpy(domain_controller, lp_passwordserver()); return True; } @@ -124,6 +125,19 @@ static BOOL open_sam_handles(struct winbindd_domain *domain) if (!domain->got_domain_info) return False; } + if ((domain->sam_handle_open && !rpc_hnd_ok(&domain->sam_handle)) || + (domain->sam_dom_handle_open && !rpc_hnd_ok(&domain->sam_dom_handle))) { + domain->got_domain_info = get_domain_info(domain); + if (domain->sam_dom_handle_open) { + samr_close(&domain->sam_dom_handle); + domain->sam_dom_handle_open = False; + } + if (domain->sam_handle_open) { + samr_close(&domain->sam_handle); + domain->sam_handle_open = False; + } + } + /* Open sam handle if it isn't already open */ if (!domain->sam_handle_open) { domain->sam_handle_open = @@ -187,7 +201,7 @@ void establish_connections(void) if (!server_state.pwdb_initialised) { fstrcpy(server_state.controller, lp_passwordserver()); - if (strcmp(server_state.controller,"*") == 0) { + if (lp_wildcard_dc()) { if (!resolve_dc_name(lp_workgroup(), server_state.controller)) { return; } diff --git a/source3/smbd/password.c b/source3/smbd/password.c index 325600e92e..3953c5b0e3 100644 --- a/source3/smbd/password.c +++ b/source3/smbd/password.c @@ -1457,7 +1457,8 @@ BOOL domain_client_validate( char *user, char *domain, * PDC/BDC. Contact each in turn and try and authenticate. */ - pserver = strdup(lp_passwordserver()); + pserver = lp_passwordserver(); + if (! *pserver) pserver = "*"; p = pserver; while (!connected_ok && @@ -1469,8 +1470,6 @@ BOOL domain_client_validate( char *user, char *domain, } } - free(pserver); - if (!connected_ok) { DEBUG(0,("domain_client_validate: Domain password server not available.\n")); cli_shutdown(&cli); |