diff options
Diffstat (limited to 'g10/keyring.c')
-rw-r--r-- | g10/keyring.c | 202 |
1 files changed, 101 insertions, 101 deletions
diff --git a/g10/keyring.c b/g10/keyring.c index d069b1397..12356e23c 100644 --- a/g10/keyring.c +++ b/g10/keyring.c @@ -31,7 +31,7 @@ #include "util.h" #include "keyring.h" #include "packet.h" -#include "keydb.h" +#include "keydb.h" #include "options.h" #include "main.h" /*for check_key_signature()*/ #include "i18n.h" @@ -46,11 +46,11 @@ struct off_item { /*off_t off;*/ }; -typedef struct off_item **OffsetHashTable; +typedef struct off_item **OffsetHashTable; typedef struct keyring_name *KR_NAME; -struct keyring_name +struct keyring_name { struct keyring_name *next; int read_only; @@ -78,7 +78,7 @@ struct keyring_handle int error; } current; struct { - CONST_KR_NAME kr; + CONST_KR_NAME kr; off_t offset; size_t pk_no; size_t uid_no; @@ -101,7 +101,7 @@ static struct off_item * new_offset_item (void) { struct off_item *k; - + k = xmalloc_clear (sizeof *k); return k; } @@ -120,7 +120,7 @@ release_offset_items (struct off_item *k) } #endif -static OffsetHashTable +static OffsetHashTable new_offset_hash_table (void) { struct off_item **tbl; @@ -163,7 +163,7 @@ update_offset_hash_table (OffsetHashTable tbl, u32 *kid, off_t off) for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next) { - if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) + if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) { /*k->off = off;*/ return; @@ -193,7 +193,7 @@ update_offset_hash_table_from_kb (OffsetHashTable tbl, KBNODE node, off_t off) } } -/* +/* * Register a filename for plain keyring files. ptr is set to a * pointer to be used to create a handles etc, or the already-issued * pointer if it has already been registered. The function returns 1 @@ -215,7 +215,7 @@ keyring_register_filename (const char *fname, int read_only, void **ptr) if (read_only) kr->read_only = 1; *ptr=kr; - return 0; + return 0; } } @@ -245,11 +245,11 @@ keyring_is_writable (void *token) return r? (r->read_only || !access (r->fname, W_OK)) : 0; } - + /* Create a new handle for the resource associated with TOKEN. - + The returned handle must be released using keyring_release (). */ KEYRING_HANDLE keyring_new (void *token) @@ -258,14 +258,14 @@ keyring_new (void *token) KR_NAME resource = token; assert (resource); - + hd = xmalloc_clear (sizeof *hd); hd->resource = resource; active_handles++; return hd; } -void +void keyring_release (KEYRING_HANDLE hd) { if (!hd) @@ -292,7 +292,7 @@ keyring_get_resource_name (KEYRING_HANDLE hd) * Lock the keyring with the given handle, or unlock if YES is false. * We ignore the handle and lock all registered files. */ -int +int keyring_lock (KEYRING_HANDLE hd, int yes) { KR_NAME kr; @@ -315,7 +315,7 @@ keyring_lock (KEYRING_HANDLE hd, int yes) } if (rc) return rc; - + /* and now set the locks */ for (kr=kr_names; kr; kr = kr->next) { if (!keyring_is_writable(kr)) @@ -326,7 +326,7 @@ keyring_lock (KEYRING_HANDLE hd, int yes) log_info ("can't lock `%s'\n", kr->fname ); rc = G10ERR_GENERAL; } - else + else kr->is_locked = 1; } } @@ -339,10 +339,10 @@ keyring_lock (KEYRING_HANDLE hd, int yes) ; else if (release_dotlock (kr->lockhd)) log_info ("can't unlock `%s'\n", kr->fname ); - else + else kr->is_locked = 0; } - } + } return rc; } @@ -352,7 +352,7 @@ keyring_lock (KEYRING_HANDLE hd, int yes) /* * Return the last found keyring. Caller must free it. * The returned keyblock has the kbode flag bit 0 set for the node with - * the public key used to locate the keyblock or flag bit 1 set for + * the public key used to locate the keyblock or flag bit 1 set for * the user ID node. */ int @@ -398,7 +398,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) init_packet (pkt); continue; } - if (rc) { + if (rc) { log_error ("keyring_get_keyblock: read error: %s\n", g10_errstr(rc) ); rc = G10ERR_INV_KEYRING; @@ -418,17 +418,17 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) } in_cert = 1; - if (pkt->pkttype == PKT_RING_TRUST) + if (pkt->pkttype == PKT_RING_TRUST) { /*(this code is duplicated after the loop)*/ - if ( lastnode + if ( lastnode && lastnode->pkt->pkttype == PKT_SIGNATURE && (pkt->pkt.ring_trust->sigcache & 1) ) { - /* This is a ring trust packet with a checked signature + /* This is a ring trust packet with a checked signature * status cache following directly a signature paket. * Set the cache status into that signature packet. */ PKT_signature *sig = lastnode->pkt->pkt.signature; - + sig->flags.checked = 1; sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2); } @@ -460,7 +460,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) if (++uid_no == hd->found.uid_no) node->flag |= 2; break; - + default: break; } @@ -470,7 +470,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) } set_packet_list_mode(save_mode); - if (rc == -1 && keyblock) + if (rc == -1 && keyblock) rc = 0; /* got the entire keyblock */ if (rc || !ret_kb) @@ -478,7 +478,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) else { /*(duplicated form the loop body)*/ if ( pkt && pkt->pkttype == PKT_RING_TRUST - && lastnode + && lastnode && lastnode->pkt->pkttype == PKT_SIGNATURE && (pkt->pkt.ring_trust->sigcache & 1) ) { PKT_signature *sig = lastnode->pkt->pkt.signature; @@ -492,7 +492,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) iobuf_close(a); /* Make sure that future search operations fail immediately when - * we know that we are working on a invalid keyring + * we know that we are working on a invalid keyring */ if (rc == G10ERR_INV_KEYRING) hd->current.error = rc; @@ -563,11 +563,11 @@ keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb) if (hd->current.kr->read_only) return gpg_error (GPG_ERR_EACCES); } - else + else fname = hd->resource? hd->resource->fname:NULL; if (!fname) - return G10ERR_GENERAL; + return G10ERR_GENERAL; /* Close this one otherwise we will lose the position for * a next search. Fixme: it would be better to adjust the position @@ -582,7 +582,7 @@ keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb) { update_offset_hash_table_from_kb (kr_offtbl, kb, 0); } - + return rc; } @@ -631,10 +631,10 @@ keyring_delete_keyblock (KEYRING_HANDLE hd) -/* +/* * Start the next search on this handle right at the beginning */ -int +int keyring_search_reset (KEYRING_HANDLE hd) { assert (hd); @@ -644,17 +644,17 @@ keyring_search_reset (KEYRING_HANDLE hd) hd->current.iobuf = NULL; hd->current.eof = 0; hd->current.error = 0; - + hd->found.kr = NULL; hd->found.offset = 0; - return 0; + return 0; } static int prepare_search (KEYRING_HANDLE hd) { - if (hd->current.error) + if (hd->current.error) return hd->current.error; /* still in error state */ if (hd->current.kr && !hd->current.eof) { @@ -663,7 +663,7 @@ prepare_search (KEYRING_HANDLE hd) return 0; /* okay */ } - if (!hd->current.kr && hd->current.eof) + if (!hd->current.kr && hd->current.eof) return -1; /* still EOF */ if (!hd->current.kr) { /* start search with first keyring */ @@ -675,7 +675,7 @@ prepare_search (KEYRING_HANDLE hd) assert (!hd->current.iobuf); } else { /* EOF */ - iobuf_close (hd->current.iobuf); + iobuf_close (hd->current.iobuf); hd->current.iobuf = NULL; hd->current.kr = NULL; hd->current.eof = 1; @@ -833,7 +833,7 @@ compare_name (int mode, const char *name, const char *uid, size_t uidlen) int i; const char *s, *se; - if (mode == KEYDB_SEARCH_MODE_EXACT) { + if (mode == KEYDB_SEARCH_MODE_EXACT) { for (i=0; name[i] && uidlen; i++, uidlen--) if (uid[i] != name[i]) break; @@ -844,7 +844,7 @@ compare_name (int mode, const char *name, const char *uid, size_t uidlen) if (ascii_memistr( uid, uidlen, name )) return 0; } - else if ( mode == KEYDB_SEARCH_MODE_MAIL + else if ( mode == KEYDB_SEARCH_MODE_MAIL || mode == KEYDB_SEARCH_MODE_MAILSUB || mode == KEYDB_SEARCH_MODE_MAILEND) { for (i=0, s= uid; i < uidlen && *s != '<'; s++, i++) @@ -856,7 +856,7 @@ compare_name (int mode, const char *name, const char *uid, size_t uidlen) ; if (i < uidlen) { i = se - s; - if (mode == KEYDB_SEARCH_MODE_MAIL) { + if (mode == KEYDB_SEARCH_MODE_MAIL) { if( strlen(name)-2 == i && !ascii_memcasecmp( s, name+1, i) ) return 0; @@ -880,11 +880,11 @@ compare_name (int mode, const char *name, const char *uid, size_t uidlen) } -/* +/* * Search through the keyring(s), starting at the current position, * for a keyblock which contains one of the keys described in the DESC array. */ -int +int keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc, size_t *descindex) { @@ -903,28 +903,28 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, /* figure out what information we need */ need_uid = need_words = need_keyid = need_fpr = any_skip = 0; - for (n=0; n < ndesc; n++) + for (n=0; n < ndesc; n++) { - switch (desc[n].mode) + switch (desc[n].mode) { - case KEYDB_SEARCH_MODE_EXACT: + case KEYDB_SEARCH_MODE_EXACT: case KEYDB_SEARCH_MODE_SUBSTR: case KEYDB_SEARCH_MODE_MAIL: case KEYDB_SEARCH_MODE_MAILSUB: case KEYDB_SEARCH_MODE_MAILEND: need_uid = 1; break; - case KEYDB_SEARCH_MODE_WORDS: + case KEYDB_SEARCH_MODE_WORDS: need_uid = 1; need_words = 1; break; - case KEYDB_SEARCH_MODE_SHORT_KID: + case KEYDB_SEARCH_MODE_SHORT_KID: case KEYDB_SEARCH_MODE_LONG_KID: need_keyid = 1; break; - case KEYDB_SEARCH_MODE_FPR16: + case KEYDB_SEARCH_MODE_FPR16: case KEYDB_SEARCH_MODE_FPR20: - case KEYDB_SEARCH_MODE_FPR: + case KEYDB_SEARCH_MODE_FPR: need_fpr = 1; break; case KEYDB_SEARCH_MODE_FIRST: @@ -933,7 +933,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, break; default: break; } - if (desc[n].skipfnc) + if (desc[n].skipfnc) { any_skip = 1; need_keyid = 1; @@ -952,7 +952,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, else if (ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID) { struct off_item *oi; - + oi = lookup_offset_hash_table (kr_offtbl, desc[0].u.kid); if (!oi) { /* We know that we don't have this key */ @@ -961,9 +961,9 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, return -1; } /* We could now create a positive search status and return. - * However the problem is that another instance of gpg may + * However the problem is that another instance of gpg may * have changed the keyring so that the offsets are not valid - * anymore - therefore we don't do it + * anymore - therefore we don't do it */ } @@ -974,13 +974,13 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, log_debug ("word search mode does not yet work\n"); /* FIXME: here is a long standing bug in our function and in addition we just use the first search description */ - for (n=0; n < ndesc && !name; n++) + for (n=0; n < ndesc && !name; n++) { - if (desc[n].mode == KEYDB_SEARCH_MODE_WORDS) + if (desc[n].mode == KEYDB_SEARCH_MODE_WORDS) name = desc[n].u.name; } assert (name); - if ( !hd->word_match.name || strcmp (hd->word_match.name, name) ) + if ( !hd->word_match.name || strcmp (hd->word_match.name, name) ) { /* name changed */ xfree (hd->word_match.name); @@ -998,29 +998,29 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, main_offset = 0; pk_no = uid_no = 0; initial_skip = 1; /* skip until we see the start of a keyblock */ - while (!(rc=search_packet (hd->current.iobuf, &pkt, &offset, need_uid))) + while (!(rc=search_packet (hd->current.iobuf, &pkt, &offset, need_uid))) { byte afp[MAX_FINGERPRINT_LEN]; size_t an; - if (pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_SECRET_KEY) + if (pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_SECRET_KEY) { main_offset = offset; pk_no = uid_no = 0; initial_skip = 0; } - if (initial_skip) + if (initial_skip) { free_packet (&pkt); continue; } - + pk = NULL; uid = NULL; if ( pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_PUBLIC_SUBKEY || pkt.pkttype == PKT_SECRET_KEY - || pkt.pkttype == PKT_SECRET_SUBKEY) + || pkt.pkttype == PKT_SECRET_SUBKEY) { pk = pkt.pkt.public_key; ++pk_no; @@ -1036,31 +1036,31 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, if (use_offtbl && !kr_offtbl_ready) update_offset_hash_table (kr_offtbl, aki, main_offset); } - else if (pkt.pkttype == PKT_USER_ID) + else if (pkt.pkttype == PKT_USER_ID) { uid = pkt.pkt.user_id; ++uid_no; } - for (n=0; n < ndesc; n++) + for (n=0; n < ndesc; n++) { switch (desc[n].mode) { - case KEYDB_SEARCH_MODE_NONE: + case KEYDB_SEARCH_MODE_NONE: BUG (); break; - case KEYDB_SEARCH_MODE_EXACT: + case KEYDB_SEARCH_MODE_EXACT: case KEYDB_SEARCH_MODE_SUBSTR: case KEYDB_SEARCH_MODE_MAIL: case KEYDB_SEARCH_MODE_MAILSUB: case KEYDB_SEARCH_MODE_MAILEND: - case KEYDB_SEARCH_MODE_WORDS: + case KEYDB_SEARCH_MODE_WORDS: if ( uid && !compare_name (desc[n].mode, desc[n].u.name, - uid->name, uid->len)) + uid->name, uid->len)) goto found; break; - - case KEYDB_SEARCH_MODE_SHORT_KID: + + case KEYDB_SEARCH_MODE_SHORT_KID: if (pk && desc[n].u.kid[1] == aki[1]) goto found; break; @@ -1074,19 +1074,19 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, goto found; break; case KEYDB_SEARCH_MODE_FPR20: - case KEYDB_SEARCH_MODE_FPR: + case KEYDB_SEARCH_MODE_FPR: if (pk && !memcmp (desc[n].u.fpr, afp, 20)) goto found; break; - case KEYDB_SEARCH_MODE_FIRST: + case KEYDB_SEARCH_MODE_FIRST: if (pk) goto found; break; - case KEYDB_SEARCH_MODE_NEXT: + case KEYDB_SEARCH_MODE_NEXT: if (pk) goto found; break; - default: + default: rc = G10ERR_INV_ARG; goto found; } @@ -1098,7 +1098,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, meaningful if this function returns with no errors. */ if(descindex) *descindex=n; - for (n=any_skip?0:ndesc; n < ndesc; n++) + for (n=any_skip?0:ndesc; n < ndesc; n++) { if (desc[n].skipfnc && desc[n].skipfnc (desc[n].skipfncvalue, aki, uid)) @@ -1124,11 +1124,11 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, if (use_offtbl && !kr_offtbl_ready) { KR_NAME kr; - + /* First set the did_full_scan flag for this keyring. */ for (kr=kr_names; kr; kr = kr->next) { - if (hd->resource == kr) + if (hd->resource == kr) { kr->did_full_scan = 1; break; @@ -1138,14 +1138,14 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, offtbl ready */ for (kr=kr_names; kr; kr = kr->next) { - if (!kr->did_full_scan) + if (!kr->did_full_scan) break; } if (!kr) kr_offtbl_ready = 1; } } - else + else hd->current.error = rc; free_packet(&pkt); @@ -1157,7 +1157,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, static int create_tmp_file (const char *template, char **r_bakfname, char **r_tmpfname, IOBUF *r_fp) -{ +{ char *bakfname, *tmpfname; mode_t oldmask; @@ -1181,7 +1181,7 @@ create_tmp_file (const char *template, strcpy (tmpfname,template); strcpy (tmpfname+strlen(template)-4, EXTSEP_S "tmp"); } - else + else { /* file does not end with gpg; hmmm */ bakfname = xmalloc (strlen( template ) + 5); strcpy (stpcpy(bakfname, template), EXTSEP_S "bak"); @@ -1215,7 +1215,7 @@ create_tmp_file (const char *template, xfree (bakfname); return rc; } - + *r_bakfname = bakfname; *r_tmpfname = tmpfname; return 0; @@ -1247,7 +1247,7 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname) fname, bakfname, strerror(errno) ); return rc; } - + /* then rename the file */ #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) gnupg_remove( fname ); @@ -1289,10 +1289,10 @@ write_keyblock (IOBUF fp, KBNODE keyblock) { KBNODE kbctx = NULL, node; int rc; - - while ( (node = walk_kbnode (keyblock, &kbctx, 0)) ) + + while ( (node = walk_kbnode (keyblock, &kbctx, 0)) ) { - if (node->pkt->pkttype == PKT_RING_TRUST) + if (node->pkt->pkttype == PKT_RING_TRUST) continue; /* we write it later on our own */ if ( (rc = build_packet (fp, node->pkt) )) @@ -1301,12 +1301,12 @@ write_keyblock (IOBUF fp, KBNODE keyblock) node->pkt->pkttype, g10_errstr(rc) ); return rc; } - if (node->pkt->pkttype == PKT_SIGNATURE) + if (node->pkt->pkttype == PKT_SIGNATURE) { /* always write a signature cache packet */ PKT_signature *sig = node->pkt->pkt.signature; unsigned int cacheval = 0; - - if (sig->flags.checked) + + if (sig->flags.checked) { cacheval |= 1; if (sig->flags.valid) @@ -1315,7 +1315,7 @@ write_keyblock (IOBUF fp, KBNODE keyblock) iobuf_put (fp, 0xb0); /* old style packet 12, 1 byte len*/ iobuf_put (fp, 2); /* 2 bytes */ iobuf_put (fp, 0); /* unused */ - if (iobuf_put (fp, cacheval)) + if (iobuf_put (fp, cacheval)) { rc = gpg_error_from_syserror (); log_error ("writing sigcache packet failed\n"); @@ -1326,7 +1326,7 @@ write_keyblock (IOBUF fp, KBNODE keyblock) return 0; } -/* +/* * Walk over all public keyrings, check the signatures and replace the * keyring with a new one where the signature cache is then updated. * This is only done for the public keyrings. @@ -1371,7 +1371,7 @@ keyring_rebuild_cache (void *token,int noisy) * the original file is closed */ tmpfp = NULL; } - rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, + rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, lastresname) : 0; xfree (tmpfilename); tmpfilename = NULL; xfree (bakfilename); bakfilename = NULL; @@ -1384,10 +1384,10 @@ keyring_rebuild_cache (void *token,int noisy) if (rc) goto leave; } - + release_kbnode (keyblock); rc = keyring_get_keyblock (hd, &keyblock); - if (rc) + if (rc) { log_error ("keyring_get_keyblock failed: %s\n", g10_errstr(rc)); goto leave; @@ -1431,7 +1431,7 @@ keyring_rebuild_cache (void *token,int noisy) sigcount++; } } - + /* write the keyblock to the temporary file */ rc = write_keyblock (tmpfp, keyblock); if (rc) @@ -1441,10 +1441,10 @@ keyring_rebuild_cache (void *token,int noisy) log_info(_("%lu keys cached so far (%lu signatures)\n"), count, sigcount ); - } /* end main loop */ + } /* end main loop */ if (rc == -1) rc = 0; - if (rc) + if (rc) { log_error ("keyring_search failed: %s\n", g10_errstr(rc)); goto leave; @@ -1472,8 +1472,8 @@ keyring_rebuild_cache (void *token,int noisy) leave: if (tmpfp) iobuf_cancel (tmpfp); - xfree (tmpfilename); - xfree (bakfilename); + xfree (tmpfilename); + xfree (bakfilename); release_kbnode (keyblock); keyring_lock (hd, 0); keyring_release (hd); @@ -1496,13 +1496,13 @@ do_copy (int mode, const char *fname, KBNODE root, char *bakfname = NULL; char *tmpfname = NULL; - /* Open the source file. Because we do a rename, we have to check the + /* Open the source file. Because we do a rename, we have to check the permissions of the file */ if (access (fname, W_OK)) return gpg_error_from_syserror (); fp = iobuf_open (fname); - if (mode == 1 && !fp && errno == ENOENT) { + if (mode == 1 && !fp && errno == ENOENT) { /* insert mode but file does not exist: create a new file */ KBNODE kbctx, node; mode_t oldmask; |