OpenVPN
console.c
Go to the documentation of this file.
1 /*
2  * OpenVPN -- An application to securely tunnel IP networks
3  * over a single UDP port, with support for SSL/TLS-based
4  * session authentication and key exchange,
5  * packet encryption, packet authentication, and
6  * packet compression.
7  *
8  * Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net>
9  * Copyright (C) 2014-2015 David Sommerseth <davids@redhat.com>
10  * Copyright (C) 2016-2018 David Sommerseth <davids@openvpn.net>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License version 2
14  * as published by the Free Software Foundation.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License along
22  * with this program; if not, write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24  */
25 
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #elif defined(_MSC_VER)
29 #include "config-msvc.h"
30 #endif
31 
32 #include "syshead.h"
33 #include "console.h"
34 #include "error.h"
35 #include "buffer.h"
36 #include "misc.h"
37 
38 #ifdef ENABLE_SYSTEMD
39 #include <systemd/sd-daemon.h>
40 #endif
41 
42 
44 
45 
46 void
48 {
49  int i;
50 
51  for (i = 0; i < QUERY_USER_NUMSLOTS; i++)
52  {
53  CLEAR(query_user[i]);
54  }
55 }
56 
57 
58 void
60  char *resp, size_t resp_len,
61  bool echo)
62 {
63  int i;
64 
65  /* Ensure input is sane. All these must be present otherwise it is
66  * a programming error.
67  */
68  ASSERT( prompt_len > 0 && prompt != NULL && resp_len > 0 && resp != NULL );
69 
70  /* Seek to the last unused slot */
71  for (i = 0; i < QUERY_USER_NUMSLOTS; i++)
72  {
73  if (query_user[i].prompt == NULL)
74  {
75  break;
76  }
77  }
78  ASSERT( i < QUERY_USER_NUMSLOTS ); /* Unlikely, but we want to panic if it happens */
79 
80  /* Save the information needed for the user interaction */
83  query_user[i].response = resp;
84  query_user[i].response_len = resp_len;
85  query_user[i].echo = echo;
86 }
char * response
The user&#39;s response.
Definition: console.h:37
struct _query_user query_user[QUERY_USER_NUMSLOTS]
Global variable, declared in console.c.
Definition: console.c:43
char * prompt
Prompt to present to the user.
Definition: console.h:35
#define ASSERT(x)
Definition: error.h:221
void query_user_add(char *prompt, size_t prompt_len, char *resp, size_t resp_len, bool echo)
Adds an item to ask the user for.
Definition: console.c:59
#define CLEAR(x)
Definition: basic.h:33
size_t prompt_len
Length of the prompt string.
Definition: console.h:36
#define QUERY_USER_NUMSLOTS
Definition: console.h:42
size_t response_len
Length the of the user response.
Definition: console.h:38
bool echo
True: The user should see what is being typed, otherwise mask it.
Definition: console.h:39
void query_user_clear(void)
Wipes all data put into all of the query_user structs.
Definition: console.c:47
Configuration setup for declaring what kind of information to ask a user for.
Definition: console.h:34