From: Nikos Mavrogiannopoulos Date: Fri, 31 Oct 2014 21:01:43 +0000 (+0100) Subject: tests: added test for gnutls_global_init after all descriptors are closed X-Git-Tag: gnutls_3_4_0~713 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2d9d6c3d4b35d41b9ea27b833b9610ecbb111a6;p=thirdparty%2Fgnutls.git tests: added test for gnutls_global_init after all descriptors are closed --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 657994e017..35dc93440a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -84,7 +84,7 @@ ctests = mini-record-2 simple gc set_pkcs12_cred certder certuniqueid \ mini-cert-status mini-rsa-psk global-init sec-params \ fips-test mini-global-load name-constraints x509-extensions \ long-session-id mini-x509-callbacks-intr mini-dtls-lowmtu \ - crlverify mini-dtls-discard + crlverify mini-dtls-discard init_fds if ENABLE_OCSP ctests += ocsp diff --git a/tests/init_fds.c b/tests/init_fds.c new file mode 100644 index 0000000000..bf7a5de9a8 --- /dev/null +++ b/tests/init_fds.c @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2014 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "utils.h" + +/* See . */ + +void doit(void) +{ +#ifndef _WIN32 + int res; + unsigned i; + int serial = 0; + char buf[128]; + + res = read(3, buf, 16); + if (res == 16) + serial = 1; + + /* close all descriptors */ + for (i=3;i<1024;i++) + close(i); + + res = gnutls_global_init(); + if (res != 0) + fail("global_init\n"); + + if (serial != 0) { + res = read(3, buf, 16); + if (res != 16) { + fail("could not open fd, or OS doesn't assign fds in a serial way (%d)\n", res); + } + } + + res = gnutls_global_init(); + if (res != 0) + fail("global_init2\n"); + + gnutls_rnd_refresh(); + + res = gnutls_rnd(GNUTLS_RND_RANDOM, buf, sizeof(buf)); + if (res != 0) + fail("gnutls_rnd\n"); + + gnutls_global_deinit(); + + if (debug) + success("init-close success\n"); +#else + return; +#endif +}