mirror of
https://github.com/samba-team/samba.git
synced 2025-03-03 12:58:35 +03:00
r21297: Remove the GTK+ tools and library from the main repository. They are now maintained separately in bzr at http://people.samba.org/bzr/jelmer/samba-gtk
This also adds some more headers to the list that is installed and a couple of extra #include lines so these headers can be used externally without problems.
This commit is contained in:
parent
7146e265a4
commit
07652f65ce
@ -162,3 +162,10 @@ source/coverage
|
||||
source/st
|
||||
source/samba.info
|
||||
source/pidl/cover_db
|
||||
source/dsdb/repl/drepl_service_proto.h
|
||||
webapps/qooxdoo-0.6.5-sdk/frontend/framework/.cache
|
||||
webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/data
|
||||
webapps/swat/source/translation
|
||||
webapps/swat/source/class/swat/translation
|
||||
webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/translation
|
||||
webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/messages.pot
|
||||
|
@ -38,7 +38,6 @@ m4_include(auth/gensec/config.m4)
|
||||
m4_include(smbd/process_model.m4)
|
||||
m4_include(lib/registry/config.m4)
|
||||
m4_include(scripting/swig/config.m4)
|
||||
m4_include(gtk/config.m4)
|
||||
m4_include(ntvfs/posix/config.m4)
|
||||
m4_include(ntvfs/unixuid/config.m4)
|
||||
m4_include(lib/socket_wrapper/config.m4)
|
||||
|
@ -1,19 +0,0 @@
|
||||
This directory contains files for SMB-related Gtk Widgets
|
||||
and helper functions and utilities (frontends) for various SMB
|
||||
things.
|
||||
|
||||
Common code at the moment:
|
||||
GtkRpcBindingDialog - Gtk Dialog Window for obtaining user credentials and a RPC binding string
|
||||
GtkSelectDomainDialog - Gtk Dialog for selecting a domain
|
||||
GtkSelectHostDialog - Gtk Dialog for selecting a SMB host
|
||||
gtk_show_werror() - Show dialog box with a WERROR
|
||||
gtk_show_ntstatus() - Show dialog box with a NTSTATUS
|
||||
create_gtk_samba_about() - Shows about Window
|
||||
|
||||
Utilities:
|
||||
gregedit - Gtk+ Registry Editor (RPC, NT4 files, W95 files, GConf)
|
||||
gwcrontab - View and edit 'cron/at'-like jobs using the atsvc service (needs a better name)
|
||||
|
||||
Ideas for future utilities:
|
||||
- SAM editor
|
||||
- Eventlog viewer
|
@ -1,132 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2005
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
|
||||
static void gtk_get_credentials(struct cli_credentials *credentials)
|
||||
{
|
||||
const char *ret;
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *label;
|
||||
GtkWidget *table;
|
||||
GtkWidget *entry_username;
|
||||
GtkWidget *entry_password;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *cancelbutton1;
|
||||
GtkWidget *okbutton1;
|
||||
GtkWidget *anonymous;
|
||||
const char *username;
|
||||
|
||||
dialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "Credentials");
|
||||
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
|
||||
|
||||
table = gtk_table_new(4, 2, FALSE);
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table);
|
||||
|
||||
label = gtk_label_new ("Username:");
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table),label,0,1,1,2,GTK_FILL,0,0,0);
|
||||
|
||||
entry_username = gtk_entry_new ();
|
||||
gtk_table_attach(GTK_TABLE(table),entry_username,1,2,1,2,GTK_FILL,0,0,0);
|
||||
gtk_entry_set_activates_default (GTK_ENTRY (entry_username), TRUE);
|
||||
|
||||
username = cli_credentials_get_unparsed_name(credentials, credentials);
|
||||
|
||||
if (credentials->username_obtained != CRED_UNINITIALISED &&
|
||||
username) {
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_username), username);
|
||||
}
|
||||
|
||||
label = gtk_label_new ("Password:");
|
||||
|
||||
gtk_table_attach(GTK_TABLE(table),label,0,1,3,4,GTK_FILL,0,0,0);
|
||||
|
||||
entry_password = gtk_entry_new ();
|
||||
gtk_table_attach(GTK_TABLE(table),entry_password,1,2,3,4,GTK_FILL,0,0,0);
|
||||
gtk_entry_set_visibility (GTK_ENTRY (entry_password), FALSE);
|
||||
gtk_entry_set_activates_default (GTK_ENTRY (entry_password), TRUE);
|
||||
if (credentials->password_obtained != CRED_UNINITIALISED &&
|
||||
credentials->password_obtained != CRED_CALLBACK &&
|
||||
credentials->password) {
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_password), credentials->password);
|
||||
}
|
||||
|
||||
anonymous = gtk_check_button_new_with_mnemonic("_Anonymous");
|
||||
gtk_table_attach(GTK_TABLE(table),anonymous,0,2,4,5,GTK_FILL,0,0,0);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), cancelbutton1, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), okbutton1, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show_all (dialog);
|
||||
|
||||
switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
|
||||
case GTK_RESPONSE_OK:
|
||||
cli_credentials_parse_string(credentials, gtk_entry_get_text(GTK_ENTRY(entry_username)), CRED_CALLBACK_RESULT);
|
||||
cli_credentials_set_password(credentials, gtk_entry_get_text(GTK_ENTRY(entry_password)), CRED_CALLBACK_RESULT);
|
||||
|
||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(anonymous))) {
|
||||
cli_credentials_set_anonymous(credentials);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ret = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
||||
static const char *gtk_get_username(struct cli_credentials *credentials)
|
||||
{
|
||||
gtk_get_credentials(credentials);
|
||||
return credentials->username;
|
||||
}
|
||||
|
||||
static const char *gtk_get_userpassword(struct cli_credentials *credentials)
|
||||
{
|
||||
gtk_get_credentials(credentials);
|
||||
return credentials->password;
|
||||
}
|
||||
|
||||
static const char *gtk_get_domain(struct cli_credentials *credentials)
|
||||
{
|
||||
gtk_get_credentials(credentials);
|
||||
return credentials->domain;
|
||||
}
|
||||
|
||||
void cli_credentials_set_gtk_callbacks(struct cli_credentials *cred)
|
||||
{
|
||||
cli_credentials_set_username_callback(cred, gtk_get_username);
|
||||
cli_credentials_set_domain_callback(cred, gtk_get_domain);
|
||||
cli_credentials_set_password_callback(cred, gtk_get_userpassword);
|
||||
}
|
@ -1,316 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
SMB-related GTK+ functions
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004-2005
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "gtk/common/select.h"
|
||||
#include "version.h"
|
||||
#include "librpc/rpc/dcerpc.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
|
||||
/**
|
||||
* Dialog error showing a WERROR
|
||||
*/
|
||||
void gtk_show_werror(GtkWidget *win, const char *message, WERROR err)
|
||||
{
|
||||
GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s: %s\n", message?message: "Windows error",
|
||||
win_errstr(err));
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
||||
/**
|
||||
* GTK+ dialog showing a NTSTATUS error
|
||||
*/
|
||||
void gtk_show_ntstatus(GtkWidget *win, const char *message, NTSTATUS status)
|
||||
{
|
||||
GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s: %s\n", message?message:"Windows error",
|
||||
nt_errstr(status));
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
||||
static void on_browse_activate (GtkButton *button, gpointer user_data)
|
||||
{
|
||||
GtkRpcBindingDialog *rbd = user_data;
|
||||
GtkWidget *shd = gtk_select_host_dialog_new(rbd->sam_pipe);
|
||||
if(gtk_dialog_run(GTK_DIALOG(shd)) == GTK_RESPONSE_ACCEPT) {
|
||||
gtk_entry_set_text(GTK_ENTRY(rbd->entry_host), gtk_select_host_dialog_get_host(GTK_SELECT_HOST_DIALOG(shd)));
|
||||
}
|
||||
|
||||
gtk_widget_destroy(GTK_WIDGET(shd));
|
||||
}
|
||||
|
||||
static void on_ncalrpc_toggled(GtkToggleButton *tb, GtkRpcBindingDialog *d)
|
||||
{
|
||||
gtk_widget_set_sensitive(d->frame_host, !gtk_toggle_button_get_active(tb));
|
||||
}
|
||||
|
||||
static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_dialog)
|
||||
{
|
||||
GtkWidget *dialog_vbox1;
|
||||
GtkWidget *vbox1;
|
||||
GtkWidget *vbox6;
|
||||
GtkWidget *frame_transport;
|
||||
GtkWidget *label1;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *lbl_name;
|
||||
GtkWidget *label2;
|
||||
GtkWidget *label3;
|
||||
GtkWidget *frame_security;
|
||||
GtkWidget *vbox2;
|
||||
GtkWidget *btn_browse;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *btn_cancel;
|
||||
GtkWidget *btn_connect;
|
||||
GSList *transport_smb_group = NULL;
|
||||
|
||||
gtk_rpc_binding_dialog->mem_ctx = talloc_init("gtk_rcp_binding_dialog");
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (gtk_rpc_binding_dialog), "Connect");
|
||||
|
||||
dialog_vbox1 = GTK_DIALOG (gtk_rpc_binding_dialog)->vbox;
|
||||
|
||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0);
|
||||
|
||||
frame_transport = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), frame_transport, TRUE, TRUE, 0);
|
||||
|
||||
vbox6 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (frame_transport), vbox6);
|
||||
|
||||
gtk_rpc_binding_dialog->transport_ncalrpc = gtk_radio_button_new_with_mnemonic (NULL, "Local Host");
|
||||
gtk_box_pack_start (GTK_BOX (vbox6), gtk_rpc_binding_dialog->transport_ncalrpc, FALSE, FALSE, 0);
|
||||
gtk_radio_button_set_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_ncalrpc), transport_smb_group);
|
||||
transport_smb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_ncalrpc));
|
||||
|
||||
|
||||
gtk_rpc_binding_dialog->transport_smb = gtk_radio_button_new_with_mnemonic (NULL, "RPC over SMB over TCP/IP");
|
||||
gtk_box_pack_start (GTK_BOX (vbox6), gtk_rpc_binding_dialog->transport_smb, FALSE, FALSE, 0);
|
||||
gtk_radio_button_set_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_smb), transport_smb_group);
|
||||
transport_smb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_smb));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_rpc_binding_dialog->transport_smb), TRUE);
|
||||
|
||||
gtk_rpc_binding_dialog->transport_tcp_ip = gtk_radio_button_new_with_mnemonic (NULL, "RPC over TCP/IP");
|
||||
gtk_box_pack_start (GTK_BOX (vbox6), gtk_rpc_binding_dialog->transport_tcp_ip, FALSE, FALSE, 0);
|
||||
gtk_radio_button_set_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_tcp_ip), transport_smb_group);
|
||||
transport_smb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_tcp_ip));
|
||||
|
||||
label1 = gtk_label_new ("Transport");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame_transport), label1);
|
||||
|
||||
gtk_rpc_binding_dialog->frame_host = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), gtk_rpc_binding_dialog->frame_host, TRUE, TRUE, 0);
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (gtk_rpc_binding_dialog->frame_host), hbox1);
|
||||
|
||||
lbl_name = gtk_label_new ("Name");
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), lbl_name, TRUE, TRUE, 0);
|
||||
|
||||
gtk_rpc_binding_dialog->entry_host = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), gtk_rpc_binding_dialog->entry_host, TRUE, TRUE, 0);
|
||||
|
||||
if(gtk_rpc_binding_dialog->sam_pipe)
|
||||
{
|
||||
btn_browse = gtk_button_new_with_label ("Browse");
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), btn_browse, TRUE, TRUE, 0);
|
||||
|
||||
g_signal_connect ((gpointer) btn_browse, "pressed",
|
||||
G_CALLBACK (on_browse_activate),
|
||||
gtk_rpc_binding_dialog);
|
||||
}
|
||||
|
||||
label2 = gtk_label_new ("Host");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (gtk_rpc_binding_dialog->frame_host), label2);
|
||||
|
||||
frame_security = gtk_frame_new (NULL);
|
||||
|
||||
label3 = gtk_label_new ("Security");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame_security), label3);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), frame_security, TRUE, TRUE, 0);
|
||||
|
||||
vbox2 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (frame_security), vbox2);
|
||||
|
||||
gtk_rpc_binding_dialog->chk_sign = gtk_check_button_new_with_mnemonic ("S_ign");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), gtk_rpc_binding_dialog->chk_sign, FALSE, FALSE, 0);
|
||||
|
||||
gtk_rpc_binding_dialog->chk_seal = gtk_check_button_new_with_mnemonic ("_Seal");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), gtk_rpc_binding_dialog->chk_seal, FALSE, FALSE, 0);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (gtk_rpc_binding_dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
btn_cancel = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (gtk_rpc_binding_dialog), btn_cancel, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (btn_cancel, GTK_CAN_DEFAULT);
|
||||
|
||||
btn_connect = gtk_button_new_with_mnemonic ("C_onnect");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (gtk_rpc_binding_dialog), btn_connect, GTK_RESPONSE_ACCEPT);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (btn_connect), 1);
|
||||
GTK_WIDGET_SET_FLAGS (btn_connect, GTK_CAN_DEFAULT);
|
||||
|
||||
g_signal_connect ((gpointer) gtk_rpc_binding_dialog->transport_ncalrpc, "toggled",
|
||||
G_CALLBACK (on_ncalrpc_toggled),
|
||||
gtk_rpc_binding_dialog);
|
||||
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gtk_rpc_binding_dialog->transport_ncalrpc), TRUE);
|
||||
gtk_widget_show_all(dialog_vbox1);
|
||||
|
||||
gtk_widget_grab_focus (btn_connect);
|
||||
gtk_widget_grab_default (btn_connect);
|
||||
}
|
||||
|
||||
GType gtk_rpc_binding_dialog_get_type (void)
|
||||
{
|
||||
static GType mytype = 0;
|
||||
|
||||
if (!mytype)
|
||||
{
|
||||
static const GTypeInfo myinfo =
|
||||
{
|
||||
sizeof (GtkRpcBindingDialogClass),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof(GtkRpcBindingDialog),
|
||||
0,
|
||||
(GInstanceInitFunc) gtk_rpc_binding_dialog_init,
|
||||
};
|
||||
|
||||
mytype = g_type_register_static (GTK_TYPE_DIALOG,
|
||||
"GtkRpcBindingDialog", &myinfo, 0);
|
||||
}
|
||||
|
||||
return mytype;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new GTK+ dialog asking for binding information for
|
||||
* DCE/RPC
|
||||
*
|
||||
* Optionally gets a sam pipe that will be used to look up users
|
||||
*/
|
||||
GtkWidget *gtk_rpc_binding_dialog_new (struct dcerpc_pipe *sam_pipe)
|
||||
{
|
||||
GtkRpcBindingDialog *d = GTK_RPC_BINDING_DIALOG ( g_object_new (gtk_rpc_binding_dialog_get_type (), NULL));
|
||||
d->sam_pipe = sam_pipe;
|
||||
return GTK_WIDGET(d);
|
||||
}
|
||||
|
||||
const char *gtk_rpc_binding_dialog_get_host(GtkRpcBindingDialog *d)
|
||||
{
|
||||
return gtk_entry_get_text(GTK_ENTRY(d->entry_host));
|
||||
}
|
||||
|
||||
struct dcerpc_binding *gtk_rpc_binding_dialog_get_binding(GtkRpcBindingDialog *d, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
struct dcerpc_binding *binding = talloc(mem_ctx, struct dcerpc_binding);
|
||||
|
||||
ZERO_STRUCT(binding->object);
|
||||
|
||||
/* Format: TRANSPORT:host[\pipe\foo,foo,foo] */
|
||||
|
||||
binding->host = talloc_strdup(mem_ctx, gtk_entry_get_text(GTK_ENTRY(d->entry_host)));
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->transport_tcp_ip))) {
|
||||
binding->transport = NCACN_IP_TCP;
|
||||
} else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->transport_ncalrpc))) {
|
||||
binding->transport = NCALRPC;
|
||||
binding->host = NULL;
|
||||
} else {
|
||||
binding->transport = NCACN_NP;
|
||||
}
|
||||
|
||||
binding->options = NULL;
|
||||
binding->flags = 0;
|
||||
binding->endpoint = NULL;
|
||||
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->chk_seal))) {
|
||||
binding->flags |= DCERPC_SEAL;
|
||||
}
|
||||
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->chk_sign))) {
|
||||
binding->flags |= DCERPC_SIGN;
|
||||
}
|
||||
|
||||
return binding;
|
||||
}
|
||||
|
||||
const char *gtk_rpc_binding_dialog_get_binding_string(GtkRpcBindingDialog *d, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
return dcerpc_binding_string(mem_ctx, gtk_rpc_binding_dialog_get_binding(d, mem_ctx));
|
||||
}
|
||||
|
||||
GtkWidget *create_gtk_samba_about_dialog (const char *appname)
|
||||
{
|
||||
GtkWidget *samba_about_dialog;
|
||||
GtkWidget *dialog_vbox1;
|
||||
GtkWidget *label1;
|
||||
GtkWidget *label2;
|
||||
GtkWidget *label3;
|
||||
GtkWidget *label4;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *okbutton1;
|
||||
|
||||
samba_about_dialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (samba_about_dialog), "About");
|
||||
|
||||
dialog_vbox1 = GTK_DIALOG (samba_about_dialog)->vbox;
|
||||
|
||||
/* FIXME image1 = create_pixmap (samba_about_dialog, "slmed.png");
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), image1, TRUE, TRUE, 0);*/
|
||||
|
||||
label1 = gtk_label_new (appname);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), label1, FALSE, FALSE, 0);
|
||||
|
||||
label2 = gtk_label_new (SAMBA_VERSION_STRING);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), label2, FALSE, FALSE, 0);
|
||||
|
||||
label3 = gtk_label_new_with_mnemonic ("Part of Samba <http://www.samba.org/>");
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), label3, FALSE, FALSE, 0);
|
||||
|
||||
label4 = gtk_label_new ("\302\251 1992-2006 The Samba Team");
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), label4, FALSE, FALSE, 0);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (samba_about_dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (samba_about_dialog), okbutton1, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
|
||||
gtk_widget_show_all(dialog_vbox1);
|
||||
|
||||
return samba_about_dialog;
|
||||
}
|
@ -1,76 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
SMB-related GTK+ functions
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_SMB_H__
|
||||
#define __GTK_SMB_H__
|
||||
|
||||
#define GTK_DISABLE_DEPRECATED
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
typedef struct _GtkRpcBindingDialog GtkRpcBindingDialog;
|
||||
|
||||
struct _GtkRpcBindingDialog
|
||||
{
|
||||
GtkDialog dialog;
|
||||
GtkWidget *chk_sign;
|
||||
GtkWidget *chk_seal;
|
||||
GtkWidget *transport_tcp_ip;
|
||||
GtkWidget *transport_ncalrpc;
|
||||
GtkWidget *transport_smb;
|
||||
GtkWidget *frame_host;
|
||||
GtkWidget *entry_host;
|
||||
GtkWidget *entry_username;
|
||||
GtkWidget *entry_userdomain;
|
||||
GtkWidget *entry_password;
|
||||
GtkWidget *krb5_chk_button;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
struct dcerpc_pipe *sam_pipe;
|
||||
};
|
||||
|
||||
typedef struct _GtkRpcBindingDialogClass GtkRpcBindingDialogClass;
|
||||
|
||||
struct _GtkRpcBindingDialogClass
|
||||
{
|
||||
GtkDialogClass parent_class;
|
||||
};
|
||||
|
||||
#define GTK_RPC_BINDING_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_rpc_binding_dialog_get_type (), GtkRpcBindingDialog)
|
||||
#define GTK_RPC_BINDING_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_rpc_binding_dialog_class_get_type (), GtkRpcBindingDialogClass)
|
||||
#define IS_GTK_RPC_BINDING_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_rpc_binding_dialog_get_type ())
|
||||
|
||||
/* subsystem prototypes */
|
||||
GtkWidget *create_gtk_samba_about_dialog (const char *appname);
|
||||
void gtk_show_ntstatus(GtkWidget *win, const char *, NTSTATUS status);
|
||||
GtkWidget *gtk_rpc_binding_dialog_new (struct dcerpc_pipe *sam_pipe);
|
||||
GType gtk_rpc_binding_dialog_get_type (void);
|
||||
struct dcerpc_binding *gtk_rpc_binding_dialog_get_binding(GtkRpcBindingDialog *d, TALLOC_CTX *mem_ctx);
|
||||
void gtk_show_werror(GtkWidget *win, const char *, WERROR err);
|
||||
const char *gtk_rpc_binding_dialog_get_binding_string(GtkRpcBindingDialog *d, TALLOC_CTX *mem_ctx);
|
||||
const char *gtk_rpc_binding_dialog_get_host(GtkRpcBindingDialog *d);
|
||||
|
||||
int gtk_event_loop(void);
|
||||
struct event_context;
|
||||
struct event_context *gtk_event_context(void);
|
||||
|
||||
struct cli_credentials;
|
||||
void cli_credentials_set_gtk_callbacks(struct cli_credentials *creds);
|
||||
|
||||
#endif
|
@ -1,361 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
main select loop and event handling
|
||||
|
||||
plugin for using a gtk application's event loop
|
||||
|
||||
Copyright (C) Stefan Metzmacher 2005
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "lib/events/events.h"
|
||||
#include "lib/events/events_internal.h"
|
||||
|
||||
#include "gtk/common/select.h"
|
||||
|
||||
/* as gtk_main() doesn't take a parameter nor return one,
|
||||
we need to have a global event context structure for our
|
||||
gtk-bases tools
|
||||
*/
|
||||
static struct event_context *gtk_event_context_global;
|
||||
|
||||
static int gtk_event_context_destructor(struct event_context *ev)
|
||||
{
|
||||
gtk_event_context_global = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
create a gtk_event_context structure.
|
||||
*/
|
||||
static int gtk_event_context_init(struct event_context *ev)
|
||||
{
|
||||
talloc_set_destructor(ev, gtk_event_context_destructor);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct gtk_fd_event {
|
||||
BOOL running;
|
||||
BOOL free_after_run;
|
||||
GIOChannel *channel;
|
||||
guint fd_id;
|
||||
};
|
||||
|
||||
static gboolean gtk_event_fd_handler(GIOChannel *source, GIOCondition condition, gpointer data)
|
||||
{
|
||||
struct fd_event *fde = talloc_get_type(data, struct fd_event);
|
||||
struct gtk_fd_event *gtk_fd = talloc_get_type(fde->additional_data,
|
||||
struct gtk_fd_event);
|
||||
int flags = 0;
|
||||
|
||||
if (condition & (G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP))
|
||||
flags |= EVENT_FD_READ;
|
||||
if (condition & G_IO_OUT)
|
||||
flags |= EVENT_FD_WRITE;
|
||||
|
||||
gtk_fd->running = True;
|
||||
fde->handler(fde->event_ctx, fde, flags, fde->private_data);
|
||||
gtk_fd->running = False;
|
||||
|
||||
if (gtk_fd->free_after_run) {
|
||||
talloc_free(fde);
|
||||
return gtk_false();
|
||||
}
|
||||
|
||||
return gtk_true();
|
||||
}
|
||||
|
||||
/*
|
||||
destroy an fd_event
|
||||
*/
|
||||
static int gtk_event_fd_destructor(struct fd_event *fde)
|
||||
{
|
||||
struct gtk_fd_event *gtk_fd = talloc_get_type(fde->additional_data,
|
||||
struct gtk_fd_event);
|
||||
|
||||
if (gtk_fd->running) {
|
||||
/* the event is running reject the talloc_free()
|
||||
as it's done by the gtk_event_timed_handler()
|
||||
*/
|
||||
gtk_fd->free_after_run = True;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fde->flags) {
|
||||
/* only if any flag is set we have really registered an event */
|
||||
g_source_remove(gtk_fd->fd_id);
|
||||
}
|
||||
g_io_channel_unref(gtk_fd->channel);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
add a fd based event
|
||||
return NULL on failure (memory allocation error)
|
||||
*/
|
||||
static struct fd_event *gtk_event_add_fd(struct event_context *ev, TALLOC_CTX *mem_ctx,
|
||||
int fd, uint16_t flags,
|
||||
event_fd_handler_t handler,
|
||||
void *private_data)
|
||||
{
|
||||
struct fd_event *fde;
|
||||
struct gtk_fd_event *gtk_fd;
|
||||
GIOChannel *channel;
|
||||
guint fd_id = 0;
|
||||
GIOCondition condition = 0;
|
||||
|
||||
fde = talloc(mem_ctx?mem_ctx:ev, struct fd_event);
|
||||
if (!fde) return NULL;
|
||||
|
||||
gtk_fd = talloc(fde, struct gtk_fd_event);
|
||||
if (gtk_fd == NULL) {
|
||||
talloc_free(fde);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fde->event_ctx = ev;
|
||||
fde->fd = fd;
|
||||
fde->flags = flags;
|
||||
fde->handler = handler;
|
||||
fde->private_data = private_data;
|
||||
fde->additional_flags = 0;
|
||||
fde->additional_data = gtk_fd;
|
||||
|
||||
channel = g_io_channel_unix_new(fde->fd);
|
||||
if (channel == NULL) {
|
||||
talloc_free(fde);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (fde->flags & EVENT_FD_READ)
|
||||
condition |= (G_IO_IN | G_IO_ERR | G_IO_HUP);
|
||||
if (fde->flags & EVENT_FD_WRITE)
|
||||
condition |= G_IO_OUT;
|
||||
|
||||
if (condition) {
|
||||
/* only register the event when at least one flag is set
|
||||
as condition == 0 means wait for any event and is not the same
|
||||
as fde->flags == 0 !
|
||||
*/
|
||||
fd_id = g_io_add_watch(channel, condition, gtk_event_fd_handler, fde);
|
||||
}
|
||||
|
||||
gtk_fd->running = False;
|
||||
gtk_fd->free_after_run = False;
|
||||
gtk_fd->channel = channel;
|
||||
gtk_fd->fd_id = fd_id;
|
||||
|
||||
talloc_set_destructor(fde, gtk_event_fd_destructor);
|
||||
|
||||
return fde;
|
||||
}
|
||||
|
||||
/*
|
||||
return the fd event flags
|
||||
*/
|
||||
static uint16_t gtk_event_get_fd_flags(struct fd_event *fde)
|
||||
{
|
||||
return fde->flags;
|
||||
}
|
||||
|
||||
/*
|
||||
set the fd event flags
|
||||
*/
|
||||
static void gtk_event_set_fd_flags(struct fd_event *fde, uint16_t flags)
|
||||
{
|
||||
struct gtk_fd_event *gtk_fd = talloc_get_type(fde->additional_data,
|
||||
struct gtk_fd_event);
|
||||
GIOCondition condition = 0;
|
||||
|
||||
if (fde->flags == flags) return;
|
||||
|
||||
if (flags & EVENT_FD_READ)
|
||||
condition |= (G_IO_IN | G_IO_ERR | G_IO_HUP);
|
||||
if (flags & EVENT_FD_WRITE)
|
||||
condition |= G_IO_OUT;
|
||||
|
||||
/* only register the event when at least one flag is set
|
||||
as condition == 0 means wait for any event and is not the same
|
||||
as fde->flags == 0 !
|
||||
*/
|
||||
if (fde->flags) {
|
||||
g_source_remove(gtk_fd->fd_id);
|
||||
}
|
||||
if (condition) {
|
||||
gtk_fd->fd_id = g_io_add_watch(gtk_fd->channel, condition, gtk_event_fd_handler, fde);
|
||||
}
|
||||
|
||||
fde->flags = flags;
|
||||
}
|
||||
|
||||
struct gtk_timed_event {
|
||||
guint te_id;
|
||||
};
|
||||
|
||||
/*
|
||||
destroy a timed event
|
||||
*/
|
||||
static int gtk_event_timed_destructor(struct timed_event *te)
|
||||
{
|
||||
struct gtk_timed_event *gtk_te = talloc_get_type(te->additional_data,
|
||||
struct gtk_timed_event);
|
||||
|
||||
g_source_remove(gtk_te->te_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gtk_event_timed_deny_destructor(struct timed_event *te)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gboolean gtk_event_timed_handler(gpointer data)
|
||||
{
|
||||
struct timed_event *te = talloc_get_type(data, struct timed_event);
|
||||
struct timeval t = timeval_current();
|
||||
|
||||
/* deny the handler to free the event */
|
||||
talloc_set_destructor(te, gtk_event_timed_deny_destructor);
|
||||
te->handler(te->event_ctx, te, t, te->private_data);
|
||||
|
||||
talloc_set_destructor(te, gtk_event_timed_destructor);
|
||||
talloc_free(te);
|
||||
|
||||
/* return FALSE mean this event should be removed */
|
||||
return gtk_false();
|
||||
}
|
||||
|
||||
/*
|
||||
add a timed event
|
||||
return NULL on failure (memory allocation error)
|
||||
*/
|
||||
static struct timed_event *gtk_event_add_timed(struct event_context *ev, TALLOC_CTX *mem_ctx,
|
||||
struct timeval next_event,
|
||||
event_timed_handler_t handler,
|
||||
void *private_data)
|
||||
{
|
||||
struct timed_event *te;
|
||||
struct gtk_timed_event *gtk_te;
|
||||
struct timeval cur_tv, diff_tv;
|
||||
guint timeout;
|
||||
|
||||
te = talloc(mem_ctx?mem_ctx:ev, struct timed_event);
|
||||
if (te == NULL) return NULL;
|
||||
|
||||
gtk_te = talloc(te, struct gtk_timed_event);
|
||||
if (gtk_te == NULL) {
|
||||
talloc_free(te);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
te->event_ctx = ev;
|
||||
te->next_event = next_event;
|
||||
te->handler = handler;
|
||||
te->private_data = private_data;
|
||||
te->additional_data = gtk_te;
|
||||
|
||||
cur_tv = timeval_current();
|
||||
diff_tv = timeval_until(&cur_tv, &next_event);
|
||||
timeout = ((diff_tv.tv_usec+999)/1000)+(diff_tv.tv_sec*1000);
|
||||
|
||||
gtk_te->te_id = g_timeout_add(timeout, gtk_event_timed_handler, te);
|
||||
|
||||
talloc_set_destructor(te, gtk_event_timed_destructor);
|
||||
|
||||
return te;
|
||||
}
|
||||
|
||||
/*
|
||||
do a single event loop
|
||||
*/
|
||||
static int gtk_event_loop_once(struct event_context *ev)
|
||||
{
|
||||
/*
|
||||
* gtk_main_iteration ()
|
||||
*
|
||||
* gboolean gtk_main_iteration (void);
|
||||
*
|
||||
* Runs a single iteration of the mainloop. If no events
|
||||
* are waiting to be processed GTK+ will block until the
|
||||
* next event is noticed. If you don't want to block look
|
||||
* at gtk_main_iteration_do() or check if any events are
|
||||
* pending with gtk_events_pending() first.
|
||||
*
|
||||
* Returns : TRUE if gtk_main_quit() has been called for the innermost mainloop.
|
||||
*/
|
||||
gboolean ret;
|
||||
|
||||
ret = gtk_main_iteration();
|
||||
if (ret == gtk_true()) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
return with 0
|
||||
*/
|
||||
static int gtk_event_loop_wait(struct event_context *ev)
|
||||
{
|
||||
/*
|
||||
* gtk_main ()
|
||||
*
|
||||
* void gtk_main (void);
|
||||
*
|
||||
* Runs the main loop until gtk_main_quit() is called.
|
||||
* You can nest calls to gtk_main(). In that case
|
||||
* gtk_main_quit() will make the innermost invocation
|
||||
* of the main loop return.
|
||||
*/
|
||||
gtk_main();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct event_ops gtk_event_ops = {
|
||||
.context_init = gtk_event_context_init,
|
||||
.add_fd = gtk_event_add_fd,
|
||||
.get_fd_flags = gtk_event_get_fd_flags,
|
||||
.set_fd_flags = gtk_event_set_fd_flags,
|
||||
.add_timed = gtk_event_add_timed,
|
||||
.loop_once = gtk_event_loop_once,
|
||||
.loop_wait = gtk_event_loop_wait,
|
||||
};
|
||||
|
||||
int gtk_event_loop(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
event_register_backend("gtk", >k_event_ops);
|
||||
|
||||
gtk_event_context_global = event_context_init_byname(NULL, "gtk");
|
||||
if (!gtk_event_context_global) return -1;
|
||||
|
||||
ret = event_loop_wait(gtk_event_context_global);
|
||||
|
||||
talloc_free(gtk_event_context_global);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct event_context *gtk_event_context(void)
|
||||
{
|
||||
return gtk_event_context_global;
|
||||
}
|
@ -1,305 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
SMB-related GTK+ functions
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "librpc/gen_ndr/ndr_samr_c.h"
|
||||
#include "gtk/common/select.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
|
||||
/* GtkSelectDomainDialog */
|
||||
|
||||
const char *gtk_select_domain_dialog_get_domain(GtkSelectDomainDialog *d)
|
||||
{
|
||||
return gtk_entry_get_text(GTK_ENTRY(d->entry_domain));
|
||||
}
|
||||
|
||||
static void gtk_select_domain_dialog_init (GtkSelectDomainDialog *select_domain_dialog)
|
||||
{
|
||||
GtkWidget *dialog_vbox1;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *label1;
|
||||
GtkWidget *scrolledwindow1;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *cancelbutton1;
|
||||
GtkWidget *okbutton1;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *curcol;
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (select_domain_dialog), "Select Domain");
|
||||
|
||||
dialog_vbox1 = GTK_DIALOG (select_domain_dialog)->vbox;
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0);
|
||||
|
||||
label1 = gtk_label_new ("Domain:");
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), label1, FALSE, FALSE, 0);
|
||||
|
||||
select_domain_dialog->entry_domain = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), select_domain_dialog->entry_domain, TRUE, TRUE, 0);
|
||||
|
||||
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), scrolledwindow1, TRUE, TRUE, 0);
|
||||
|
||||
select_domain_dialog->list_domains = gtk_tree_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow1), select_domain_dialog->list_domains);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(select_domain_dialog->list_domains), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
select_domain_dialog->store_domains = gtk_list_store_new(1, G_TYPE_STRING);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(select_domain_dialog->list_domains), GTK_TREE_MODEL(select_domain_dialog->store_domains));
|
||||
g_object_unref(select_domain_dialog->store_domains);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (select_domain_dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (select_domain_dialog), cancelbutton1, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (select_domain_dialog), okbutton1, GTK_RESPONSE_OK);
|
||||
gtk_widget_show_all(dialog_vbox1);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
|
||||
}
|
||||
|
||||
struct policy_handle gtk_select_domain_dialog_get_handle(GtkSelectDomainDialog *d)
|
||||
{
|
||||
struct policy_handle h;
|
||||
|
||||
|
||||
/* FIXME */
|
||||
return h;
|
||||
}
|
||||
|
||||
GType gtk_select_domain_dialog_get_type (void)
|
||||
{
|
||||
static GType mytype = 0;
|
||||
|
||||
if (!mytype)
|
||||
{
|
||||
static const GTypeInfo myinfo =
|
||||
{
|
||||
sizeof (GtkSelectDomainDialogClass),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof(GtkSelectDomainDialog),
|
||||
0,
|
||||
(GInstanceInitFunc) gtk_select_domain_dialog_init,
|
||||
};
|
||||
|
||||
mytype = g_type_register_static (GTK_TYPE_DIALOG,
|
||||
"GtkSelectDomainDialog", &myinfo, 0);
|
||||
}
|
||||
|
||||
return mytype;
|
||||
}
|
||||
|
||||
GtkWidget *gtk_select_domain_dialog_new (struct dcerpc_pipe *sam_pipe)
|
||||
{
|
||||
GtkSelectDomainDialog *d = g_object_new(gtk_select_domain_dialog_get_type (), NULL);
|
||||
NTSTATUS status;
|
||||
struct samr_EnumDomains r;
|
||||
struct samr_Connect cr;
|
||||
struct samr_Close dr;
|
||||
struct policy_handle handle;
|
||||
uint32_t resume_handle = 0;
|
||||
int i;
|
||||
TALLOC_CTX *mem_ctx = talloc_init("gtk_select_domain_dialog_new");
|
||||
|
||||
d->sam_pipe = sam_pipe;
|
||||
|
||||
cr.in.system_name = 0;
|
||||
cr.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
|
||||
cr.out.connect_handle = &handle;
|
||||
|
||||
status = dcerpc_samr_Connect(sam_pipe, mem_ctx, &cr);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(NULL, "Running Connect on SAMR", status);
|
||||
talloc_free(mem_ctx);
|
||||
return GTK_WIDGET(d);
|
||||
}
|
||||
|
||||
r.in.connect_handle = &handle;
|
||||
r.in.resume_handle = &resume_handle;
|
||||
r.in.buf_size = (uint32_t)-1;
|
||||
r.out.resume_handle = &resume_handle;
|
||||
|
||||
status = dcerpc_samr_EnumDomains(sam_pipe, mem_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(NULL, "Enumerating domains", status);
|
||||
} else if (r.out.sam) {
|
||||
for (i=0;i<r.out.sam->count;i++) {
|
||||
GtkTreeIter iter;
|
||||
gtk_list_store_append(d->store_domains, &iter);
|
||||
gtk_list_store_set (d->store_domains, &iter, 0, r.out.sam->entries[i].name.string, -1);
|
||||
}
|
||||
}
|
||||
|
||||
dr.in.handle = &handle;
|
||||
dr.out.handle = &handle;
|
||||
|
||||
status = dcerpc_samr_Close(sam_pipe, mem_ctx, &dr);
|
||||
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 );
|
||||
}
|
||||
|
||||
|
||||
/* GtkSelectHostDialog */
|
||||
const char *gtk_select_host_dialog_get_host (GtkSelectHostDialog *d)
|
||||
{
|
||||
return gtk_entry_get_text(GTK_ENTRY(d->entry_host));
|
||||
}
|
||||
|
||||
static void gtk_select_host_dialog_init (GtkSelectHostDialog *select_host_dialog)
|
||||
{
|
||||
GtkWidget *dialog_vbox2;
|
||||
GtkWidget *hbox2;
|
||||
GtkWidget *label2;
|
||||
GtkWidget *scrolledwindow2;
|
||||
GtkWidget *dialog_action_area2;
|
||||
GtkWidget *cancelbutton2;
|
||||
GtkWidget *okbutton2;
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (select_host_dialog), "Select Host");
|
||||
|
||||
dialog_vbox2 = GTK_DIALOG (select_host_dialog)->vbox;
|
||||
|
||||
hbox2 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox2), hbox2, TRUE, TRUE, 0);
|
||||
|
||||
label2 = gtk_label_new ("Host");
|
||||
gtk_box_pack_start (GTK_BOX (hbox2), label2, FALSE, FALSE, 0);
|
||||
|
||||
select_host_dialog->entry_host = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox2), select_host_dialog->entry_host, TRUE, TRUE, 0);
|
||||
|
||||
scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox2), scrolledwindow2, TRUE, TRUE, 0);
|
||||
|
||||
select_host_dialog->tree_host = gtk_tree_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow2), select_host_dialog->tree_host);
|
||||
|
||||
select_host_dialog->store_host = gtk_tree_store_new(1, G_TYPE_STRING);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(select_host_dialog->tree_host), GTK_TREE_MODEL(select_host_dialog->store_host));
|
||||
g_object_unref(select_host_dialog->store_host);
|
||||
|
||||
dialog_action_area2 = GTK_DIALOG (select_host_dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (select_host_dialog), cancelbutton2, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton2 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_widget_show_all (dialog_vbox2);
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (select_host_dialog), okbutton2, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
|
||||
}
|
||||
|
||||
GType gtk_select_host_dialog_get_type (void)
|
||||
{
|
||||
static GType mytype = 0;
|
||||
|
||||
if (!mytype)
|
||||
{
|
||||
static const GTypeInfo myinfo =
|
||||
{
|
||||
sizeof (GtkSelectHostDialogClass),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof(GtkSelectHostDialog),
|
||||
0,
|
||||
(GInstanceInitFunc) gtk_select_host_dialog_init,
|
||||
};
|
||||
|
||||
mytype = g_type_register_static (GTK_TYPE_DIALOG,
|
||||
"GtkSelectHostDialog", &myinfo, 0);
|
||||
}
|
||||
|
||||
return mytype;
|
||||
}
|
||||
|
||||
GtkWidget *gtk_select_host_dialog_new (struct dcerpc_pipe *sam_pipe)
|
||||
{
|
||||
return GTK_WIDGET ( g_object_new (gtk_select_host_dialog_get_type (), NULL ));
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to a specific interface, but ask the user
|
||||
* for information not specified
|
||||
*/
|
||||
struct dcerpc_pipe *gtk_connect_rpc_interface(TALLOC_CTX *mem_ctx, const struct dcerpc_interface_table *table)
|
||||
{
|
||||
GtkRpcBindingDialog *d;
|
||||
NTSTATUS status;
|
||||
struct dcerpc_pipe *pipe;
|
||||
struct cli_credentials *cred;
|
||||
gint result;
|
||||
|
||||
d = GTK_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);
|
||||
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, NULL);
|
||||
|
||||
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;
|
||||
}
|
@ -1,84 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
SMB-related GTK+ functions
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_SELECT_H__
|
||||
#define __GTK_SELECT_H__
|
||||
|
||||
#define GTK_DISABLE_DEPRECATED
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
typedef struct _GtkSelectDomainDialog GtkSelectDomainDialog;
|
||||
|
||||
struct _GtkSelectDomainDialog
|
||||
{
|
||||
GtkDialog dialog;
|
||||
GtkWidget *entry_domain;
|
||||
GtkWidget *list_domains;
|
||||
GtkListStore *store_domains;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
struct dcerpc_pipe *sam_pipe;
|
||||
};
|
||||
|
||||
typedef struct _GtkSelectDomainDialogClass GtkSelectDomainDialogClass;
|
||||
|
||||
struct _GtkSelectDomainDialogClass
|
||||
{
|
||||
GtkDialogClass parent_class;
|
||||
};
|
||||
|
||||
#define GTK_SELECT_DOMAIN_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_select_domain_dialog_get_type (), GtkSelectDomainDialog)
|
||||
#define GTK_SELECT_DOMAIN_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_select_domain_dialog_class_get_type (), GtkSelectDomainDialogClass)
|
||||
#define IS_GTK_SELECT_DOMAIN_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_select_domain_dialog_get_type ())
|
||||
|
||||
typedef struct _GtkSelectHostDialog GtkSelectHostDialog;
|
||||
|
||||
struct _GtkSelectHostDialog
|
||||
{
|
||||
GtkDialog dialog;
|
||||
GtkWidget *entry_host;
|
||||
GtkWidget *tree_host;
|
||||
GtkTreeStore *store_host;
|
||||
struct dcerpc_pipe *sam_pipe;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
};
|
||||
|
||||
typedef struct _GtkSelectHostDialogClass GtkSelectHostDialogClass;
|
||||
|
||||
struct _GtkSelectHostDialogClass
|
||||
{
|
||||
GtkDialogClass parent_class;
|
||||
};
|
||||
|
||||
#define GTK_SELECT_HOST_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_select_host_dialog_get_type (), GtkSelectHostDialog)
|
||||
#define GTK_SELECT_HOST_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_select_host_dialog_class_get_type (), GtkSelectHostDialogClass)
|
||||
#define IS_GTK_SELECT_HOST_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_select_host_dialog_get_type ())
|
||||
|
||||
GtkWidget *gtk_select_domain_dialog_new (struct dcerpc_pipe *sam_pipe);
|
||||
GType gtk_select_domain_dialog_get_type (void);
|
||||
struct policy_handle gtk_select_domain_dialog_get_handle(GtkSelectDomainDialog *d);
|
||||
GtkWidget *gtk_select_host_dialog_new (struct dcerpc_pipe *sam_pipe);
|
||||
const char *gtk_select_host_dialog_get_host (GtkSelectHostDialog *d);
|
||||
GType gtk_select_host_dialog_get_type (void);
|
||||
|
||||
struct dcerpc_interface_table;
|
||||
struct dcerpc_pipe *gtk_connect_rpc_interface(TALLOC_CTX *mem_ctx, const struct dcerpc_interface_table *table);
|
||||
|
||||
#endif
|
@ -1,21 +0,0 @@
|
||||
dnl # LIB GTK SMB subsystem
|
||||
|
||||
SMB_EXT_LIB_FROM_PKGCONFIG(gtk, [glib-2.0 gtk+-2.0 >= 2.4])
|
||||
SMB_ENABLE(gtksamba, NO)
|
||||
SMB_ENABLE(gregedit, NO)
|
||||
SMB_ENABLE(gwcrontab, NO)
|
||||
SMB_ENABLE(gwsam, NO)
|
||||
SMB_ENABLE(gepdump, NO)
|
||||
SMB_ENABLE(gwsvcctl, NO)
|
||||
SMB_ENABLE(EVENTS_GTK, NO)
|
||||
|
||||
if test t$SMB_ENABLE_gtk = tYES; then
|
||||
SMB_ENABLE(gtksamba, YES)
|
||||
SMB_ENABLE(gregedit, YES)
|
||||
SMB_ENABLE(gwcrontab, YES)
|
||||
SMB_ENABLE(gwsam, YES)
|
||||
SMB_ENABLE(gwsvcctl, YES)
|
||||
SMB_ENABLE(gepdump, YES)
|
||||
SMB_ENABLE(EVENTS_GTK, YES)
|
||||
AC_DEFINE(HAVE_GTK, 1, [Whether GTK+ is available])
|
||||
fi
|
@ -1,49 +0,0 @@
|
||||
# LIB GTK SMB subsystem
|
||||
|
||||
##############################
|
||||
[MODULE::EVENTS_GTK]
|
||||
OBJ_FILES = common/gtk_events.o
|
||||
SUBSYSTEM = gtksamba
|
||||
INIT_FUNCTION = events_gtk_init
|
||||
PRIVATE_DEPENDENCIES = gtk
|
||||
##############################
|
||||
|
||||
[LIBRARY::gtksamba]
|
||||
VERSION = 0.0.1
|
||||
SO_VERSION = 0
|
||||
DESCRIPTION = Common Samba-related widgets for GTK+ applications
|
||||
PUBLIC_HEADERS = common/gtk-smb.h common/select.h
|
||||
OBJ_FILES = common/gtk-smb.o \
|
||||
common/select.o \
|
||||
common/credentials.o
|
||||
PRIVATE_DEPENDENCIES = CHARSET LIBSAMBA-UTIL gtk RPC_NDR_SAMR EVENTS_GTK
|
||||
|
||||
[BINARY::gregedit]
|
||||
INSTALLDIR = BINDIR
|
||||
OBJ_FILES = tools/gregedit.o
|
||||
PRIVATE_DEPENDENCIES = LIBSAMBA-CONFIG registry gtksamba
|
||||
MANPAGE = man/gregedit.1
|
||||
|
||||
[BINARY::gepdump]
|
||||
INSTALLDIR = BINDIR
|
||||
MANPAGE = man/gepdump.1
|
||||
OBJ_FILES = tools/gepdump.o
|
||||
PRIVATE_DEPENDENCIES = LIBSAMBA-CONFIG gtksamba RPC_NDR_EPMAPPER RPC_NDR_MGMT
|
||||
|
||||
[BINARY::gwcrontab]
|
||||
INSTALLDIR = BINDIR
|
||||
MANPAGE = man/gwcrontab.1
|
||||
OBJ_FILES = tools/gwcrontab.o
|
||||
PRIVATE_DEPENDENCIES = LIBSAMBA-CONFIG gtksamba RPC_NDR_ATSVC
|
||||
|
||||
[BINARY::gwsvcctl]
|
||||
INSTALLDIR = BINDIR
|
||||
MANPAGE = man/gwsvcctl.1
|
||||
OBJ_FILES = tools/gwsvcctl.o
|
||||
PRIVATE_DEPENDENCIES = LIBSAMBA-CONFIG gtksamba RPC_NDR_SVCCTL
|
||||
|
||||
# This binary is disabled for now as it doesn't do anything useful yet...
|
||||
[BINARY::gwsam]
|
||||
#INSTALLDIR = BINDIR
|
||||
OBJ_FILES = tools/gwsam.o tools/gwsam_user.o
|
||||
PRIVATE_DEPENDENCIES = LIBSAMBA-CONFIG RPC_NDR_SAMR gtksamba
|
@ -1,54 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
|
||||
|
||||
<refentry id="gepdump.1">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>gepdump</refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
|
||||
<refnamediv>
|
||||
<refname>gepdump</refname>
|
||||
<refpurpose>Endpoint mapper viewer in GTK+</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>gepdump</command>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>DESCRIPTION</title>
|
||||
|
||||
<para>gepdump is a simple Gtk+-based DCE/RPC analysis tool that is
|
||||
capable of showing the endpoints on a remote host and which interfaces are
|
||||
available over those endpoints. It also features the ability to look up statistics for each interface.</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>VERSION</title>
|
||||
|
||||
<para>This man page is correct for version 4.0 of the Samba suite.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>SEE ALSO</title>
|
||||
|
||||
<para>gregedit</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>AUTHOR</title>
|
||||
|
||||
<para>This utility is part of the <ulink url="http://www.samba.org/">Samba</ulink> suite, which is developed by the global <ulink url="http://www.samba.org/samba/team/">Samba Team</ulink>.</para>
|
||||
|
||||
<para>This manpage and gepdump were written by Jelmer Vernooij. </para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@ -1,86 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
|
||||
|
||||
<refentry id="gregedit.1">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>gregedit</refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
|
||||
<refnamediv>
|
||||
<refname>gregedit</refname>
|
||||
<refpurpose>Windows registry file viewer for GTK+</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>gregedit</command>
|
||||
<arg choice="opt">--help</arg>
|
||||
<arg choice="opt">--backend=BACKEND</arg>
|
||||
<arg choice="opt">--credentials=CREDENTIALS</arg>
|
||||
<arg choice="opt">location</arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>DESCRIPTION</title>
|
||||
|
||||
<para>gregedit is a GTK+ frontend to the Windows registry file support
|
||||
in Samba4. It currently supports NT4 file, 9x file, gconf, remote
|
||||
Windows registries and a file system backend.
|
||||
</para>
|
||||
|
||||
<para>gregedit tries to imitate the Windows regedit.exe program as much
|
||||
as possible.</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1>
|
||||
<title>OPTIONS</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>--help</term>
|
||||
<listitem><para>
|
||||
Show list of available options.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>--backend BACKEND</term>
|
||||
<listitem><para>Name of backend to load. Possible values are:
|
||||
w95, nt4, gconf, dir and rpc. The default is <emphasis>dir</emphasis>.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>--credentials=CREDENTIALS</term>
|
||||
<listitem><para>
|
||||
Credentials to use, if any. Password should be separated from user name by a percent sign.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>VERSION</title>
|
||||
|
||||
<para>This man page is correct for version 4.0 of the Samba suite.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>SEE ALSO</title>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>AUTHOR</title>
|
||||
|
||||
<para>This utility is part of the <ulink url="http://www.samba.org/">Samba</ulink> suite, which is developed by the global <ulink url="http://www.samba.org/samba/team/">Samba Team</ulink>.</para>
|
||||
|
||||
<para>This manpage and gregedit were written by Jelmer Vernooij. </para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
|
||||
|
||||
<refentry id="gwcrontab.1">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>gwcrontab</refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
|
||||
<refnamediv>
|
||||
<refname>gwcrontab</refname>
|
||||
<refpurpose>Task planning frontend for DCE/RPC</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>gwcrontab</command>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>DESCRIPTION</title>
|
||||
|
||||
<para>gwcrontab is a simple remote frontend to the Windows atsvc service. This service performs the same tasks as <emphasis>at</emphasis> and <emphasis>cron</emphasis> do on POSIX systems. </para>
|
||||
|
||||
<para>The GUI is aimed to look similar to the "Planning Tasks" application in Windows.</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>VERSION</title>
|
||||
|
||||
<para>This man page is correct for version 4.0 of the Samba suite.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>AUTHOR</title>
|
||||
|
||||
<para>This utility is part of the <ulink url="http://www.samba.org/">Samba</ulink> suite, which is developed by the global <ulink url="http://www.samba.org/samba/team/">Samba Team</ulink>.</para>
|
||||
|
||||
<para>This manpage and gwcrontab were written by Jelmer Vernooij. </para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
|
||||
|
||||
<refentry id="gwsvcctl.1">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>gwsvcctl</refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
|
||||
<refnamediv>
|
||||
<refname>gwsvcctl</refname>
|
||||
<refpurpose>Task planning frontend for DCE/RPC</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>gwsvcctl</command>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>DESCRIPTION</title>
|
||||
|
||||
<para>gwsvcctl is a simple remote frontend to the Windows srvsvc service.
|
||||
This service allows restarting, stop and starting remote services.
|
||||
</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>VERSION</title>
|
||||
|
||||
<para>This man page is correct for version 4.0 of the Samba suite.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>AUTHOR</title>
|
||||
|
||||
<para>This utility is part of the <ulink url="http://www.samba.org/">Samba</ulink> suite, which is developed by the global <ulink url="http://www.samba.org/samba/team/">Samba Team</ulink>.</para>
|
||||
|
||||
<para>This manpage and gwsvcctl were written by Jelmer Vernooij. </para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@ -1,10 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Name=Endpoint Dumper
|
||||
Comment=Show DCE/RPC endpoint mapper
|
||||
Exec=gepdump
|
||||
#Icon=media-player-48.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=GNOME;GTK;Application;DCE/RPC;Endpoint;Samba;
|
||||
StartupNotify=true
|
@ -1,10 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Name=Registry Editor
|
||||
Comment=Edit Windows-Style Registry files
|
||||
Exec=gregedit
|
||||
#Icon=media-player-48.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=GNOME;GTK;Application;Registry;Samba;
|
||||
StartupNotify=true
|
@ -1,10 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Name=Windows Job Scheduler
|
||||
Comment=Windows Job Scheduler
|
||||
Exec=gwcrontab
|
||||
#Icon=media-player-48.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=GNOME;GTK;Application;Crontab;At;Samba;
|
||||
StartupNotify=true
|
@ -1,443 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
GTK+ Endpoint Mapper frontend
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "librpc/gen_ndr/ndr_epmapper_c.h"
|
||||
#include "librpc/gen_ndr/ndr_mgmt_c.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "gtk/common/select.h"
|
||||
#include "auth/gensec/gensec.h"
|
||||
|
||||
/*
|
||||
* Show:
|
||||
* - RPC statistics
|
||||
* - Available interfaces
|
||||
* - Per interface: available endpoints
|
||||
* - Per interface auth details
|
||||
*/
|
||||
|
||||
static GtkWidget *mainwin;
|
||||
static GtkTreeStore *store_eps;
|
||||
static GtkWidget *table_statistics;
|
||||
static GtkWidget *lbl_calls_in, *lbl_calls_out, *lbl_pkts_in, *lbl_pkts_out;
|
||||
static GtkWidget *lbl_iface_version, *lbl_iface_uuid, *lbl_iface_name;
|
||||
static GtkListStore *store_princ_names;
|
||||
static GtkWidget *mnu_refresh;
|
||||
TALLOC_CTX *eps_ctx = NULL;
|
||||
TALLOC_CTX *conn_ctx = NULL;
|
||||
|
||||
static struct dcerpc_pipe *epmapper_pipe;
|
||||
static struct dcerpc_pipe *mgmt_pipe;
|
||||
|
||||
static void on_quit1_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
||||
static void on_about1_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gepdump"));
|
||||
gtk_dialog_run(aboutwin);
|
||||
gtk_widget_destroy(GTK_WIDGET(aboutwin));
|
||||
}
|
||||
|
||||
static const char *get_protocol_name(enum epm_protocol protocol)
|
||||
{
|
||||
switch (protocol) {
|
||||
case EPM_PROTOCOL_UUID: return "UUID";
|
||||
case EPM_PROTOCOL_NCACN: return "NCACN";
|
||||
case EPM_PROTOCOL_NCALRPC: return "NCALRPC";
|
||||
case EPM_PROTOCOL_NCADG: return "NCADG";
|
||||
case EPM_PROTOCOL_IP: return "IP";
|
||||
case EPM_PROTOCOL_TCP: return "TCP";
|
||||
case EPM_PROTOCOL_NETBIOS: return "NetBIOS";
|
||||
case EPM_PROTOCOL_SMB: return "SMB";
|
||||
case EPM_PROTOCOL_PIPE: return "PIPE";
|
||||
case EPM_PROTOCOL_UNIX_DS: return "Unix";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
static void add_epm_entry(TALLOC_CTX *mem_ctx, const char *annotation, struct epm_tower *t)
|
||||
{
|
||||
struct dcerpc_binding *bd;
|
||||
int i;
|
||||
NTSTATUS status;
|
||||
GtkTreeIter toweriter;
|
||||
|
||||
status = dcerpc_binding_from_tower(mem_ctx, t, &bd);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(mainwin, "Error creating binding from tower", status);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Don't show UUID's */
|
||||
ZERO_STRUCT(bd->object);
|
||||
|
||||
gtk_tree_store_append(store_eps, &toweriter, NULL);
|
||||
gtk_tree_store_set(store_eps, &toweriter, 0, strdup(annotation), 1, strdup(dcerpc_binding_string(mem_ctx, bd)), 2, t, -1);
|
||||
|
||||
for (i = 0; i < t->num_floors; i++) {
|
||||
const char *data;
|
||||
struct dcerpc_syntax_id syntax;
|
||||
GtkTreeIter iter;
|
||||
gtk_tree_store_append(store_eps, &iter, &toweriter);
|
||||
|
||||
dcerpc_floor_get_lhs_data(&t->floors[i], &syntax);
|
||||
if (t->floors[i].lhs.protocol == EPM_PROTOCOL_UUID) {
|
||||
data = GUID_string(mem_ctx, &syntax.uuid);
|
||||
} else {
|
||||
data = dcerpc_floor_get_rhs_data(mem_ctx, &t->floors[i]);
|
||||
}
|
||||
|
||||
gtk_tree_store_set(store_eps, &iter, 0, get_protocol_name(t->floors[i].lhs.protocol), 1, data, -1);
|
||||
}
|
||||
}
|
||||
|
||||
static void refresh_eps(void)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct epm_Lookup r;
|
||||
struct GUID uuid;
|
||||
struct rpc_if_id_t iface;
|
||||
struct policy_handle handle;
|
||||
TALLOC_CTX *mem_ctx = talloc_init("dump");
|
||||
|
||||
talloc_free(eps_ctx);
|
||||
|
||||
ZERO_STRUCT(handle);
|
||||
|
||||
r.in.inquiry_type = 0;
|
||||
r.in.object = &uuid;
|
||||
r.in.interface_id = &iface;
|
||||
r.in.vers_option = 0;
|
||||
r.in.entry_handle = r.out.entry_handle = &handle;
|
||||
r.in.max_ents = 10;
|
||||
|
||||
gtk_tree_store_clear(store_eps);
|
||||
|
||||
eps_ctx = talloc_init("current endpoint list data");
|
||||
|
||||
do {
|
||||
int i;
|
||||
ZERO_STRUCT(uuid);
|
||||
ZERO_STRUCT(iface);
|
||||
|
||||
status = dcerpc_epm_Lookup(epmapper_pipe, eps_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status) || r.out.result != 0) {
|
||||
break;
|
||||
}
|
||||
for (i=0;i<*r.out.num_ents;i++) {
|
||||
add_epm_entry(mem_ctx, r.out.entries[i].annotation, &r.out.entries[i].tower->tower);
|
||||
}
|
||||
|
||||
} while (NT_STATUS_IS_OK(status) &&
|
||||
r.out.result == 0 &&
|
||||
*r.out.num_ents == r.in.max_ents);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(mainwin, "Error adding endpoint mapper entry", status);
|
||||
talloc_free(mem_ctx);
|
||||
return;
|
||||
}
|
||||
talloc_free(mem_ctx);
|
||||
}
|
||||
|
||||
static void on_refresh_clicked (GtkButton *btn, gpointer user_data)
|
||||
{
|
||||
refresh_eps();
|
||||
}
|
||||
|
||||
static void on_connect_clicked(GtkButton *btn, gpointer user_data)
|
||||
{
|
||||
NTSTATUS status;
|
||||
TALLOC_CTX *mem_ctx = talloc_init("connect");
|
||||
|
||||
epmapper_pipe = gtk_connect_rpc_interface(mem_ctx, &dcerpc_table_epmapper);
|
||||
if (epmapper_pipe == NULL)
|
||||
return;
|
||||
|
||||
gtk_widget_set_sensitive( mnu_refresh, True );
|
||||
|
||||
refresh_eps();
|
||||
|
||||
status = dcerpc_secondary_context(epmapper_pipe, &mgmt_pipe, &dcerpc_table_mgmt);
|
||||
|
||||
if (NT_STATUS_IS_ERR(status)) {
|
||||
mgmt_pipe = NULL;
|
||||
gtk_show_ntstatus(NULL, "Error connecting to mgmt interface over secondary connection", status);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean on_eps_select(GtkTreeSelection *selection,
|
||||
GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data)
|
||||
{
|
||||
NTSTATUS status;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
|
||||
if (mgmt_pipe == NULL)
|
||||
return FALSE;
|
||||
|
||||
mem_ctx = talloc_init("eps");
|
||||
|
||||
{
|
||||
/* Do an InqStats call */
|
||||
struct mgmt_inq_stats r;
|
||||
|
||||
r.in.max_count = MGMT_STATS_ARRAY_MAX_SIZE;
|
||||
r.in.unknown = 0;
|
||||
|
||||
status = dcerpc_mgmt_inq_stats(mgmt_pipe, mem_ctx, &r);
|
||||
if (NT_STATUS_IS_ERR(status)) {
|
||||
gtk_show_ntstatus(NULL, "Error inquiring statistics", status);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (r.out.statistics->count != MGMT_STATS_ARRAY_MAX_SIZE) {
|
||||
printf("Unexpected array size %d\n", r.out.statistics->count);
|
||||
return False;
|
||||
}
|
||||
|
||||
gtk_label_set_text(GTK_LABEL(lbl_calls_in), talloc_asprintf(mem_ctx, "%6d", r.out.statistics->statistics[MGMT_STATS_CALLS_IN]));
|
||||
gtk_label_set_text(GTK_LABEL(lbl_calls_out), talloc_asprintf(mem_ctx, "%6d", r.out.statistics->statistics[MGMT_STATS_CALLS_OUT]));
|
||||
gtk_label_set_text(GTK_LABEL(lbl_pkts_in), talloc_asprintf(mem_ctx, "%6d", r.out.statistics->statistics[MGMT_STATS_PKTS_IN]));
|
||||
gtk_label_set_text(GTK_LABEL(lbl_pkts_out), talloc_asprintf(mem_ctx, "%6d", r.out.statistics->statistics[MGMT_STATS_PKTS_OUT]));
|
||||
}
|
||||
|
||||
{
|
||||
struct mgmt_inq_princ_name r;
|
||||
int i;
|
||||
|
||||
gtk_list_store_clear(store_princ_names);
|
||||
|
||||
for (i=0;i<100;i++) {
|
||||
r.in.authn_proto = i; /* DCERPC_AUTH_TYPE_* */
|
||||
r.in.princ_name_size = 100;
|
||||
|
||||
status = dcerpc_mgmt_inq_princ_name(mgmt_pipe, mem_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
continue;
|
||||
}
|
||||
if (W_ERROR_IS_OK(r.out.result)) {
|
||||
GtkTreeIter iter;
|
||||
const char *name = gensec_get_name_by_authtype(i);
|
||||
char *protocol;
|
||||
if (name) {
|
||||
protocol = talloc_asprintf(mem_ctx, "%u (%s)", i, name);
|
||||
} else {
|
||||
protocol = talloc_asprintf(mem_ctx, "%u", i);
|
||||
}
|
||||
gtk_list_store_append(store_princ_names, &iter);
|
||||
gtk_list_store_set(store_princ_names, &iter,
|
||||
0, protocol,
|
||||
1, r.out.princ_name,
|
||||
-1);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static GtkWidget* create_mainwindow (void)
|
||||
{
|
||||
GtkWidget *mainwindow;
|
||||
GtkWidget *vbox1, *vbox2, *vbox3;
|
||||
GtkWidget *menubar1;
|
||||
GtkWidget *menuitem1;
|
||||
GtkWidget *menuitem1_menu;
|
||||
GtkWidget *quit1;
|
||||
GtkWidget *menuitem4;
|
||||
GtkWidget *menuitem4_menu;
|
||||
GtkWidget *mnu_connect;
|
||||
GtkWidget *treeview_princ_names;
|
||||
GtkWidget *about1;
|
||||
GtkWidget *hbox2;
|
||||
GtkWidget *scrolledwindow1;
|
||||
GtkWidget *frame1;
|
||||
GtkWidget *tree_eps;
|
||||
GtkTreeViewColumn *curcol;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkWidget *statusbar;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
accel_group = gtk_accel_group_new ();
|
||||
|
||||
mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (mainwindow), "Gtk+ Endpoint Mapper Viewer");
|
||||
|
||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_widget_show (vbox1);
|
||||
gtk_container_add (GTK_CONTAINER (mainwindow), vbox1);
|
||||
|
||||
menubar1 = gtk_menu_bar_new ();
|
||||
gtk_widget_show (menubar1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
|
||||
|
||||
menuitem1 = gtk_menu_item_new_with_mnemonic ("_File");
|
||||
gtk_widget_show (menuitem1);
|
||||
gtk_container_add (GTK_CONTAINER (menubar1), menuitem1);
|
||||
|
||||
menuitem1_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu);
|
||||
|
||||
mnu_connect = gtk_menu_item_new_with_mnemonic ("_Connect");
|
||||
gtk_container_add(GTK_CONTAINER(menuitem1_menu), mnu_connect);
|
||||
|
||||
mnu_refresh = gtk_menu_item_new_with_mnemonic ("_Refresh");
|
||||
gtk_container_add(GTK_CONTAINER(menuitem1_menu), mnu_refresh);
|
||||
gtk_widget_set_sensitive( mnu_refresh, False );
|
||||
|
||||
quit1 = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), quit1);
|
||||
|
||||
menuitem4 = gtk_menu_item_new_with_mnemonic ("_Help");
|
||||
gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);
|
||||
|
||||
menuitem4_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu);
|
||||
|
||||
about1 = gtk_menu_item_new_with_mnemonic ("_About");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), about1);
|
||||
|
||||
hbox2 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (vbox1), hbox2);
|
||||
|
||||
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX(hbox2), scrolledwindow1, TRUE, TRUE, 0);
|
||||
|
||||
tree_eps = gtk_tree_view_new ();
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_eps), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Binding String");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_eps), curcol);
|
||||
|
||||
store_eps = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(tree_eps), GTK_TREE_MODEL(store_eps));
|
||||
g_object_unref(store_eps);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow1), tree_eps);
|
||||
|
||||
gtk_tree_selection_set_select_function (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_eps)), on_eps_select, NULL, NULL);
|
||||
|
||||
vbox2 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (hbox2), vbox2);
|
||||
|
||||
frame1 = gtk_frame_new("Interface");
|
||||
gtk_container_add (GTK_CONTAINER(vbox2), frame1);
|
||||
|
||||
vbox3 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (frame1), vbox3);
|
||||
gtk_container_add (GTK_CONTAINER (vbox3), lbl_iface_uuid = gtk_label_new(""));
|
||||
gtk_container_add (GTK_CONTAINER (vbox3), lbl_iface_version = gtk_label_new(""));
|
||||
gtk_container_add (GTK_CONTAINER (vbox3), lbl_iface_name = gtk_label_new(""));
|
||||
|
||||
frame1 = gtk_frame_new("Statistics");
|
||||
gtk_container_add (GTK_CONTAINER(vbox2), frame1);
|
||||
|
||||
table_statistics = gtk_table_new(4, 2, TRUE);
|
||||
gtk_container_add (GTK_CONTAINER(frame1), table_statistics);
|
||||
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), gtk_label_new("Calls In: "), 0, 1, 0, 1);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), lbl_calls_in = gtk_label_new(""), 1, 2, 0, 1);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), gtk_label_new("Calls Out: "), 0, 1, 1, 2);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), lbl_calls_out = gtk_label_new(""), 1, 2, 1, 2);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), gtk_label_new("Packets In: "), 0, 1, 2, 3);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), lbl_pkts_in = gtk_label_new(""), 1, 2, 2, 3);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), gtk_label_new("Packets Out: "), 0, 1, 3, 4);
|
||||
gtk_table_attach_defaults (GTK_TABLE(table_statistics), lbl_pkts_out = gtk_label_new(""), 1, 2, 3, 4);
|
||||
|
||||
frame1 = gtk_frame_new("Authentication");
|
||||
gtk_container_add (GTK_CONTAINER(vbox2), frame1);
|
||||
|
||||
treeview_princ_names = gtk_tree_view_new();
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Protocol");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_princ_names), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Principal Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_princ_names), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER(frame1), treeview_princ_names);
|
||||
|
||||
store_princ_names = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview_princ_names), GTK_TREE_MODEL(store_princ_names));
|
||||
g_object_unref(store_princ_names);
|
||||
|
||||
statusbar = gtk_statusbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0);
|
||||
|
||||
g_signal_connect ((gpointer) quit1, "activate",
|
||||
G_CALLBACK (on_quit1_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) about1, "activate",
|
||||
G_CALLBACK (on_about1_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_connect, "activate",
|
||||
G_CALLBACK (on_connect_clicked),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_refresh, "activate",
|
||||
G_CALLBACK (on_refresh_clicked),
|
||||
NULL);
|
||||
|
||||
gtk_window_add_accel_group (GTK_WINDOW (mainwindow), accel_group);
|
||||
|
||||
return mainwindow;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
lp_load();
|
||||
setup_logging(argv[0], DEBUG_STDERR);
|
||||
|
||||
dcerpc_init();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
mainwin = create_mainwindow();
|
||||
gtk_widget_show_all(mainwin);
|
||||
|
||||
return gtk_event_loop();
|
||||
}
|
@ -1,989 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
GTK+ registry frontend
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004-2005
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "lib/registry/registry.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "lib/events/events.h"
|
||||
#include "lib/registry/reg_backend_rpc.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
|
||||
static GtkTreeStore *store_keys;
|
||||
static GtkListStore *store_vals;
|
||||
static GtkWidget *tree_keys;
|
||||
static GtkWidget *tree_vals;
|
||||
static GtkWidget *mainwin;
|
||||
static GtkWidget *mnu_add_key, *mnu_set_value, *mnu_del_key, *mnu_del_value, *mnu_find;
|
||||
static TALLOC_CTX *mem_ctx; /* FIXME: Split up */
|
||||
|
||||
static GtkWidget *save;
|
||||
static GtkWidget *save_as;
|
||||
static GtkWidget* create_openfilewin (void);
|
||||
static GtkWidget* create_savefilewin (void);
|
||||
struct registry_context *registry = NULL;
|
||||
struct registry_key *current_key = NULL;
|
||||
|
||||
static GtkWidget* create_FindDialog (void)
|
||||
{
|
||||
GtkWidget *FindDialog;
|
||||
GtkWidget *dialog_vbox2;
|
||||
GtkWidget *vbox1;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *label6;
|
||||
GtkWidget *entry_pattern;
|
||||
GtkWidget *frame3;
|
||||
GtkWidget *alignment3;
|
||||
GtkWidget *vbox2;
|
||||
GtkWidget *checkbutton1;
|
||||
GtkWidget *checkbutton2;
|
||||
GtkWidget *checkbutton3;
|
||||
GtkWidget *label7;
|
||||
GtkWidget *dialog_action_area2;
|
||||
GtkWidget *cancelbutton2;
|
||||
GtkWidget *okbutton2;
|
||||
|
||||
FindDialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (FindDialog), "Find Key or Value");
|
||||
gtk_window_set_resizable (GTK_WINDOW (FindDialog), FALSE);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (FindDialog), GDK_WINDOW_TYPE_HINT_DIALOG);
|
||||
|
||||
dialog_vbox2 = GTK_DIALOG (FindDialog)->vbox;
|
||||
|
||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox1, TRUE, TRUE, 0);
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
|
||||
|
||||
label6 = gtk_label_new ("Find String");
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), label6, FALSE, FALSE, 0);
|
||||
|
||||
entry_pattern = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), entry_pattern, TRUE, TRUE, 0);
|
||||
|
||||
frame3 = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), frame3, TRUE, TRUE, 0);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_NONE);
|
||||
|
||||
alignment3 = gtk_alignment_new (0.5, 0.5, 1, 1);
|
||||
gtk_container_add (GTK_CONTAINER (frame3), alignment3);
|
||||
gtk_alignment_set_padding (GTK_ALIGNMENT (alignment3), 0, 0, 12, 0);
|
||||
|
||||
vbox2 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (alignment3), vbox2);
|
||||
|
||||
checkbutton1 = gtk_check_button_new_with_mnemonic ("_Key Names");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), checkbutton1, FALSE, FALSE, 0);
|
||||
|
||||
checkbutton2 = gtk_check_button_new_with_mnemonic ("_Value Names");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), checkbutton2, FALSE, FALSE, 0);
|
||||
|
||||
checkbutton3 = gtk_check_button_new_with_mnemonic ("Value _Data");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), checkbutton3, FALSE, FALSE, 0);
|
||||
|
||||
label7 = gtk_label_new ("<b>Search in</b>");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame3), label7);
|
||||
gtk_label_set_use_markup (GTK_LABEL (label7), TRUE);
|
||||
|
||||
dialog_action_area2 = GTK_DIALOG (FindDialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (FindDialog), cancelbutton2, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton2 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (FindDialog), okbutton2, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show_all (dialog_vbox2);
|
||||
|
||||
return FindDialog;
|
||||
}
|
||||
|
||||
static GtkWidget* create_SetValueDialog (GtkWidget **entry_name, GtkWidget **entry_type, GtkWidget **entry_data)
|
||||
{
|
||||
GtkWidget *SetValueDialog;
|
||||
GtkWidget *dialog_vbox1;
|
||||
GtkWidget *table1;
|
||||
GtkWidget *label3;
|
||||
GtkWidget *label4;
|
||||
GtkWidget *label5;
|
||||
GtkWidget *entry_value_name;
|
||||
GtkWidget *value_data;
|
||||
GtkWidget *combo_data_type;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *cancelbutton1;
|
||||
GtkWidget *okbutton1;
|
||||
|
||||
SetValueDialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (SetValueDialog), "Set Registry Value");
|
||||
gtk_window_set_position (GTK_WINDOW (SetValueDialog), GTK_WIN_POS_CENTER);
|
||||
gtk_window_set_resizable (GTK_WINDOW (SetValueDialog), FALSE);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (SetValueDialog), GDK_WINDOW_TYPE_HINT_DIALOG);
|
||||
|
||||
dialog_vbox1 = GTK_DIALOG (SetValueDialog)->vbox;
|
||||
|
||||
table1 = gtk_table_new (3, 2, FALSE);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), table1, TRUE, TRUE, 0);
|
||||
|
||||
label3 = gtk_label_new ("Value name:");
|
||||
gtk_table_attach (GTK_TABLE (table1), label3, 0, 1, 0, 1,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label3), 0, 0.5);
|
||||
|
||||
label4 = gtk_label_new ("Data Type:");
|
||||
gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label4), 0, 0.5);
|
||||
|
||||
label5 = gtk_label_new ("Data:");
|
||||
gtk_table_attach (GTK_TABLE (table1), label5, 0, 1, 2, 3,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
|
||||
|
||||
*entry_name = entry_value_name = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_value_name, 1, 2, 0, 1,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
*entry_data = value_data = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), value_data, 1, 2, 2, 3,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
*entry_type = combo_data_type = gtk_combo_box_new_text ();
|
||||
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_data_type), "REG_NONE");
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_data_type), "REG_SZ");
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_data_type), "REG_EXPAND_SZ");
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_data_type), "REG_BINARY");
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_data_type), "REG_DWORD_LE");
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_data_type), "REG_DWORD_BE");
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table1), combo_data_type, 1, 2, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (GTK_FILL), 0, 0);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (SetValueDialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (SetValueDialog), cancelbutton1, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (SetValueDialog), okbutton1, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show_all (dialog_vbox1);
|
||||
|
||||
return SetValueDialog;
|
||||
}
|
||||
|
||||
static GtkWidget* create_NewKeyDialog (GtkWidget **name_entry)
|
||||
{
|
||||
GtkWidget *NewKeyDialog;
|
||||
GtkWidget *dialog_vbox2;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *label6;
|
||||
GtkWidget *entry_key_name;
|
||||
GtkWidget *dialog_action_area2;
|
||||
GtkWidget *cancelbutton2;
|
||||
GtkWidget *okbutton2;
|
||||
|
||||
NewKeyDialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (NewKeyDialog), "New Registry Key");
|
||||
gtk_window_set_position (GTK_WINDOW (NewKeyDialog), GTK_WIN_POS_CENTER);
|
||||
gtk_window_set_resizable (GTK_WINDOW (NewKeyDialog), FALSE);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (NewKeyDialog), GDK_WINDOW_TYPE_HINT_DIALOG);
|
||||
|
||||
dialog_vbox2 = GTK_DIALOG (NewKeyDialog)->vbox;
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox2), hbox1, TRUE, TRUE, 0);
|
||||
|
||||
label6 = gtk_label_new ("Name:");
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), label6, FALSE, FALSE, 0);
|
||||
|
||||
entry_key_name = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), entry_key_name, TRUE, TRUE, 0);
|
||||
|
||||
dialog_action_area2 = GTK_DIALOG (NewKeyDialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
|
||||
|
||||
*name_entry = entry_key_name;
|
||||
|
||||
cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (NewKeyDialog), cancelbutton2, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton2 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (NewKeyDialog), okbutton2, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show_all (dialog_vbox2);
|
||||
|
||||
return NewKeyDialog;
|
||||
}
|
||||
|
||||
static void expand_key(GtkTreeView *treeview, GtkTreeIter *parent, GtkTreePath *arg2)
|
||||
{
|
||||
GtkTreeIter firstiter, iter, tmpiter;
|
||||
struct registry_key *k, *sub;
|
||||
char *name;
|
||||
WERROR error;
|
||||
int i;
|
||||
|
||||
gtk_tree_model_iter_children(GTK_TREE_MODEL(store_keys), &firstiter, parent);
|
||||
|
||||
/* See if this row has ever had a name gtk_tree_store_set()'ed to it.
|
||||
If not, read the directory contents */
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(store_keys), &firstiter, 0, &name, -1);
|
||||
|
||||
if(name) return;
|
||||
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(store_keys), parent, 1, &k, -1);
|
||||
|
||||
g_assert(k);
|
||||
|
||||
for(i = 0; W_ERROR_IS_OK(error = reg_key_get_subkey_by_index(mem_ctx, k, i, &sub)); i++) {
|
||||
uint32_t count;
|
||||
/* Replace the blank child with the first directory entry
|
||||
You may be tempted to remove the blank child node and then
|
||||
append a new one. Don't. If you remove the blank child
|
||||
node GTK gets confused and won't expand the parent row. */
|
||||
|
||||
if(i == 0) {
|
||||
iter = firstiter;
|
||||
} else {
|
||||
gtk_tree_store_append(store_keys, &iter, parent);
|
||||
}
|
||||
gtk_tree_store_set (store_keys,
|
||||
&iter,
|
||||
0,
|
||||
sub->name,
|
||||
1,
|
||||
sub,
|
||||
-1);
|
||||
|
||||
if(W_ERROR_IS_OK(reg_key_num_subkeys(sub, &count)) && count > 0)
|
||||
gtk_tree_store_append(store_keys, &tmpiter, &iter);
|
||||
}
|
||||
|
||||
if(!W_ERROR_EQUAL(error, WERR_NO_MORE_ITEMS)) {
|
||||
gtk_show_werror(mainwin, "While enumerating subkeys", error);
|
||||
}
|
||||
}
|
||||
|
||||
static void registry_load_hive(struct registry_key *root)
|
||||
{
|
||||
GtkTreeIter iter, tmpiter;
|
||||
gtk_list_store_clear(store_vals);
|
||||
/* Add the root */
|
||||
gtk_tree_store_append(store_keys, &iter, NULL);
|
||||
gtk_tree_store_set (store_keys,
|
||||
&iter,
|
||||
0,
|
||||
root->name?root->name:"",
|
||||
1,
|
||||
root,
|
||||
-1);
|
||||
|
||||
gtk_tree_store_append(store_keys, &tmpiter, &iter);
|
||||
|
||||
gtk_widget_set_sensitive( save, True );
|
||||
gtk_widget_set_sensitive( save_as, True );
|
||||
}
|
||||
|
||||
static void registry_load_root(void)
|
||||
{
|
||||
struct registry_key *root;
|
||||
uint32_t i = 0;
|
||||
if(!registry) return;
|
||||
|
||||
gtk_list_store_clear(store_vals);
|
||||
gtk_tree_store_clear(store_keys);
|
||||
|
||||
for(i = HKEY_CLASSES_ROOT; i <= HKEY_PERFORMANCE_NLSTEXT; i++)
|
||||
{
|
||||
if (!W_ERROR_IS_OK(reg_get_predefined_key(registry, i, &root))) { continue; }
|
||||
|
||||
registry_load_hive(root);
|
||||
}
|
||||
}
|
||||
|
||||
static void on_open_file_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkWidget *openfilewin;
|
||||
gint result;
|
||||
char *filename, *tmp;
|
||||
struct registry_key *root;
|
||||
WERROR error;
|
||||
|
||||
openfilewin = create_openfilewin();
|
||||
|
||||
result = gtk_dialog_run(GTK_DIALOG(openfilewin));
|
||||
|
||||
switch(result) {
|
||||
case GTK_RESPONSE_OK:
|
||||
filename = strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(openfilewin)));
|
||||
error = reg_open_hive(NULL, user_data, filename, NULL, NULL, &root);
|
||||
if(!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(mainwin, "Error while opening hive", error);
|
||||
break;
|
||||
}
|
||||
|
||||
tmp = g_strdup_printf("Registry Editor - %s", filename);
|
||||
gtk_window_set_title (GTK_WINDOW (mainwin), tmp);
|
||||
g_free(tmp);
|
||||
gtk_tree_store_clear(store_keys);
|
||||
registry_load_hive(root);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
gtk_widget_destroy(openfilewin);
|
||||
}
|
||||
|
||||
static void on_open_gconf_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
struct registry_key *root;
|
||||
WERROR error = reg_open_hive(NULL, "gconf", NULL, NULL, NULL, &root);
|
||||
if(!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(mainwin, "Error while opening GConf", error);
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (mainwin), "Registry Editor - GConf");
|
||||
|
||||
gtk_tree_store_clear(store_keys);
|
||||
registry_load_hive(root);
|
||||
}
|
||||
|
||||
static void on_open_local_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
WERROR error = reg_open_local(NULL, ®istry, NULL, NULL);
|
||||
if(!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(mainwin, "Error while opening local registry", error);
|
||||
return;
|
||||
}
|
||||
registry_load_root();
|
||||
}
|
||||
|
||||
static void on_open_remote_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
char *tmp;
|
||||
GtkWidget *rpcwin = GTK_WIDGET(gtk_rpc_binding_dialog_new(NULL));
|
||||
gint result = gtk_dialog_run(GTK_DIALOG(rpcwin));
|
||||
WERROR error;
|
||||
struct cli_credentials *creds;
|
||||
|
||||
if(result != GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
gtk_widget_destroy(rpcwin);
|
||||
return;
|
||||
}
|
||||
|
||||
creds = cli_credentials_init(mem_ctx);
|
||||
cli_credentials_guess(creds);
|
||||
cli_credentials_set_gtk_callbacks(creds);
|
||||
|
||||
error = reg_open_remote(®istry,
|
||||
NULL,
|
||||
creds,
|
||||
gtk_rpc_binding_dialog_get_binding_string(GTK_RPC_BINDING_DIALOG(rpcwin), mem_ctx),
|
||||
NULL);
|
||||
|
||||
if(!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(mainwin, "Error while opening remote registry", error);
|
||||
gtk_widget_destroy(rpcwin);
|
||||
return;
|
||||
}
|
||||
|
||||
tmp = g_strdup_printf("Registry Editor - Remote Registry at %s", gtk_rpc_binding_dialog_get_host(GTK_RPC_BINDING_DIALOG(rpcwin)));
|
||||
gtk_window_set_title (GTK_WINDOW (mainwin), tmp);
|
||||
g_free(tmp);
|
||||
|
||||
registry_load_root();
|
||||
|
||||
|
||||
gtk_widget_destroy(rpcwin);
|
||||
}
|
||||
|
||||
|
||||
static void on_save_as_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
gint result;
|
||||
WERROR error = WERR_OK;
|
||||
GtkWidget *savefilewin = create_savefilewin();
|
||||
result = gtk_dialog_run(GTK_DIALOG(savefilewin));
|
||||
switch(result) {
|
||||
case GTK_RESPONSE_OK:
|
||||
/* FIXME: error = reg_dump(registry, gtk_file_selection_get_filename(GTK_FILE_SELECTION(savefilewin))); */
|
||||
if(!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(mainwin, "Error while saving as", error);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
gtk_widget_destroy(savefilewin);
|
||||
}
|
||||
|
||||
|
||||
static void on_quit_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
||||
static void on_delete_value_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
WERROR error;
|
||||
GtkTreeIter iter;
|
||||
const char *value;
|
||||
|
||||
if (!gtk_tree_selection_get_selected (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_vals)), NULL, &iter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(store_vals), &iter, 0, &value, -1);
|
||||
|
||||
error = reg_del_value(current_key, value);
|
||||
|
||||
if (!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(NULL, "Error while deleting value", error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void on_delete_key_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
WERROR error;
|
||||
GtkTreeIter iter, parentiter;
|
||||
struct registry_key *parent_key;
|
||||
|
||||
if (!gtk_tree_selection_get_selected (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_keys)), NULL, &iter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gtk_tree_model_iter_parent(GTK_TREE_MODEL(store_keys), &parentiter, &iter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(store_keys), &parentiter, 1, &parent_key, -1);
|
||||
|
||||
error = reg_key_del(parent_key, current_key->name);
|
||||
|
||||
if (!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(NULL, "Error while deleting key", error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void on_add_key_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkWidget *entry;
|
||||
GtkDialog *addwin = GTK_DIALOG(create_NewKeyDialog(&entry));
|
||||
gint result = gtk_dialog_run(addwin);
|
||||
|
||||
if (result == GTK_RESPONSE_OK)
|
||||
{
|
||||
struct registry_key *newkey;
|
||||
WERROR error = reg_key_add_name(mem_ctx, current_key, gtk_entry_get_text(GTK_ENTRY(entry)), 0, NULL, &newkey);
|
||||
|
||||
if (!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(NULL, "Error while adding key", error);
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_destroy(GTK_WIDGET(addwin));
|
||||
}
|
||||
|
||||
static void on_value_activate(GtkTreeView *treeview, GtkTreePath *arg1,
|
||||
GtkTreeViewColumn *arg2, gpointer user_data)
|
||||
{
|
||||
GtkWidget *entry_name, *entry_type, *entry_value;
|
||||
GtkDialog *addwin = GTK_DIALOG(create_SetValueDialog(&entry_name, &entry_type, &entry_value));
|
||||
GtkTreeIter iter;
|
||||
struct registry_value *value;
|
||||
gint result;
|
||||
|
||||
gtk_tree_model_get_iter(GTK_TREE_MODEL(store_vals), &iter, arg1);
|
||||
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(store_vals), &iter, 3, &value, -1);
|
||||
|
||||
gtk_widget_set_sensitive(entry_name, FALSE);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_name), value->name);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry_value), reg_val_data_string(mem_ctx, value->data_type, &value->data));
|
||||
gtk_combo_box_set_active(GTK_COMBO_BOX(entry_type), value->data_type);
|
||||
|
||||
result = gtk_dialog_run(addwin);
|
||||
if (result == GTK_RESPONSE_OK)
|
||||
{
|
||||
WERROR error;
|
||||
DATA_BLOB data;
|
||||
uint32_t data_type;
|
||||
|
||||
reg_string_to_val(mem_ctx,str_regtype(gtk_combo_box_get_active(GTK_COMBO_BOX(entry_type))), gtk_entry_get_text(GTK_ENTRY(entry_value)), &data_type, &data);
|
||||
|
||||
error = reg_val_set(current_key, gtk_entry_get_text(GTK_ENTRY(entry_name)), data_type, data);
|
||||
|
||||
if (!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(NULL, "Error while setting value", error);
|
||||
}
|
||||
}
|
||||
gtk_widget_destroy(GTK_WIDGET(addwin));
|
||||
}
|
||||
|
||||
static void on_set_value_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkWidget *entry_name, *entry_type, *entry_value;
|
||||
GtkDialog *addwin = GTK_DIALOG(create_SetValueDialog(&entry_name, &entry_type, &entry_value));
|
||||
gint result = gtk_dialog_run(addwin);
|
||||
if (result == GTK_RESPONSE_OK)
|
||||
{
|
||||
WERROR error;
|
||||
uint32_t data_type;
|
||||
DATA_BLOB data;
|
||||
|
||||
reg_string_to_val(mem_ctx,str_regtype(gtk_combo_box_get_active(GTK_COMBO_BOX(entry_type))), gtk_entry_get_text(GTK_ENTRY(entry_value)), &data_type, &data);
|
||||
|
||||
error = reg_val_set(current_key, gtk_entry_get_text(GTK_ENTRY(entry_name)), data_type, data);
|
||||
|
||||
if (!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(NULL, "Error while setting value", error);
|
||||
}
|
||||
}
|
||||
gtk_widget_destroy(GTK_WIDGET(addwin));
|
||||
}
|
||||
|
||||
static void on_find_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkDialog *findwin = GTK_DIALOG(create_FindDialog());
|
||||
/*gint result = gtk_dialog_run(findwin);
|
||||
FIXME */
|
||||
gtk_widget_destroy(GTK_WIDGET(findwin));
|
||||
}
|
||||
|
||||
static void on_about_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gregedit"));
|
||||
gtk_dialog_run(aboutwin);
|
||||
gtk_widget_destroy(GTK_WIDGET(aboutwin));
|
||||
}
|
||||
|
||||
static gboolean on_key_activate(GtkTreeSelection *selection,
|
||||
GtkTreeModel *model,
|
||||
GtkTreePath *path,
|
||||
gboolean path_currently_selected,
|
||||
gpointer data)
|
||||
{
|
||||
int i;
|
||||
struct registry_key *k;
|
||||
struct registry_value *val;
|
||||
WERROR error;
|
||||
GtkTreeIter parent;
|
||||
|
||||
gtk_widget_set_sensitive(mnu_add_key, !path_currently_selected);
|
||||
gtk_widget_set_sensitive(mnu_set_value, !path_currently_selected);
|
||||
gtk_widget_set_sensitive(mnu_del_key, !path_currently_selected);
|
||||
gtk_widget_set_sensitive(mnu_del_value, !path_currently_selected);
|
||||
gtk_widget_set_sensitive(mnu_find, !path_currently_selected);
|
||||
|
||||
if(path_currently_selected) {
|
||||
current_key = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gtk_tree_model_get_iter(GTK_TREE_MODEL(store_keys), &parent, path);
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(store_keys), &parent, 1, &k, -1);
|
||||
|
||||
current_key = k;
|
||||
|
||||
if (!k) return FALSE;
|
||||
|
||||
gtk_list_store_clear(store_vals);
|
||||
|
||||
for(i = 0; W_ERROR_IS_OK(error = reg_key_get_value_by_index(mem_ctx, k, i, &val)); i++) {
|
||||
GtkTreeIter iter;
|
||||
gtk_list_store_append(store_vals, &iter);
|
||||
gtk_list_store_set (store_vals,
|
||||
&iter,
|
||||
0,
|
||||
val->name,
|
||||
1,
|
||||
str_regtype(val->data_type),
|
||||
2,
|
||||
reg_val_data_string(mem_ctx, val->data_type, &val->data),
|
||||
3,
|
||||
val,
|
||||
-1);
|
||||
}
|
||||
|
||||
if(!W_ERROR_EQUAL(error, WERR_NO_MORE_ITEMS)) {
|
||||
gtk_show_werror(mainwin, "Error while enumerating values", error);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GtkWidget* create_mainwindow(void)
|
||||
{
|
||||
GtkWidget *vbox1;
|
||||
GtkWidget *menubar;
|
||||
GtkWidget *menu_file;
|
||||
GtkWidget *menu_file_menu;
|
||||
GtkWidget *open_nt4;
|
||||
GtkWidget *open_ldb;
|
||||
GtkWidget *open_w95;
|
||||
GtkWidget *open_gconf;
|
||||
GtkWidget *open_remote;
|
||||
GtkWidget *open_local;
|
||||
GtkWidget *separatormenuitem1;
|
||||
GtkWidget *quit;
|
||||
GtkWidget *men_key;
|
||||
GtkWidget *men_key_menu;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *curcol;
|
||||
GtkWidget *help;
|
||||
GtkWidget *help_menu;
|
||||
GtkWidget *about;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *scrolledwindow1;
|
||||
GtkWidget *scrolledwindow2;
|
||||
GtkWidget *statusbar;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
accel_group = gtk_accel_group_new ();
|
||||
|
||||
mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (mainwin), "Registry editor");
|
||||
gtk_window_set_default_size (GTK_WINDOW (mainwin), 642, 562);
|
||||
|
||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (mainwin), vbox1);
|
||||
|
||||
menubar = gtk_menu_bar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), menubar, FALSE, FALSE, 0);
|
||||
|
||||
menu_file = gtk_menu_item_new_with_mnemonic ("_File");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menu_file);
|
||||
|
||||
menu_file_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_file), menu_file_menu);
|
||||
|
||||
open_local = gtk_menu_item_new_with_mnemonic ("Open _Local");
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), open_local);
|
||||
g_signal_connect ((gpointer) open_local, "activate",
|
||||
G_CALLBACK (on_open_local_activate), NULL);
|
||||
|
||||
if(reg_has_backend("rpc")) {
|
||||
open_remote = gtk_menu_item_new_with_mnemonic ("Open _Remote");
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), open_remote);
|
||||
|
||||
g_signal_connect ((gpointer) open_remote, "activate",
|
||||
G_CALLBACK (on_open_remote_activate),
|
||||
NULL);
|
||||
}
|
||||
|
||||
separatormenuitem1 = gtk_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), separatormenuitem1);
|
||||
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
|
||||
|
||||
|
||||
if(reg_has_backend("nt4")) {
|
||||
open_nt4 = gtk_image_menu_item_new_with_mnemonic("Open _NT4 file");
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), open_nt4);
|
||||
|
||||
g_signal_connect(open_nt4, "activate",
|
||||
G_CALLBACK (on_open_file_activate),
|
||||
discard_const_p(char, "nt4"));
|
||||
}
|
||||
|
||||
if(reg_has_backend("w95")) {
|
||||
open_w95 = gtk_image_menu_item_new_with_mnemonic("Open Win_9x file");
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), open_w95);
|
||||
|
||||
g_signal_connect (open_w95, "activate",
|
||||
G_CALLBACK (on_open_file_activate),
|
||||
discard_const_p(char, "w95"));
|
||||
}
|
||||
|
||||
if(reg_has_backend("gconf")) {
|
||||
open_gconf = gtk_image_menu_item_new_with_mnemonic ("Open _GConf");
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), open_gconf);
|
||||
|
||||
g_signal_connect ((gpointer) open_gconf, "activate",
|
||||
G_CALLBACK (on_open_gconf_activate),
|
||||
NULL);
|
||||
}
|
||||
|
||||
if(reg_has_backend("ldb")) {
|
||||
open_ldb = gtk_image_menu_item_new_with_mnemonic("Open _LDB file");
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), open_ldb);
|
||||
|
||||
g_signal_connect(open_ldb, "activate",
|
||||
G_CALLBACK (on_open_file_activate),
|
||||
discard_const_p(char, "ldb"));
|
||||
}
|
||||
|
||||
separatormenuitem1 = gtk_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), separatormenuitem1);
|
||||
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
|
||||
|
||||
save = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group);
|
||||
gtk_widget_set_sensitive( save, False );
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), save);
|
||||
|
||||
save_as = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group);
|
||||
gtk_widget_set_sensitive( save_as, False );
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), save_as);
|
||||
|
||||
separatormenuitem1 = gtk_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), separatormenuitem1);
|
||||
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
|
||||
|
||||
quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menu_file_menu), quit);
|
||||
|
||||
men_key = gtk_menu_item_new_with_mnemonic ("_Key");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), men_key);
|
||||
|
||||
men_key_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (men_key), men_key_menu);
|
||||
|
||||
mnu_add_key = gtk_image_menu_item_new_with_mnemonic("Add _Subkey");
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mnu_add_key), gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU));
|
||||
|
||||
gtk_widget_set_sensitive(mnu_add_key, False);
|
||||
gtk_container_add (GTK_CONTAINER (men_key_menu), mnu_add_key);
|
||||
|
||||
mnu_set_value = gtk_image_menu_item_new_with_mnemonic("Set _Value");
|
||||
gtk_widget_set_sensitive(mnu_set_value, False);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mnu_set_value), gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU));
|
||||
gtk_container_add (GTK_CONTAINER (men_key_menu), mnu_set_value);
|
||||
|
||||
mnu_find = gtk_image_menu_item_new_from_stock ("gtk-find", accel_group);
|
||||
gtk_widget_set_sensitive(mnu_find, False);
|
||||
gtk_container_add (GTK_CONTAINER (men_key_menu), mnu_find);
|
||||
|
||||
mnu_del_key = gtk_image_menu_item_new_with_mnemonic ("Delete Key");
|
||||
gtk_widget_set_sensitive(mnu_del_key, False);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mnu_del_value), gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_MENU));
|
||||
gtk_container_add (GTK_CONTAINER (men_key_menu), mnu_del_key);
|
||||
|
||||
mnu_del_value = gtk_image_menu_item_new_with_mnemonic ("Delete Value");
|
||||
gtk_widget_set_sensitive(mnu_del_value, False);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mnu_del_value), gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_MENU));
|
||||
gtk_container_add (GTK_CONTAINER (men_key_menu), mnu_del_value);
|
||||
|
||||
|
||||
help = gtk_menu_item_new_with_mnemonic ("_Help");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), help);
|
||||
|
||||
help_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (help), help_menu);
|
||||
|
||||
about = gtk_menu_item_new_with_mnemonic ("_About");
|
||||
gtk_container_add (GTK_CONTAINER (help_menu), about);
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
|
||||
|
||||
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow1, TRUE, TRUE, 0);
|
||||
|
||||
tree_keys = gtk_tree_view_new ();
|
||||
|
||||
/* Column names */
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_keys), curcol);
|
||||
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow1), tree_keys);
|
||||
store_keys = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(tree_keys), GTK_TREE_MODEL(store_keys));
|
||||
g_object_unref(store_keys);
|
||||
|
||||
gtk_tree_selection_set_select_function (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_keys)), on_key_activate, NULL, NULL);
|
||||
|
||||
g_signal_connect ((gpointer) tree_keys, "row-expanded",
|
||||
G_CALLBACK (expand_key),
|
||||
NULL);
|
||||
|
||||
|
||||
scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow2, TRUE, TRUE, 0);
|
||||
|
||||
tree_vals = gtk_tree_view_new ();
|
||||
/* Column names */
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_vals), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Type");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_vals), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Value");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_vals), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 2);
|
||||
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow2), tree_vals);
|
||||
|
||||
store_vals = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(tree_vals), GTK_TREE_MODEL(store_vals));
|
||||
g_object_unref(store_vals);
|
||||
|
||||
statusbar = gtk_statusbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0);
|
||||
gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), FALSE);
|
||||
|
||||
g_signal_connect ((gpointer) save_as, "activate",
|
||||
G_CALLBACK (on_save_as_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) quit, "activate",
|
||||
G_CALLBACK (on_quit_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_add_key, "activate",
|
||||
G_CALLBACK (on_add_key_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_set_value, "activate",
|
||||
G_CALLBACK (on_set_value_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_find, "activate",
|
||||
G_CALLBACK (on_find_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_del_key, "activate",
|
||||
G_CALLBACK (on_delete_key_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_del_value, "activate",
|
||||
G_CALLBACK (on_delete_value_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) about, "activate",
|
||||
G_CALLBACK (on_about_activate),
|
||||
NULL);
|
||||
|
||||
g_signal_connect ((gpointer) tree_vals, "row-activated",
|
||||
G_CALLBACK (on_value_activate),
|
||||
NULL);
|
||||
|
||||
|
||||
gtk_window_add_accel_group (GTK_WINDOW (mainwin), accel_group);
|
||||
|
||||
return mainwin;
|
||||
}
|
||||
|
||||
static GtkWidget* create_openfilewin (void)
|
||||
{
|
||||
GtkWidget *openfilewin;
|
||||
GtkWidget *ok_button;
|
||||
GtkWidget *cancel_button;
|
||||
|
||||
openfilewin = gtk_file_selection_new ("Select File");
|
||||
gtk_container_set_border_width (GTK_CONTAINER (openfilewin), 10);
|
||||
|
||||
ok_button = GTK_FILE_SELECTION (openfilewin)->ok_button;
|
||||
GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
|
||||
|
||||
cancel_button = GTK_FILE_SELECTION (openfilewin)->cancel_button;
|
||||
GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
|
||||
|
||||
return openfilewin;
|
||||
}
|
||||
|
||||
static GtkWidget* create_savefilewin (void)
|
||||
{
|
||||
GtkWidget *savefilewin;
|
||||
GtkWidget *ok_button;
|
||||
GtkWidget *cancel_button;
|
||||
|
||||
savefilewin = gtk_file_selection_new ("Select File");
|
||||
gtk_container_set_border_width (GTK_CONTAINER (savefilewin), 10);
|
||||
|
||||
ok_button = GTK_FILE_SELECTION (savefilewin)->ok_button;
|
||||
GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
|
||||
|
||||
cancel_button = GTK_FILE_SELECTION (savefilewin)->cancel_button;
|
||||
GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
|
||||
|
||||
return savefilewin;
|
||||
}
|
||||
|
||||
static int gregedit_load_defaults(void)
|
||||
{
|
||||
WERROR error = reg_open_local(NULL, ®istry, NULL, NULL);
|
||||
if(!W_ERROR_IS_OK(error)) {
|
||||
gtk_show_werror(mainwin, "Error while loading local registry", error);
|
||||
return -1;
|
||||
}
|
||||
registry_load_root();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int ret;
|
||||
|
||||
lp_load();
|
||||
setup_logging(argv[0], DEBUG_STDERR);
|
||||
|
||||
mem_ctx = talloc_init("gregedit");
|
||||
|
||||
registry_init();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
mainwin = create_mainwindow();
|
||||
gtk_widget_show_all(mainwin);
|
||||
|
||||
ret = gregedit_load_defaults();
|
||||
if (ret != 0) goto failed;
|
||||
|
||||
ret = gtk_event_loop();
|
||||
|
||||
failed:
|
||||
talloc_free(mem_ctx);
|
||||
return ret;
|
||||
}
|
@ -1,462 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
GTK+ Windows crontab frontend
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "librpc/gen_ndr/ndr_atsvc_c.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "gtk/common/select.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
|
||||
static struct dcerpc_pipe *at_pipe = NULL;
|
||||
static GtkWidget *mainwin;
|
||||
static GtkListStore *store_jobs;
|
||||
static GtkWidget *tasks;
|
||||
static GtkWidget *new_task;
|
||||
static GtkWidget *entry_cmd;
|
||||
static GtkWidget *entry_repeat_weekly;
|
||||
static GtkWidget *entry_repeat_monthly;
|
||||
static GtkWidget *delete;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
static void on_job_select(GtkTreeSelection *sel, gpointer data)
|
||||
{
|
||||
gtk_widget_set_sensitive(delete, gtk_tree_selection_get_selected(sel, NULL, NULL));
|
||||
}
|
||||
|
||||
|
||||
static void on_connect_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
at_pipe = gtk_connect_rpc_interface(talloc_autofree_context(), &dcerpc_table_atsvc);
|
||||
|
||||
if (!at_pipe)
|
||||
return;
|
||||
|
||||
gtk_widget_set_sensitive (new_task, TRUE);
|
||||
update_joblist();
|
||||
}
|
||||
|
||||
static void on_quit_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
talloc_free(at_pipe);
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static GtkWidget* create_new_job_dialog (void);
|
||||
|
||||
void on_new_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkWidget *d = create_new_job_dialog();
|
||||
gint result = gtk_dialog_run(GTK_DIALOG(d));
|
||||
struct atsvc_JobAdd r;
|
||||
struct atsvc_JobInfo job;
|
||||
NTSTATUS status;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
switch(result) {
|
||||
case GTK_RESPONSE_OK:
|
||||
break;
|
||||
default:
|
||||
gtk_widget_destroy(d);
|
||||
return;
|
||||
}
|
||||
mem_ctx = talloc_init("add_job");
|
||||
|
||||
job.job_time = 0; /* FIXME */
|
||||
job.days_of_month = 0; /* FIXME */
|
||||
job.days_of_week = 0; /* FIXME */
|
||||
job.flags = 0; /* FIXME */
|
||||
job.command = gtk_entry_get_text(GTK_ENTRY(entry_cmd));
|
||||
r.in.servername = dcerpc_server_name(at_pipe);
|
||||
r.in.job_info = &job;
|
||||
|
||||
status = dcerpc_atsvc_JobAdd(at_pipe, mem_ctx, &r);
|
||||
if(!NT_STATUS_IS_OK(status)) {
|
||||
talloc_free(mem_ctx);
|
||||
gtk_show_ntstatus(mainwin, "Error while adding job", status);
|
||||
return;
|
||||
}
|
||||
|
||||
talloc_free(mem_ctx);
|
||||
gtk_widget_destroy(d);
|
||||
|
||||
d = gtk_message_dialog_new (GTK_WINDOW(mainwin), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Job Id: %d", *r.out.job_id);
|
||||
gtk_dialog_run(GTK_DIALOG(d));
|
||||
gtk_widget_destroy(d);
|
||||
update_joblist();
|
||||
}
|
||||
|
||||
|
||||
void on_delete_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tasks));
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(store_jobs);
|
||||
GtkTreeIter iter;
|
||||
gint id;
|
||||
|
||||
if (gtk_tree_selection_get_selected (sel, &model, &iter))
|
||||
{
|
||||
struct atsvc_JobDel r;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
NTSTATUS status;
|
||||
gtk_tree_model_get (model, &iter, 1, &id, -1);
|
||||
|
||||
r.in.servername = dcerpc_server_name(at_pipe);
|
||||
r.in.min_job_id = r.in.max_job_id = id;
|
||||
|
||||
mem_ctx = talloc_init("del_job");
|
||||
status = dcerpc_atsvc_JobDel(at_pipe, mem_ctx, &r);
|
||||
talloc_free(mem_ctx);
|
||||
if(!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(mainwin, "Error deleting job", status);
|
||||
return;
|
||||
}
|
||||
|
||||
update_joblist();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void on_about_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gwcrontab"));
|
||||
gtk_dialog_run(aboutwin);
|
||||
gtk_widget_destroy(GTK_WIDGET(aboutwin));
|
||||
}
|
||||
|
||||
static GtkWidget* create_mainwindow (void)
|
||||
{
|
||||
GtkWidget *mainwindow;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *menubar;
|
||||
GtkWidget *menuitem4;
|
||||
GtkWidget *menuitem4_menu;
|
||||
GtkWidget *mnu_connect;
|
||||
GtkWidget *separatormenuitem1;
|
||||
GtkWidget *quit;
|
||||
GtkWidget *task;
|
||||
GtkWidget *task_menu;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *curcol;
|
||||
GtkWidget *menuitem7;
|
||||
GtkWidget *menuitem7_menu;
|
||||
GtkWidget *about;
|
||||
GtkWidget *scrolledwindow;
|
||||
GtkWidget *statusbar;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
accel_group = gtk_accel_group_new ();
|
||||
|
||||
mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size (GTK_WINDOW (mainwindow), 642, 562);
|
||||
gtk_window_set_title (GTK_WINDOW (mainwindow), "Task Scheduler");
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (mainwindow), vbox);
|
||||
|
||||
menubar = gtk_menu_bar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
|
||||
|
||||
menuitem4 = gtk_menu_item_new_with_mnemonic ("_File");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem4);
|
||||
|
||||
menuitem4_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu);
|
||||
|
||||
mnu_connect = gtk_menu_item_new_with_mnemonic ("_Connect");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), mnu_connect);
|
||||
g_signal_connect ((gpointer) mnu_connect, "activate",
|
||||
G_CALLBACK (on_connect_activate), NULL);
|
||||
|
||||
separatormenuitem1 = gtk_separator_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), separatormenuitem1);
|
||||
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
|
||||
|
||||
quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), quit);
|
||||
|
||||
task = gtk_menu_item_new_with_mnemonic ("_Task");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), task);
|
||||
|
||||
task_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (task), task_menu);
|
||||
|
||||
new_task = gtk_menu_item_new_with_mnemonic ("_New");
|
||||
gtk_container_add (GTK_CONTAINER (task_menu), new_task);
|
||||
gtk_widget_set_sensitive (new_task, FALSE);
|
||||
|
||||
delete = gtk_menu_item_new_with_mnemonic ("_Delete");
|
||||
gtk_widget_set_sensitive(delete, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (task_menu), delete);
|
||||
|
||||
menuitem7 = gtk_menu_item_new_with_mnemonic ("_Help");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem7);
|
||||
|
||||
menuitem7_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem7), menuitem7_menu);
|
||||
|
||||
about = gtk_menu_item_new_with_mnemonic ("_About");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem7_menu), about);
|
||||
|
||||
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0);
|
||||
|
||||
tasks = gtk_tree_view_new ();
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Status");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tasks), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "ID");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tasks), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Day");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tasks), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 2);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Time");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tasks), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 3);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Command Line");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tasks), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 4);
|
||||
|
||||
store_jobs = gtk_list_store_new(5, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(tasks), GTK_TREE_MODEL(store_jobs));
|
||||
g_object_unref(store_jobs);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow), tasks);
|
||||
|
||||
g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(tasks)) , "changed", G_CALLBACK (on_job_select), NULL);
|
||||
|
||||
statusbar = gtk_statusbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
g_signal_connect ((gpointer) quit, "activate",
|
||||
G_CALLBACK (on_quit_activate), NULL);
|
||||
g_signal_connect ((gpointer) new_task, "activate",
|
||||
G_CALLBACK (on_new_activate), NULL);
|
||||
g_signal_connect ((gpointer) delete, "activate",
|
||||
G_CALLBACK (on_delete_activate), NULL);
|
||||
g_signal_connect ((gpointer) about, "activate",
|
||||
G_CALLBACK (on_about_activate), NULL);
|
||||
|
||||
gtk_window_add_accel_group (GTK_WINDOW (mainwindow), accel_group);
|
||||
|
||||
return mainwindow;
|
||||
}
|
||||
|
||||
void on_chk_weekly_toggled(GtkToggleButton *togglebutton, gpointer user_data)
|
||||
{
|
||||
gtk_widget_set_sensitive(entry_repeat_weekly, gtk_toggle_button_get_active(togglebutton));
|
||||
}
|
||||
|
||||
|
||||
void on_chk_monthly_toggled(GtkToggleButton *togglebutton, gpointer user_data)
|
||||
{
|
||||
gtk_widget_set_sensitive(entry_repeat_monthly, gtk_toggle_button_get_active(togglebutton));
|
||||
}
|
||||
|
||||
|
||||
static GtkWidget *create_new_job_dialog (void)
|
||||
{
|
||||
GtkWidget *new_job_dialog;
|
||||
GtkWidget *dialog_vbox1;
|
||||
GtkWidget *frame1;
|
||||
GtkWidget *table1;
|
||||
GtkWidget *label4;
|
||||
GtkWidget *cal_day;
|
||||
GtkWidget *label3;
|
||||
GtkWidget *entry_time;
|
||||
GtkWidget *chk_weekly;
|
||||
GtkWidget *chk_monthly;
|
||||
GtkWidget *label1;
|
||||
GtkWidget *frame2;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *label5;
|
||||
GtkWidget *label2;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *cancelbutton1;
|
||||
GtkWidget *okbutton1;
|
||||
|
||||
new_job_dialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (new_job_dialog), "New job");
|
||||
|
||||
dialog_vbox1 = GTK_DIALOG (new_job_dialog)->vbox;
|
||||
|
||||
frame1 = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), frame1, TRUE, TRUE, 0);
|
||||
|
||||
table1 = gtk_table_new (4, 2, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (frame1), table1);
|
||||
|
||||
label4 = gtk_label_new ("Time:");
|
||||
gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label4), 0, 0.5);
|
||||
|
||||
cal_day = gtk_calendar_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), cal_day, 1, 2, 0, 1,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (GTK_FILL), 0, 0);
|
||||
gtk_calendar_set_display_options (GTK_CALENDAR (cal_day),
|
||||
GTK_CALENDAR_SHOW_HEADING
|
||||
| GTK_CALENDAR_SHOW_DAY_NAMES);
|
||||
|
||||
label3 = gtk_label_new ("Date");
|
||||
gtk_table_attach (GTK_TABLE (table1), label3, 0, 1, 0, 1,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label3), 0, 0.5);
|
||||
|
||||
entry_time = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_time, 1, 2, 1, 2,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_weekly = gtk_check_button_new_with_mnemonic ("Repeat weekly");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_weekly, 0, 1, 2, 3,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
entry_repeat_weekly = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_repeat_weekly, 1, 2, 2, 3,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_monthly = gtk_check_button_new_with_mnemonic ("Repeat monthly");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_monthly, 0, 1, 3, 4,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
entry_repeat_monthly = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_repeat_monthly, 1, 2, 3, 4,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
label1 = gtk_label_new ("Moment");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame1), label1);
|
||||
|
||||
frame2 = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), frame2, TRUE, TRUE, 0);
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (frame2), hbox1);
|
||||
|
||||
label5 = gtk_label_new ("Command to execute");
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), label5, TRUE, TRUE, 0);
|
||||
|
||||
entry_cmd = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), entry_cmd, TRUE, TRUE, 0);
|
||||
|
||||
label2 = gtk_label_new ("Command");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame2), label2);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (new_job_dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (new_job_dialog), cancelbutton1, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (new_job_dialog), okbutton1, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
g_signal_connect ((gpointer) chk_weekly, "toggled",
|
||||
G_CALLBACK (on_chk_weekly_toggled),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) chk_monthly, "toggled",
|
||||
G_CALLBACK (on_chk_monthly_toggled),
|
||||
NULL);
|
||||
|
||||
return new_job_dialog;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
lp_load();
|
||||
setup_logging(argv[0], DEBUG_STDERR);
|
||||
|
||||
dcerpc_init();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
mainwin = create_mainwindow();
|
||||
gtk_widget_show_all(mainwin);
|
||||
|
||||
return gtk_event_loop();
|
||||
}
|
@ -1,443 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
GTK+ SAM frontend
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "librpc/gen_ndr/ndr_samr_c.h"
|
||||
#include "gtk/common/select.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
|
||||
struct policy_handle sam_handle;
|
||||
struct dcerpc_pipe *sam_pipe = NULL;
|
||||
static struct policy_handle domain_handle;
|
||||
GtkWidget *mainwin;
|
||||
GtkWidget *seldomain;
|
||||
GtkListStore *store_users;
|
||||
GtkListStore *store_groups;
|
||||
static GtkWidget *mnu_disconnect;
|
||||
|
||||
static void update_grouplist(void)
|
||||
{
|
||||
if(!sam_pipe) return;
|
||||
//FIXME
|
||||
}
|
||||
|
||||
static void update_userlist(void)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct samr_EnumDomainUsers r;
|
||||
uint32_t resume_handle=0;
|
||||
int i;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
|
||||
if(!sam_pipe) return;
|
||||
|
||||
gtk_list_store_clear(store_users);
|
||||
|
||||
mem_ctx = talloc_init("update_userlist");
|
||||
r.in.domain_handle = &domain_handle;
|
||||
r.in.resume_handle = &resume_handle;
|
||||
r.in.acct_flags = 0;
|
||||
r.in.max_size = (uint32_t)100;
|
||||
r.out.resume_handle = &resume_handle;
|
||||
|
||||
status = dcerpc_samr_EnumDomainUsers(sam_pipe, mem_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(mainwin, "While enumerating domain users", status);
|
||||
talloc_free(mem_ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!r.out.sam || r.out.sam->count == 0) {
|
||||
talloc_free(mem_ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
for (i=0;i<r.out.sam->count;i++) {
|
||||
GtkTreeIter iter;
|
||||
gtk_list_store_append(store_users, &iter);
|
||||
gtk_list_store_set (store_users, &iter,
|
||||
0, r.out.sam->entries[i].name.string,
|
||||
1, r.out.sam->entries[i].name.string,
|
||||
2, 0, -1);
|
||||
|
||||
/* FIXME: Query user info */
|
||||
|
||||
// if (!test_OpenUser(sam_pipe, mem_ctx, &sam_handle, r.out.sam->entries[i].idx)) {
|
||||
// ret = False;
|
||||
// }
|
||||
}
|
||||
talloc_free(mem_ctx);
|
||||
}
|
||||
|
||||
static void on_new1_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
/* FIXME */
|
||||
}
|
||||
|
||||
static void on_select_domain_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkSelectDomainDialog *d;
|
||||
gint result;
|
||||
d = GTK_SELECT_DOMAIN_DIALOG(gtk_select_domain_dialog_new(sam_pipe));
|
||||
result = gtk_dialog_run(GTK_DIALOG(d));
|
||||
switch(result) {
|
||||
case GTK_RESPONSE_OK:
|
||||
break;
|
||||
default:
|
||||
gtk_widget_destroy(GTK_WIDGET(d));
|
||||
return;
|
||||
}
|
||||
domain_handle = gtk_select_domain_dialog_get_handle(d);
|
||||
|
||||
update_userlist();
|
||||
update_grouplist();
|
||||
|
||||
gtk_widget_destroy(GTK_WIDGET(d));
|
||||
}
|
||||
|
||||
static void connect_sam(void)
|
||||
{
|
||||
struct samr_Connect r;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
NTSTATUS status;
|
||||
|
||||
mem_ctx = talloc_init("gwsam_connect");
|
||||
|
||||
sam_pipe = gtk_connect_rpc_interface(talloc_autofree_context(), &dcerpc_table_samr);
|
||||
|
||||
if (!sam_pipe)
|
||||
return;
|
||||
|
||||
r.in.system_name = 0;
|
||||
r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
|
||||
r.out.connect_handle = &sam_handle;
|
||||
|
||||
status = dcerpc_samr_Connect(sam_pipe, mem_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
gtk_show_ntstatus(mainwin, "While running connect on SAMR", status);
|
||||
sam_pipe = NULL;
|
||||
talloc_free(mem_ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (seldomain, TRUE);
|
||||
gtk_widget_set_sensitive (mnu_disconnect, TRUE);
|
||||
|
||||
sam_pipe = talloc_reference(talloc_autofree_context(), sam_pipe);
|
||||
talloc_free(mem_ctx);
|
||||
}
|
||||
|
||||
static void on_connect_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
connect_sam();
|
||||
/* FIXME: Connect to default domain */
|
||||
}
|
||||
|
||||
static void on_disconnect_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
gtk_widget_set_sensitive (mnu_disconnect, FALSE);
|
||||
}
|
||||
|
||||
static void on_quit_activate (GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
talloc_free(sam_pipe);
|
||||
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void on_account_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
//FIXME
|
||||
}
|
||||
|
||||
|
||||
static void on_user_rights_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
//FIXME
|
||||
}
|
||||
|
||||
|
||||
static void on_audit_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
//FIXME
|
||||
}
|
||||
|
||||
|
||||
static void on_trust_relations_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
//FIXME
|
||||
}
|
||||
|
||||
|
||||
static void on_refresh_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
update_userlist();
|
||||
update_grouplist();
|
||||
}
|
||||
|
||||
|
||||
static void on_about_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gwsam"));
|
||||
gtk_dialog_run(aboutwin);
|
||||
gtk_widget_destroy(GTK_WIDGET(aboutwin));
|
||||
}
|
||||
|
||||
static GtkWidget* create_mainwindow (void)
|
||||
{
|
||||
GtkWidget *vbox1;
|
||||
GtkWidget *mnu_connect;
|
||||
GtkWidget *menubar;
|
||||
GtkWidget *menuitem1;
|
||||
GtkWidget *menuitem1_menu;
|
||||
GtkWidget *new1;
|
||||
GtkWidget *separatormenuitem1;
|
||||
GtkWidget *quit;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *curcol;
|
||||
GtkWidget *policies;
|
||||
GtkWidget *policies_menu;
|
||||
GtkWidget *account;
|
||||
GtkWidget *user_rights;
|
||||
GtkWidget *audit;
|
||||
GtkWidget *separator1;
|
||||
GtkWidget *trust_relations;
|
||||
GtkWidget *menuitem3;
|
||||
GtkWidget *menuitem3_menu;
|
||||
GtkWidget *refresh;
|
||||
GtkWidget *menuitem4;
|
||||
GtkWidget *menuitem4_menu;
|
||||
GtkWidget *about;
|
||||
GtkWidget *vpaned;
|
||||
GtkWidget *scrolledwindow1;
|
||||
GtkWidget *user_list;
|
||||
GtkWidget *scrolledwindow2;
|
||||
GtkWidget *group_list;
|
||||
GtkWidget *statusbar;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
accel_group = gtk_accel_group_new ();
|
||||
|
||||
mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size (GTK_WINDOW (mainwin), 642, 562);
|
||||
gtk_window_set_title (GTK_WINDOW (mainwin), "User Manager");
|
||||
|
||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (mainwin), vbox1);
|
||||
|
||||
menubar = gtk_menu_bar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), menubar, FALSE, FALSE, 0);
|
||||
|
||||
menuitem1 = gtk_menu_item_new_with_mnemonic ("_File");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem1);
|
||||
|
||||
menuitem1_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu);
|
||||
|
||||
mnu_connect = gtk_menu_item_new_with_mnemonic ("_Connect");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), mnu_connect);
|
||||
|
||||
mnu_disconnect = gtk_menu_item_new_with_mnemonic ("_Disconnect");
|
||||
gtk_widget_set_sensitive (mnu_disconnect, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), mnu_disconnect);
|
||||
|
||||
seldomain = gtk_menu_item_new_with_mnemonic("_Select Domain");
|
||||
gtk_widget_set_sensitive (seldomain, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), seldomain);
|
||||
|
||||
separatormenuitem1 = gtk_separator_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), separatormenuitem1);
|
||||
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
|
||||
|
||||
quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), quit);
|
||||
|
||||
menuitem1 = gtk_menu_item_new_with_mnemonic ("_User");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem1);
|
||||
gtk_widget_set_sensitive (menuitem1, FALSE);
|
||||
|
||||
menuitem1_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu);
|
||||
|
||||
new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem1_menu), new1);
|
||||
|
||||
policies = gtk_menu_item_new_with_mnemonic ("_Policies");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), policies);
|
||||
gtk_widget_set_sensitive (policies, FALSE);
|
||||
|
||||
policies_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (policies), policies_menu);
|
||||
|
||||
account = gtk_menu_item_new_with_mnemonic ("_Account...");
|
||||
gtk_container_add (GTK_CONTAINER (policies_menu), account);
|
||||
|
||||
user_rights = gtk_menu_item_new_with_mnemonic ("_User Rights...");
|
||||
gtk_container_add (GTK_CONTAINER (policies_menu), user_rights);
|
||||
|
||||
audit = gtk_menu_item_new_with_mnemonic ("A_udit...");
|
||||
gtk_container_add (GTK_CONTAINER (policies_menu), audit);
|
||||
|
||||
separator1 = gtk_separator_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (policies_menu), separator1);
|
||||
gtk_widget_set_sensitive (separator1, FALSE);
|
||||
|
||||
trust_relations = gtk_menu_item_new_with_mnemonic ("_Trust relations");
|
||||
gtk_container_add (GTK_CONTAINER (policies_menu), trust_relations);
|
||||
|
||||
menuitem3 = gtk_menu_item_new_with_mnemonic ("_View");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem3);
|
||||
|
||||
menuitem3_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menuitem3_menu);
|
||||
|
||||
refresh = gtk_image_menu_item_new_from_stock ("gtk-refresh", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem3_menu), refresh);
|
||||
gtk_widget_set_sensitive (refresh, FALSE);
|
||||
|
||||
menuitem4 = gtk_menu_item_new_with_mnemonic ("_Help");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem4);
|
||||
|
||||
menuitem4_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu);
|
||||
|
||||
about = gtk_menu_item_new_with_mnemonic ("_About");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), about);
|
||||
|
||||
vpaned = gtk_vpaned_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), vpaned, TRUE, TRUE, 0);
|
||||
|
||||
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_paned_pack1 (GTK_PANED (vpaned), scrolledwindow1, FALSE, TRUE);
|
||||
|
||||
user_list = gtk_tree_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow1), user_list);
|
||||
|
||||
curcol = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(curcol, "Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(curcol, "Description");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
curcol = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(curcol, "RID");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
store_users = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(user_list), GTK_TREE_MODEL(store_users));
|
||||
|
||||
scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_paned_pack2 (GTK_PANED (vpaned), scrolledwindow2, TRUE, TRUE);
|
||||
|
||||
group_list = gtk_tree_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow2), group_list);
|
||||
|
||||
curcol = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(curcol, "Name");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(curcol, "Description");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
curcol = gtk_tree_view_column_new();
|
||||
gtk_tree_view_column_set_title(curcol, "RID");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
store_groups = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(group_list), GTK_TREE_MODEL(store_groups));
|
||||
|
||||
statusbar = gtk_statusbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0);
|
||||
|
||||
g_signal_connect ((gpointer) new1, "activate",
|
||||
G_CALLBACK (on_new1_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) seldomain, "activate",
|
||||
G_CALLBACK (on_select_domain_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_connect, "activate",
|
||||
G_CALLBACK (on_connect_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) mnu_disconnect, "activate",
|
||||
G_CALLBACK (on_disconnect_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) quit, "activate",
|
||||
G_CALLBACK (on_quit_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) account, "activate",
|
||||
G_CALLBACK (on_account_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) user_rights, "activate",
|
||||
G_CALLBACK (on_user_rights_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) audit, "activate",
|
||||
G_CALLBACK (on_audit_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) trust_relations, "activate",
|
||||
G_CALLBACK (on_trust_relations_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) refresh, "activate",
|
||||
G_CALLBACK (on_refresh_activate),
|
||||
NULL);
|
||||
g_signal_connect ((gpointer) about, "activate",
|
||||
G_CALLBACK (on_about_activate),
|
||||
NULL);
|
||||
|
||||
gtk_window_add_accel_group (GTK_WINDOW (mainwin), accel_group);
|
||||
|
||||
return mainwin;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
lp_load();
|
||||
setup_logging(argv[0], DEBUG_STDERR);
|
||||
|
||||
dcerpc_init();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
mainwin = create_mainwindow();
|
||||
gtk_widget_show_all(mainwin);
|
||||
|
||||
return gtk_event_loop();
|
||||
}
|
@ -1,291 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
GTK+ SAM frontend
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2004
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
|
||||
GtkWidget* create_user_edit_dialog (void)
|
||||
{
|
||||
GtkWidget *user_edit_dialog;
|
||||
GtkWidget *dialog_vbox1;
|
||||
GtkWidget *notebook;
|
||||
GtkWidget *table1;
|
||||
GtkWidget *label4;
|
||||
GtkWidget *label5;
|
||||
GtkWidget *label6;
|
||||
GtkWidget *label7;
|
||||
int i;
|
||||
GtkWidget *label8;
|
||||
GtkWidget *chk_mustchange;
|
||||
GtkWidget *entry_fullname;
|
||||
GtkWidget *entry_description;
|
||||
GtkWidget *lbl_username;
|
||||
GtkWidget *entry_password;
|
||||
GtkWidget *entry_confirm_password;
|
||||
GtkWidget *chk_cannotchange;
|
||||
GtkWidget *chk_cannotexpire;
|
||||
GtkWidget *chk_disabled;
|
||||
GtkWidget *chk_lockedout;
|
||||
GtkWidget *label1;
|
||||
GtkWidget *hbox1;
|
||||
GtkWidget *scrolledwindow3;
|
||||
GtkWidget *treeview3;
|
||||
GtkWidget *vbox2;
|
||||
GtkWidget *btn_groupadd;
|
||||
GtkWidget *btn_groupdel;
|
||||
GtkWidget *scrolledwindow4;
|
||||
GtkWidget *treeview4;
|
||||
GtkWidget *label2;
|
||||
GtkWidget *vbox3;
|
||||
GtkWidget *frame1;
|
||||
GtkWidget *table2;
|
||||
GtkWidget *label12;
|
||||
GtkWidget *label13;
|
||||
GtkWidget *entry_profilepath;
|
||||
GtkWidget *entry_scriptname;
|
||||
GtkWidget *label10;
|
||||
GtkWidget *frame2;
|
||||
GtkWidget *table3;
|
||||
GtkWidget *label14;
|
||||
GtkWidget *entry_homedir;
|
||||
GtkWidget *chk_mapdrive;
|
||||
GtkWidget *combo_homedrive;
|
||||
GtkWidget *label11;
|
||||
GtkWidget *label3;
|
||||
GtkWidget *dialog_action_area1;
|
||||
GtkWidget *cancelbutton1;
|
||||
GtkWidget *applybutton1;
|
||||
GtkWidget *okbutton1;
|
||||
|
||||
user_edit_dialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (user_edit_dialog), "Edit User");
|
||||
|
||||
dialog_vbox1 = GTK_DIALOG (user_edit_dialog)->vbox;
|
||||
|
||||
notebook = gtk_notebook_new ();
|
||||
gtk_box_pack_start (GTK_BOX (dialog_vbox1), notebook, TRUE, TRUE, 0);
|
||||
|
||||
table1 = gtk_table_new (10, 2, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (notebook), table1);
|
||||
|
||||
label4 = gtk_label_new ("Username");
|
||||
gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 0, 1,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label4), 0, 0.5);
|
||||
|
||||
label5 = gtk_label_new ("Full name");
|
||||
gtk_table_attach (GTK_TABLE (table1), label5, 0, 1, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
|
||||
|
||||
label6 = gtk_label_new ("Description");
|
||||
gtk_table_attach (GTK_TABLE (table1), label6, 0, 1, 2, 3,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label6), 0, 0.5);
|
||||
|
||||
label7 = gtk_label_new ("Password");
|
||||
gtk_table_attach (GTK_TABLE (table1), label7, 0, 1, 3, 4,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5);
|
||||
|
||||
label8 = gtk_label_new ("Confirm password");
|
||||
gtk_table_attach (GTK_TABLE (table1), label8, 0, 1, 4, 5,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
|
||||
|
||||
chk_mustchange = gtk_check_button_new_with_mnemonic ("_User Must Change Password at Next Logon");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_mustchange, 1, 2, 5, 6,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
entry_fullname = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_fullname, 1, 2, 1, 2,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
entry_description = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_description, 1, 2, 2, 3,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
lbl_username = gtk_label_new ("");
|
||||
gtk_table_attach (GTK_TABLE (table1), lbl_username, 1, 2, 0, 1,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (lbl_username), 0, 0.5);
|
||||
|
||||
entry_password = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_password, 1, 2, 3, 4,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
entry_confirm_password = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table1), entry_confirm_password, 1, 2, 4, 5,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_cannotchange = gtk_check_button_new_with_mnemonic ("User Cannot Change Password");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_cannotchange, 1, 2, 6, 7,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_cannotexpire = gtk_check_button_new_with_mnemonic ("Password Never Expires");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_cannotexpire, 1, 2, 7, 8,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_disabled = gtk_check_button_new_with_mnemonic ("Account Disabled");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_disabled, 1, 2, 8, 9,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_lockedout = gtk_check_button_new_with_mnemonic ("Account Locked Out");
|
||||
gtk_table_attach (GTK_TABLE (table1), chk_lockedout, 1, 2, 9, 10,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
label1 = gtk_label_new ("Main");
|
||||
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0), label1);
|
||||
|
||||
hbox1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (notebook), hbox1);
|
||||
|
||||
scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow3, TRUE, TRUE, 0);
|
||||
|
||||
treeview3 = gtk_tree_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow3), treeview3);
|
||||
|
||||
vbox2 = gtk_vbox_new (TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0);
|
||||
|
||||
btn_groupadd = gtk_button_new_from_stock ("gtk-add");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), btn_groupadd, FALSE, FALSE, 0);
|
||||
|
||||
btn_groupdel = gtk_button_new_from_stock ("gtk-remove");
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), btn_groupdel, FALSE, FALSE, 0);
|
||||
|
||||
scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow4, TRUE, TRUE, 0);
|
||||
|
||||
treeview4 = gtk_tree_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow4), treeview4);
|
||||
|
||||
label2 = gtk_label_new ("Groups");
|
||||
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1), label2);
|
||||
|
||||
vbox3 = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (notebook), vbox3);
|
||||
|
||||
frame1 = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox3), frame1, TRUE, TRUE, 0);
|
||||
|
||||
table2 = gtk_table_new (2, 2, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (frame1), table2);
|
||||
|
||||
label12 = gtk_label_new ("User Profile Path:");
|
||||
gtk_table_attach (GTK_TABLE (table2), label12, 0, 1, 0, 1,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label12), 0, 0.5);
|
||||
|
||||
label13 = gtk_label_new ("Logon Script Name:");
|
||||
gtk_table_attach (GTK_TABLE (table2), label13, 0, 1, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label13), 0, 0.5);
|
||||
|
||||
entry_profilepath = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table2), entry_profilepath, 1, 2, 0, 1,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
entry_scriptname = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table2), entry_scriptname, 1, 2, 1, 2,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
label10 = gtk_label_new ("User Profiles");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame1), label10);
|
||||
|
||||
frame2 = gtk_frame_new (NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox3), frame2, TRUE, TRUE, 0);
|
||||
|
||||
table3 = gtk_table_new (2, 2, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (frame2), table3);
|
||||
|
||||
label14 = gtk_label_new ("Path");
|
||||
gtk_table_attach (GTK_TABLE (table3), label14, 0, 1, 0, 1,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
gtk_misc_set_alignment (GTK_MISC (label14), 0, 0.5);
|
||||
|
||||
entry_homedir = gtk_entry_new ();
|
||||
gtk_table_attach (GTK_TABLE (table3), entry_homedir, 1, 2, 0, 1,
|
||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
chk_mapdrive = gtk_check_button_new_with_mnemonic ("Map homedir to drive");
|
||||
gtk_table_attach (GTK_TABLE (table3), chk_mapdrive, 0, 1, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (0), 0, 0);
|
||||
|
||||
combo_homedrive = gtk_combo_box_new();
|
||||
gtk_table_attach (GTK_TABLE (table3), combo_homedrive, 1, 2, 1, 2,
|
||||
(GtkAttachOptions) (GTK_FILL),
|
||||
(GtkAttachOptions) (GTK_FILL), 0, 0);
|
||||
for(i = 'C'; i <= 'Z'; i++)
|
||||
{
|
||||
char drive[3];
|
||||
snprintf(drive, 3, "%c:", i);
|
||||
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_homedrive), drive);
|
||||
}
|
||||
|
||||
label11 = gtk_label_new ("Home Directory");
|
||||
gtk_frame_set_label_widget (GTK_FRAME (frame2), label11);
|
||||
|
||||
label3 = gtk_label_new ("Profile");
|
||||
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 2), label3);
|
||||
|
||||
dialog_action_area1 = GTK_DIALOG (user_edit_dialog)->action_area;
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
|
||||
|
||||
cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (user_edit_dialog), cancelbutton1, GTK_RESPONSE_CANCEL);
|
||||
GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
applybutton1 = gtk_button_new_from_stock ("gtk-apply");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (user_edit_dialog), applybutton1, GTK_RESPONSE_APPLY);
|
||||
GTK_WIDGET_SET_FLAGS (applybutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
|
||||
gtk_dialog_add_action_widget (GTK_DIALOG (user_edit_dialog), okbutton1, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show_all(dialog_vbox1);
|
||||
|
||||
return user_edit_dialog;
|
||||
}
|
@ -1,217 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
GTK+ Windows services management
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2006
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "librpc/gen_ndr/ndr_svcctl_c.h"
|
||||
#include "gtk/common/gtk-smb.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
#include "gtk/common/select.h"
|
||||
|
||||
static struct dcerpc_pipe *svcctl_pipe = NULL;
|
||||
static GtkWidget *mainwin;
|
||||
static GtkListStore *store_services;
|
||||
static GtkWidget *services;
|
||||
static GtkWidget *new_service, *delete_service, *edit_service, *start_service, *stop_service;
|
||||
|
||||
static void on_connect_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
TALLOC_CTX *mem_ctx = talloc_init("gwsvcctl_connect");
|
||||
|
||||
svcctl_pipe = gtk_connect_rpc_interface(mem_ctx, &dcerpc_table_svcctl);
|
||||
if (svcctl_pipe == NULL)
|
||||
return;
|
||||
|
||||
gtk_widget_set_sensitive (new_service, TRUE);
|
||||
|
||||
/* FIXME: Fetch list of services and display */
|
||||
}
|
||||
|
||||
static void on_quit_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
talloc_free(svcctl_pipe);
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void on_about_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
{
|
||||
GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gwcrontab"));
|
||||
gtk_dialog_run(aboutwin);
|
||||
gtk_widget_destroy(GTK_WIDGET(aboutwin));
|
||||
}
|
||||
|
||||
static GtkWidget* create_mainwindow (void)
|
||||
{
|
||||
GtkWidget *mainwindow;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *menubar;
|
||||
GtkWidget *menuitem4;
|
||||
GtkWidget *menuitem4_menu;
|
||||
GtkWidget *mnu_connect;
|
||||
GtkWidget *separatormenuitem1;
|
||||
GtkWidget *quit;
|
||||
GtkWidget *service;
|
||||
GtkWidget *service_menu;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *curcol;
|
||||
GtkWidget *menuitem7;
|
||||
GtkWidget *menuitem7_menu;
|
||||
GtkWidget *about;
|
||||
GtkWidget *scrolledwindow;
|
||||
GtkWidget *statusbar;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
accel_group = gtk_accel_group_new ();
|
||||
|
||||
mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size (GTK_WINDOW (mainwindow), 642, 562);
|
||||
gtk_window_set_title (GTK_WINDOW (mainwindow), "Service Management");
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (mainwindow), vbox);
|
||||
|
||||
menubar = gtk_menu_bar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
|
||||
|
||||
menuitem4 = gtk_menu_item_new_with_mnemonic ("_File");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem4);
|
||||
|
||||
menuitem4_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu);
|
||||
|
||||
mnu_connect = gtk_menu_item_new_with_mnemonic ("_Connect");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), mnu_connect);
|
||||
g_signal_connect ((gpointer) mnu_connect, "activate",
|
||||
G_CALLBACK (on_connect_activate), NULL);
|
||||
|
||||
separatormenuitem1 = gtk_separator_menu_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), separatormenuitem1);
|
||||
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
|
||||
|
||||
quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
|
||||
gtk_container_add (GTK_CONTAINER (menuitem4_menu), quit);
|
||||
|
||||
service = gtk_menu_item_new_with_mnemonic ("_Service");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), service);
|
||||
|
||||
service_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (service), service_menu);
|
||||
|
||||
new_service = gtk_menu_item_new_with_mnemonic ("_New");
|
||||
gtk_container_add (GTK_CONTAINER (service_menu), new_service);
|
||||
gtk_widget_set_sensitive (new_service, FALSE);
|
||||
|
||||
start_service = gtk_menu_item_new_with_mnemonic ("_Start");
|
||||
gtk_container_add (GTK_CONTAINER (service_menu), start_service);
|
||||
gtk_widget_set_sensitive (start_service, FALSE);
|
||||
|
||||
stop_service = gtk_menu_item_new_with_mnemonic ("St_op");
|
||||
gtk_container_add (GTK_CONTAINER (service_menu), stop_service);
|
||||
gtk_widget_set_sensitive (stop_service, FALSE);
|
||||
|
||||
edit_service = gtk_menu_item_new_with_mnemonic ("_Edit");
|
||||
gtk_container_add (GTK_CONTAINER (service_menu), edit_service);
|
||||
gtk_widget_set_sensitive (edit_service, FALSE);
|
||||
|
||||
delete_service = gtk_menu_item_new_with_mnemonic ("_Delete");
|
||||
gtk_widget_set_sensitive(delete_service, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (service_menu), delete_service);
|
||||
|
||||
menuitem7 = gtk_menu_item_new_with_mnemonic ("_Help");
|
||||
gtk_container_add (GTK_CONTAINER (menubar), menuitem7);
|
||||
|
||||
menuitem7_menu = gtk_menu_new ();
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem7), menuitem7_menu);
|
||||
|
||||
about = gtk_menu_item_new_with_mnemonic ("_About");
|
||||
gtk_container_add (GTK_CONTAINER (menuitem7_menu), about);
|
||||
|
||||
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0);
|
||||
|
||||
services = gtk_tree_view_new ();
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Status");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(services), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "ID");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(services), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Day");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(services), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 2);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Time");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(services), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 3);
|
||||
|
||||
curcol = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title(curcol, "Command Line");
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_column_pack_start(curcol, renderer, True);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(services), curcol);
|
||||
gtk_tree_view_column_add_attribute(curcol, renderer, "text", 4);
|
||||
|
||||
store_services = gtk_list_store_new(5, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(services), GTK_TREE_MODEL(store_services));
|
||||
g_object_unref(store_services);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow), services);
|
||||
|
||||
statusbar = gtk_statusbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, FALSE, 0);
|
||||
|
||||
g_signal_connect ((gpointer) quit, "activate",
|
||||
G_CALLBACK (on_quit_activate), NULL);
|
||||
g_signal_connect ((gpointer) about, "activate",
|
||||
G_CALLBACK (on_about_activate), NULL);
|
||||
|
||||
gtk_window_add_accel_group (GTK_WINDOW (mainwindow), accel_group);
|
||||
|
||||
return mainwindow;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
lp_load();
|
||||
setup_logging(argv[0], DEBUG_STDERR);
|
||||
|
||||
dcerpc_init();
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
mainwin = create_mainwindow();
|
||||
gtk_widget_show_all(mainwin);
|
||||
|
||||
return gtk_event_loop();
|
||||
}
|
@ -33,6 +33,8 @@ gtk/common/gtk-smb.h: gtk-smb.h
|
||||
gtk/common/select.h: gtk/select.h
|
||||
librpc/ndr/libndr.h: ndr.h
|
||||
lib/registry/registry.h: registry.h
|
||||
lib/registry/reg_backend_rpc.h: registry_rpc.h
|
||||
lib/registry/registry_proto.h: registry/proto.h
|
||||
libcli/util/nterr.h: core/nterr.h
|
||||
libcli/util/doserr.h: core/doserr.h
|
||||
libcli/util/nt_status.h: core/ntstatus.h
|
||||
@ -43,9 +45,20 @@ librpc/gen_ndr/dcerpc.h: gen_ndr/dcerpc.h
|
||||
librpc/gen_ndr/netlogon.h: gen_ndr/netlogon.h
|
||||
librpc/gen_ndr/ndr_misc.h: gen_ndr/ndr_misc.h
|
||||
librpc/gen_ndr/ndr_dcerpc.h: gen_ndr/ndr_dcerpc.h
|
||||
librpc/gen_ndr/mgmt.h: dcerpc/mgmt.h
|
||||
librpc/gen_ndr/ndr_mgmt.h: dcerpc/ndr_mgmt.h
|
||||
librpc/gen_ndr/ndr_mgmt_c.h: dcerpc/ndr_mgmt_c.h
|
||||
librpc/gen_ndr/epmapper.h: dcerpc/epmapper.h
|
||||
librpc/gen_ndr/ndr_epmapper.h: dcerpc/ndr_epmapper.h
|
||||
librpc/gen_ndr/ndr_epmapper_c.h: dcerpc/ndr_epmapper_c.h
|
||||
librpc/gen_ndr/ndr_atsvc.h: dcerpc/ndr_atsvc.h
|
||||
librpc/gen_ndr/atsvc.h: dcerpc/atsvc.h
|
||||
librpc/gen_ndr/ndr_atsvc_c.h: dcerpc/ndr_atsvc_c.h
|
||||
librpc/gen_ndr/misc.h: gen_ndr/misc.h
|
||||
librpc/gen_ndr/lsa.h: gen_ndr/lsa.h
|
||||
librpc/gen_ndr/samr.h: gen_ndr/samr.h
|
||||
librpc/gen_ndr/samr.h: dcerpc/samr.h
|
||||
librpc/gen_ndr/ndr_samr.h: dcerpc/ndr_samr.h
|
||||
librpc/gen_ndr/ndr_samr_c.h: dcerpc/ndr_samr_c.h
|
||||
librpc/gen_ndr/security.h: gen_ndr/security.h
|
||||
librpc/ndr/libndr_proto.h: ndr/proto.h
|
||||
librpc/rpc/dcerpc_proto.h: dcerpc/proto.h
|
||||
@ -73,7 +86,9 @@ torture/util.h: torture/util.h
|
||||
libcli/libcli.h: client.h
|
||||
libcli/libcli_proto.h: client/proto.h
|
||||
librpc/gen_ndr/nbt.h: gen_ndr/nbt.h
|
||||
librpc/gen_ndr/svcctl.h: gen_ndr/nbt.h
|
||||
librpc/gen_ndr/svcctl.h: dcerpc/svcctl.h
|
||||
librpc/gen_ndr/ndr_svcctl.h: dcerpc/ndr_svcctl.h
|
||||
librpc/gen_ndr/ndr_svcctl_c.h: dcerpc/ndr_svcctl_c.h
|
||||
lib/cmdline/popt_common.h: samba/popt.h
|
||||
lib/util/dlinklist.h: dlinklist.h
|
||||
version.h: samba/version.h
|
||||
@ -94,3 +109,5 @@ param/share.h: param/share.h
|
||||
param/share_proto.h: param/share_proto.h
|
||||
lib/util/util_tdb.h: util_tdb.h
|
||||
lib/util/wrap_xattr.h: wrap_xattr.h
|
||||
lib/events/events.h: events/events.h
|
||||
lib/events/events_internal.h: events/events_internal.h
|
||||
|
@ -26,6 +26,8 @@
|
||||
|
||||
#include "libcli/util/nt_status.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
typedef bool BOOL;
|
||||
|
||||
#define False false
|
||||
|
@ -32,6 +32,7 @@ INIT_FUNCTION = events_standard_init
|
||||
# Start SUBSYSTEM LIBEVENTS
|
||||
[SUBSYSTEM::LIBEVENTS]
|
||||
OBJ_FILES = events.o events_timed.o events_signal.o
|
||||
PUBLIC_HEADERS = events.h events_internal.h
|
||||
PUBLIC_DEPENDENCIES = LIBTALLOC
|
||||
# End SUBSYSTEM LIBEVENTS
|
||||
##############################
|
||||
|
@ -23,6 +23,9 @@
|
||||
#ifndef __EVENTS_H__
|
||||
#define __EVENTS_H__
|
||||
|
||||
#include "talloc.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
struct event_context;
|
||||
struct event_ops;
|
||||
struct fd_event;
|
||||
|
@ -52,7 +52,7 @@ PUBLIC_DEPENDENCIES = LIBTALLOC
|
||||
# Start MODULE registry_rpc
|
||||
[MODULE::registry_rpc]
|
||||
INIT_FUNCTION = registry_rpc_init
|
||||
PRIVATE_PROTO_HEADER = reg_backend_rpc.h
|
||||
PUBLIC_PROTO_HEADER = reg_backend_rpc.h
|
||||
OUTPUT_TYPE = INTEGRATED
|
||||
SUBSYSTEM = registry
|
||||
OBJ_FILES = \
|
||||
@ -99,7 +99,7 @@ OBJ_FILES = \
|
||||
patchfile.o
|
||||
PUBLIC_DEPENDENCIES = \
|
||||
LIBSAMBA-UTIL CHARSET
|
||||
PRIVATE_PROTO_HEADER = registry_proto.h
|
||||
PUBLIC_PROTO_HEADER = registry_proto.h
|
||||
PUBLIC_HEADERS = registry.h
|
||||
# End MODULE registry_ldb
|
||||
################################################
|
||||
|
@ -22,6 +22,8 @@
|
||||
#ifndef _REGISTRY_H /* _REGISTRY_H */
|
||||
#define _REGISTRY_H
|
||||
|
||||
#include "core.h"
|
||||
#include "talloc.h"
|
||||
#include "librpc/gen_ndr/security.h"
|
||||
|
||||
/* Handles for the predefined keys */
|
||||
|
@ -26,6 +26,10 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
/* this is only needed for compatibility with the old talloc */
|
||||
typedef void TALLOC_CTX;
|
||||
|
||||
|
@ -22,6 +22,8 @@
|
||||
#ifndef _NT_STATUS_H
|
||||
#define _NT_STATUS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/* the following rather strange looking definitions of NTSTATUS and WERROR
|
||||
and there in order to catch common coding errors where different error types
|
||||
are mixed up. This is especially important as we slowly convert Samba
|
||||
|
@ -110,7 +110,7 @@ PUBLIC_DEPENDENCIES = LIBNDR NDR_SECURITY
|
||||
|
||||
[SUBSYSTEM::NDR_SAMR]
|
||||
OBJ_FILES = gen_ndr/ndr_samr.o
|
||||
PUBLIC_HEADERS = gen_ndr/samr.h
|
||||
PUBLIC_HEADERS = gen_ndr/samr.h gen_ndr/ndr_samr.h gen_ndr/ndr_samr_c.h
|
||||
PUBLIC_DEPENDENCIES = LIBNDR NDR_MISC NDR_LSA NDR_SECURITY
|
||||
|
||||
[SUBSYSTEM::NDR_NFS4ACL]
|
||||
@ -135,10 +135,12 @@ PUBLIC_DEPENDENCIES = LIBNDR NDR_SVCCTL NDR_SECURITY
|
||||
|
||||
[SUBSYSTEM::NDR_SVCCTL]
|
||||
OBJ_FILES = gen_ndr/ndr_svcctl.o
|
||||
PUBLIC_HEADERS = gen_ndr/ndr_svcctl.h gen_ndr/svcctl.h
|
||||
PUBLIC_DEPENDENCIES = LIBNDR NDR_MISC
|
||||
|
||||
[SUBSYSTEM::NDR_ATSVC]
|
||||
OBJ_FILES = gen_ndr/ndr_atsvc.o
|
||||
PUBLIC_HEADERS = gen_ndr/atsvc.h gen_ndr/ndr_atsvc.h
|
||||
PUBLIC_DEPENDENCIES = LIBNDR
|
||||
|
||||
[SUBSYSTEM::NDR_EVENTLOG]
|
||||
@ -175,7 +177,7 @@ PUBLIC_DEPENDENCIES = LIBNDR
|
||||
|
||||
[SUBSYSTEM::NDR_MGMT]
|
||||
OBJ_FILES = gen_ndr/ndr_mgmt.o
|
||||
PUBLIC_DEPENDENCIES = LIBNDR NDR_DCERPC
|
||||
PUBLIC_DEPENDENCIES = LIBNDR
|
||||
|
||||
[SUBSYSTEM::NDR_PROTECTED_STORAGE]
|
||||
OBJ_FILES = gen_ndr/ndr_protected_storage.o
|
||||
@ -344,10 +346,12 @@ PUBLIC_DEPENDENCIES = dcerpc NDR_SRVSVC
|
||||
|
||||
[SUBSYSTEM::RPC_NDR_SVCCTL]
|
||||
OBJ_FILES = gen_ndr/ndr_svcctl_c.o
|
||||
PUBLIC_HEADERS = gen_ndr/ndr_svcctl_c.h
|
||||
PUBLIC_DEPENDENCIES = dcerpc NDR_SVCCTL
|
||||
|
||||
[SUBSYSTEM::RPC_NDR_ATSVC]
|
||||
OBJ_FILES = gen_ndr/ndr_atsvc_c.o
|
||||
PUBLIC_HEADERS = gen_ndr/ndr_atsvc_c.h
|
||||
PUBLIC_DEPENDENCIES = dcerpc NDR_ATSVC
|
||||
|
||||
[SUBSYSTEM::RPC_NDR_EVENTLOG]
|
||||
@ -441,7 +445,9 @@ PUBLIC_HEADERS = gen_ndr/dcerpc.h gen_ndr/ndr_dcerpc.h
|
||||
VERSION = 0.0.1
|
||||
SO_VERSION = 0
|
||||
DESCRIPTION = DCE/RPC client library
|
||||
PUBLIC_HEADERS = rpc/dcerpc.h
|
||||
PUBLIC_HEADERS = rpc/dcerpc.h \
|
||||
gen_ndr/mgmt.h gen_ndr/ndr_mgmt.h gen_ndr/ndr_mgmt_c.h \
|
||||
gen_ndr/epmapper.h gen_ndr/ndr_epmapper.h gen_ndr/ndr_epmapper_c.h
|
||||
PUBLIC_PROTO_HEADER = rpc/dcerpc_proto.h
|
||||
OBJ_FILES = \
|
||||
rpc/dcerpc.o \
|
||||
@ -455,8 +461,7 @@ OBJ_FILES = \
|
||||
rpc/dcerpc_connect.o
|
||||
PRIVATE_DEPENDENCIES = \
|
||||
samba-socket LIBCLI_RESOLVE LIBCLI_SMB LIBCLI_SMB2 \
|
||||
LIBNDR NDR_DCERPC \
|
||||
RPC_NDR_EPMAPPER \
|
||||
LIBNDR NDR_DCERPC RPC_NDR_EPMAPPER \
|
||||
NDR_SCHANNEL RPC_NDR_NETLOGON \
|
||||
gensec LIBCLI_AUTH LIBCLI_RAW CREDENTIALS
|
||||
# End SUBSYSTEM dcerpc
|
||||
|
@ -5,7 +5,6 @@ include dynconfig.mk
|
||||
include heimdal_build/config.mk
|
||||
include config.mk
|
||||
include dsdb/config.mk
|
||||
include gtk/config.mk
|
||||
include smbd/config.mk
|
||||
include cluster/config.mk
|
||||
include smbd/process_model.mk
|
||||
|
@ -378,8 +378,10 @@ sub Parse($)
|
||||
%headerstructs = ();
|
||||
pidl "/* header auto-generated by pidl */\n\n";
|
||||
if (!is_intree()) {
|
||||
pidl "#include <core.h>\n\n";
|
||||
pidl "#include <core.h>\n";
|
||||
}
|
||||
pidl "#include <stdint.h>\n";
|
||||
pidl "\n";
|
||||
|
||||
foreach (@{$idl}) {
|
||||
($_->{TYPE} eq "INTERFACE") && HeaderInterface($_);
|
||||
|
@ -4,7 +4,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: qooxdoo framework\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2007-02-05 23:17-0500\n"
|
||||
"POT-Creation-Date: 2007-02-12 03:06+0100\n"
|
||||
"PO-Revision-Date: 2006-12-19 15:52+0100\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@ -14,296 +14,296 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. TRANSLATION: short representation of key names
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:61
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:61
|
||||
msgid "key_short_Backspace"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:62
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:62
|
||||
msgid "key_short_Tab"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:63
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:63
|
||||
msgid "key_short_Space"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:64
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:64
|
||||
msgid "key_short_Enter"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:65
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:65
|
||||
msgid "key_short_Shift"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:66
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:66
|
||||
msgid "key_short_Control"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:67
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:67
|
||||
msgid "key_short_Alt"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:68
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:68
|
||||
msgid "key_short_CapsLock"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:69
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:69
|
||||
msgid "key_short_Meta"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:70
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:70
|
||||
msgid "key_short_Escape"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:71
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:71
|
||||
msgid "key_short_Left"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:72
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:72
|
||||
msgid "key_short_Up"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:73
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:73
|
||||
msgid "key_short_Right"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:74
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:74
|
||||
msgid "key_short_Down"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:75
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:75
|
||||
msgid "key_short_PageUp"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:76
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:76
|
||||
msgid "key_short_PageDown"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:77
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:77
|
||||
msgid "key_short_End"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:78
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:78
|
||||
msgid "key_short_Home"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:79
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:79
|
||||
msgid "key_short_Insert"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:80
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:80
|
||||
msgid "key_short_Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:81
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:81
|
||||
msgid "key_short_NumLock"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:82
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:82
|
||||
msgid "key_short_PrintScreen"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:83
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:83
|
||||
msgid "key_short_Scroll"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:84
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:84
|
||||
msgid "key_short_Pause"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:85
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:85
|
||||
msgid "key_short_Win"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:86
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:86
|
||||
msgid "key_short_Apps"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATION: full/long representation of key names
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:89
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:89
|
||||
msgid "key_full_Backspace"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:90
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:90
|
||||
msgid "key_full_Tab"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:91
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:91
|
||||
msgid "key_full_Space"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:92
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:92
|
||||
msgid "key_full_Enter"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:93
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:93
|
||||
msgid "key_full_Shift"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:94
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:94
|
||||
msgid "key_full_Control"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:95
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:95
|
||||
msgid "key_full_Alt"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:96
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:96
|
||||
msgid "key_full_CapsLock"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:97
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:97
|
||||
msgid "key_full_Meta"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:98
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:98
|
||||
msgid "key_full_Escape"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:99
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:99
|
||||
msgid "key_full_Left"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:100
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:100
|
||||
msgid "key_full_Up"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:101
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:101
|
||||
msgid "key_full_Right"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:102
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:102
|
||||
msgid "key_full_Down"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:103
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:103
|
||||
msgid "key_full_PageUp"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:104
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:104
|
||||
msgid "key_full_PageDown"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:105
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:105
|
||||
msgid "key_full_End"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:106
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:106
|
||||
msgid "key_full_Home"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:107
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:107
|
||||
msgid "key_full_Insert"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:108
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:108
|
||||
msgid "key_full_Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:109
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:109
|
||||
msgid "key_full_NumLock"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:110
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:110
|
||||
msgid "key_full_PrintScreen"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:111
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:111
|
||||
msgid "key_full_Scroll"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:112
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:112
|
||||
msgid "key_full_Pause"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:113
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:113
|
||||
msgid "key_full_Win"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/locale/Key.js:114
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:114
|
||||
msgid "key_full_Apps"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:81
|
||||
msgid "Automatic"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:135
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:292
|
||||
msgid "Preview (Old/New)"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:161
|
||||
msgid "Open ColorSelector"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:175
|
||||
msgid "Color Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:143
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:144
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:236
|
||||
msgid "Presets"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:280
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:325
|
||||
msgid "Hex"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:348
|
||||
msgid "RGB"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:376
|
||||
msgid "HSB"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:52
|
||||
msgid "Last year"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:53
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:54
|
||||
msgid "Next month"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:55
|
||||
msgid "Next year"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91
|
||||
msgid "Choose a date"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620
|
||||
msgid "Case sensitive"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657
|
||||
msgid "Search next occurrence"
|
||||
msgstr ""
|
||||
|
||||
#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694
|
||||
#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694
|
||||
msgid "Search items in list"
|
||||
msgstr ""
|
||||
|
Loading…
x
Reference in New Issue
Block a user