[gq-commit] gq/src filter.c,1.17,1.18 search.c,1.33,1.34 search.h,1.7,1.8
Status: Beta
Brought to you by:
sur5r
From: <bi...@us...> - 2003-09-30 22:34:58
|
Update of /cvsroot/gqclient/gq/src In directory sc8-pr-cvs1:/tmp/cvs-serv16913/src Modified Files: filter.c search.c search.h Log Message: - moved filter generation out to a separate function - when adding new filters from the search bar, non-LDAP-filter queries are now also transformed into a valid filter, and saved that way - an '=' anywhere in the search string also is now transformed into a valid LDAP filter Index: filter.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/filter.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** filter.c 30 Sep 2003 17:20:25 -0000 1.17 --- filter.c 30 Sep 2003 22:34:49 -0000 1.18 *************** *** 75,81 **** GList *filterlist; struct gq_filter *filter; struct tab *tab; int tabnum; ! char *searchstring, *servername, *searchbase, msg[192]; const char *filtername; --- 75,82 ---- GList *filterlist; struct gq_filter *filter; + struct ldapserver *server; struct tab *tab; int tabnum; ! char *filterstring, *searchstring, *servername, *searchbase, msg[192]; const char *filtername; *************** *** 88,91 **** --- 89,99 ---- return; + server_combo = SEARCHTAB(tab)->serverlist_combo; + servername = gtk_editable_get_chars(GTK_EDITABLE(GTK_COMBO(server_combo)->entry), 0, -1); + if( (server = server_by_name(servername)) == NULL) { + g_free(servername); + return; + } + focusbox = tab->focus; searchstring = gtk_editable_get_chars(GTK_EDITABLE(focusbox), 0, -1); *************** *** 97,106 **** } ! /* only accept real filters -- this could be constructed like in search mode though */ ! if(searchstring[0] != '(') { ! single_warning_popup(_("You must enter a valid filter")); ! g_free(searchstring); ! return; ! } if(filternamebox == NULL) { --- 105,110 ---- } ! filterstring = make_filter(server, searchstring); ! g_free(searchstring); if(filternamebox == NULL) { *************** *** 133,145 **** filter = new_filter(); strncpy(filter->name, filtername, MAX_FILTERNAME_LEN - 1); ! strncpy(filter->ldapfilter, searchstring, MAX_LDAPFILTER_LEN - 1); ! g_free(searchstring); /* check state of Remember... button, and get servername/basedn if active */ button = gtk_object_get_data(GTK_OBJECT(filternamebox), "saveserver"); if(GTK_TOGGLE_BUTTON(button)->active) { - server_combo = SEARCHTAB(tab)->serverlist_combo; - servername = gtk_editable_get_chars(GTK_EDITABLE(GTK_COMBO(server_combo)->entry), 0, -1); - searchbase_combo = SEARCHTAB(tab)->searchbase_combo; searchbase = gtk_editable_get_chars(GTK_EDITABLE(GTK_COMBO(searchbase_combo)->entry), 0, -1); --- 137,146 ---- filter = new_filter(); strncpy(filter->name, filtername, MAX_FILTERNAME_LEN - 1); ! strncpy(filter->ldapfilter, filterstring, MAX_LDAPFILTER_LEN - 1); ! free(filterstring); /* check state of Remember... button, and get servername/basedn if active */ button = gtk_object_get_data(GTK_OBJECT(filternamebox), "saveserver"); if(GTK_TOGGLE_BUTTON(button)->active) { searchbase_combo = SEARCHTAB(tab)->searchbase_combo; searchbase = gtk_editable_get_chars(GTK_EDITABLE(GTK_COMBO(searchbase_combo)->entry), 0, -1); Index: search.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/search.c,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** search.c 30 Sep 2003 17:20:25 -0000 1.33 --- search.c 30 Sep 2003 22:34:49 -0000 1.34 *************** *** 350,353 **** --- 350,387 ---- + 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); + } + + void query(struct tab *tab) { *************** *** 362,367 **** 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[MAX_LDAPFILTER_LEN]; ! char *attr, *dn, **vals, *searchterm, *decoded_value; int msg, rc, i, row; int cur_col, oc_col, columns_done[MAX_NUM_ATTRIBUTES]; --- 396,400 ---- 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]; *************** *** 401,425 **** } ! /* construct filter */ ! if(querystring[0] == '(') { ! strncpy(filter, querystring, MAX_LDAPFILTER_LEN - 1); ! } ! 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; ! }; ! } ! free(querystring); --- 434,438 ---- } ! filter = make_filter(server, querystring); free(querystring); *************** *** 440,443 **** --- 453,457 ---- g_free(cur_searchbase); if (enc_searchbase) free(enc_searchbase); + free(filter); if((config.sort_search && msg != LDAP_SUCCESS) || msg == -1) { Index: search.h =================================================================== RCS file: /cvsroot/gqclient/gq/src/search.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** search.h 29 Sep 2003 17:33:34 -0000 1.7 --- search.h 30 Sep 2003 22:34:50 -0000 1.8 *************** *** 69,72 **** --- 69,73 ---- void free_cur_attrs(struct attrs *attrlist); + char *make_filter(struct ldapserver *server, char *querystring); void query(struct tab *tab); |