--- ./g10/import.c_orig 2025-10-14 09:35:30.450652307 -0500 +++ ./g10/import.c 2025-10-14 09:42:01.608531519 -0500 @@ -1995,7 +1995,6 @@ int non_self_or_utk = 0; char pkstrbuf[PUBKEY_STRING_SIZE]; int merge_keys_done = 0; - int any_filter = 0; KEYDB_HANDLE hd = NULL; if (r_valid) @@ -2032,14 +2031,6 @@ log_printf ("\n"); } - - if (!uidnode) - { - if (!silent) - log_error( _("key %s: no user ID\n"), keystr_from_pk(pk)); - return 0; - } - if (screener && screener (keyblock, screener_arg)) { log_error (_("key %s: %s\n"), keystr_from_pk (pk), @@ -2132,19 +2123,10 @@ xfree(user); } } - - /* Delete invalid parts and bail out if there are no user ids left. */ - if (!delete_inv_parts (ctrl, keyblock, keyid, options, otherrevsigs)) - { - if (!silent) - { - log_error ( _("key %s: no valid user IDs\n"), keystr_from_pk(pk)); - if (!opt.quiet) - log_info(_("this may be caused by a missing self-signature\n")); - } - stats->no_user_id++; - return 0; - } +/* Delete invalid parts, and note if we have any valid ones left. + * We will later abort import if this key is new but contains + * no valid uids. */ + delete_inv_parts (ctrl, keyblock, keyid, options, otherrevsigs); /* Get rid of deleted nodes. */ commit_kbnode (&keyblock); @@ -2154,24 +2136,11 @@ { apply_keep_uid_filter (ctrl, keyblock, import_filter.keep_uid); commit_kbnode (&keyblock); - any_filter = 1; } if (import_filter.drop_sig) { apply_drop_sig_filter (ctrl, keyblock, import_filter.drop_sig); commit_kbnode (&keyblock); - any_filter = 1; - } - - /* If we ran any filter we need to check that at least one user id - * is left in the keyring. Note that we do not use log_error in - * this case. */ - if (any_filter && !any_uid_left (keyblock)) - { - if (!opt.quiet ) - log_info ( _("key %s: no valid user IDs\n"), keystr_from_pk (pk)); - stats->no_user_id++; - return 0; } /* The keyblock is valid and ready for real import. */ @@ -2231,6 +2200,13 @@ err = 0; stats->skipped_new_keys++; } + else if (err && !any_uid_left (keyblock)) + { + if (!silent) + log_info( _("key %s: new key but contains no user ID - skipped\n"), keystr(keyid)); + err=0; + stats->no_user_id++; + } else if (err) /* Insert this key. */ { /* Note: ERR can only be NO_PUBKEY or UNUSABLE_PUBKEY. */