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-2023 OpenVPN Inc <sales@openvpn.net>
9  * Copyright (C) 2014-2015 David Sommerseth <davids@redhat.com>
10  * Copyright (C) 2016-2023 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 #endif
29 
30 #include "syshead.h"
31 #include "console.h"
32 #include "error.h"
33 #include "buffer.h"
34 #include "misc.h"
35 
36 #ifdef ENABLE_SYSTEMD
37 #include <systemd/sd-daemon.h>
38 #endif
39 
40 
42 
43 
44 void
46 {
47  int i;
48 
49  for (i = 0; i < QUERY_USER_NUMSLOTS; i++)
50  {
51  CLEAR(query_user[i]);
52  }
53 }
54 
55 
56 void
58  char *resp, size_t resp_len,
59  bool echo)
60 {
61  int i;
62 
63  /* Ensure input is sane. All these must be present otherwise it is
64  * a programming error.
65  */
66  ASSERT( prompt_len > 0 && prompt != NULL && resp_len > 0 && resp != NULL );
67 
68  /* Seek to the last unused slot */
69  for (i = 0; i < QUERY_USER_NUMSLOTS; i++)
70  {
71  if (query_user[i].prompt == NULL)
72  {
73  break;
74  }
75  }
76  ASSERT( i < QUERY_USER_NUMSLOTS ); /* Unlikely, but we want to panic if it happens */
77 
78  /* Save the information needed for the user interaction */
81  query_user[i].response = resp;
82  query_user[i].response_len = resp_len;
83  query_user[i].echo = echo;
84 }
error.h
_query_user::echo
bool echo
True: The user should see what is being typed, otherwise mask it.
Definition: console.h:39
query_user
struct _query_user query_user[QUERY_USER_NUMSLOTS]
Global variable, declared in console.c.
Definition: console.c:41
_query_user
Configuration setup for declaring what kind of information to ask a user for.
Definition: console.h:34
console.h
CLEAR
#define CLEAR(x)
Definition: basic.h:33
ASSERT
#define ASSERT(x)
Definition: error.h:201
query_user_add
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:57
_query_user::response_len
size_t response_len
Length the of the user response.
Definition: console.h:38
_query_user::prompt_len
size_t prompt_len
Length of the prompt string.
Definition: console.h:36
misc.h
QUERY_USER_NUMSLOTS
#define QUERY_USER_NUMSLOTS
Definition: console.h:42
query_user_clear
void query_user_clear(void)
Wipes all data put into all of the query_user structs.
Definition: console.c:45
buffer.h
syshead.h
_query_user::prompt
char * prompt
Prompt to present to the user.
Definition: console.h:35
_query_user::response
char * response
The user's response.
Definition: console.h:37
config.h