GtkWidget *gtk_select_domain_dialog_new (struct dcerpc_binding_handle *sam_pipe) { GtkSelectDomainDialog *d = g_object_new(gtk_select_domain_dialog_get_type (), NULL); NTSTATUS status, result; struct samr_SamArray *sam; struct policy_handle handle; uint32_t resume_handle = 0; uint32_t num_entries; int i; TALLOC_CTX *mem_ctx = talloc_init("gtk_select_domain_dialog_new"); d->sam_pipe = sam_pipe; status = dcerpc_samr_Connect(sam_pipe, mem_ctx, 0, SEC_FLAG_MAXIMUM_ALLOWED, &handle, &result); if (!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(NULL, "Running Connect on SAMR", status); talloc_free(mem_ctx); return GTK_WIDGET(d); } status = dcerpc_samr_EnumDomains(sam_pipe, mem_ctx, &handle, &resume_handle, &sam, -1, &num_entries, &result); if (!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(NULL, "Enumerating domains", status); } else if (sam != NULL) { for (i=0;i<sam->count;i++) { GtkTreeIter iter; gtk_list_store_append(d->store_domains, &iter); gtk_list_store_set (d->store_domains, &iter, 0, sam->entries[i].name.string, -1); } } status = dcerpc_samr_Close(sam_pipe, mem_ctx, &handle, &result); if (!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(NULL, "Closing SAMR connection", status); talloc_free(mem_ctx); return GTK_WIDGET ( d ); } talloc_free(mem_ctx); return GTK_WIDGET ( d ); }
/** * Connect to a specific interface, but ask the user * for information not specified */ struct dcerpc_binding_handle *gtk_connect_rpc_interface(TALLOC_CTX *mem_ctx, struct tevent_context *ev_ctx, struct loadparm_context *lp_ctx, const struct ndr_interface_table *table) { GtkRpcBindingDialog *d; NTSTATUS status; struct dcerpc_binding_handle *pipe; struct cli_credentials *cred; gint result; d = SAMBAGTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(NULL)); result = gtk_dialog_run(GTK_DIALOG(d)); if (result != GTK_RESPONSE_ACCEPT) { gtk_widget_destroy(GTK_WIDGET(d)); return NULL; } cred = cli_credentials_init(mem_ctx); cli_credentials_guess(cred, lp_ctx); cli_credentials_set_gtk_callbacks(cred); status = dcerpc_pipe_connect_b(mem_ctx, &pipe, gtk_rpc_binding_dialog_get_binding(d, mem_ctx), table, cred, ev_ctx, lp_ctx); if(!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(NULL, "While connecting to interface", status); gtk_widget_destroy(GTK_WIDGET(d)); talloc_free(cred); return NULL; } gtk_widget_destroy(GTK_WIDGET(d)); talloc_free(cred); return pipe; }
static void update_joblist(void) { TALLOC_CTX *mem_ctx = talloc_init("update_joblist"); NTSTATUS status; struct atsvc_JobEnum r; struct atsvc_enum_ctr ctr; int i; uint32_t resume_handle = 0; gtk_list_store_clear(store_jobs); ctr.entries_read = 0; ctr.first_entry = NULL; r.in.servername = dcerpc_server_name(at_pipe); r.in.ctr = r.out.ctr = &ctr; r.in.preferred_max_len = 0xffffffff; r.in.resume_handle = r.out.resume_handle = &resume_handle; status = dcerpc_atsvc_JobEnum(at_pipe, mem_ctx, &r); if(!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(mainwin, "Error while enumerating first job", status); return; } for (i = 0; i < r.out.ctr->entries_read; i++) { GtkTreeIter iter; gtk_list_store_append(store_jobs, &iter); gtk_list_store_set (store_jobs, &iter, 0, r.out.ctr->first_entry[i].flags, 1, r.out.ctr->first_entry[i].job_id, 2, r.out.ctr->first_entry[i].days_of_week, /*FIXME: Nicer format */ 3, r.out.ctr->first_entry[i].job_time, /* FIXME: Nicer format */ 4, r.out.ctr->first_entry[i].command, -1); } talloc_free(mem_ctx); }