diff options
author | David Shaw <[email protected]> | 2005-08-18 04:17:20 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2005-08-18 04:17:20 +0000 |
commit | e9b444a9d09de8ccbe0295dae33e6abcf8e79b77 (patch) | |
tree | ebf51c02682e8d3af3ec2077c10f40d181bc8931 | |
parent | Experimental code to improve AES performance. Got about 25% on ia32. (diff) | |
download | gnupg-e9b444a9d09de8ccbe0295dae33e6abcf8e79b77.tar.gz gnupg-e9b444a9d09de8ccbe0295dae33e6abcf8e79b77.zip |
* ksutil.h, ksutil.c (parse_ks_options): New keyserver-option
exact-email.
* gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Use it here
to do an email-only search.
-rw-r--r-- | keyserver/ChangeLog | 8 | ||||
-rw-r--r-- | keyserver/gpgkeys_hkp.c | 38 | ||||
-rw-r--r-- | keyserver/gpgkeys_ldap.c | 13 | ||||
-rw-r--r-- | keyserver/ksutil.c | 8 | ||||
-rw-r--r-- | keyserver/ksutil.h | 1 |
5 files changed, 61 insertions, 7 deletions
diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog index f50ae56d7..e08f96df4 100644 --- a/keyserver/ChangeLog +++ b/keyserver/ChangeLog @@ -1,3 +1,11 @@ +2005-08-17 David Shaw <[email protected]> + + * ksutil.h, ksutil.c (parse_ks_options): New keyserver-option + exact-email. + + * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Use it + here to do an email-only search. + 2005-08-08 David Shaw <[email protected]> * Makefile.am: Include LDAP_CPPFLAGS when building LDAP. diff --git a/keyserver/gpgkeys_hkp.c b/keyserver/gpgkeys_hkp.c index cd0773fde..b231420e9 100644 --- a/keyserver/gpgkeys_hkp.c +++ b/keyserver/gpgkeys_hkp.c @@ -287,13 +287,40 @@ int search_key(char *searchkey) { CURLcode res; - char *request; - char *searchkey_encoded; + char *request=NULL; + char *searchkey_encoded=NULL; int ret=KEYSERVER_INTERNAL_ERROR; - searchkey_encoded=curl_escape(searchkey,0); + if(opt->flags.exact_email) + { + char *bracketed; - request=malloc(MAX_URL+50+strlen(searchkey_encoded)); + bracketed=malloc(1+strlen(searchkey)+1+1); + if(!bracketed) + { + fprintf(console,"gpgkeys: out of memory\n"); + ret=KEYSERVER_NO_MEMORY; + goto fail; + } + + strcpy(bracketed,"<"); + strcat(bracketed,searchkey); + strcat(bracketed,">"); + + searchkey_encoded=curl_escape(bracketed,0); + free(bracketed); + } + else + searchkey_encoded=curl_escape(searchkey,0); + + if(!searchkey_encoded) + { + fprintf(console,"gpgkeys: out of memory\n"); + ret=KEYSERVER_NO_MEMORY; + goto fail; + } + + request=malloc(MAX_URL+60+strlen(searchkey_encoded)); if(!request) { fprintf(console,"gpgkeys: out of memory\n"); @@ -314,6 +341,9 @@ search_key(char *searchkey) append_path(request,"/pks/lookup?op=index&options=mr&search="); strcat(request,searchkey_encoded); + if(opt->flags.exact_email) + strcat(request,"&exact=on"); + if(opt->verbose>2) fprintf(console,"gpgkeys: HTTP URL is `%s'\n",request); diff --git a/keyserver/gpgkeys_ldap.c b/keyserver/gpgkeys_ldap.c index da7b2c7e2..3931ef2bb 100644 --- a/keyserver/gpgkeys_ldap.c +++ b/keyserver/gpgkeys_ldap.c @@ -1141,7 +1141,7 @@ search_key(char *searchkey) struct keylist *dupelist=NULL; /* The maximum size of the search, including the optional stuff and the trailing \0 */ - char search[2+12+MAX_LINE+2+15+14+1+1]; + char search[2+12+1+MAX_LINE+1+2+15+14+1+1]; char *attrs[]={"pgpcertid","pgpuserid","pgprevoked","pgpdisabled", "pgpkeycreatetime","pgpkeyexpiretime","modifytimestamp", "pgpkeysize","pgpkeytype",NULL}; @@ -1150,9 +1150,11 @@ search_key(char *searchkey) /* Build the search string */ - sprintf(search,"%s(pgpuserid=*%s*)%s%s%s", + sprintf(search,"%s(pgpuserid=*%s%s%s*)%s%s%s", (!(opt->flags.include_disabled&&opt->flags.include_revoked))?"(&":"", + opt->flags.exact_email?"<":"", searchkey, + opt->flags.exact_email?">":"", opt->flags.include_disabled?"":"(pgpdisabled=0)", opt->flags.include_revoked?"":"(pgprevoked=0)", !(opt->flags.include_disabled&&opt->flags.include_revoked)?")":""); @@ -1198,7 +1200,12 @@ search_key(char *searchkey) } if(err==LDAP_SIZELIMIT_EXCEEDED) - fprintf(console,"gpgkeys: search results exceeded server limit. First %d results shown.\n",count); + { + if(count==1) + fprintf(console,"gpgkeys: search results exceeded server limit. First %d result shown.\n",count); + else + fprintf(console,"gpgkeys: search results exceeded server limit. First %d results shown.\n",count); + } free_keylist(dupelist); dupelist=NULL; diff --git a/keyserver/ksutil.c b/keyserver/ksutil.c index fd28b0390..787841646 100644 --- a/keyserver/ksutil.c +++ b/keyserver/ksutil.c @@ -298,6 +298,14 @@ parse_ks_options(char *line,struct ks_options *opt) return KEYSERVER_NO_MEMORY; } } + else if(strcasecmp(start,"exact-email")==0 + || strcasecmp(start,"exact-mail")==0) + { + if(no) + opt->flags.exact_email=0; + else + opt->flags.exact_email=1; + } } return -1; diff --git a/keyserver/ksutil.h b/keyserver/ksutil.h index 1e3315bee..8e1791467 100644 --- a/keyserver/ksutil.h +++ b/keyserver/ksutil.h @@ -89,6 +89,7 @@ struct ks_options unsigned int include_revoked:1; unsigned int include_subkeys:1; unsigned int check_cert:1; + unsigned int exact_email:1; } flags; unsigned int verbose; unsigned int debug; |