GNUnet  0.10.x
gnunet-transport-certificate-creation.c
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2011, 2013 GNUnet e.V.
4 
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.
9 
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.
14 
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/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19 */
20 
26 #include "platform.h"
27 #include "gnunet_util_lib.h"
28 
29 #ifndef WINDOWS
30 
36 static void
37 make_dev_zero (int fd,
38  int flags)
39 {
40  int z;
41 
42  GNUNET_assert (0 == close (fd));
43  z = open ("/dev/null", flags);
44  GNUNET_assert (-1 != z);
45  if (z == fd)
46  return;
47  GNUNET_break (fd == dup2 (z, fd));
48  GNUNET_assert (0 == close (z));
49 }
50 #endif
51 
52 
53 static void
54 removecerts (const char *file1,
55  const char *file2)
56 {
57  if (GNUNET_YES == GNUNET_DISK_file_test (file1))
58  {
59  if (0 != CHMOD (file1, S_IWUSR | S_IRUSR))
61  if (0 != REMOVE (file1))
63  }
64  if (GNUNET_YES == GNUNET_DISK_file_test (file2))
65  {
66  if (0 != CHMOD (file2, S_IWUSR | S_IRUSR))
68  if (0 != REMOVE (file2))
70  }
71 }
72 
73 
74 int
75 main (int argc, char **argv)
76 {
77  struct GNUNET_OS_Process *openssl;
78 
79  if (3 != argc)
80  {
81  fprintf (stderr,
82  "Invalid arguments.\n");
83  return 1;
84  }
85  removecerts (argv[1], argv[2]);
88  /* eliminate stderr */
89 #if WINDOWS
90  (void) close (2);
91 #else
92  make_dev_zero (2, O_WRONLY);
93 #endif
94  /* Create RSA Private Key */
95  /* openssl genrsa -out $1 1024 2> /dev/null */
96  openssl =
98  NULL, NULL, NULL,
99  "openssl", "openssl", "genrsa",
100  "-out", argv[1], "1024", NULL);
101  if (NULL == openssl)
102  {
103  fprintf (stderr,
104  "Failed to run openssl. Is openssl installed?\n");
105  return 2;
106  }
108  GNUNET_OS_process_destroy (openssl);
109 
110  /* Create a self-signed certificate in batch mode using rsa key */
111  /* openssl req -batch -days 365 -out $2 -new -x509 -key $1 2> /dev/null */
112  openssl =
114  NULL, NULL, NULL,
115  "openssl", "openssl", "req",
116  "-batch", "-days", "365", "-out", argv[2],
117  "-new", "-x509", "-key", argv[1], NULL);
118  if (NULL == openssl)
119  {
120  fprintf (stderr,
121  "Failed to create self-signed certificate with openssl.\n");
122  return 3;
123  }
125  GNUNET_OS_process_destroy (openssl);
126  if (0 != CHMOD (argv[1], S_IRUSR))
128  if (0 != CHMOD (argv[2], S_IRUSR))
130  return 0;
131 }
132 
133 /* end of gnunet-transport-certificate-creation.c */
int GNUNET_DISK_file_test(const char *fil)
Check that fil corresponds to a filename (of a file that exists and that is not a directory)...
Definition: disk.c:669
static void make_dev_zero(int fd, int flags)
Turn the given file descriptor in to &#39;/dev/null&#39;.
#define CHMOD(f, p)
Definition: plibc.h:657
void GNUNET_OS_process_destroy(struct GNUNET_OS_Process *proc)
Cleans up process structure contents (OS-dependent) and deallocates it.
Definition: os_priority.c:364
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_OS_Process * GNUNET_OS_start_process(int pipe_control, enum GNUNET_OS_InheritStdioFlags std_inheritance, struct GNUNET_DISK_PipeHandle *pipe_stdin, struct GNUNET_DISK_PipeHandle *pipe_stdout, struct GNUNET_DISK_PipeHandle *pipe_stderr, const char *filename,...)
Start a process.
Definition: os_priority.c:1400
int GNUNET_DISK_directory_create_for_file(const char *filename)
Create the directory structure for storing a file.
Definition: disk.c:833
#define GNUNET_NO
Definition: gnunet_common.h:81
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static void removecerts(const char *file1, const char *file2)
#define GNUNET_log_strerror_file(level, cmd, filename)
Log an error message at log-level &#39;level&#39; that indicates a failure of the command &#39;cmd&#39; with the mess...
int main(int argc, char **argv)
#define REMOVE(p)
Definition: plibc.h:661
When these flags are set, the child process will inherit stdout and stderr of the parent...
Definition: gnunet_os_lib.h:98
int GNUNET_OS_process_wait(struct GNUNET_OS_Process *proc)
Wait for a process to terminate.
Definition: os_priority.c:1762
#define GNUNET_YES
Definition: gnunet_common.h:80