[gq-commit] gq/src search.c,1.39,1.40
Status: Beta
Brought to you by:
sur5r
From: <sta...@us...> - 2003-10-05 13:47:49
|
Update of /cvsroot/gqclient/gq/src In directory sc8-pr-cvs1:/tmp/cvs-serv6032 Modified Files: search.c Log Message: * Got rid of most hand-knit linked list implementations, replaced them with GLists (errorchains, config->ldapservers, etc.) * Got rid of many, many fixed size buffers. These might have been problematic with variable length characters (as in the standard UTF-8 encoding) * UTF-8 safety improvements Index: search.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/search.c,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** search.c 4 Oct 2003 10:12:02 -0000 1.39 --- search.c 5 Oct 2003 13:47:43 -0000 1.40 *************** *** 45,50 **** #include "i18n.h" #include "browse.h" ! ! void find_in_browser(struct tab *tab); --- 45,49 ---- #include "i18n.h" #include "browse.h" ! #include "utf8-compat.h" void find_in_browser(struct tab *tab); *************** *** 108,113 **** searchbase_combo = gtk_combo_new(); ! if(config->ldapservers) ! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(searchbase_combo)->entry), config->ldapservers->basedn); gtk_box_pack_start(GTK_BOX(hbox1), searchbase_combo, FALSE, TRUE, 0); --- 107,113 ---- searchbase_combo = gtk_combo_new(); ! if(config->servers) ! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(searchbase_combo)->entry), ! ((struct ldapserver *)config->servers->data)->basedn); gtk_box_pack_start(GTK_BOX(hbox1), searchbase_combo, FALSE, TRUE, 0); *************** *** 352,382 **** char *make_filter(struct ldapserver *server, char *querystring) { ! char *filter; ! ! filter = malloc(MAX_LDAPFILTER_LEN); ! if(querystring[0] == '(') { ! strncpy(filter, querystring, MAX_LDAPFILTER_LEN - 1); } ! else if(strchr(querystring, '=')) { ! snprintf(filter, MAX_LDAPFILTER_LEN - 1, "(%s)", querystring); } else { switch(config->search_argument) { case SEARCHARG_BEGINS_WITH: ! snprintf(filter, MAX_LDAPFILTER_LEN - 1, "(%s=%s*)", server->searchattr, querystring); break; case SEARCHARG_ENDS_WITH: ! snprintf(filter, MAX_LDAPFILTER_LEN - 1, "(%s=*%s)", server->searchattr, querystring); break; case SEARCHARG_CONTAINS: ! snprintf(filter, MAX_LDAPFILTER_LEN - 1, "(%s=*%s*)", server->searchattr, querystring); break; case SEARCHARG_EQUALS: ! snprintf(filter, MAX_LDAPFILTER_LEN - 1, "(%s=%s)", server->searchattr, querystring); break; }; } - filter[MAX_LDAPFILTER_LEN - 1] = 0; return(filter); --- 352,388 ---- char *make_filter(struct ldapserver *server, char *querystring) { ! char *filter = NULL; ! int l = strlen(querystring); ! if(querystring[0] == '(') { /* UTF-8 OK */ ! filter = g_strdup(querystring); } ! else if(g_utf8_strchr(querystring, -1, '=')) { ! filter = g_malloc(l); ! snprintf(filter, l, "(%s)", querystring); } else { + int sl = strlen(server->searchattr); + l += sl + 10; + filter = g_malloc(l + 1); + switch(config->search_argument) { case SEARCHARG_BEGINS_WITH: ! snprintf(filter, l, "(%s=%s*)", server->searchattr, querystring); break; case SEARCHARG_ENDS_WITH: ! snprintf(filter, l, "(%s=*%s)", server->searchattr, querystring); break; case SEARCHARG_CONTAINS: ! snprintf(filter, l, "(%s=*%s*)", server->searchattr, querystring); break; case SEARCHARG_EQUALS: ! snprintf(filter, l, "(%s=%s)", server->searchattr, querystring); ! break; ! default: ! filter[0] = 0; break; }; } return(filter); *************** *** 420,427 **** gchar *cur_servername, *cur_searchbase, *enc_searchbase, *querystring, *cl[MAX_NUM_ATTRIBUTES]; char tolist[MAX_NUM_ATTRIBUTES][128], message[MAX_LDAPFILTER_LEN + 128]; ! char *filter, *attr, *dn, **vals, *searchterm, *decoded_value; int msg, rc, i, row; int cur_col, oc_col, columns_done[MAX_NUM_ATTRIBUTES]; ! if(SEARCHTAB(tab)->search_lock) return; --- 426,435 ---- gchar *cur_servername, *cur_searchbase, *enc_searchbase, *querystring, *cl[MAX_NUM_ATTRIBUTES]; char tolist[MAX_NUM_ATTRIBUTES][128], message[MAX_LDAPFILTER_LEN + 128]; ! char *filter, *attr, *dn, **vals, *searchterm; int msg, rc, i, row; int cur_col, oc_col, columns_done[MAX_NUM_ATTRIBUTES]; ! #if GTK_MAJOR < 2 ! char *decoded_value; ! #endif if(SEARCHTAB(tab)->search_lock) return; |