dp->coloursel_result.ok = FALSE;
dp->treeitems = NULL;
dp->window = dp->cancelbutton = dp->currtreeitem = NULL;
+ dp->flags = 0;
+ dp->currfocus = NULL;
}
static void dlg_cleanup(struct dlgparam *dp)
{
struct dlgparam *dp = (struct dlgparam *)dlg;
struct uctrl *uc = dlg_find_byctrl(dp, ctrl);
- GtkContainer *cont;
assert(uc->ctrl->generic.type == CTRL_EDITBOX ||
uc->ctrl->generic.type == CTRL_LISTBOX);
assert(uc->menu != NULL || uc->list != NULL);
- cont = (uc->menu ? GTK_CONTAINER(uc->menu) : GTK_CONTAINER(uc->list));
-
- gtk_container_foreach(cont, container_remove_and_destroy, cont);
+ if (uc->menu) {
+ gtk_container_foreach(GTK_CONTAINER(uc->menu),
+ container_remove_and_destroy,
+ GTK_CONTAINER(uc->menu));
+ } else {
+ gtk_list_clear_items(GTK_LIST(uc->list), 0, -1);
+ }
}
void dlg_listbox_del(union control *ctrl, void *dlg, int index)
gtk_container_add(GTK_CONTAINER(uc->menu), menuitem);
gtk_widget_show(menuitem);
- gtk_object_set_data(GTK_OBJECT(menuitem), "user-data", (gpointer)id);
+ gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
+ GINT_TO_POINTER(id));
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
GTK_SIGNAL_FUNC(menuitem_activate), dp);
} else if (!uc->entry) {
GTK_SIGNAL_FUNC(widget_focus), dp);
gtk_signal_connect(GTK_OBJECT(listitem), "button_press_event",
GTK_SIGNAL_FUNC(listitem_button), dp);
- gtk_object_set_data(GTK_OBJECT(listitem), "user-data", (gpointer)id);
+ gtk_object_set_data(GTK_OBJECT(listitem), "user-data",
+ GINT_TO_POINTER(id));
} else {
/*
* List item in a combo-box list, which means the sensible
gtk_container_add(GTK_CONTAINER(uc->list), listitem);
gtk_widget_show(listitem);
- gtk_object_set_data(GTK_OBJECT(listitem), "user-data", (gpointer)id);
+ gtk_object_set_data(GTK_OBJECT(listitem), "user-data",
+ GINT_TO_POINTER(id));
}
dp->flags &= ~FLAG_UPDATING_COMBO_LIST;
item = GTK_OBJECT(g_list_nth_data(children, index));
g_list_free(children);
- return (int)gtk_object_get_data(GTK_OBJECT(item), "user-data");
+ return GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(item), "user-data"));
}
/* dlg_listbox_index returns <0 if no single element is selected. */
if (uc->menu)
activeitem = gtk_menu_get_active(GTK_MENU(uc->menu));
+ else
+ activeitem = NULL; /* unnecessarily placate gcc */
children = gtk_container_children(GTK_CONTAINER(uc->menu ? uc->menu :
uc->list));
return req.height;
}
-int do_config_box(const char *title, Config *cfg, int midsession)
+int do_config_box(const char *title, Config *cfg, int midsession,
+ int protcfginfo)
{
GtkWidget *window, *hbox, *vbox, *cols, *label,
*tree, *treescroll, *panels, *panelvbox;
GtkTreeItem *treeitemlevels[8];
GtkTree *treelevels[8];
struct dlgparam dp;
- struct sesslist sl;
struct Shortcuts scs;
struct selparam *selparams = NULL;
dlg_init(&dp);
- get_sesslist(&sl, TRUE);
-
listitemheight = get_listitemheight();
for (index = 0; index < lenof(scs.sc); index++) {
window = gtk_dialog_new();
ctrlbox = ctrl_new_box();
- setup_config_box(ctrlbox, &sl, midsession, 0);
- unix_setup_config_box(ctrlbox, midsession, window);
+ setup_config_box(ctrlbox, midsession, cfg->protocol, protcfginfo);
+ unix_setup_config_box(ctrlbox, midsession);
+ gtk_setup_config_box(ctrlbox, midsession, window);
gtk_window_set_title(GTK_WINDOW(window), title);
hbox = gtk_hbox_new(FALSE, 4);
gtk_main();
- get_sesslist(&sl, FALSE);
dlg_cleanup(&dp);
sfree(selparams);
return ret;
}
-void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
- char *keystr, char *fingerprint)
+int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
+ char *keystr, char *fingerprint,
+ void (*callback)(void *ctx, int result), void *ctx)
{
static const char absenttxt[] =
"The server's host key is not cached. You have no guarantee "
"that the server is the computer you think it is.\n"
- "The server's key fingerprint is:\n"
+ "The server's %s key fingerprint is:\n"
"%s\n"
"If you trust this host, press \"Accept\" to add the key to "
"PuTTY's cache and carry on connecting.\n"
"cached. This means that either the server administrator "
"has changed the host key, or you have actually connected "
"to another computer pretending to be the server.\n"
- "The new key fingerprint is:\n"
+ "The new %s key fingerprint is:\n"
"%s\n"
"If you were expecting this change and trust the new key, "
"press \"Accept\" to update PuTTY's cache and continue connecting.\n"
ret = verify_host_key(host, port, keytype, keystr);
if (ret == 0) /* success - key matched OK */
- return;
+ return 1;
- text = dupprintf((ret == 2 ? wrongtxt : absenttxt), fingerprint);
+ text = dupprintf((ret == 2 ? wrongtxt : absenttxt), keytype, fingerprint);
ret = messagebox(GTK_WIDGET(get_window(frontend)),
"PuTTY Security Alert", text,
sfree(text);
- if (ret == 0)
- cleanup_exit(0);
- else if (ret == 2)
+ if (ret == 2) {
store_host_key(host, port, keytype, keystr);
+ return 1; /* continue with connection */
+ } else if (ret == 1)
+ return 1; /* continue with connection */
+ return 0; /* do not continue with connection */
}
/*
- * Ask whether the selected cipher is acceptable (since it was
+ * Ask whether the selected algorithm is acceptable (since it was
* below the configured 'warn' threshold).
- * cs: 0 = both ways, 1 = client->server, 2 = server->client
*/
-void askcipher(void *frontend, char *ciphername, int cs)
+int askalg(void *frontend, const char *algtype, const char *algname,
+ void (*callback)(void *ctx, int result), void *ctx)
{
static const char msg[] =
- "The first %scipher supported by the server is "
+ "The first %s supported by the server is "
"%s, which is below the configured warning threshold.\n"
"Continue with connection?";
char *text;
int ret;
- text = dupprintf(msg, (cs == 0) ? "" :
- (cs == 1) ? "client-to-server " : "server-to-client ",
- ciphername);
+ text = dupprintf(msg, algtype, algname);
ret = messagebox(GTK_WIDGET(get_window(frontend)),
"PuTTY Security Alert", text,
string_width("Continue with connection?"),
sfree(text);
if (ret) {
- return;
+ return 1;
} else {
- cleanup_exit(0);
+ return 0;
}
}
char *title;
char *licence =
- "Copyright 1997-2003 Simon Tatham.\n\n"
+ "Copyright 1997-2005 Simon Tatham.\n\n"
"Portions copyright Robert de Bath, Joris van Rantwijk, Delian "
"Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas "
- "Barry, Justin Bradford, Ben Harris, and CORE SDI S.A.\n\n"
+ "Barry, Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, "
+ "Markus Kuhn, and CORE SDI S.A.\n\n"
"Permission is hereby granted, free of charge, to any person "
"obtaining a copy of this software and associated documentation "
w, FALSE, FALSE, 5);
gtk_widget_show(w);
- w = gtk_label_new("Copyright 1997-2003 Simon Tatham. All rights reserved");
+ w = gtk_label_new("Copyright 1997-2005 Simon Tatham. All rights reserved");
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(aboutbox)->vbox),
w, FALSE, FALSE, 5);
gtk_widget_show(w);
return es;
}
-void logevent_dlg(void *estuff, char *string)
+void logevent_dlg(void *estuff, const char *string)
{
struct eventlog_stuff *es = (struct eventlog_stuff *)estuff;
char timebuf[40];
- time_t t;
+ struct tm tm;
if (es->nevents >= es->negsize) {
es->negsize += 64;
es->events = sresize(es->events, es->negsize, char *);
}
- time(&t);
- strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S\t",
- localtime(&t));
+ tm=ltime();
+ strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S\t", &tm);
es->events[es->nevents] = snewn(strlen(timebuf) + strlen(string) + 1, char);
strcpy(es->events[es->nevents], timebuf);
}
es->nevents++;
}
+
+int askappend(void *frontend, Filename filename,
+ void (*callback)(void *ctx, int result), void *ctx)
+{
+ static const char msgtemplate[] =
+ "The session log file \"%.*s\" already exists. "
+ "You can overwrite it with a new session log, "
+ "append your session log to the end of it, "
+ "or disable session logging for this session.";
+ char *message;
+ char *mbtitle;
+ int mbret;
+
+ message = dupprintf(msgtemplate, FILENAME_MAX, filename.path);
+ mbtitle = dupprintf("%s Log to File", appname);
+
+ mbret = messagebox(get_window(frontend), mbtitle, message,
+ string_width("LINE OF TEXT SUITABLE FOR THE"
+ " ASKAPPEND WIDTH"),
+ "Overwrite", 'o', 1, 2,
+ "Append", 'a', 0, 1,
+ "Disable", 'd', -1, 0,
+ NULL);
+
+ sfree(message);
+ sfree(mbtitle);
+
+ return mbret;
+}