2 This file is part of GNUnet.
3 Copyright (C) 2011, 2013 GNUnet e.V.
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 * @file transport/gnunet-transport-certificate-creation.c
21 * @brief create certificate for HTTPS transport
25 #include "gnunet_util_lib.h"
29 * Turn the given file descriptor in to '/dev/null'.
31 * @param fd fd to bind to /dev/null
32 * @param flags flags to use (O_RDONLY or O_WRONLY)
35 make_dev_zero (int fd,
40 GNUNET_assert (0 == close (fd));
41 z = open ("/dev/null", flags);
42 GNUNET_assert (-1 != z);
45 GNUNET_break (fd == dup2 (z, fd));
46 GNUNET_assert (0 == close (z));
52 removecerts (const char *file1,
55 if (GNUNET_YES == GNUNET_DISK_file_test (file1))
57 if (0 != CHMOD (file1, S_IWUSR | S_IRUSR))
58 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", file1);
59 if (0 != REMOVE (file1))
60 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "remove", file1);
62 if (GNUNET_YES == GNUNET_DISK_file_test (file2))
64 if (0 != CHMOD (file2, S_IWUSR | S_IRUSR))
65 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", file2);
66 if (0 != REMOVE (file2))
67 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "remove", file2);
73 main (int argc, char **argv)
75 struct GNUNET_OS_Process *openssl;
80 "Invalid arguments.\n");
83 removecerts (argv[1], argv[2]);
84 (void) GNUNET_DISK_directory_create_for_file (argv[1]);
85 (void) GNUNET_DISK_directory_create_for_file (argv[2]);
86 /* eliminate stderr */
90 make_dev_zero (2, O_WRONLY);
92 /* Create RSA Private Key */
93 /* openssl genrsa -out $1 1024 2> /dev/null */
95 GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
97 "openssl", "openssl", "genrsa",
98 "-out", argv[1], "1024", NULL);
102 "Failed to run openssl. Is openssl installed?\n");
105 GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (openssl));
106 GNUNET_OS_process_destroy (openssl);
108 /* Create a self-signed certificate in batch mode using rsa key */
109 /* openssl req -batch -days 365 -out $2 -new -x509 -key $1 2> /dev/null */
111 GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
113 "openssl", "openssl", "req",
114 "-batch", "-days", "365", "-out", argv[2],
115 "-new", "-x509", "-key", argv[1], NULL);
119 "Failed to create self-signed certificate with openssl.\n");
122 GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (openssl));
123 GNUNET_OS_process_destroy (openssl);
124 if (0 != CHMOD (argv[1], S_IRUSR))
125 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", argv[1]);
126 if (0 != CHMOD (argv[2], S_IRUSR))
127 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", argv[2]);
131 /* end of gnunet-transport-certificate-creation.c */