diff options
author | Tim Niemueller <tim@niemueller.de> | 2006-08-25 10:54:33 +0000 |
---|---|---|
committer | Tim Niemueller <tim@niemueller.de> | 2006-08-25 10:54:33 +0000 |
commit | a7eb6849e0d4f60391ab5c38f2e8c8db851c3473 (patch) | |
tree | e1c37dceea6d6af5cafc7a68bbd46ec9082f4633 | |
parent | 766d86b3d3cb1f01baa4d6c15781eabe985be92a (diff) | |
download | NetworkManager-a7eb6849e0d4f60391ab5c38f2e8c8db851c3473.tar.gz |
2006-08-25 Tim Niemueller <tim@niemueller.de>
* gnome/dialup-auth/pppoe/*: Authentication app for
PPPoE, has the extra login form for T-Online the same way that
system-config-network from Fedora has it, very handy in Germany
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/branches/SoC_2006@1991 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
-rw-r--r-- | gnome/dialup-auth/pppoe/.cvsignore | 3 | ||||
-rw-r--r-- | gnome/dialup-auth/pppoe/Makefile.am | 41 | ||||
-rw-r--r-- | gnome/dialup-auth/pppoe/main.c | 420 | ||||
-rw-r--r-- | gnome/dialup-auth/pppoe/nm-pppoe-tonline-dialog.glade | 374 |
4 files changed, 838 insertions, 0 deletions
diff --git a/gnome/dialup-auth/pppoe/.cvsignore b/gnome/dialup-auth/pppoe/.cvsignore new file mode 100644 index 0000000000..64e093854f --- /dev/null +++ b/gnome/dialup-auth/pppoe/.cvsignore @@ -0,0 +1,3 @@ +Makefile +Makefile.in +nm-pppoe-auth-dialog diff --git a/gnome/dialup-auth/pppoe/Makefile.am b/gnome/dialup-auth/pppoe/Makefile.am new file mode 100644 index 0000000000..8bb3ef4bcc --- /dev/null +++ b/gnome/dialup-auth/pppoe/Makefile.am @@ -0,0 +1,41 @@ +INCLUDES = -I${top_srcdir} -I${top_srcdir}/utils -I${top_srcdir}/gnome/dialup-auth/common + +libexec_PROGRAMS = nm-pppoe-auth-dialog + +gladedir = $(datadir)/gnome-dialup-properties +glade_DATA = nm-pppoe-tonline-dialog.glade + +nm_pppoe_auth_dialog_CPPFLAGS = \ + $(GTHREAD_CFLAGS) \ + $(GTK_CFLAGS) \ + $(GLADE_CFLAGS) \ + $(LIBGNOMEUI_CFLAGS) \ + $(GNOMEKEYRING_CFLAGS) \ + -DICONDIR=\""$(datadir)/pixmaps"\" \ + -DGLADEDIR=\""$(gladedir)"\" \ + -DBINDIR=\""$(bindir)"\" \ + -DDBUS_API_SUBJECT_TO_CHANGE \ + -DG_DISABLE_DEPRECATED \ + -DGDK_DISABLE_DEPRECATED \ + -DGNOME_DISABLE_DEPRECATED \ + -DGNOMELOCALEDIR=\"$(datadir)/locale\" \ + -DVERSION=\"$(VERSION)\" \ + $(NULL) + +nm_pppoe_auth_dialog_SOURCES = \ + main.c \ + $(NULL) + +nm_pppoe_auth_dialog_LDADD = \ + $(GTK_LIBS) \ + $(GLADE_LIBS) \ + $(LIBGNOMEUI_LIBS) \ + $(GNOMEKEYRING_LIBS) \ + $(top_builddir)/gnome/dialup-auth/common/libnmdialupauthcommon.la \ + $(NULL) + +CLEANFILES = *~ + +EXTRA_DIST = \ + $(glade_DATA) + diff --git a/gnome/dialup-auth/pppoe/main.c b/gnome/dialup-auth/pppoe/main.c new file mode 100644 index 0000000000..3cf032fc51 --- /dev/null +++ b/gnome/dialup-auth/pppoe/main.c @@ -0,0 +1,420 @@ +/* NetworkManager -- Authentication dialog for ppp connections + * + * Tim Niemueller <tim@niemueller.de> + * based on work by Dan Williams <dcbw@redhat.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * (C) Copyright 2004 Red Hat, Inc. + * 2005-2006 Tim Niemueller [www.niemueller.de] + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <string.h> +#include <glib/gi18n.h> +#include <gtk/gtk.h> +#include <libgnomeui/libgnomeui.h> +#include <gconf/gconf-client.h> +#include <gnome-keyring.h> +#include <glade/glade.h> + +#include "gnome-two-password-dialog.h" + +#define PPP_SERVICE "org.freedesktop.NetworkManager.ppp" + +// MUST be the same as in gnome/applet/applet.h +// A real fix for this is needed by giving more information to auth apps +#define GCONF_PATH_DIALUP_CONNECTIONS "/system/networking/dialup_connections" + +static GSList * +lookup_user_pass (const char *dialup_name, const char *dialup_service, gboolean *is_session) +{ + GSList *userpass; + GList *keyring_result; + GList *keyring_i; + + char *password = NULL; + char *user = NULL; + + userpass = NULL; + + if (gnome_keyring_find_network_password_sync (NULL, /* user */ + NULL, /* domain */ + dialup_name, /* server */ + NULL, /* object */ + dialup_service, /* protocol */ + NULL, /* authtype */ + 0, /* port */ + &keyring_result) != GNOME_KEYRING_RESULT_OK) + return FALSE; + + *is_session = FALSE; + + // Go through all passwords and assign to appropriate variable + for (keyring_i = keyring_result; keyring_i != NULL; keyring_i = g_list_next (keyring_i)) { + + GnomeKeyringNetworkPasswordData *data = keyring_i->data; + + if (strcmp (data->object, "password") == 0) { + user = data->user; + password = data->password; + } + + if (strcmp (data->keyring, "session") == 0) + *is_session = TRUE; + + } + + if (user != NULL) { + userpass = g_slist_append (userpass, g_strdup (user)); + } else { + userpass = g_slist_append (userpass, g_strdup ("")); + } + + if (password != NULL) { + userpass = g_slist_append (userpass, g_strdup (password)); + } else { + userpass = g_slist_append (userpass, g_strdup ("")); + } + + gnome_keyring_network_password_list_free (keyring_result); + + return userpass; +} + +static void +save_ppp_username_and_password (const char *dialup_name, const char *dialup_service, + const char *keyring, + const char *username, const char *password) +{ + guint32 item_id; + GnomeKeyringResult keyring_result; + + if ( password != NULL) { + keyring_result = gnome_keyring_set_network_password_sync (keyring, + username, + NULL, + dialup_name, + "password", + dialup_service, + NULL, + 0, + password, + &item_id); + if (keyring_result != GNOME_KEYRING_RESULT_OK) { + const char *s; + switch (keyring_result) { + case GNOME_KEYRING_RESULT_DENIED: + s = "GNOME_KEYRING_RESULT_DENIED"; + break; + + case GNOME_KEYRING_RESULT_NO_KEYRING_DAEMON: + s = "GNOME_KEYRING_RESULT_NO_KEYRING_DAEMON"; + break; + + case GNOME_KEYRING_RESULT_ALREADY_UNLOCKED: + s = "GNOME_KEYRING_RESULT_ALREADY_UNLOCKED"; + break; + + case GNOME_KEYRING_RESULT_NO_SUCH_KEYRING: + s = "GNOME_KEYRING_RESULT_NO_SUCH_KEYRING"; + break; + + case GNOME_KEYRING_RESULT_BAD_ARGUMENTS: + s = "GNOME_KEYRING_RESULT_BAD_ARGUMENTS"; + break; + + case GNOME_KEYRING_RESULT_IO_ERROR: + s = "GNOME_KEYRING_RESULT_IO_ERROR"; + break; + + case GNOME_KEYRING_RESULT_CANCELLED: + s = "GNOME_KEYRING_RESULT_CANCELLED"; + break; + + case GNOME_KEYRING_RESULT_ALREADY_EXISTS: + s = "GNOME_KEYRING_RESULT_ALREADY_EXISTS"; + break; + + default: + s = "unknown"; + } + + g_warning ("Couldn't store password in keyring, code %d (%s)", (int) keyring_result, s); + } + } + +} + + +static gint +pppoe_tonline_account_setup(GnomeTwoPasswordDialog *dialog) +{ + char *glade_file; + GladeXML *xml; + GtkWidget *widget; + gint button_clicked = GTK_RESPONSE_CANCEL; + + glade_file = g_strdup_printf ("%s/%s", GLADEDIR, "nm-pppoe-tonline-dialog.glade"); + xml = glade_xml_new (glade_file, NULL, GETTEXT_PACKAGE); + widget = glade_xml_get_widget(xml, "nm-pppoe-tonline-account-setup-widget"); + + if ( widget == NULL ) { + printf ("Could not instantiate widget, glade file not installed?"); + } else { + GtkEntry *adapter_id = GTK_ENTRY (glade_xml_get_widget (xml, "tonline-adapter-id")); + GtkEntry *number = GTK_ENTRY (glade_xml_get_widget (xml, "tonline-number")); + GtkEntry *suffix = GTK_ENTRY (glade_xml_get_widget (xml, "tonline-suffix")); + GtkEntry *password = GTK_ENTRY (glade_xml_get_widget (xml, "tonline-password")); + + gtk_widget_show (widget); + button_clicked = gtk_dialog_run (GTK_DIALOG (widget)); + gtk_widget_hide (widget); + + if ( button_clicked == GTK_RESPONSE_OK ) { + gchar *username = g_strconcat( gtk_entry_get_text (adapter_id), + gtk_entry_get_text (number), + "#", gtk_entry_get_text (suffix), + "@t-online.de", NULL ); + gnome_two_password_dialog_set_username(dialog, username); + g_free (username); + gnome_two_password_dialog_set_password(dialog, gtk_entry_get_text (password)); + } + } + + gtk_widget_unref (widget); + + return button_clicked; +} + + +static GSList * +get_username_password (const char *dialup_name, + const char *dialup_service, + gboolean retry) +{ + GSList *result = NULL; + char *prompt; + GtkWidget *dialog; + GSList *keyring_result = NULL; + char *keyring_username = NULL; + char *keyring_password = NULL; + gboolean keyring_is_session; + GnomeTwoPasswordDialogRemember remember; + + g_return_val_if_fail (dialup_name != NULL, NULL); + + if (!retry) { + if ((result = lookup_user_pass (dialup_name, dialup_service, &keyring_is_session)) != NULL) { + return result; + } + } else { + if ((keyring_result = lookup_user_pass (dialup_name, dialup_service, &keyring_is_session)) != NULL) { + keyring_username = g_strdup ((char *) keyring_result->data); + keyring_password = g_strdup ((char *) g_slist_next (keyring_result)->data ); + } + g_slist_foreach (keyring_result, (GFunc)g_free, NULL); + g_slist_free (keyring_result); + } + + prompt = g_strdup_printf (_("You need to authenticate to establish the dialup connection '%s'."), dialup_name); + dialog = gnome_two_password_dialog_new (_("Authenticate PPP"), prompt, NULL, NULL, FALSE); + g_free (prompt); + + gnome_two_password_dialog_set_show_username (GNOME_TWO_PASSWORD_DIALOG (dialog), TRUE); + gnome_two_password_dialog_set_show_userpass_buttons (GNOME_TWO_PASSWORD_DIALOG (dialog), FALSE); + gnome_two_password_dialog_set_show_domain (GNOME_TWO_PASSWORD_DIALOG (dialog), FALSE); + gnome_two_password_dialog_set_show_remember (GNOME_TWO_PASSWORD_DIALOG (dialog), TRUE); + gnome_two_password_dialog_set_show_password_secondary (GNOME_TWO_PASSWORD_DIALOG (dialog), FALSE); + gnome_two_password_dialog_set_extra_button (GNOME_TWO_PASSWORD_DIALOG (dialog), + _("T-Online Account Setup"), + pppoe_tonline_account_setup); + gnome_two_password_dialog_set_show_extra (GNOME_TWO_PASSWORD_DIALOG (dialog), TRUE ); + + /* if retrying, put in the passwords from the keyring */ + if (keyring_username != NULL) { + gnome_two_password_dialog_set_username (GNOME_TWO_PASSWORD_DIALOG (dialog), + keyring_username); + } + if (keyring_password != NULL) { + gnome_two_password_dialog_set_password (GNOME_TWO_PASSWORD_DIALOG (dialog), + keyring_password); + } + + /* use the same keyring storage options as from the items we put in the entry boxes */ + remember = GNOME_TWO_PASSWORD_DIALOG_REMEMBER_NOTHING; + if (keyring_result != NULL) { + if (keyring_is_session) + remember = GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION; + else + remember = GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER; + } + gnome_two_password_dialog_set_remember (GNOME_TWO_PASSWORD_DIALOG (dialog), remember); + + gtk_widget_show (dialog); + + if (gnome_two_password_dialog_run_and_block (GNOME_TWO_PASSWORD_DIALOG (dialog))) { + char *password; + char *username; + + username = gnome_two_password_dialog_get_username (GNOME_TWO_PASSWORD_DIALOG (dialog)); + password = gnome_two_password_dialog_get_password (GNOME_TWO_PASSWORD_DIALOG (dialog)); + + result = g_slist_append (result, g_strdup (username)); + result = g_slist_append (result, g_strdup (password)); + + switch (gnome_two_password_dialog_get_remember (GNOME_TWO_PASSWORD_DIALOG (dialog))) { + case GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION: + save_ppp_username_and_password (dialup_name, dialup_service, "session", username, password); + break; + case GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER: + save_ppp_username_and_password (dialup_name, dialup_service, NULL, username, password); + break; + default: + break; + } + } + + g_free (keyring_username); + g_free (keyring_password); + gtk_widget_destroy (dialog); + + return result; +} + +int +main (int argc, char *argv[]) +{ + GConfClient *gconf_client = NULL; + GConfValue *gconf_val = NULL; + gchar *gconf_key = NULL; + char *escaped_name; + gboolean valid_conn = FALSE; + GSList *i; + GSList *userpass; + static gboolean retry = FALSE; + static gchar *dialup_name = NULL; + static gchar *dialup_service = NULL; + GError *error = NULL; + GOptionContext *context; + int bytes_read; + static GOptionEntry entries[] = + { + { "reprompt", 'r', 0, G_OPTION_ARG_NONE, &retry, "Reprompt for passwords", NULL}, + { "name", 'n', 0, G_OPTION_ARG_STRING, &dialup_name, "Name of dialup connection", NULL}, + { "service", 's', 0, G_OPTION_ARG_STRING, &dialup_service, "Dialup service type", NULL}, + { NULL } + }; + char buf[1]; + + bindtextdomain (GETTEXT_PACKAGE, NULL); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + + userpass = NULL; + + context = g_option_context_new ("- ppp auth dialog"); + g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, gtk_get_option_group (TRUE)); + g_option_context_parse (context, &argc, &argv, &error); + + if (dialup_name == NULL || dialup_service == NULL) { + fprintf (stderr, "Have to supply both dialup name and service\n"); + goto out; + } + + if (strcmp (dialup_service, PPP_SERVICE) != 0) { + fprintf (stderr, "This dialog only works with the '%s' service\n", PPP_SERVICE); + goto out; + } + + gnome_program_init ("nm-ppp-auth-dialog", VERSION, LIBGNOMEUI_MODULE, + argc, argv, + GNOME_PARAM_NONE, GNOME_PARAM_NONE); + + + gconf_client = gconf_client_get_default(); + escaped_name = gconf_escape_key (dialup_name, strlen (dialup_name)); + gconf_key = g_strdup_printf ("%s/%s/dialup_data", GCONF_PATH_DIALUP_CONNECTIONS, escaped_name); + if ( !(gconf_val = gconf_client_get (gconf_client, gconf_key, NULL)) || + !(gconf_val->type == GCONF_VALUE_LIST) || + !(gconf_value_get_list_type (gconf_val) == GCONF_VALUE_STRING)) { + + if (gconf_val) + gconf_value_free (gconf_val); + g_free (gconf_key); + + fprintf( stderr, "There is no connection named '%s'\n", dialup_name); + goto out; + } + g_free (gconf_key); + + valid_conn = TRUE; + + for (i = gconf_value_get_list (gconf_val); i != NULL; i = g_slist_next (i)) { + const char *gkey = gconf_value_get_string ((GConfValue *)i->data); + const char *gval = NULL; + + i = g_slist_next (i); + if (i != NULL) { + gval = gconf_value_get_string ((GConfValue *)i->data); + } + + if ( gkey != NULL ) { + + /* if something special has to happen... + if ( strcmp (gkey, "magic-val") == 0 ) { + // do something spooky + } else if ( strcmp (gkey, "key") == 0 ) { + key = g_strdup (gval); + } + */ + } + } + gconf_value_free (gconf_val); + + userpass = get_username_password (dialup_name, dialup_service, retry); + if (userpass == NULL) + goto out; + + /* dump the passwords to stdout */ + for (i = userpass; i != NULL; i = g_slist_next (i)) { + char *item = (char *) i->data; + printf ("%s\n", item); + } + + g_slist_foreach (userpass, (GFunc)g_free, NULL); + g_slist_free (userpass); + + printf ("\n\n"); + /* for good measure, flush stdout since Kansas is going Bye-Bye */ + fflush (stdout); + + /* wait for data on stdin */ + bytes_read = fread (buf, sizeof (char), sizeof (buf), stdin); + + out: + g_object_unref (gconf_client); + g_option_context_free (context); + + if ( ! valid_conn ) { + return 1; + } else { + return (userpass != NULL) ? 0 : 1; + } +} diff --git a/gnome/dialup-auth/pppoe/nm-pppoe-tonline-dialog.glade b/gnome/dialup-auth/pppoe/nm-pppoe-tonline-dialog.glade new file mode 100644 index 0000000000..0555403cfc --- /dev/null +++ b/gnome/dialup-auth/pppoe/nm-pppoe-tonline-dialog.glade @@ -0,0 +1,374 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> + +<widget class="GtkDialog" id="nm-pppoe-tonline-account-setup-widget"> + <property name="visible">True</property> + <property name="title" translatable="yes">T-Online Account Setup</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> + <property name="modal">True</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> + <property name="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="tonline-dialog"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="dialog-action_area1"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="cancelbutton1"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-cancel</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-6</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="okbutton1"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-ok</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-5</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkLabel" id="label-info"> + <property name="visible">True</property> + <property name="label" translatable="yes">Please enter your personal account data that you got from T-Online. The login data will then be automatically generated from this.</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">True</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>T-Online Account</b></property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">0</property> + <property name="bottom_padding">10</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + + <child> + <widget class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Adapter Identifier:</property> + <property name="use_underline">True</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="mnemonic_widget">tonline-adapter-id</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="label" translatable="yes">Associated T-Online Number:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="label" translatable="yes">Concurrent User Number/Suffix:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="label" translatable="yes">Personal Password:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="tonline-adapter-id"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="tonline-number"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="tonline-suffix"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="tonline-password"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">False</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> |