Changed -strictpem to use PEM_read_bio

This commit is contained in:
Matt Caswell 2014-05-26 23:22:08 +01:00
parent 6b5c1d940b
commit 3d9243f1b6
2 changed files with 41 additions and 57 deletions

View File

@ -80,8 +80,6 @@
#undef PROG
#define PROG asn1parse_main
/* Minimum buffer size to be used */
#define MIN_BUFFER 256
int MAIN(int, char **);
@ -94,7 +92,7 @@ int MAIN(int argc, char **argv)
long num,tmplen;
BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
int informat,indent=0, noout = 0, dump = 0, strictpem = 0;
char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL, *name=NULL, *header=NULL;
char *genstr=NULL, *genconf=NULL;
unsigned char *tmpbuf;
const unsigned char *ctmpbuf;
@ -271,8 +269,20 @@ bad:
}
}
if(strictpem)
{
if(PEM_read_bio(in, &name, &header, (unsigned char **)&str, &num) != 1)
{
BIO_printf(bio_err,"Error reading PEM file\n");
ERR_print_errors(bio_err);
goto end;
}
}
else
{
if ((buf=BUF_MEM_new()) == NULL) goto end;
if (!BUF_MEM_grow(buf,(BUFSIZ*8)<MIN_BUFFER?MIN_BUFFER:(BUFSIZ*8))) goto end; /* Pre-allocate :-) */
if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
if (genstr || genconf)
{
@ -291,38 +301,6 @@ bad:
{
BIO *tmp;
if(strictpem)
{
for (;;)
{
/* Read a line */
i=BIO_gets(in,buf->data,MIN_BUFFER-1);
if (i <= 0)
{
BIO_printf(bio_err, "Error: Cannot find start line\n");
goto end;
}
/* Strip trailing spaces etc */
do
i--;
while ((i >= 0) && (buf->data[i] <= ' '));
buf->data[++i]='\0';
/* Check if we have a PEM BEGIN marker */
if (strncmp(buf->data,"-----BEGIN ",11) == 0)
{
if (strncmp(&(buf->data[i-5]),"-----",5) != 0)
continue;
break;
}
}
}
if ((b64=BIO_new(BIO_f_base64())) == NULL)
goto end;
BIO_push(b64,in);
@ -342,6 +320,8 @@ bad:
}
str=buf->data;
}
/* If any structs to parse go through in sequence */
if (sk_OPENSSL_STRING_num(osk))
@ -419,6 +399,9 @@ end:
if (ret != 0)
ERR_print_errors(bio_err);
if (buf != NULL) BUF_MEM_free(buf);
if (name != NULL) OPENSSL_free(name);
if (header != NULL) OPENSSL_free(header);
if (strictpem && str != NULL) OPENSSL_free(str);
if (at != NULL) ASN1_TYPE_free(at);
if (osk != NULL) sk_OPENSSL_STRING_free(osk);
OBJ_cleanup();

View File

@ -82,9 +82,10 @@ file using the B<out> option.
=item B<-strictpem>
If this option is used then B<-inform> will be ignored. Without this option any
data in a PEM format input file will be treated as base64 encoded and processed
whether it has the normal PEM BEGIN and END markers or not. This option will
ignore any data prior to the start of the BEGIN marker in a PEM file.
data in a PEM format input file will be treated as being base64 encoded and
processed whether it has the normal PEM BEGIN and END markers or not. This
option will ignore any data prior to the start of the BEGIN marker, or after an
END marker in a PEM file.
=back