s4:winbind Make the 'no SID found' message even more detailed
authorAndrew Bartlett <abartlet@samba.org>
Fri, 19 Feb 2010 00:14:15 +0000 (11:14 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 19 Feb 2010 00:18:27 +0000 (11:18 +1100)
Now we give the user a clue as to what may be wrong, and the file path
that we could not find the domain SID in.

Andrew Bartlett

source4/param/secrets.c
source4/winbind/wb_server.c

index 18a08007796a91e916ea63f3f6d54d0a25b423ba..407e27ff670edae95e96b348b2364434505348da 100644 (file)
@@ -165,12 +165,15 @@ struct dom_sid *secrets_get_domain_sid(TALLOC_CTX *mem_ctx,
                              attrs, 0, SECRETS_PRIMARY_DOMAIN_FILTER, domain);
 
        if (ldb_ret != LDB_SUCCESS) {
-               *errstring = talloc_asprintf(mem_ctx, "Failed to find record for %s in secrets.ldb: %s: %s", domain, ldb_strerror(ldb_ret), ldb_errstring(ldb));
+               *errstring = talloc_asprintf(mem_ctx, "Failed to find record for %s in %s: %s: %s", 
+                                            domain, ldb_get_opaque(ldb, "ldb_url"), 
+                                            ldb_strerror(ldb_ret), ldb_errstring(ldb));
                return NULL;
        }
        v = ldb_msg_find_ldb_val(msg, "objectSid");
        if (v == NULL) {
-               *errstring = talloc_asprintf(mem_ctx, "Failed to find a SID on record for %s in secrets.ldb", domain);
+               *errstring = talloc_asprintf(mem_ctx, "Failed to find a SID on record for %s in %s", 
+                                            domain, ldb_get_opaque(ldb, "ldb_url"));
                return NULL;
        }
        result = talloc(mem_ctx, struct dom_sid);
@@ -182,7 +185,8 @@ struct dom_sid *secrets_get_domain_sid(TALLOC_CTX *mem_ctx,
        ndr_err = ndr_pull_struct_blob(v, result, NULL, result,
                                       (ndr_pull_flags_fn_t)ndr_pull_dom_sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-               *errstring = talloc_asprintf(mem_ctx, "Failed to parse SID on record for %s in secrets.ldb", domain);
+               *errstring = talloc_asprintf(mem_ctx, "Failed to parse SID on record for %s in %s", 
+                                            domain, ldb_get_opaque(ldb, "ldb_url"));
                talloc_free(result);
                talloc_free(ldb);
                return NULL;
index 03a443ac16b941cab2a34ae5bfe0383ff303c982..306c8e2add63073e1e9473bf7a467a5de9df55bd 100644 (file)
@@ -241,19 +241,36 @@ static void winbind_task_init(struct task_server *task)
                                                     service->task->lp_ctx,
                                                     lp_netbios_name(service->task->lp_ctx), &errstring);
                if (!primary_sid) {
-                       char *message = talloc_asprintf(task, "Cannot start Winbind (standalone configuration): %s", errstring);
+                       char *message = talloc_asprintf(task, 
+                                                       "Cannot start Winbind (standalone configuration): %s: "
+                                                       "Have you provisioned this server (%s) or changed it's name?", 
+                                                       errstring, lp_netbios_name(service->task->lp_ctx));
                        task_server_terminate(task, message, true);
                        return;
                }
                break;
        case ROLE_DOMAIN_MEMBER:
+               primary_sid = secrets_get_domain_sid(service,
+                                                    service->task->event_ctx,
+                                                    service->task->lp_ctx,
+                                                    lp_workgroup(service->task->lp_ctx), &errstring);
+               if (!primary_sid) {
+                       char *message = talloc_asprintf(task, "Cannot start Winbind (domain member): %s: "
+                                                       "Have you joined the %s domain?", 
+                                                       errstring, lp_workgroup(service->task->lp_ctx));
+                       task_server_terminate(task, message, true);
+                       return;
+               }
+               break;
        case ROLE_DOMAIN_CONTROLLER:
                primary_sid = secrets_get_domain_sid(service,
                                                     service->task->event_ctx,
                                                     service->task->lp_ctx,
                                                     lp_workgroup(service->task->lp_ctx), &errstring);
                if (!primary_sid) {
-                       char *message = talloc_asprintf(task, "Cannot start Winbind (domain configuration): %s", errstring);
+                       char *message = talloc_asprintf(task, "Cannot start Winbind (domain controller): %s: "
+                                                       "Have you provisioned the %s domain?", 
+                                                       errstring, lp_workgroup(service->task->lp_ctx));
                        task_server_terminate(task, message, true);
                        return;
                }