--- /dev/null
+diff -ur gnupg-1.3.6.orig/g10/keyedit.c gnupg-1.3.6/g10/keyedit.c
+--- gnupg-1.3.6.orig/g10/keyedit.c 2004-05-22 13:26:00.000000000 +0200
++++ gnupg-1.3.6/g10/keyedit.c 2004-06-12 15:32:51.219996456 +0200
+@@ -136,48 +136,68 @@
+ break;
+ }
+ if( sigrc != '?' || print_without_key ) {
+- tty_printf("%s%c%c %c%c%c%c%c%c %s %s",
+- is_rev? "rev":"sig",sigrc,
+- (sig->sig_class-0x10>0 &&
+- sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ',
+- sig->flags.exportable?' ':'L',
+- sig->flags.revocable?' ':'R',
+- sig->flags.policy_url?'P':' ',
+- sig->flags.notation?'N':' ',
+- sig->flags.expired?'X':' ',
+- (sig->trust_depth>9)?'T':
+- (sig->trust_depth>0)?'0'+sig->trust_depth:' ',
+- keystr(sig->keyid),datestr_from_sig(sig));
+- if(opt.list_options&LIST_SHOW_SIG_EXPIRE)
+- tty_printf(" %s",expirestr_from_sig(sig));
+- tty_printf(" ");
+- if( sigrc == '%' )
+- tty_printf("[%s] ", g10_errstr(rc) );
+- else if( sigrc == '?' )
+- ;
+- else if( *is_selfsig ) {
+- tty_printf( is_rev? _("[revocation]")
+- : _("[self-signature]") );
+- }
+- else
+- {
++ if (opt.with_colons) {
+ size_t n;
+- char *p = get_user_id( sig->keyid, &n );
+- tty_print_utf8_string2( p, n, opt.screen_columns-keystrlen()-26 );
+- m_free(p);
+- }
+- tty_printf("\n");
+
+- if(sig->flags.policy_url && (opt.list_options&LIST_SHOW_POLICY_URLS))
+- show_policy_url(sig,3,0);
++ printf("%s:%c::%d:%08lX%08lX:%s:%s:::",
++ is_rev? "rev":"sig", sigrc,
++ sig->pubkey_algo,
++ (ulong)sig->keyid[0], (ulong)sig->keyid[1],
++ colon_datestr_from_sig(sig),
++ colon_expirestr_from_sig(sig));
++ if( sigrc != '%' && sigrc != '?') {
++ char *p;
++ p = get_user_id( sig->keyid, &n);
++ print_string( stdout, p, n, ':' );
++ m_free(p);
++ };
++ printf(":%02x%c:\n",
++ sig->sig_class,sig->flags.exportable?'x':'l'
++ );
++ } else {
++ tty_printf("%s%c%c %c%c%c%c%c%c %s %s",
++ is_rev? "rev":"sig",sigrc,
++ (sig->sig_class-0x10>0 &&
++ sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ',
++ sig->flags.exportable?' ':'L',
++ sig->flags.revocable?' ':'R',
++ sig->flags.policy_url?'P':' ',
++ sig->flags.notation?'N':' ',
++ sig->flags.expired?'X':' ',
++ (sig->trust_depth>9)?'T':
++ (sig->trust_depth>0)?'0'+sig->trust_depth:' ',
++ keystr(sig->keyid),datestr_from_sig(sig));
++ if(opt.list_options&LIST_SHOW_SIG_EXPIRE)
++ tty_printf(" %s",expirestr_from_sig(sig));
++ tty_printf(" ");
++ if( sigrc == '%' )
++ tty_printf("[%s] ", g10_errstr(rc) );
++ else if( sigrc == '?' )
++ ;
++ else if( *is_selfsig ) {
++ tty_printf( is_rev? _("[revocation]")
++ : _("[self-signature]") );
++ }
++ else
++ {
++ size_t n;
++ char *p = get_user_id( sig->keyid, &n );
++ tty_print_utf8_string2( p, n, opt.screen_columns-keystrlen()-26 );
++ m_free(p);
++ }
++ tty_printf("\n");
++
++ if(sig->flags.policy_url && (opt.list_options&LIST_SHOW_POLICY_URLS))
++ show_policy_url(sig,3,0);
+
+- if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATIONS))
+- show_notation(sig,3,0,
+- ((opt.list_options&LIST_SHOW_STD_NOTATIONS)?1:0)+
+- ((opt.list_options&LIST_SHOW_USER_NOTATIONS)?2:0));
++ if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATIONS))
++ show_notation(sig,3,0,
++ ((opt.list_options&LIST_SHOW_STD_NOTATIONS)?1:0)+
++ ((opt.list_options&LIST_SHOW_USER_NOTATIONS)?2:0));
+
+- if(sig->flags.pref_ks && (opt.list_options&LIST_SHOW_KEYSERVER_URLS))
+- show_keyserver_url(sig,3,0);
++ if(sig->flags.pref_ks && (opt.list_options&LIST_SHOW_KEYSERVER_URLS))
++ show_keyserver_url(sig,3,0);
++ }
+ }
+
+ return (sigrc == '!');
+@@ -1812,7 +1832,7 @@
+ else {
+ tty_printf(" ");
+ for(i=0; prefs[i].type; i++ ) {
+- tty_printf( " %c%d", prefs[i].type == PREFTYPE_SYM ? 'S' :
++ tty_printf( " %c%d", prefs[i].type == PREFTYPE_SYM ? 'S' :
+ prefs[i].type == PREFTYPE_HASH ? 'H' :
+ prefs[i].type == PREFTYPE_ZIP ? 'Z':'?',
+ prefs[i].value);
+@@ -1826,6 +1846,82 @@
+ }
+
+
++/* This shows one uid, in an easy to parse format and does not translate utf8 */
++static void
++show_one_uid_colon (KBNODE node, int index, PKT_public_key *primary, int ulti_hack, int pk_version)
++{
++ int j;
++ assert ( node->pkt->pkttype == PKT_USER_ID );
++ PKT_user_id *uid = node->pkt->pkt.user_id;
++
++ if(uid->attrib_data)
++ printf("uat:");
++ else
++ printf("uid:");
++
++ if ( uid->is_revoked )
++ printf("r::::::::");
++ else if ( uid->is_expired )
++ printf("e::::::::");
++ else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
++ printf("::::::::");
++ else
++ {
++ int uid_validity;
++
++ if( primary && !ulti_hack )
++ uid_validity = get_validity_info( primary, uid );
++ else
++ uid_validity = 'u';
++ printf("%c::::::::",uid_validity);
++ }
++
++ if(uid->attrib_data)
++ printf ("%u %lu",uid->numattribs,uid->attrib_len);
++ else
++ print_string (stdout, uid->name, uid->len, ':');
++
++ putchar (':');
++ /* signature class */
++ putchar (':');
++ /* capabilities */
++ putchar (':');
++ /* preferences */
++ if (pk_version>3 || uid->selfsigversion>3)
++ {
++ const prefitem_t *prefs = uid->prefs;
++
++ for (j=0; prefs && prefs[j].type; j++)
++ {
++ if (j)
++ putchar (' ');
++ printf ("%c%d", prefs[j].type == PREFTYPE_SYM ? 'S' :
++ prefs[j].type == PREFTYPE_HASH ? 'H' :
++ prefs[j].type == PREFTYPE_ZIP ? 'Z':'?',
++ prefs[j].value);
++ }
++ if (uid->mdc_feature)
++ printf (",mdc");
++ if (!uid->ks_modify)
++ printf (",no-ks-modify");
++ }
++ putchar (':');
++ /* flags */
++ printf ("%d,", index);
++ if (uid->is_primary)
++ putchar ('p');
++ if (uid->is_revoked)
++ putchar ('r');
++ if (uid->is_expired)
++ putchar ('e');
++ if ((node->flag & NODFLG_SELUID))
++ putchar ('s');
++ if ((node->flag & NODFLG_MARK_A))
++ putchar ('m');
++ putchar (':');
++ putchar('\n');
++}
++
+ /* This is the version of show_key_with_all_names used when
+ opt.with_colons is used. It prints all available data in a easy to
+ parse format and does not translate utf8 */
+@@ -1905,80 +2001,12 @@
+
+ /* the user ids */
+ i = 0;
+- for (node = keyblock; node; node = node->next)
++ for (node = keyblock; node; node = node->next)
+ {
+ if ( node->pkt->pkttype == PKT_USER_ID )
+ {
+- PKT_user_id *uid = node->pkt->pkt.user_id;
+-
+ ++i;
+-
+- if(uid->attrib_data)
+- printf("uat:");
+- else
+- printf("uid:");
+-
+- if ( uid->is_revoked )
+- printf("r::::::::");
+- else if ( uid->is_expired )
+- printf("e::::::::");
+- else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
+- printf("::::::::");
+- else
+- {
+- int uid_validity;
+-
+- if( primary && !ulti_hack )
+- uid_validity = get_validity_info( primary, uid );
+- else
+- uid_validity = 'u';
+- printf("%c::::::::",uid_validity);
+- }
+-
+- if(uid->attrib_data)
+- printf ("%u %lu",uid->numattribs,uid->attrib_len);
+- else
+- print_string (stdout, uid->name, uid->len, ':');
+-
+- putchar (':');
+- /* signature class */
+- putchar (':');
+- /* capabilities */
+- putchar (':');
+- /* preferences */
+- if (pk_version>3 || uid->selfsigversion>3)
+- {
+- const prefitem_t *prefs = uid->prefs;
+-
+- for (j=0; prefs && prefs[j].type; j++)
+- {
+- if (j)
+- putchar (' ');
+- printf ("%c%d", prefs[j].type == PREFTYPE_SYM ? 'S' :
+- prefs[j].type == PREFTYPE_HASH ? 'H' :
+- prefs[j].type == PREFTYPE_ZIP ? 'Z':'?',
+- prefs[j].value);
+- }
+- if (uid->mdc_feature)
+- printf (",mdc");
+- if (!uid->ks_modify)
+- printf (",no-ks-modify");
+- }
+- putchar (':');
+- /* flags */
+- printf ("%d,", i);
+- if (uid->is_primary)
+- putchar ('p');
+- if (uid->is_revoked)
+- putchar ('r');
+- if (uid->is_expired)
+- putchar ('e');
+- if ((node->flag & NODFLG_SELUID))
+- putchar ('s');
+- if ((node->flag & NODFLG_MARK_A))
+- putchar ('m');
+- putchar (':');
+- putchar('\n');
++ show_one_uid_colon(node, i, primary, ulti_hack, pk_version);
+ }
+ }
+ }
+@@ -2506,17 +2534,23 @@
+ KBNODE node;
+ PKT_user_id *uid = NULL;
+ int changed=0;
++ KBNODE uidnode = NULL;
+
+ for( node = pub_keyblock; node; node = node->next ) {
+ if( node->pkt->pkttype == PKT_USER_ID ) {
+ uid = (node->flag & NODFLG_SELUID)? node->pkt->pkt.user_id : NULL;
++ uidnode = node;
+ }
+ else if( uid && node->pkt->pkttype == PKT_SIGNATURE ) {
+ int okay, valid, selfsig, inv_sig, no_key, other_err;
+
+- tty_printf("uid ");
+- tty_print_utf8_string( uid->name, uid->len );
+- tty_printf("\n");
++ if (opt.with_colons)
++ show_one_uid_colon (uidnode, 0, NULL, 0, 0); /* FIXME: pk_version */
++ else {
++ tty_printf("uid ");
++ tty_print_utf8_string( uid->name, uid->len );
++ tty_printf("\n");
++ }
+
+ okay = inv_sig = no_key = other_err = 0;
+ valid = print_and_check_one_sig( pub_keyblock, node,
+diff -ur gnupg-1.3.6.orig/g10/status.c gnupg-1.3.6/g10/status.c
+--- gnupg-1.3.6.orig/g10/status.c 2004-05-22 13:19:05.000000000 +0200
++++ gnupg-1.3.6/g10/status.c 2004-06-12 15:25:53.142553888 +0200
+@@ -590,6 +590,9 @@
+ {
+ char *p;
+
++ fflush(stdout);
++ fflush(stderr);
++
+ if( opt.command_fd != -1 )
+ return do_get_from_fd ( keyword, 0, 0 );
+ #ifdef USE_SHM_COPROCESSING
+@@ -607,6 +610,9 @@
+ {
+ char *p;
+
++ fflush(stdout);
++ fflush(stderr);
++
+ if( opt.command_fd != -1 )
+ return do_get_from_fd ( keyword, 0, 0 );
+ #ifdef USE_SHM_COPROCESSING
+@@ -643,6 +649,9 @@
+ {
+ char *p;
+
++ fflush(stdout);
++ fflush(stderr);
++
+ if( opt.command_fd != -1 )
+ return do_get_from_fd ( keyword, 1, 0 );
+ #ifdef USE_SHM_COPROCESSING
+@@ -679,6 +688,9 @@
+ int yes;
+ char *p;
+
++ fflush(stdout);
++ fflush(stderr);
++
+ if( opt.command_fd != -1 )
+ return !!do_get_from_fd ( keyword, 0, 1 );
+ #ifdef USE_SHM_COPROCESSING
+@@ -707,6 +719,9 @@
+ int yes;
+ char *p;
+
++ fflush(stdout);
++ fflush(stderr);
++
+ if( opt.command_fd != -1 )
+ return !!do_get_from_fd ( keyword, 0, 1 );
+ #ifdef USE_SHM_COPROCESSING
+@@ -739,6 +754,9 @@
+ char *answer = NULL;
+ char *p;
+
++ fflush(stdout);
++ fflush(stderr);
++
+ if( opt.command_fd != -1 )
+ answer = do_get_from_fd ( keyword, 0, 0 );
+ #ifdef USE_SHM_COPROCESSING