mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
r25198: Change net_rpc_join_ok() to return NTSTATUS for better
error propagation. Michael
This commit is contained in:
parent
46093004a7
commit
5a16da2185
@ -1600,8 +1600,12 @@ int net_ads_join(int argc, const char **argv)
|
||||
|
||||
/* Verify that everything is ok */
|
||||
|
||||
if ( net_rpc_join_ok(short_domain_name, ads->config.ldap_server_name, &ads->ldap.ip) != 0 ) {
|
||||
d_fprintf(stderr, "Failed to verify membership in domain!\n");
|
||||
nt_status = net_rpc_join_ok(short_domain_name,
|
||||
ads->config.ldap_server_name, &ads->ldap.ip);
|
||||
if (!NT_STATUS_IS_OK(nt_status)) {
|
||||
d_fprintf(stderr,
|
||||
"Failed to verify membership in domain: %s!\n",
|
||||
nt_errstr(nt_status));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,8 @@
|
||||
* @return A shell status integer (0 for success)
|
||||
*
|
||||
**/
|
||||
int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
|
||||
NTSTATUS net_rpc_join_ok(const char *domain, const char *server,
|
||||
struct in_addr *ip)
|
||||
{
|
||||
enum security_types sec;
|
||||
unsigned int conn_flags = NET_FLAGS_PDC;
|
||||
@ -66,7 +67,7 @@ int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
|
||||
/* Connect to remote machine */
|
||||
ntret = net_make_ipc_connection_ex(domain, server, ip, conn_flags, &cli);
|
||||
if (!NT_STATUS_IS_OK(ntret)) {
|
||||
return -1;
|
||||
return ntret;
|
||||
}
|
||||
|
||||
/* Setup the creds as though we're going to do schannel... */
|
||||
@ -78,13 +79,13 @@ int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
|
||||
if (!netlogon_pipe) {
|
||||
if (NT_STATUS_EQUAL(ntret, NT_STATUS_INVALID_NETWORK_RESPONSE)) {
|
||||
cli_shutdown(cli);
|
||||
return 0;
|
||||
return NT_STATUS_OK;
|
||||
} else {
|
||||
DEBUG(0,("net_rpc_join_ok: failed to get schannel session "
|
||||
"key from server %s for domain %s. Error was %s\n",
|
||||
cli->desthost, domain, nt_errstr(ntret) ));
|
||||
cli_shutdown(cli);
|
||||
return -1;
|
||||
return ntret;
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,7 +93,7 @@ int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
|
||||
if (!lp_client_schannel()) {
|
||||
cli_shutdown(cli);
|
||||
/* We're good... */
|
||||
return 0;
|
||||
return ntret;
|
||||
}
|
||||
|
||||
pipe_hnd = cli_rpc_pipe_open_schannel_with_key(cli, PI_NETLOGON,
|
||||
@ -103,12 +104,14 @@ int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
|
||||
DEBUG(0,("net_rpc_join_ok: failed to open schannel session "
|
||||
"on netlogon pipe to server %s for domain %s. Error was %s\n",
|
||||
cli->desthost, domain, nt_errstr(ntret) ));
|
||||
cli_shutdown(cli);
|
||||
return -1;
|
||||
/*
|
||||
* Note: here, we have:
|
||||
* (pipe_hnd != NULL) if and only if NT_STATUS_IS_OK(ntret)
|
||||
*/
|
||||
}
|
||||
|
||||
cli_shutdown(cli);
|
||||
return 0;
|
||||
return ntret;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -422,8 +425,9 @@ int net_rpc_join_newstyle(int argc, const char **argv)
|
||||
}
|
||||
|
||||
/* double-check, connection from scratch */
|
||||
retval = net_rpc_join_ok(domain, cli->desthost, &cli->dest_ip);
|
||||
|
||||
result = net_rpc_join_ok(domain, cli->desthost, &cli->dest_ip);
|
||||
retval = NT_STATUS_IS_OK(result) ? 0 : -1;
|
||||
|
||||
done:
|
||||
|
||||
/* Display success or failure */
|
||||
@ -452,10 +456,13 @@ done:
|
||||
int net_rpc_testjoin(int argc, const char **argv)
|
||||
{
|
||||
char *domain = smb_xstrdup(opt_target_workgroup);
|
||||
NTSTATUS nt_status;
|
||||
|
||||
/* Display success or failure */
|
||||
if (net_rpc_join_ok(domain, NULL, NULL) != 0) {
|
||||
fprintf(stderr,"Join to domain '%s' is not valid\n",domain);
|
||||
nt_status = net_rpc_join_ok(domain, NULL, NULL);
|
||||
if (!NT_STATUS_IS_OK(nt_status)) {
|
||||
fprintf(stderr,"Join to domain '%s' is not valid: %s\n",
|
||||
nt_errstr(nt_status), domain);
|
||||
free(domain);
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user