}
/* }}} */
+
static long load_stream_cafile(X509_STORE *cert_store, const char *cafile TSRMLS_DC) /* {{{ */
{
php_stream *stream;
X509 *cert;
BIO *buffer;
- int buffer_active;
+ int buffer_active = 0;
char *line;
size_t line_len;
long certs_added = 0;
- const char *begin_line = "-----BEGIN CERTIFICATE-----\n";
- const char *end_line = "-----END CERTIFICATE-----\n";
stream = php_stream_open_wrapper(cafile, "rb", 0, NULL);
line = php_stream_get_line(stream, NULL, 0, &line_len);
if (line == NULL) {
goto stream_complete;
- } else if (strcmp(line, begin_line)) {
- efree(line);
- goto cert_start;
- } else {
+ } else if (!strcmp(line, "-----BEGIN CERTIFICATE-----\n") ||
+ !strcmp(line, "-----BEGIN CERTIFICATE-----\r\n")
+ ) {
buffer = BIO_new(BIO_s_mem());
buffer_active = 1;
+ goto cert_line;
+ } else {
+ efree(line);
+ goto cert_start;
}
}
line = php_stream_get_line(stream, NULL, 0, &line_len);
if (line == NULL) {
goto stream_complete;
- } else if (strcmp(line, end_line)) {
- goto cert_line;
- } else {
+ } else if (!strcmp(line, "-----END CERTIFICATE-----") ||
+ !strcmp(line, "-----END CERTIFICATE-----\n") ||
+ !strcmp(line, "-----END CERTIFICATE-----\r\n")
+ ) {
goto add_cert;
+ } else {
+ goto cert_line;
}
}
stream_complete: {
php_stream_close(stream);
- if (buffer_active) {
+ if (buffer_active == 1) {
BIO_free(buffer);
}
}
-
+
+ if (certs_added == 0) {
+ php_error(E_WARNING, "no valid certs found cafile stream: `%s'", cafile);
+ }
+
return certs_added;
}
/* }}} */