netdomjoin-gui: before prompting for creds (for receiving joinable ous), find a dc.
authorGünther Deschner <gd@samba.org>
Fri, 16 May 2008 10:11:43 +0000 (12:11 +0200)
committerGünther Deschner <gd@samba.org>
Fri, 16 May 2008 10:11:43 +0000 (12:11 +0200)
Guenther
(This used to be commit ae60695a349bccd1128e6c439664b0607627ef23)

source3/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c

index a11b0eb0a4037dc19ef02fae0417024bae6b7b53..df8193707cb2542606aad79d4c7341893cfa19d5 100644 (file)
@@ -932,6 +932,9 @@ static void callback_do_getous(GtkWidget *widget,
        const char **ous = NULL;
        int i;
        const char *domain = NULL;
+       struct DOMAIN_CONTROLLER_INFO *dc_info = NULL;
+       const char *err_str = NULL;
+       GtkWidget *dialog;
 
        struct join_state *state = (struct join_state *)data;
 
@@ -939,6 +942,34 @@ static void callback_do_getous(GtkWidget *widget,
 
        domain = state->name_buffer_new ? state->name_buffer_new : state->name_buffer_initial;
 
+       status = DsGetDcName(NULL,
+                            domain,
+                            NULL,
+                            NULL,
+                            0,
+                            &dc_info);
+       if (status != 0) {
+               err_str = libnetapi_get_error_string(state->ctx, status);
+               g_print("callback_do_getous: failed find dc (%s)\n", err_str);
+
+               dialog = gtk_message_dialog_new(GTK_WINDOW(state->window_parent),
+                                               GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_ERROR,
+                                               GTK_BUTTONS_CLOSE,
+                                               "Failed to find a domain controller for domain: \"%s\": %s",
+                                               domain,
+                                               err_str);
+
+               gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+               g_signal_connect_swapped(dialog, "response",
+                                        G_CALLBACK(gtk_widget_destroy),
+                                        dialog);
+
+               gtk_widget_show(dialog);
+
+               return;
+       }
+
        if (!state->account || !state->password) {
                debug("callback_do_getous: no creds yet\n");
                callback_creds_prompt(NULL, state,
@@ -956,7 +987,6 @@ static void callback_do_getous(GtkWidget *widget,
                                   state->password,
                                   &num_ous, &ous);
        if (status != NET_API_STATUS_SUCCESS) {
-               GtkWidget *dialog;
                callback_do_freeauth(NULL, state);
                debug("failed to call NetGetJoinableOUs: %s\n",
                        libnetapi_get_error_string(state->ctx, status));