Blob
1 #include <u.h>2 #include <libc.h>3 #include <bio.h>4 #include <mp.h>5 #include <libsec.h>7 void8 usage(void)9 {10 fprint(2, "auth/pemdecode section [file]\n");11 exits("usage");12 }14 void15 main(int argc, char **argv)16 {17 char *buf;18 uchar *bin;19 int fd;20 long n, tot;21 int len;22 char *tag, *file;24 ARGBEGIN{25 default:26 usage();27 }ARGEND29 if(argc != 1 && argc != 2)30 usage();32 tag = argv[0];33 if(argc == 2)34 file = argv[1];35 else36 file = "/dev/stdin";38 if((fd = open(file, OREAD)) < 0)39 sysfatal("open %s: %r", file);40 buf = nil;41 tot = 0;42 for(;;){43 buf = realloc(buf, tot+8192);44 if(buf == nil)45 sysfatal("realloc: %r");46 if((n = read(fd, buf+tot, 8192)) < 0)47 sysfatal("read: %r");48 if(n == 0)49 break;50 tot += n;51 }52 buf[tot] = 0;53 bin = decodepem(buf, tag, &len, nil);54 if(bin == nil)55 sysfatal("cannot extract section '%s' from pem", tag);56 if((n=write(1, bin, len)) != len)57 sysfatal("writing %d bytes got %ld: %r", len, n);58 exits(0);59 }