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 <[EMAIL PROTECTED]>

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;
        }
 

Reply via email to