On Tue, 04 Apr 2006, David Shaw wrote: > > Also, is there a tool that produces a snippet which is ready for > > inclusion into a zone file anywhere? Something similar to ssh-keygen > > for SSHFP RRs: > > [EMAIL PROTECTED]:~$ ssh-keygen -r galaxy -f /etc/ssh/ssh_host_rsa_key -g > > galaxy IN TYPE44 \# 22 01 01 40cc5559546421d15fe9c1064713636a02373ad2 > > [EMAIL PROTECTED]:~$ ssh-keygen -r galaxy -f /etc/ssh/ssh_host_rsa_key > > galaxy IN SSHFP 1 1 40cc5559546421d15fe9c1064713636a02373ad2 > > Good idea. I just checked one in to the GnuPG SVN.
It seems it considers whitespace part of the fpr when creating IPGP data. For instance: | [EMAIL PROTECTED]:~/local/src/gnupg/gnupg14/tools$ ./make-dns-cert -f '5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E 94C0 9C7F' -n foo | foo TYPE37 \# 31 0006 0000 00 19 5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E 94C0 9C7F ^^ | [EMAIL PROTECTED]:~/local/src/gnupg/gnupg14/tools$ ./make-dns-cert -f '5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E94C09C7F' -n foo | foo TYPE37 \# 30 0006 0000 00 18 5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E94C09C7F ^^ It should just ignore whitespace when counting fingerprint length. | ./make-dns-cert -f '5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E94C09C7F' -n foo | foo TYPE37 \# 26 0006 0000 00 14 5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E94C09C7F This should fix it: Index: make-dns-cert.c =================================================================== --- make-dns-cert.c (revision 4091) +++ make-dns-cert.c (working copy) @@ -24,6 +24,7 @@ #ifdef HAVE_GETOPT_H #include <getopt.h> #endif +#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -97,7 +98,20 @@ if(fpr) { - fprlen=strlen(fpr); + const char *tmp = fpr; + while (*tmp) + { + if (isxdigit(*tmp)) + { + fprlen++; + } + else if (!isspace(*tmp)) + { + printf("Fingerprint must consist of only hex digits (and whitespace)\n"); + return 1; + } + tmp++; + } if(fprlen%2) { printf("Fingerprint must be an even number of characters\n"); And a second patch that uses stderr for errors on top of this one: --- make-dns-cert.c.orig 2006-04-05 09:57:48.725050937 +0200 +++ make-dns-cert.c 2006-04-05 10:00:23.675749478 +0200 @@ -45,20 +45,20 @@ fd=open(keyfile,O_RDONLY); if(fd==-1) { - printf("Cannot open key file %s: %s\n",keyfile,strerror(errno)); + fprintf(stderr, "Cannot open key file %s: %s\n",keyfile,strerror(errno)); return 1; } err=fstat(fd,&statbuf); if(err==-1) { - printf("Unable to stat key file %s: %s\n",keyfile,strerror(errno)); + fprintf(stderr, "Unable to stat key file %s: %s\n",keyfile,strerror(errno)); goto fail; } if(statbuf.st_size>32768) { - printf("Key %s too large for CERT encoding\n",keyfile); + fprintf(stderr, "Key %s too large for CERT encoding\n",keyfile); goto fail; } @@ -73,7 +73,7 @@ err=read(fd,buffer,1024); if(err==-1) { - printf("Unable to read key file %s: %s\n",keyfile,strerror(errno)); + fprintf(stderr, "Unable to read key file %s: %s\n",keyfile,strerror(errno)); goto fail; } @@ -107,14 +107,14 @@ } else if (!isspace(*tmp)) { - printf("Fingerprint must consist of only hex digits (and whitespace)\n"); + fprintf(stderr, "Fingerprint must consist of only hex digits (and whitespace)\n"); return 1; } tmp++; } if(fprlen%2) { - printf("Fingerprint must be an even number of characters\n"); + fprintf(stderr, "Fingerprint must be an even number of characters\n"); return 1; } @@ -127,7 +127,7 @@ if(!fpr && !url) { - printf("Cannot generate a CERT without either a fingerprint or URL\n"); + fprintf(stderr, "Cannot generate a CERT without either a fingerprint or URL\n"); return 1; } @@ -150,13 +150,13 @@ } static void -usage(void) +usage(FILE *f) { - printf("make-dns-cert\n"); - printf("\t-f\tfingerprint\n"); - printf("\t-u\tURL\n"); - printf("\t-k\tkey file\n"); - printf("\t-n\tDNS name\n"); + fprintf(f, "make-dns-cert\n"); + fprintf(f, "\t-f\tfingerprint\n"); + fprintf(f, "\t-u\tURL\n"); + fprintf(f, "\t-k\tkey file\n"); + fprintf(f, "\t-n\tDNS name\n"); } int @@ -167,7 +167,7 @@ if(argc==1) { - usage(); + usage(stderr); return 0; } else if(argc>1 && strcmp(argv[1],"--version")==0) @@ -177,7 +177,7 @@ } else if(argc>1 && strcmp(argv[1],"--help")==0) { - usage(); + usage(stdout); return 0; } @@ -186,7 +186,7 @@ { default: case 'h': - usage(); + usage(stdout); exit(0); case 'f': @@ -208,14 +208,14 @@ if(!name) { - printf("No name provided\n"); + fprintf(stderr, "No name provided\n"); return 1; } if(keyfile && (fpr || url)) { - printf("Cannot generate a CERT record with both a keyfile and" - " a fingerprint or URL\n"); + fprintf(stderr, "Cannot generate a CERT record with both a" + " keyfile and a fingerprint or URL\n"); return 1; } _______________________________________________ Gnupg-users mailing list Gnupg-users@gnupg.org http://lists.gnupg.org/mailman/listinfo/gnupg-users