[gq-commit] gq/src browse-export.c,1.2,1.3 common.h,1.32,1.33 dn-browse.c,1.6,1.7 ldif.c,1.17,1.18 l
Status: Beta
Brought to you by:
sur5r
Update of /cvsroot/gqclient/gq/src In directory sc8-pr-cvs1:/tmp/cvs-serv9090 Modified Files: browse-export.c common.h dn-browse.c ldif.c ldif.h ref-browse.c server-browse.c util.c Log Message: * prepared export to ldif functionality for multi-server exports, changed all LDIF export hooks to use slightly modified API * dropped search-specific struct resultset - replaced by general purpose dn_on_server structure to bundle dn and server information Index: browse-export.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/browse-export.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** browse-export.c 24 Oct 2003 19:09:04 -0000 1.2 --- browse-export.c 28 Oct 2003 19:16:01 -0000 1.3 *************** *** 58,63 **** struct export { ! struct ldapserver *server; ! GList *bases; GtkWidget *filesel; }; --- 58,62 ---- struct export { ! GList *to_export; GtkWidget *filesel; }; *************** *** 72,80 **** { if (ex) { ! g_list_foreach(ex->bases, (GFunc) g_free, NULL); ! g_list_free(ex->bases); ! ex->bases = NULL; ! ldapserver_unref(ex->server); ! ex->server = NULL; g_free(ex); } --- 71,77 ---- { if (ex) { ! g_list_foreach(ex->to_export, (GFunc) free_dn_on_server, NULL); ! g_list_free(ex->to_export); ! ex->to_export = NULL; g_free(ex); } *************** *** 95,98 **** --- 92,96 ---- int written; int ctx; + struct ldapserver *last = NULL; out = g_string_sized_new(2048); *************** *** 108,112 **** ctx = error_new_context(_("Dump subtree")); ! if(g_list_length(ex->bases) == 0) { error_push(ctx, _("Nothing to dump!")); goto fail; --- 106,110 ---- ctx = error_new_context(_("Dump subtree")); ! if(g_list_length(ex->to_export) == 0) { error_push(ctx, _("Nothing to dump!")); goto fail; *************** *** 130,134 **** g_string_truncate(out, 0); ! prepend_ldif_header(out, ex->server, ex->bases); written = fwrite(out->str, 1, out->len, outfile); --- 128,132 ---- g_string_truncate(out, 0); ! prepend_ldif_header(out, ex->to_export); written = fwrite(out->str, 1, out->len, outfile); *************** *** 141,153 **** } - if( (ld = open_connection(ex->server)) == NULL) { - /* no extra error, open_connection does error reporting - itself... */ - goto fail; - } - num_entries = 0; gmessage = g_string_sized_new(256); ! for (I = g_list_first(ex->bases) ; I ; I = g_list_next(I)) { LDAPControl ct; LDAPControl *ctrls[2] = { NULL, NULL } ; --- 139,147 ---- } num_entries = 0; gmessage = g_string_sized_new(256); ! for (I = g_list_first(ex->to_export) ; I ; I = g_list_next(I)) { ! struct dn_on_server *dos = I->data; ! LDAPControl ct; LDAPControl *ctrls[2] = { NULL, NULL } ; *************** *** 166,173 **** ctrls[0] = &ct; ! statusbar_msg(_("Subtree search on %s"), (char *) I->data); ! rc = ldap_search_ext_s(ld, (char *) I->data, ! LDAP_SCOPE_SUBTREE, "(objectClass=*)", attrs, --- 160,182 ---- ctrls[0] = &ct; ! statusbar_msg(_("Search on %s"), (char *) dos->dn); ! if (last != dos->server) { ! if (last) { ! close_connection(last, FALSE); ! last = NULL; ! } ! ! if( (ld = open_connection(dos->server)) == NULL) { ! /* no extra error, open_connection does error ! reporting itself... */ ! goto fail; ! } ! ! last = dos->server; ! } ! ! rc = ldap_search_ext_s(ld, (char *) dos->dn, ! dos->flags == LDAP_SCOPE_SUBTREE ? LDAP_SCOPE_SUBTREE : LDAP_SCOPE_BASE, "(objectClass=*)", attrs, *************** *** 194,198 **** ldap_msgfree(res); - close_connection(ex->server, FALSE); goto fail; } --- 203,206 ---- *************** *** 201,209 **** ldap_msgfree(res); } else if (rc == LDAP_SERVER_DOWN) { ! ex->server->server_down++; error_push(ctx, _("Server '%s' down. Export may be incomplete!"), ! ex->server->name); push_ldap_addl_error(ld, ctx); goto fail; --- 209,217 ---- ldap_msgfree(res); } else if (rc == LDAP_SERVER_DOWN) { ! dos->server->server_down++; error_push(ctx, _("Server '%s' down. Export may be incomplete!"), ! dos->server->name); push_ldap_addl_error(ld, ctx); goto fail; *************** *** 213,217 **** _("LDAP error while searching below '%s'." " Export may be incomplete!"), ! (char *) I->data); push_ldap_addl_error(ld, ctx); goto fail; --- 221,225 ---- _("LDAP error while searching below '%s'." " Export may be incomplete!"), ! (char *) dos->dn); push_ldap_addl_error(ld, ctx); goto fail; *************** *** 230,234 **** if (out) g_string_free(out, TRUE); if (gmessage) g_string_free(gmessage, TRUE); ! if (ld) close_connection(ex->server, FALSE); gtk_widget_destroy(ex->filesel); --- 238,242 ---- if (out) g_string_free(out, TRUE); if (gmessage) g_string_free(gmessage, TRUE); ! if (ld && last) close_connection(last, FALSE); gtk_widget_destroy(ex->filesel); *************** *** 237,243 **** } ! void export_many(GtkWidget *transient_for, ! GList *bases, ! struct ldapserver *server) { GtkWidget *filesel; --- 245,249 ---- } ! void export_many(GtkWidget *transient_for, GList *to_export) { GtkWidget *filesel; *************** *** 245,251 **** filesel = gtk_file_selection_new(_("Save LDIF")); ! ex->server = server; ! ldapserver_ref(server); ! ex->bases = bases; ex->filesel = filesel; --- 251,255 ---- filesel = gtk_file_selection_new(_("Save LDIF")); ! ex->to_export = to_export; ex->filesel = filesel; Index: common.h =================================================================== RCS file: /cvsroot/gqclient/gq/src/common.h,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** common.h 23 Oct 2003 05:46:23 -0000 1.32 --- common.h 28 Oct 2003 19:16:01 -0000 1.33 *************** *** 172,175 **** --- 172,185 ---- #endif + struct dn_on_server { + struct ldapserver *server; + char *dn; + int flags; /* used to specify more + * information if needed */ + }; + + struct dn_on_server *new_dn_on_server(const char *d, struct ldapserver *s); + void free_dn_on_server(struct dn_on_server *s); + #endif Index: dn-browse.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/dn-browse.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dn-browse.c 23 Oct 2003 05:46:23 -0000 1.6 --- dn-browse.c 28 Oct 2003 19:16:01 -0000 1.7 *************** *** 192,196 **** browse_entry *e; struct ldapserver *server; ! GList *bases = NULL; ctree = BROWSETAB(tab)->ctreeroot; --- 192,197 ---- browse_entry *e; struct ldapserver *server; ! GList *to_export = NULL; ! struct dn_on_server *dos; ctree = BROWSETAB(tab)->ctreeroot; *************** *** 205,212 **** return; ! bases = g_list_append(bases, ! g_strdup(((dn_browse_entry *)e)->dn)); ! ! export_many(tab->win->mainwin, bases, server); } --- 206,214 ---- return; ! dos = new_dn_on_server(((dn_browse_entry *)e)->dn, server); ! dos->flags = LDAP_SCOPE_SUBTREE; /* default is LDAP_SCOPE_BASE */ ! to_export = g_list_append(to_export, dos); ! ! export_many(tab->win->mainwin, to_export); } Index: ldif.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/ldif.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ldif.c 23 Oct 2003 05:46:23 -0000 1.17 --- ldif.c 28 Oct 2003 19:16:01 -0000 1.18 *************** *** 44,67 **** #include "errorchain.h" ! void prepend_ldif_header(GString *out, struct ldapserver *server, GList *bases) { time_t stamp; GString *tmp; char *username; tmp = g_string_sized_new(256); username = get_username(); time(&stamp); ! g_string_sprintf(tmp, "# This file was generated by %s %s (http://biot.com/gq/)\n" ! "# run by %s %s", ! PACKAGE, VERSION, username ? username : "NULL", ctime(&stamp)); ! while(bases) { ! g_string_sprintfa(tmp, "# subtree search on %s\n", (char *) bases->data); ! bases = bases->next; } ! g_string_sprintfa(tmp, "# server: %s:%d\n# binddn: %s\nversion: 1\n", ! server->ldaphost, server->ldapport, ! (server->binddn && strlen(server->binddn))? server->binddn: "(anonymous)"); g_string_prepend(out, tmp->str); if (username) free(username); --- 44,87 ---- #include "errorchain.h" ! void prepend_ldif_header(GString *out, GList *to_export) { time_t stamp; GString *tmp; char *username; + struct ldapserver *last = NULL; tmp = g_string_sized_new(256); username = get_username(); time(&stamp); ! g_string_sprintf(tmp, ! "#\n" ! "# This file was generated by %s %s (http://biot.com/gq/)\n" ! "# run by %s %s#\n", ! PACKAGE, VERSION, username ? username : "NULL", ! ctime(&stamp)); /* f*** ctime - stupid trailing \n */ ! while(to_export) { ! struct dn_on_server *dos = to_export->data; ! if (dos->server != last) { ! if (dos->flags == LDAP_SCOPE_SUBTREE) { ! g_string_sprintfa(tmp, "# subtree search on server: %s\n", ! dos->server->canon_name); ! } else { ! g_string_sprintfa(tmp, "# base search on server: %s\n", ! dos->server->canon_name); ! } ! g_string_sprintfa(tmp, "# binddn: %s\n", ! (dos->server->binddn && strlen(dos->server->binddn))? dos->server->binddn: "(anonymous)"); ! g_string_sprintfa(tmp, "# searching below: "); ! ! last = dos->server; ! } else { ! g_string_sprintfa(tmp, "# "); ! } ! g_string_sprintfa(tmp, "%s\n", dos->dn); ! ! to_export = to_export->next; } ! g_string_sprintfa(tmp, "# version: 1\n#\n"); g_string_prepend(out, tmp->str); if (username) free(username); Index: ldif.h =================================================================== RCS file: /cvsroot/gqclient/gq/src/ldif.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ldif.h 29 Sep 2003 19:24:17 -0000 1.6 --- ldif.h 28 Oct 2003 19:16:01 -0000 1.7 *************** *** 30,35 **** #include "common.h" ! void prepend_ldif_header(GString *out, struct ldapserver *server, ! GList *bases); gboolean ldif_entry_out(GString *out, LDAP *ld, LDAPMessage *msg, int error_context); --- 30,34 ---- #include "common.h" ! void prepend_ldif_header(GString *out, GList *to_export); gboolean ldif_entry_out(GString *out, LDAP *ld, LDAPMessage *msg, int error_context); Index: ref-browse.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/ref-browse.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ref-browse.c 23 Oct 2003 05:18:36 -0000 1.6 --- ref-browse.c 28 Oct 2003 19:16:01 -0000 1.7 *************** *** 378,381 **** --- 378,383 ---- struct ldapserver *server; GList *bases = NULL; + GList *to_export = NULL, *I; + struct dn_on_server *dos; ctree = BROWSETAB(tab)->ctreeroot; *************** *** 391,396 **** bases = get_suffixes(((ref_browse_entry *)e)->server); ! ! export_many(tab->win->mainwin, bases, server); } --- 393,409 ---- bases = get_suffixes(((ref_browse_entry *)e)->server); ! ! /* turn suffixes list into a list of dn_on_server objects ! (impedance match) */ ! for (I = g_list_first(bases) ; I ; I = g_list_next(I) ) { ! dos = new_dn_on_server(I->data, server); ! dos->flags = LDAP_SCOPE_SUBTREE; /* default is LDAP_SCOPE_BASE */ ! to_export = g_list_append(to_export, dos); ! g_free(I->data); ! I->data = NULL; ! } ! g_list_free(bases); ! ! export_many(tab->win->mainwin, to_export); } Index: server-browse.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/server-browse.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** server-browse.c 23 Oct 2003 05:46:23 -0000 1.5 --- server-browse.c 28 Oct 2003 19:16:01 -0000 1.6 *************** *** 528,531 **** --- 528,533 ---- struct ldapserver *server; GList *bases = NULL; + GList *to_export = NULL, *I; + struct dn_on_server *dos; ctree = BROWSETAB(tab)->ctreeroot; *************** *** 541,546 **** bases = get_suffixes(((server_browse_entry *)e)->server); ! ! export_many(tab->win->mainwin, bases, server); } --- 543,559 ---- bases = get_suffixes(((server_browse_entry *)e)->server); ! ! /* turn suffixes list into a list of dn_on_server objects ! (impedance match) */ ! for (I = g_list_first(bases) ; I ; I = g_list_next(I) ) { ! dos = new_dn_on_server(I->data, server); ! dos->flags = LDAP_SCOPE_SUBTREE; /* default is LDAP_SCOPE_BASE */ ! to_export = g_list_append(to_export, dos); ! g_free(I->data); ! I->data = NULL; ! } ! g_list_free(bases); ! ! export_many(tab->win->mainwin, to_export); } Index: util.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/util.c,v retrieving revision 1.83 retrieving revision 1.84 diff -C2 -d -r1.83 -r1.84 *** util.c 28 Oct 2003 19:02:41 -0000 1.83 --- util.c 28 Oct 2003 19:16:01 -0000 1.84 *************** *** 2034,2037 **** --- 2034,2066 ---- + struct dn_on_server *new_dn_on_server(const char *d, + struct ldapserver *s) + { + struct dn_on_server *dos = g_malloc0(sizeof(struct dn_on_server)); + dos->server = s; + ldapserver_ref(s); + + if (d) { + dos->dn = g_strdup(d); + } else { + dos->dn = NULL; + } + + return dos; + } + + void free_dn_on_server(struct dn_on_server *s) + { + if (s) { + g_free_if(s->dn); + ldapserver_unref(s->server); + s->dn = NULL; + s->server = NULL; + + g_free(s); + } + } + + /* Local Variables: |