Index: kd_add.c =================================================================== RCS file: /home/mwa/Admin/cvsroot/home/mwa/src/pks/kd_add.c,v retrieving revision 1.5 diff -c -5 -r1.5 kd_add.c *** kd_add.c 1998/07/10 22:01:10 1.5 --- kd_add.c 1998/11/26 18:46:30 *************** *** 1314,1341 **** } } } if (err->soft_count > 0) { ! char err_count[20], keyid[20]; ! sprintf(keyid, "%02x%02x%02x%02x", err->soft_keyid[0], ! err->soft_keyid[1], err->soft_keyid[2], err->soft_keyid[3]); ! sprintf(err_count, "%d", err->soft_count); ! if (!xbuffer_append_str(win_msg, "Your key block contained ") || ! !xbuffer_append_str(win_msg, err_count) || ! !xbuffer_append_str(win_msg, " format errors,\n" ! "which were ignored. The last error was on\n" ! "key 0x") || ! !xbuffer_append_str(win_msg, keyid) || ! !xbuffer_append_str(win_msg, ":\n") || ! !xbuffer_append_str(win_msg, err->soft_str) || ! !xbuffer_append_str(win_msg, "\n")) { xbuffer_free(newkeys_xb); err->fatal = 1; err->str = "Failed allocating space for success string"; fail(); ! } } return(1); } --- 1314,1362 ---- } } } if (err->soft_count > 0) { ! char err_count[20]; ! sprintf(err_count, "%d", err->soft_count); ! if (!xbuffer_append_str(win_msg, "Your key block contained ") || ! !xbuffer_append_str(win_msg, err_count) || ! !xbuffer_append_str(win_msg, " format errors,\n" ! "which were treated as if the erroneous elements\n" ! "hadn't been part of your submission.\n")) { xbuffer_free(newkeys_xb); err->fatal = 1; err->str = "Failed allocating space for success string"; fail(); ! } ! if (err->soft_keyid_set) { ! char keyid[20]; ! sprintf(keyid, "%02x%02x%02x%02x", err->soft_keyid[0], ! err->soft_keyid[1], err->soft_keyid[2], err->soft_keyid[3]); ! if (!xbuffer_append_str(win_msg, "The last error was on key 0x") || ! !xbuffer_append_str(win_msg, keyid) || ! !xbuffer_append_str(win_msg, ":\n") || ! !xbuffer_append_str(win_msg, err->soft_str) || ! !xbuffer_append_str(win_msg, "\n")) { ! xbuffer_free(newkeys_xb); ! err->fatal = 1; ! err->str = "Failed allocating space for success string"; ! fail(); ! } ! } else { ! if (!xbuffer_append_str(win_msg, ! "The errors were outside of any PGP public key;\n" ! "maybe you didn't send a public key block at all.\n" ! "Anyway, the last error encountered was:\n") || ! !xbuffer_append_str(win_msg, err->soft_str) || ! !xbuffer_append_str(win_msg, "\n")) { ! xbuffer_free(newkeys_xb); ! err->fatal = 1; ! err->str = "Failed allocating space for success string"; ! fail(); ! } ! } } return(1); } Index: kd_search.c =================================================================== RCS file: /home/mwa/Admin/cvsroot/home/mwa/src/pks/kd_search.c,v retrieving revision 1.3 diff -c -5 -r1.3 kd_search.c *** kd_search.c 1998/07/10 22:01:21 1.3 --- kd_search.c 1998/11/26 18:44:15 *************** *** 137,152 **** return(1); } static void soft_err(mke_state *s, char *message) { s->err->soft_count++; s->err->soft_str = message; log_info("soft_err", message); ! if (s->ke->keyidbits.len >= 4) { memcpy(&s->err->soft_keyid, (char *)s->ke->keyidbits.buf + s->ke->keyidbits.len - 4, 4); } else { log_error("soft_err", "No keyid available for logging"); } } --- 137,158 ---- return(1); } static void soft_err(mke_state *s, char *message) { + char keyid[80]; s->err->soft_count++; s->err->soft_str = message; log_info("soft_err", message); ! if (s->ke != NULL && s->ke->keyidbits.len >= 4) { memcpy(&s->err->soft_keyid, (char *)s->ke->keyidbits.buf + s->ke->keyidbits.len - 4, 4); + s->err->soft_keyid_set=1; + sprintf(keyid, "KeyID: 0x%02x%02x%02x%02x\n", + s->err->soft_keyid[0], s->err->soft_keyid[1], + s->err->soft_keyid[2], s->err->soft_keyid[3]); + log_info("soft_err", keyid); } else { log_error("soft_err", "No keyid available for logging"); } } *************** *** 156,179 **** when a public key is seen, or at the end of the keyblock. s->ke contains the current key entry, including the pubkey. If the primary userid does not exist, that's an error */ /* first, finish up the current userid */ ! if (!finish_userid(s)) /* error set already */ ! return(0); /* no prior pubkey, means this is the first. that's ok. */ if (!s->ke) return(1); /* if there's no primary userid, that's an error */ if (!s->ke->primary) { soft_err(s,"Key block corrupt: pubkey with no userid"); return(1); } /* do something useful with the key */ if (!(*(s->iter))(s->ke, s->c)) return(0); --- 162,200 ---- when a public key is seen, or at the end of the keyblock. s->ke contains the current key entry, including the pubkey. If the primary userid does not exist, that's an error */ /* first, finish up the current userid */ ! if (!finish_userid(s)) { /* error set already */ ! if (s->ke != NULL) ! keys_elem_free((void *)s->ke, NULL); ! s->ke = NULL; ! return(1); ! } /* no prior pubkey, means this is the first. that's ok. */ if (!s->ke) return(1); /* if there's no primary userid, that's an error */ if (!s->ke->primary) { soft_err(s,"Key block corrupt: pubkey with no userid"); + if (s->ke != NULL) + keys_elem_free((void *)s->ke, NULL); + s->ke = NULL; return(1); } + if (!s->ke->keyidbits.len) { + soft_err(s,"Key block corrupt: userid outside of pubkey"); + if (s->ke != NULL) + keys_elem_free((void *)s->ke, NULL); + s->ke = NULL; + return(1); + } + /* do something useful with the key */ if (!(*(s->iter))(s->ke, s->c)) return(0); *************** *** 290,302 **** if (s->ignoring) break; /* finish the prior userid, if any */ ! if (!finish_userid(s)) ! /* error message already set */ ! return(0); /* allocate userids_elem and fill it in */ if ((s->ue = (userids_elem *) malloc(sizeof(userids_elem))) == NULL) { --- 311,325 ---- if (s->ignoring) break; /* finish the prior userid, if any */ ! if (!finish_userid(s)) { ! /* error message already set */ ! s->ignoring = 1; ! return(0); ! } /* allocate userids_elem and fill it in */ if ((s->ue = (userids_elem *) malloc(sizeof(userids_elem))) == NULL) { Index: kd_internal.h =================================================================== RCS file: /home/mwa/Admin/cvsroot/home/mwa/src/pks/kd_internal.h,v retrieving revision 1.3 diff -c -5 -r1.3 kd_internal.h *** kd_internal.h 1998/07/10 22:01:20 1.3 --- kd_internal.h 1998/11/26 17:59:08 *************** *** 17,26 **** --- 17,27 ---- int fatal; char *str; char buf[1024]; /* Provisioning for soft errors */ int soft_count; + int soft_keyid_set; unsigned char soft_keyid[4]; char *soft_str; } error; extern DB *keydb, *worddb, *timedb;