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-2024 OpenVPN Inc <sales@openvpn.net>
9 * Copyright (C) 2014-2015 David Sommerseth <davids@redhat.com>
10 * Copyright (C) 2016-2024 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
44void
46{
47 int i;
48
49 for (i = 0; i < QUERY_USER_NUMSLOTS; i++)
50 {
51 CLEAR(query_user[i]);
52 }
53}
54
55
56void
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}
void query_user_clear(void)
Wipes all data put into all of the query_user structs.
Definition console.c:45
struct _query_user query_user[QUERY_USER_NUMSLOTS]
Global variable, declared in console.c.
Definition console.c:41
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
#define QUERY_USER_NUMSLOTS
Definition console.h:42
#define CLEAR(x)
Definition basic.h:33
#define ASSERT(x)
Definition error.h:195
Configuration setup for declaring what kind of information to ask a user for.
Definition console.h:34
char * prompt
Prompt to present to the user.
Definition console.h:35
size_t prompt_len
Length of the prompt string.
Definition console.h:36
size_t response_len
Length the of the user response.
Definition console.h:38
char * response
The user's response.
Definition console.h:37
bool echo
True: The user should see what is being typed, otherwise mask it.
Definition console.h:39