svn commit: samba r17602 - in branches/SAMBA_3_0/source/utils: .

vlendec at samba.org vlendec at samba.org
Fri Aug 18 12:39:22 GMT 2006


Author: vlendec
Date: 2006-08-18 12:39:21 +0000 (Fri, 18 Aug 2006)
New Revision: 17602

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17602

Log:
Make check_ads_config return NTSTATUS, set some error codes in net_ads_join.

Thanks to Michael Adam <ma at sernet.de>

Volker
Modified:
   branches/SAMBA_3_0/source/utils/net_ads.c


Changeset:
Modified: branches/SAMBA_3_0/source/utils/net_ads.c
===================================================================
--- branches/SAMBA_3_0/source/utils/net_ads.c	2006-08-18 12:27:14 UTC (rev 17601)
+++ branches/SAMBA_3_0/source/utils/net_ads.c	2006-08-18 12:39:21 UTC (rev 17602)
@@ -852,32 +852,33 @@
   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 @@
 {
 	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 @@
 	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 @@
 		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 @@
 		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 @@
 	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;
 	}
 



More information about the samba-cvs mailing list