[gq-commit] gq/src configfile.c,1.53,1.54 configfile.h,1.38,1.39 filter.c,1.27,1.28 prefs.c,1.56,1.5
Status: Beta
Brought to you by:
sur5r
From: <sta...@us...> - 2003-11-03 21:34:57
|
Update of /cvsroot/gqclient/gq/src In directory sc8-pr-cvs1:/tmp/cvs-serv7529 Modified Files: configfile.c configfile.h filter.c prefs.c util.c Log Message: * Implemented missing rollbacks after failed saves * Fixed bug related to rollback (changes where indicated in the GUI even if they could not be saved). Index: configfile.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/configfile.c,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** configfile.c 3 Nov 2003 21:28:37 -0000 1.53 --- configfile.c 3 Nov 2003 21:34:52 -0000 1.54 *************** *** 126,134 **** #define SHALLOWCOPY(t,s,n) t->n = s->n ! /** NOTE: copy_ldapserver sets the target refcount to 0! */ void copy_ldapserver(struct ldapserver *target, const struct ldapserver *source) { DEEPCOPY (target, source, name); DEEPCOPY (target, source, ldaphost); --- 126,139 ---- #define SHALLOWCOPY(t,s,n) t->n = s->n ! /** NOTE: copy_ldapserver ONLY copies the configuration ! information. It DOES NOT copy the operational stuff. Often you ! will want to call reset_ldapserver(target) alongside of ! copy_ldapserver. */ void copy_ldapserver(struct ldapserver *target, const struct ldapserver *source) { + /* configuration */ + DEEPCOPY (target, source, name); DEEPCOPY (target, source, ldaphost); *************** *** 152,156 **** --- 157,169 ---- DEEPCOPY (target, source, canon_name); SHALLOWCOPY(target, source, is_uri); + } + /* resets the operational stuff */ + /** NOTE: reset_ldapserver sets the target refcount to 0 */ + void reset_ldapserver(struct ldapserver *target) + { + if (target->connection) { + close_connection(target, TRUE); + } target->connection = NULL; target->incarnation = 0; *************** *** 160,164 **** target->version = LDAP_VERSION2; target->server_down = 0; ! target->refcount = 0; } --- 173,177 ---- target->version = LDAP_VERSION2; target->server_down = 0; ! target->refcount = 0; } *************** *** 182,186 **** } ! static void free_ldapserver(struct ldapserver *server) { if (server->connection) { --- 195,199 ---- } ! void free_ldapserver(struct ldapserver *server) { if (server->connection) { Index: configfile.h =================================================================== RCS file: /cvsroot/gqclient/gq/src/configfile.h,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** configfile.h 3 Nov 2003 21:28:37 -0000 1.38 --- configfile.h 3 Nov 2003 21:34:52 -0000 1.39 *************** *** 180,187 **** struct ldapserver *new_ldapserver(void); ! /** NOTE: copy_ldapserver sets the target refcount to 0 */ void copy_ldapserver(struct ldapserver *target, const struct ldapserver *source); /* canonicalize_ldapserver - to be called whenever the server-related --- 180,194 ---- struct ldapserver *new_ldapserver(void); + void free_ldapserver(struct ldapserver *server); ! /** NOTE: copy_ldapserver ONLY copies the configuration ! information. It DOES NOT copy the operational stuff. Often you ! will want to call reset_ldapserver(target) alongside of ! copy_ldapserver. */ void copy_ldapserver(struct ldapserver *target, const struct ldapserver *source); + + /** NOTE: reset_ldapserver sets the target refcount to 0 */ + void reset_ldapserver(struct ldapserver *target); /* canonicalize_ldapserver - to be called whenever the server-related Index: filter.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/filter.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** filter.c 3 Nov 2003 21:07:57 -0000 1.27 --- filter.c 3 Nov 2003 21:34:52 -0000 1.28 *************** *** 948,965 **** if(strcasecmp(filter->servername, servername)) { g_free_and_dup(filter->servername, servername); - gtk_clist_set_text(GTK_CLIST(filter_clist), row, 1, - servername); } if(strcasecmp(filter->basedn, basedn)) { g_free_and_dup(filter->basedn, basedn); - gtk_clist_set_text(GTK_CLIST(filter_clist), row, 2, - basedn); } if(strcasecmp(filter->ldapfilter, flattened)) { g_free_and_dup(filter->ldapfilter, flattened); - gtk_clist_set_text(GTK_CLIST(filter_clist), row, 3, - flattened); } --- 948,959 ---- *************** *** 971,974 **** --- 965,975 ---- copy_filter(filter, old_backup); } else { + gtk_clist_set_text(GTK_CLIST(filter_clist), row, 1, + servername); + gtk_clist_set_text(GTK_CLIST(filter_clist), row, 2, + basedn); + gtk_clist_set_text(GTK_CLIST(filter_clist), row, 3, + flattened); + /* udpate filter menu in main window */ mainwin_update_filter_menu(&mainwin); *************** *** 992,995 **** --- 993,998 ---- if (save_ok) { gtk_widget_destroy(window); + } else { + /* changes already undone */ } } Index: prefs.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/prefs.c,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** prefs.c 3 Nov 2003 21:28:38 -0000 1.56 --- prefs.c 3 Nov 2003 21:34:52 -0000 1.57 *************** *** 187,192 **** --- 187,195 ---- struct server_windata *sw = cb_data->sw; gboolean save_ok; + struct ldapserver *save = new_ldapserver(); server = cb_data->server; + copy_ldapserver(save, server); + window = sw->editwindow; *************** *** 209,213 **** if (!passwdmatch) { single_warning_popup(_("Passwords do not match")); ! return; } --- 212,216 ---- if (!passwdmatch) { single_warning_popup(_("Passwords do not match")); ! goto done; } *************** *** 221,225 **** "Do you want to store your bind password as clear text?")); if (!rc) { ! return; } } --- 224,228 ---- "Do you want to store your bind password as clear text?")); if (!rc) { ! goto done; } } *************** *** 248,252 **** "Please choose another name"), this); ! return; } } --- 251,255 ---- "Please choose another name"), this); ! goto done; } } *************** *** 266,270 **** if (*text) { single_warning_popup(_("Port must be numeric or empty")); ! return; } else { /* empty, might have LDAP URI */ --- 269,273 ---- if (*text) { single_warning_popup(_("Port must be numeric or empty")); ! goto done; } else { /* empty, might have LDAP URI */ *************** *** 357,362 **** } - update_serverlist(&mainwin); - /* if (cb_data->edit_new_server) { */ /* /\* everything ok, take the server out of the cb_data (in case it */ --- 360,363 ---- *************** *** 367,374 **** if (save_ok) { gtk_widget_destroy(window); } else { ! #warning FIXME: Undo changes } } --- 368,379 ---- if (save_ok) { + update_serverlist(&mainwin); gtk_widget_destroy(window); } else { ! copy_ldapserver(server, save); } + + done: + if (save) free_ldapserver(save); } *************** *** 1206,1209 **** --- 1211,1217 ---- { unsigned int type; + /* use a dummy configuration to store current/old preferences for + rollback */ + struct gq_config *save = new_config(); /* Search type */ *************** *** 1216,1239 **** /* saves a lot of typing */ ! #define CONFIG_TOGGLE_BUTTON(c,p,n) (c)->n = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON((p)->n)) /* Show DN */ ! CONFIG_TOGGLE_BUTTON(config, pw, showdn); #if 0 /* Show OC */ ! CONFIG_TOGGLE_BUTTON(config, pw, showoc); #endif /* Show RDN only */ ! CONFIG_TOGGLE_BUTTON(config, pw, show_rdn_only); #if 0 /* Sorting: search mode */ ! CONFIG_TOGGLE_BUTTON(config, pw, sort_search); #endif /* Sorting: browse mode */ ! CONFIG_TOGGLE_BUTTON(config, pw, sort_browse); /* browse mode: Use user-friendly attribute names */ --- 1224,1254 ---- /* saves a lot of typing */ ! #define CONFIG_TOGGLE_BUTTON(c,p,s,n) { \ ! (s)->n = (c)->n; \ ! (c)->n = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON((p)->n)); \ ! } + /* WHEN ADDING STUFF: DO NOT FORGET TO CODE ROLLBACK AS WELL */ /* Show DN */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, showdn); #if 0 /* Show OC */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, showoc); #endif /* Show RDN only */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, show_rdn_only); #if 0 /* Sorting: search mode */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, sort_search); #endif /* Sorting: browse mode */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, sort_browse); ! ! /* browse mode: Use user-friendly attribute names */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, browse_use_user_friendly); /* browse mode: Use user-friendly attribute names */ *************** *** 1242,1258 **** /* GUI */ /* restore window sizes */ ! CONFIG_TOGGLE_BUTTON(config, pw, restore_window_sizes); /* restore window positions */ ! CONFIG_TOGGLE_BUTTON(config, pw, restore_window_positions); /* restore search history */ ! CONFIG_TOGGLE_BUTTON(config, pw, restore_search_history); /* restore tabs */ ! CONFIG_TOGGLE_BUTTON(config, pw, restore_tabs); /* never_leak_credentials */ ! CONFIG_TOGGLE_BUTTON(config, pw, never_leak_credentials); /* do_not_use_ldap_conf */ --- 1257,1287 ---- /* GUI */ /* restore window sizes */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, restore_window_sizes); /* restore window positions */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, restore_window_positions); /* restore search history */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, restore_search_history); + /* WHEN ADDING STUFF: DO NOT FORGET TO CODE ROLLBACK AS WELL */ /* restore tabs */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, restore_tabs); /* never_leak_credentials */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, never_leak_credentials); ! ! /* do_not_use_ldap_conf */ ! CONFIG_TOGGLE_BUTTON(config, pw, save, do_not_use_ldap_conf); ! ! /* WHEN ADDING STUFF: DO NOT FORGET TO CODE ROLLBACK AS WELL */ ! /* Search type */ ! for(type = 0; type < sizeof(pw->search_st)/sizeof(pw->search_st[0]); ! type++) { ! if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pw->search_st[type]))) ! break; ! } ! save->search_argument = config->search_argument; ! config->search_argument = type; /* do_not_use_ldap_conf */ *************** *** 1265,1270 **** --- 1294,1301 ---- break; } + save->ldifformat = config->ldifformat; config->ldifformat = type; + g_free_and_dup(save->schemaserver, config->schemaserver); if(pw->schemaserver) { g_free_and_dup(config->schemaserver, *************** *** 1275,1280 **** gtk_widget_destroy(pw->prefswindow); } else { ! #warning FIXME: Undo changes } } --- 1306,1330 ---- gtk_widget_destroy(pw->prefswindow); } else { ! /* saves typing */ ! #define CONFIG_ROLLBACK(o,s,n) (o)->n = (s)->n ! CONFIG_ROLLBACK(config, save, showdn); ! CONFIG_ROLLBACK(config, save, showoc); ! CONFIG_ROLLBACK(config, save, show_rdn_only); ! CONFIG_ROLLBACK(config, save, sort_search); ! CONFIG_ROLLBACK(config, save, sort_browse); ! CONFIG_ROLLBACK(config, save, browse_use_user_friendly); ! CONFIG_ROLLBACK(config, save, restore_window_sizes); ! CONFIG_ROLLBACK(config, save, restore_window_positions); ! CONFIG_ROLLBACK(config, save, restore_search_history); ! CONFIG_ROLLBACK(config, save, restore_tabs); ! CONFIG_ROLLBACK(config, save, never_leak_credentials); ! CONFIG_ROLLBACK(config, save, do_not_use_ldap_conf); ! ! CONFIG_ROLLBACK(config, save, search_argument); ! CONFIG_ROLLBACK(config, save, ldifformat); ! g_free_and_dup(config->schemaserver, save->schemaserver); } + + free_config(save); } Index: util.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/util.c,v retrieving revision 1.87 retrieving revision 1.88 diff -C2 -d -r1.87 -r1.88 *** util.c 3 Nov 2003 21:07:58 -0000 1.87 --- util.c 3 Nov 2003 21:34:53 -0000 1.88 *************** *** 401,404 **** --- 401,406 ---- } + reset_ldapserver(newserver); + /* check: do we have this server around already??? */ s = server_by_canon_name(new_uri->str, TRUE); *************** *** 428,431 **** --- 430,435 ---- } } + + reset_ldapserver(newserver); /* anonymous */ |