Blame tests/nul-in-x509-names.c

Packit aea12f
/*
Packit aea12f
 * Copyright (C) 2009-2012 Free Software Foundation, Inc.
Packit aea12f
 *
Packit aea12f
 * Author: Simon Josefsson
Packit aea12f
 *
Packit aea12f
 * This file is part of GnuTLS.
Packit aea12f
 *
Packit aea12f
 * GnuTLS is free software; you can redistribute it and/or modify it
Packit aea12f
 * under the terms of the GNU General Public License as published by
Packit aea12f
 * the Free Software Foundation; either version 3 of the License, or
Packit aea12f
 * (at your option) any later version.
Packit aea12f
 *
Packit aea12f
 * GnuTLS is distributed in the hope that it will be useful, but
Packit aea12f
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit aea12f
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit aea12f
 * General Public License for more details.
Packit aea12f
 *
Packit aea12f
 * You should have received a copy of the GNU General Public License
Packit aea12f
 * along with GnuTLS; if not, write to the Free Software Foundation,
Packit aea12f
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Packit aea12f
 */
Packit aea12f
Packit aea12f
#ifdef HAVE_CONFIG_H
Packit aea12f
#include <config.h>
Packit aea12f
#endif
Packit aea12f
Packit aea12f
#include <stdlib.h>
Packit aea12f
#include <stdio.h>
Packit aea12f
#include <string.h>
Packit aea12f
#include <gnutls/gnutls.h>
Packit aea12f
#include <gnutls/x509.h>
Packit aea12f
Packit aea12f
#include "utils.h"
Packit aea12f
Packit aea12f
/* Thanks to Tomas Hoger <thoger@redhat.com> for generating the two
Packit aea12f
   certs that trigger this bug. */
Packit aea12f
Packit aea12f
static char badguy_nul_cn_data[] =
Packit aea12f
    "-----BEGIN CERTIFICATE-----\n"
Packit aea12f
    "MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQUFADB0MQswCQYDVQQGEwJHQjES\n"
Packit aea12f
    "MBAGA1UECBMJQmVya3NoaXJlMRAwDgYDVQQHEwdOZXdidXJ5MRcwFQYDVQQKEw5N\n"
Packit aea12f
    "eSBDb21wYW55IEx0ZDELMAkGA1UECxMCQ0ExGTAXBgNVBAMTEE5VTEwtZnJpZW5k\n"
Packit aea12f
    "bHkgQ0EwHhcNMDkwODA0MDczMzQzWhcNMTkwODAyMDczMzQzWjAjMSEwHwYDVQQD\n"
Packit aea12f
    "Exh3d3cuYmFuay5jb20ALmJhZGd1eS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\n"
Packit aea12f
    "DwAwggEKAoIBAQDNJnCWqaZdPpztDwgVWnwXJWhorxO5rUH6ElTihHJ9WNHiQELB\n"
Packit aea12f
    "We0FPaoQU3AAiDp3oMBWnqx9ISpxRFEIvBcH2qijdtxRvBuK9gIaVb9GtERrJ16+\n"
Packit aea12f
    "5ReLVrLGgjYRg6i/9y8NF/bNR7VvK6ZBto0zX+rqi7Ea4pk4/1lbCqFxE8o3P7mw\n"
Packit aea12f
    "HpGayJM1DErgnfTSYcdOW0EKfDFUmdv1Zc6A08ICN2T9VBJ76qyFWVwX4S720Kjy\n"
Packit aea12f
    "0C6UWS/Cpl/aB957LhQH7eQnJDedCS6x+VpIuYAkQ+bLx24139VpNP/m1p7odmZu\n"
Packit aea12f
    "X1kBPJY77HILPB6VD85oE5wi3Ru1RChQSgV/AgMBAAGjezB5MAkGA1UdEwQCMAAw\n"
Packit aea12f
    "LAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0G\n"
Packit aea12f
    "A1UdDgQWBBQzFSS+2mY6BovZJzQ6r2JA5JVmXTAfBgNVHSMEGDAWgBQKaTlfnTAE\n"
Packit aea12f
    "GAguAg7m6p2yJvbiajANBgkqhkiG9w0BAQUFAAOCAQEAMmUjH8jZU4SC0ArrFFEk\n"
Packit aea12f
    "A7xsGypa/hvw6GkMKxmGz38ydtgr0s+LxNG2W5xgo5kuknIGzt6L0qLSiXwTqQtO\n"
Packit aea12f
    "vhIJ5dYoOqynJlaUfxPuZH3elGB1wbxVl9SqE44C2LCwcFOuGFPOqrIshT7j8+Em\n"
Packit aea12f
    "8/pc7vh7C8Y5tQQzXq64Xg5mzKjAag3sYMHF2TnqvRuPHH0WOLHoyDcBqkuZ3+QP\n"
Packit aea12f
    "EL5h7prPzScFRgBg2Gp0CDI8i5ABagczDGyQ2+r7ahcadrtzFCfhpH7V3TCxXfIO\n"
Packit aea12f
    "qtSy1Uz2T5EqB/Q3wc9IGcX+fpKWqN9QajGSo7EU/kHMSWKYTerFugUtScMicu9B\n"
Packit aea12f
    "CQ==\n" "-----END CERTIFICATE-----\n";
Packit aea12f
Packit aea12f
const gnutls_datum_t badguy_nul_cn = {
Packit aea12f
	(void *) badguy_nul_cn_data, sizeof(badguy_nul_cn_data)
Packit aea12f
};
Packit aea12f
Packit aea12f
static char badguy_nul_san_data[] =
Packit aea12f
    "-----BEGIN CERTIFICATE-----\n"
Packit aea12f
    "MIIDrTCCApWgAwIBAgIBADANBgkqhkiG9w0BAQUFADB0MQswCQYDVQQGEwJHQjES\n"
Packit aea12f
    "MBAGA1UECBMJQmVya3NoaXJlMRAwDgYDVQQHEwdOZXdidXJ5MRcwFQYDVQQKEw5N\n"
Packit aea12f
    "eSBDb21wYW55IEx0ZDELMAkGA1UECxMCQ0ExGTAXBgNVBAMTEE5VTEwtZnJpZW5k\n"
Packit aea12f
    "bHkgQ0EwHhcNMDkwODA0MDY1MzA1WhcNMTkwODAyMDY1MzA1WjAZMRcwFQYDVQQD\n"
Packit aea12f
    "Ew53d3cuYmFkZ3V5LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n"
Packit aea12f
    "AM0mcJappl0+nO0PCBVafBclaGivE7mtQfoSVOKEcn1Y0eJAQsFZ7QU9qhBTcACI\n"
Packit aea12f
    "OnegwFaerH0hKnFEUQi8FwfaqKN23FG8G4r2AhpVv0a0RGsnXr7lF4tWssaCNhGD\n"
Packit aea12f
    "qL/3Lw0X9s1HtW8rpkG2jTNf6uqLsRrimTj/WVsKoXETyjc/ubAekZrIkzUMSuCd\n"
Packit aea12f
    "9NJhx05bQQp8MVSZ2/VlzoDTwgI3ZP1UEnvqrIVZXBfhLvbQqPLQLpRZL8KmX9oH\n"
Packit aea12f
    "3nsuFAft5CckN50JLrH5Wki5gCRD5svHbjXf1Wk0/+bWnuh2Zm5fWQE8ljvscgs8\n"
Packit aea12f
    "HpUPzmgTnCLdG7VEKFBKBX8CAwEAAaOBpDCBoTAJBgNVHRMEAjAAMCwGCWCGSAGG\n"
Packit aea12f
    "+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU\n"
Packit aea12f
    "MxUkvtpmOgaL2Sc0Oq9iQOSVZl0wHwYDVR0jBBgwFoAUCmk5X50wBBgILgIO5uqd\n"
Packit aea12f
    "sib24mowJgYDVR0RBB8wHYIbd3d3LmJhbmsuY29tAHd3dy5iYWRndXkuY29tMA0G\n"
Packit aea12f
    "CSqGSIb3DQEBBQUAA4IBAQAnbn2zqYZSV2qgxjBsHpQJp2+t/hGfvjKNAXuLlGbX\n"
Packit aea12f
    "fLaxkPzk9bYyvGxxI7EYiNZHvNoHx15GcTrmQG7Bfx1WlnBl2FGp3J6lBgCY5x4Q\n"
Packit aea12f
    "vIK6AOVOog8+7Irdb8bJweztbXwxPmaHR6GLFTwhfuwheD0hcHK6cMNk+B1P2dAn\n"
Packit aea12f
    "PD5+olmuvprTAESncjrjP8ibxY+xlP4AD264FIjxA1CRUa/wHve4WqRXNS3xrciu\n"
Packit aea12f
    "3SlhFH3q0TSAXBv960PcIW3GRPk7VHbEkVuspI5y59gk/6dawO8nw9fk+X9VjQ0w\n"
Packit aea12f
    "7KLZbch29L6UPRIySpFP28PndgdaEpcYtxUAmFkhiT41\n"
Packit aea12f
    "-----END CERTIFICATE-----\n";
Packit aea12f
Packit aea12f
const gnutls_datum_t badguy_nul_san = {
Packit aea12f
	(void *) badguy_nul_san_data, sizeof(badguy_nul_san_data)
Packit aea12f
};
Packit aea12f
Packit aea12f
void doit(void)
Packit aea12f
{
Packit aea12f
	gnutls_x509_crt_t crt;
Packit aea12f
	int ret;
Packit aea12f
Packit aea12f
	ret = global_init();
Packit aea12f
	if (ret < 0) {
Packit aea12f
		fail("global_init");
Packit aea12f
		exit(1);
Packit aea12f
	}
Packit aea12f
Packit aea12f
	ret = gnutls_x509_crt_init(&crt;;
Packit aea12f
	if (ret != 0) {
Packit aea12f
		fail("gnutls_x509_crt_init");
Packit aea12f
		exit(1);
Packit aea12f
	}
Packit aea12f
Packit aea12f
	ret =
Packit aea12f
	    gnutls_x509_crt_import(crt, &badguy_nul_cn,
Packit aea12f
				   GNUTLS_X509_FMT_PEM);
Packit aea12f
	if (ret < 0) {
Packit aea12f
		fail("gnutls_x509_crt_import");
Packit aea12f
		exit(1);
Packit aea12f
	}
Packit aea12f
Packit aea12f
	ret = gnutls_x509_crt_check_hostname(crt, "www.bank.com");
Packit aea12f
	if (ret == 0) {
Packit aea12f
		if (debug)
Packit aea12f
			success
Packit aea12f
			    ("gnutls_x509_crt_check_hostname OK (NUL-IN-CN)");
Packit aea12f
	} else {
Packit aea12f
		fail("gnutls_x509_crt_check_hostname BROKEN (NUL-IN-CN)");
Packit aea12f
	}
Packit aea12f
Packit aea12f
	ret =
Packit aea12f
	    gnutls_x509_crt_import(crt, &badguy_nul_san,
Packit aea12f
				   GNUTLS_X509_FMT_PEM);
Packit aea12f
	if (ret < 0) {
Packit aea12f
		fail("gnutls_x509_crt_import");
Packit aea12f
		exit(1);
Packit aea12f
	}
Packit aea12f
Packit aea12f
	ret = gnutls_x509_crt_check_hostname(crt, "www.bank.com");
Packit aea12f
	if (ret == 0) {
Packit aea12f
		if (debug)
Packit aea12f
			success
Packit aea12f
			    ("gnutls_x509_crt_check_hostname OK (NUL-IN-SAN)");
Packit aea12f
	} else {
Packit aea12f
		fail("gnutls_x509_crt_check_hostname BROKEN (NUL-IN-SAN)");
Packit aea12f
	}
Packit aea12f
Packit aea12f
	gnutls_x509_crt_deinit(crt);
Packit aea12f
Packit aea12f
	gnutls_global_deinit();
Packit aea12f
Packit aea12f
}