mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
r17602: Make check_ads_config return NTSTATUS, set some error codes in net_ads_join.
Thanks to Michael Adam <ma@sernet.de> Volker
This commit is contained in:
parent
61f052b0a6
commit
27cca86150
@ -852,32 +852,33 @@ int net_ads_testjoin(int argc, const char **argv)
|
||||
Simple configu checks before beginning the join
|
||||
********************************************************************/
|
||||
|
||||
static int check_ads_config( void )
|
||||
static NTSTATUS check_ads_config( void )
|
||||
{
|
||||
if (lp_server_role() != ROLE_DOMAIN_MEMBER ) {
|
||||
d_printf("Host is not configured as a member server.\n");
|
||||
return -1;
|
||||
return NT_STATUS_INVALID_DOMAIN_ROLE;
|
||||
}
|
||||
|
||||
if (strlen(global_myname()) > 15) {
|
||||
d_printf("Our netbios name can be at most 15 chars long, "
|
||||
"\"%s\" is %u chars long\n",
|
||||
global_myname(), (unsigned int)strlen(global_myname()));
|
||||
return -1;
|
||||
"\"%s\" is %u chars long\n", global_myname(),
|
||||
(unsigned int)strlen(global_myname()));
|
||||
return NT_STATUS_NAME_TOO_LONG;
|
||||
}
|
||||
|
||||
if ( lp_security() == SEC_ADS && !*lp_realm()) {
|
||||
d_fprintf(stderr, "realm must be set in in smb.conf for ADS "
|
||||
"join to succeed.\n");
|
||||
return -1;
|
||||
return NT_STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (!secrets_init()) {
|
||||
DEBUG(1,("Failed to initialise secrets database\n"));
|
||||
return -1;
|
||||
/* This is a good bet for failure of secrets_init ... */
|
||||
return NT_STATUS_ACCESS_DENIED;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
@ -1167,7 +1168,7 @@ int net_ads_join(int argc, const char **argv)
|
||||
{
|
||||
ADS_STRUCT *ads = NULL;
|
||||
ADS_STATUS status;
|
||||
NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
|
||||
NTSTATUS nt_status;
|
||||
const char *short_domain_name = NULL;
|
||||
char *tmp_password, *password;
|
||||
struct cldap_netlogon_reply cldap_reply;
|
||||
@ -1178,7 +1179,8 @@ int net_ads_join(int argc, const char **argv)
|
||||
const char *create_in_ou = NULL;
|
||||
int i;
|
||||
|
||||
if ( check_ads_config() != 0 ) {
|
||||
nt_status = check_ads_config();
|
||||
if (!NT_STATUS_IS_OK(nt_status)) {
|
||||
d_fprintf(stderr, "Invalid configuration. Exiting....\n");
|
||||
goto fail;
|
||||
}
|
||||
@ -1194,11 +1196,13 @@ int net_ads_join(int argc, const char **argv)
|
||||
d_fprintf(stderr, "realm of remote server (%s) and realm in smb.conf "
|
||||
"(%s) DO NOT match. Aborting join\n", ads->config.realm,
|
||||
lp_realm());
|
||||
nt_status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!(ctx = talloc_init("net_ads_join"))) {
|
||||
d_fprintf(stderr, "Could not initialise talloc context.\n");
|
||||
nt_status = NT_STATUS_NO_MEMORY;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@ -1212,6 +1216,7 @@ int net_ads_join(int argc, const char **argv)
|
||||
else if ( !StrnCaseCmp(argv[i], "createcomputer", strlen("createcomputer")) ) {
|
||||
if ( (create_in_ou = get_string_param(argv[i])) == NULL ) {
|
||||
d_fprintf(stderr, "Please supply a valid OU path\n");
|
||||
nt_status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
@ -1278,6 +1283,9 @@ int net_ads_join(int argc, const char **argv)
|
||||
if ( (netdom_store_machine_account( lp_workgroup(), domain_sid, password ) == -1)
|
||||
|| (netdom_store_machine_account( short_domain_name, domain_sid, password ) == -1) )
|
||||
{
|
||||
/* issue an internal error here for now.
|
||||
* everything else would mean changing tdb routines. */
|
||||
nt_status = NT_STATUS_INTERNAL_ERROR;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user