blob: 42597fe1f4fa0585e167ffd1b2d3e9956fb03003 [file] [log] [blame]
Michal Vasko45f298f2016-01-29 10:26:26 +01001/**
Michal Vaskoc446a382021-06-18 08:54:05 +02002 * @file session_server_ch.h
3 * @author Michal Vasko <mvasko@cesnet.cz>
4 * @brief libnetconf2 Call Home session server manipulation
Michal Vasko45f298f2016-01-29 10:26:26 +01005 *
Michal Vasko95ea9ff2021-11-09 12:29:14 +01006 * @copyright
Michal Vaskoc446a382021-06-18 08:54:05 +02007 * Copyright (c) 2015 - 2021 CESNET, z.s.p.o.
Michal Vasko45f298f2016-01-29 10:26:26 +01008 *
Radek Krejci9b81f5b2016-02-24 13:14:49 +01009 * This source code is licensed under BSD 3-Clause License (the "License").
10 * You may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
Michal Vaskoafd416b2016-02-25 14:51:46 +010012 *
Radek Krejci9b81f5b2016-02-24 13:14:49 +010013 * https://opensource.org/licenses/BSD-3-Clause
Michal Vasko45f298f2016-01-29 10:26:26 +010014 */
15
16#ifndef NC_SESSION_SERVER_CH_H_
17#define NC_SESSION_SERVER_CH_H_
18
Michal Vaskoc09730e2019-01-17 10:07:26 +010019#ifdef __cplusplus
20extern "C" {
21#endif
22
Michal Vasko45f298f2016-01-29 10:26:26 +010023#include <libyang/libyang.h>
Michal Vaskob83a3fa2021-05-26 09:53:42 +020024#include <stdint.h>
roman3f9b65c2023-06-05 14:26:58 +020025#include <time.h>
Michal Vasko45f298f2016-01-29 10:26:26 +010026
Michal Vasko45f298f2016-01-29 10:26:26 +010027#include "netconf.h"
Michal Vaskob83a3fa2021-05-26 09:53:42 +020028#include "session.h"
Michal Vasko45f298f2016-01-29 10:26:26 +010029
roman2eab4742023-06-06 10:00:26 +020030#ifdef NC_ENABLED_SSH_TLS
Michal Vasko45f298f2016-01-29 10:26:26 +010031
32/**
Radek Krejci6799a052017-05-19 14:23:23 +020033 * @defgroup server_ch Server-side Call Home
34 * @ingroup server
35 *
36 * @brief Call Home functionality for server-side applications.
37 * @{
38 */
39
40/**
Michal Vasko2e6defd2016-10-07 15:48:15 +020041 * @brief Add a new Call Home client.
Michal Vasko45f298f2016-01-29 10:26:26 +010042 *
Michal Vasko2e6defd2016-10-07 15:48:15 +020043 * @param[in] name Arbitrary unique client name.
Michal Vasko2e6defd2016-10-07 15:48:15 +020044 * @return 0 on success, -1 on error.
Michal Vasko45f298f2016-01-29 10:26:26 +010045 */
Michal Vaskoadf30f02019-06-24 09:34:47 +020046int nc_server_ch_add_client(const char *name);
Michal Vasko2e6defd2016-10-07 15:48:15 +020047
48/**
49 * @brief Drop any connections, stop connecting and remove a client.
50 *
51 * @param[in] name Client name. NULL matches all the clients.
52 * @return 0 on success, -1 on not finding any match.
53 */
Michal Vaskoadf30f02019-06-24 09:34:47 +020054int nc_server_ch_del_client(const char *name);
Michal Vasko2e6defd2016-10-07 15:48:15 +020055
56/**
Michal Vaskofb1724b2020-01-31 11:02:00 +010057 * @brief Check if a Call Home client exists.
58 *
59 * @param[in] name Client name.
60 * @return 0 if does not exists, non-zero otherwise.
61 */
62int nc_server_ch_is_client(const char *name);
63
64/**
Michal Vasko2e6defd2016-10-07 15:48:15 +020065 * @brief Add a new Call Home client endpoint.
66 *
67 * @param[in] client_name Existing client name.
68 * @param[in] endpt_name Arbitrary unique (within the client) endpoint name.
Michal Vaskoadf30f02019-06-24 09:34:47 +020069 * @param[in] ti Transport protocol to use.
Michal Vasko2e6defd2016-10-07 15:48:15 +020070 * @return 0 on success, -1 on error.
71 */
Michal Vaskoadf30f02019-06-24 09:34:47 +020072int nc_server_ch_client_add_endpt(const char *client_name, const char *endpt_name, NC_TRANSPORT_IMPL ti);
Michal Vasko2e6defd2016-10-07 15:48:15 +020073
74/**
75 * @brief Remove a Call Home client endpoint.
76 *
77 * @param[in] client_name Existing client name.
Michal Vaskoc446a382021-06-18 08:54:05 +020078 * @param[in] endpt_name Existing endpoint of @p client_name. NULL matches all endpoints.
Michal Vaskoadf30f02019-06-24 09:34:47 +020079 * @param[in] ti Client transport protocol. NULL matches any protocol.
Michal Vaskoc446a382021-06-18 08:54:05 +020080 * Redundant to set if @p endpt_name is set, client names are
Michal Vaskoadf30f02019-06-24 09:34:47 +020081 * unique disregarding their protocol.
Michal Vasko2e6defd2016-10-07 15:48:15 +020082 * @return 0 on success, -1 on error.
83 */
Michal Vaskoadf30f02019-06-24 09:34:47 +020084int nc_server_ch_client_del_endpt(const char *client_name, const char *endpt_name, NC_TRANSPORT_IMPL ti);
Michal Vasko2e6defd2016-10-07 15:48:15 +020085
86/**
Michal Vaskofb1724b2020-01-31 11:02:00 +010087 * @brief Check if an endpoint of a Call Home client exists.
88 *
89 * @param[in] client_name Client name.
90 * @param[in] endpt_name Endpoint name.
91 * @return 0 if does not exists, non-zero otherwise.
92 */
93int nc_server_ch_client_is_endpt(const char *client_name, const char *endpt_name);
94
95/**
Michal Vasko2e6defd2016-10-07 15:48:15 +020096 * @brief Change Call Home client endpoint listening address.
97 *
98 * On error the previous listening socket (if any) is left untouched.
99 *
100 * @param[in] client_name Existing Call Home client name.
Michal Vaskoc446a382021-06-18 08:54:05 +0200101 * @param[in] endpt_name Existing endpoint name of @p client_name.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200102 * @param[in] address New listening address.
103 * @return 0 on success, -1 on error.
104 */
105int nc_server_ch_client_endpt_set_address(const char *client_name, const char *endpt_name, const char *address);
106
107/**
108 * @brief Change Call Home client endpoint listening port.
109 *
110 * On error the previous listening socket (if any) is left untouched.
111 *
112 * @param[in] client_name Existing Call Home client name.
Michal Vaskoc446a382021-06-18 08:54:05 +0200113 * @param[in] endpt_name Existing endpoint name of @p client_name.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200114 * @param[in] port New listening port.
115 * @return 0 on success, -1 on error.
116 */
117int nc_server_ch_client_endpt_set_port(const char *client_name, const char *endpt_name, uint16_t port);
118
119/**
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200120 * @brief Change Call Home client endpoint keepalives state. Affects only new connections.
121 *
122 * @param[in] client_name Existing Call Home client name.
Michal Vaskoc446a382021-06-18 08:54:05 +0200123 * @param[in] endpt_name Existing endpoint name of @p client_name.
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200124 * @param[in] enable Whether to enable or disable keepalives.
125 * @return 0 on success, -1 on error.
126 */
127int nc_server_ch_client_endpt_enable_keepalives(const char *client_name, const char *endpt_name, int enable);
128
129/**
130 * @brief Change Call Home client endpoint keepalives parameters. Affects only new connections.
131 *
132 * @param[in] client_name Existing Call Home client name.
Michal Vaskoc446a382021-06-18 08:54:05 +0200133 * @param[in] endpt_name Existing endpoint name of @p client_name.
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200134 * @param[in] idle_time Keepalive idle time in seconds, 1 by default, -1 to keep previous value.
135 * @param[in] max_probes Keepalive max probes sent, 10 by default, -1 to keep previous value.
136 * @param[in] probe_interval Keepalive probe interval in seconds, 5 by default, -1 to keep previous value.
137 * @return 0 on success, -1 on error.
138 */
139int nc_server_ch_client_endpt_set_keepalives(const char *client_name, const char *endpt_name, int idle_time,
140 int max_probes, int probe_interval);
141
142/**
Michal Vasko2e6defd2016-10-07 15:48:15 +0200143 * @brief Set Call Home client connection type.
144 *
145 * @param[in] client_name Existing Call Home client name.
146 * @param[in] conn_type Call Home connection type.
147 * @return 0 on success, -1 on error.
148 */
149int nc_server_ch_client_set_conn_type(const char *client_name, NC_CH_CONN_TYPE conn_type);
150
151/**
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200152 * @brief Set Call Home client periodic connection period for reconnecting.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200153 *
154 * @param[in] client_name Existing Call Home client name.
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200155 * @param[in] period Call Home periodic connection period in minutes.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200156 * @return 0 on success, -1 on error.
157 */
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200158int nc_server_ch_client_periodic_set_period(const char *client_name, uint16_t period);
Michal Vasko2e6defd2016-10-07 15:48:15 +0200159
160/**
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200161 * @brief Set Call Home client periodic connection period anchor time.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200162 *
163 * @param[in] client_name Existing Call Home client name.
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200164 * @param[in] anchor_time Call Home periodic connection anchor time for the period.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200165 * @return 0 on success, -1 on error.
166 */
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200167int nc_server_ch_client_periodic_set_anchor_time(const char *client_name, time_t anchor_time);
Michal Vasko2e6defd2016-10-07 15:48:15 +0200168
169/**
170 * @brief Set Call Home client periodic connection idle timeout.
171 *
172 * @param[in] client_name Existing Call Home client name.
173 * @param[in] idle_timeout Call Home periodic idle timeout.
174 * @return 0 on success, -1 on error.
175 */
Michal Vaskoe49a15f2019-05-27 14:18:36 +0200176int nc_server_ch_client_periodic_set_idle_timeout(const char *client_name, uint16_t idle_timeout);
Michal Vasko2e6defd2016-10-07 15:48:15 +0200177
178/**
179 * @brief Set Call Home client start-with policy.
180 *
181 * @param[in] client_name Existing Call Home client name.
182 * @param[in] start_with Call Home client start-with.
183 * @return 0 on success, -1 on error.
184 */
185int nc_server_ch_client_set_start_with(const char *client_name, NC_CH_START_WITH start_with);
186
187/**
188 * @brief Set Call Home client overall max attempts.
189 *
190 * @param[in] client_name Existing Call Home client name.
Michal Vasko50d2a5c2017-02-14 10:29:49 +0100191 * @param[in] max_attempts Call Home overall max reconnect attempts.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200192 * @return 0 on success, -1 on error.
193 */
194int nc_server_ch_client_set_max_attempts(const char *client_name, uint8_t max_attempts);
195
196/**
Michal Vasko93224072021-11-09 12:14:28 +0100197 * @brief Callback for getting a locked context for new Call Home sessions.
198 *
199 * @param[in] cb_data Arbitrary ctx callback data.
200 * @return Context for the session to use during its lifetime;
201 * @return NULL on error and session fails to be created.
202 */
203typedef const struct ly_ctx *(*nc_server_ch_session_acquire_ctx_cb)(void *cb_data);
204
205/**
206 * @brief Callback for releasing a locked context for Call Home sessions.
207 *
208 * @param[in] cb_data Arbitrary ctx callback data.
209 */
210typedef void (*nc_server_ch_session_release_ctx_cb)(void *cb_data);
211
212/**
213 * @brief Callback for new Call Home sessions.
214 *
215 * @param[in] client_name Name of the CH client which established the session.
216 * @param[in] new_session New established CH session, the pointer is internally discarded afterwards.
217 * @return 0 on success;
218 * @return non-zero on error and @p new_session is freed.
219 */
roman5cbb6532023-06-22 12:53:17 +0200220typedef int (*nc_server_ch_new_session_cb)(const char *client_name, struct nc_session *new_session, void *user_data);
Michal Vasko93224072021-11-09 12:14:28 +0100221
222/**
223 * @brief Dispatch a thread connecting to a listening NETCONF client and creating Call Home sessions.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200224 *
225 * @param[in] client_name Existing client name.
Michal Vasko93224072021-11-09 12:14:28 +0100226 * @param[in] acquire_ctx_cb Callback for acquiring new session context.
227 * @param[in] release_ctx_cb Callback for releasing session context.
228 * @param[in] ctx_cb_data Arbitrary user data passed to @p acquire_ctx_cb and @p release_ctx_cb.
229 * @param[in] new_session_cb Callback called for every established session on the client.
roman5cbb6532023-06-22 12:53:17 +0200230 * @param[in] new_session_cb_data Arbitrary user data passed to @p new_session_cb.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200231 * @return 0 if the thread was successfully created, -1 on error.
232 */
Michal Vasko93224072021-11-09 12:14:28 +0100233int nc_connect_ch_client_dispatch(const char *client_name, nc_server_ch_session_acquire_ctx_cb acquire_ctx_cb,
roman5cbb6532023-06-22 12:53:17 +0200234 nc_server_ch_session_release_ctx_cb release_ctx_cb, void *ctx_cb_data, nc_server_ch_new_session_cb new_session_cb,
235 void *new_session_cb_data);
Michal Vasko2e6defd2016-10-07 15:48:15 +0200236
Radek Krejci6799a052017-05-19 14:23:23 +0200237/** @} Server-side Call Home */
238
Michal Vasko45f298f2016-01-29 10:26:26 +0100239/**
Radek Krejci6799a052017-05-19 14:23:23 +0200240 * @defgroup server_ch_ssh Server-side Call Home on SSH
241 * @ingroup server_ch
242 *
243 * @brief SSH settings for the Call Home functionality
244 * @{
245 */
246
247/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100248 * @brief Add Call Home SSH host keys the server will identify itself with. Only the name is set, the key itself
249 * wil be retrieved using a callback.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200250 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200251 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200252 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100253 * @param[in] name Arbitrary name of the host key.
Michal Vasko7d255882017-02-09 13:35:08 +0100254 * @param[in] idx Optional index where to add the key. -1 adds at the end.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200255 * @return 0 on success, -1 on error.
256 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200257int nc_server_ssh_ch_client_endpt_add_hostkey(const char *client_name, const char *endpt_name, const char *name, int16_t idx);
Michal Vaskoe2713da2016-08-22 16:06:40 +0200258
259/**
260 * @brief Delete Call Home SSH host keys. Their order is preserved.
Michal Vasko45f298f2016-01-29 10:26:26 +0100261 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200262 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200263 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskoc446a382021-06-18 08:54:05 +0200264 * @param[in] name Name of the host key. NULL matches all the keys, but if @p idx != -1 then this must be NULL.
265 * @param[in] idx Index of the hostkey. -1 matches all indices, but if @p name != NULL then this must be -1.
Michal Vasko45f298f2016-01-29 10:26:26 +0100266 * @return 0 on success, -1 on error.
267 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200268int nc_server_ssh_ch_client_endpt_del_hostkey(const char *client_name, const char *endpt_name, const char *name, int16_t idx);
Michal Vasko45f298f2016-01-29 10:26:26 +0100269
270/**
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100271 * @brief Move Call Home SSH host key.
272 *
Michal Vasko50d2a5c2017-02-14 10:29:49 +0100273 * @param[in] client_name Exisitng Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200274 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100275 * @param[in] key_mov Name of the host key that will be moved.
Michal Vaskoc446a382021-06-18 08:54:05 +0200276 * @param[in] key_after Name of the key that will preceed @p key_mov. NULL if @p key_mov is to be moved at the beginning.
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100277 * @return 0 in success, -1 on error.
278 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200279int nc_server_ssh_ch_client_endpt_mov_hostkey(const char *client_name, const char *endpt_name, const char *key_mov,
280 const char *key_after);
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100281
282/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100283 * @brief Set accepted Call Home SSH authentication methods. All (publickey, password, interactive)
Michal Vaskof0537d82016-01-29 14:42:38 +0100284 * are supported by default.
Michal Vasko45f298f2016-01-29 10:26:26 +0100285 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200286 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200287 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100288 * @param[in] auth_methods Accepted authentication methods bit field of NC_SSH_AUTH_TYPE.
289 * @return 0 on success, -1 on error.
290 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200291int nc_server_ssh_ch_client_endpt_set_auth_methods(const char *client_name, const char *endpt_name, int auth_methods);
Michal Vasko45f298f2016-01-29 10:26:26 +0100292
293/**
Michal Vaskoddce1212019-05-24 09:58:49 +0200294 * @brief Get accepted Call Home SSH authentication methods.
295 *
296 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200297 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskoddce1212019-05-24 09:58:49 +0200298 * @return Accepted authentication methods bit field of NC_SSH_AUTH_TYPE.
299 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200300int nc_server_ssh_ch_client_endpt_get_auth_methods(const char *client_name, const char *endpt_name);
Michal Vaskoddce1212019-05-24 09:58:49 +0200301
302/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100303 * @brief Set Call Home SSH authentication attempts of every client. 3 by default.
304 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200305 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200306 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100307 * @param[in] auth_attempts Failed authentication attempts before a client is dropped.
308 * @return 0 on success, -1 on error.
309 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200310int nc_server_ssh_ch_client_endpt_set_auth_attempts(const char *client_name, const char *endpt_name, uint16_t auth_attempts);
Michal Vasko45f298f2016-01-29 10:26:26 +0100311
312/**
Michal Vaskocbad4c52019-06-27 16:30:35 +0200313 * @brief Set Call Home SSH authentication timeout. 30 seconds by default.
Michal Vasko45f298f2016-01-29 10:26:26 +0100314 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200315 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200316 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100317 * @param[in] auth_timeout Number of seconds before an unauthenticated client is dropped.
318 * @return 0 on success, -1 on error.
319 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200320int nc_server_ssh_ch_client_endpt_set_auth_timeout(const char *client_name, const char *endpt_name, uint16_t auth_timeout);
Michal Vasko45f298f2016-01-29 10:26:26 +0100321
Radek Krejci6799a052017-05-19 14:23:23 +0200322/** @} Server-side Call Home on SSH */
323
Michal Vasko45f298f2016-01-29 10:26:26 +0100324/**
Radek Krejci6799a052017-05-19 14:23:23 +0200325 * @defgroup server_ch_tls Server-side Call Home on TLS
326 * @ingroup server_ch
327 *
328 * @brief TLS settings for the Call Home functionality
329 * @{
330 */
331
332/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100333 * @brief Set the server Call Home TLS certificate. Only the name is set, the certificate itself
334 * wil be retrieved using a callback.
Michal Vasko45f298f2016-01-29 10:26:26 +0100335 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200336 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200337 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100338 * @param[in] name Arbitrary certificate name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100339 * @return 0 on success, -1 on error.
340 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200341int nc_server_tls_ch_client_endpt_set_server_cert(const char *client_name, const char *endpt_name, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100342
343/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100344 * @brief Add a Call Home trusted certificate list. Can be both a CA or a client one.
Michal Vasko45f298f2016-01-29 10:26:26 +0100345 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200346 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200347 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100348 * @param[in] name Arbitary name identifying this certificate list.
Michal Vasko45f298f2016-01-29 10:26:26 +0100349 * @return 0 on success, -1 on error.
350 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200351int nc_server_tls_ch_client_endpt_add_trusted_cert_list(const char *client_name, const char *endpt_name, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100352
353/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100354 * @brief Remove a set Call Home trusted certificate list. CRLs and CTN entries are not affected.
Michal Vasko45f298f2016-01-29 10:26:26 +0100355 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200356 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200357 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100358 * @param[in] name Name of the certificate list to delete. NULL deletes all the lists.
359 * @return 0 on success, -1 on not found.
Michal Vasko45f298f2016-01-29 10:26:26 +0100360 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200361int nc_server_tls_ch_client_endpt_del_trusted_cert_list(const char *client_name, const char *endpt_name, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100362
363/**
364 * @brief Set trusted Call Home Certificate Authority certificate locations. There
Michal Vaskof0537d82016-01-29 14:42:38 +0100365 * can only be one file and one directory, they are replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100366 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200367 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200368 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskob34b3e82016-02-26 15:04:58 +0100369 * @param[in] ca_file Path to a trusted CA cert store file in PEM format.
370 * Can be NULL.
371 * @param[in] ca_dir Path to a trusted CA cert store hashed directory
372 * (c_rehash utility can be used to create hashes)
373 * with PEM files. Can be NULL.
Michal Vasko45f298f2016-01-29 10:26:26 +0100374 * @return 0 on success, -1 on error.
375 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200376int nc_server_tls_ch_client_endpt_set_trusted_ca_paths(const char *client_name, const char *endpt_name, const char *ca_file,
377 const char *ca_dir);
Michal Vasko45f298f2016-01-29 10:26:26 +0100378
379/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100380 * @brief Set Call Home Certificate Revocation List locations. There can only be
Michal Vaskof0537d82016-01-29 14:42:38 +0100381 * one file and one directory, they are replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100382 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200383 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200384 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskob34b3e82016-02-26 15:04:58 +0100385 * @param[in] crl_file Path to a CRL store file in PEM format. Can be NULL.
386 * @param[in] crl_dir Path to a CRL store hashed directory (c_rehash utility
387 * can be used to create hashes) with PEM files. Can be NULL.
Michal Vasko45f298f2016-01-29 10:26:26 +0100388 * @return 0 on success, -1 on error.
389 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200390int nc_server_tls_ch_client_endpt_set_crl_paths(const char *client_name, const char *endpt_name, const char *crl_file,
391 const char *crl_dir);
Michal Vasko45f298f2016-01-29 10:26:26 +0100392
393/**
394 * @brief Destroy and clean Call Home CRLs. Call Home certificates, private keys,
Michal Vaskof0537d82016-01-29 14:42:38 +0100395 * and CTN entries are not affected.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200396 *
397 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200398 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100399 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200400void nc_server_tls_ch_client_endpt_clear_crls(const char *client_name, const char *endpt_name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100401
402/**
Michal Vasko3cf4aaa2017-02-01 15:03:36 +0100403 * @brief Add a cert-to-name entry.
Michal Vasko45f298f2016-01-29 10:26:26 +0100404 *
Michal Vaskoc446a382021-06-18 08:54:05 +0200405 * It is possible to add an entry step-by-step, specifying first only @p ip and in later calls
406 * @p fingerprint, @p map_type, and optionally @p name spearately.
Michal Vasko3cf4aaa2017-02-01 15:03:36 +0100407 *
Michal Vasko50d2a5c2017-02-14 10:29:49 +0100408 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200409 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko3cf4aaa2017-02-01 15:03:36 +0100410 * @param[in] id Priority of the entry. It must be unique. If already exists, the entry with this id
411 * is modified.
412 * @param[in] fingerprint Matching certificate fingerprint. If NULL, kept temporarily unset.
413 * @param[in] map_type Type of username-certificate mapping. If 0, kept temporarily unset.
Michal Vaskoc446a382021-06-18 08:54:05 +0200414 * @param[in] name Specific username used only if @p map_type == NC_TLS_CTN_SPECIFED.
Michal Vasko45f298f2016-01-29 10:26:26 +0100415 * @return 0 on success, -1 on error.
416 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200417int nc_server_tls_ch_client_endpt_add_ctn(const char *client_name, const char *endpt_name, uint32_t id,
418 const char *fingerprint, NC_TLS_CTN_MAPTYPE map_type, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100419
420/**
Michal Vasko58c22a22016-11-23 13:49:53 +0100421 * @brief Remove a Call Home cert-to-name entry.
Michal Vasko45f298f2016-01-29 10:26:26 +0100422 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200423 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200424 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100425 * @param[in] id Priority of the entry. -1 matches all the priorities.
426 * @param[in] fingerprint Fingerprint fo the entry. NULL matches all the fingerprints.
427 * @param[in] map_type Mapping type of the entry. 0 matches all the mapping types.
428 * @param[in] name Specific username for the entry. NULL matches all the usernames.
429 * @return 0 on success, -1 on not finding any match.
430 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200431int nc_server_tls_ch_client_endpt_del_ctn(const char *client_name, const char *endpt_name, int64_t id,
432 const char *fingerprint, NC_TLS_CTN_MAPTYPE map_type, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100433
Michal Vaskodf5e6af2016-11-23 13:50:56 +0100434/**
435 * @brief Get a Call Home cert-to-name entry.
436 *
437 * If a parameter is NULL, it is ignored. If its dereferenced value is NULL,
438 * it is filled and returned. If the value is set, it is used as a filter.
439 * Returns first matching entry.
440 *
441 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200442 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskodf5e6af2016-11-23 13:50:56 +0100443 * @param[in,out] id Priority of the entry.
444 * @param[in,out] fingerprint Fingerprint fo the entry.
445 * @param[in,out] map_type Mapping type of the entry.
446 * @param[in,out] name Specific username for the entry.
447 * @return 0 on success, -1 on not finding any match.
448 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200449int nc_server_tls_ch_client_endpt_get_ctn(const char *client_name, const char *endpt_name, uint32_t *id, char **fingerprint,
450 NC_TLS_CTN_MAPTYPE *map_type, char **name);
Michal Vaskodf5e6af2016-11-23 13:50:56 +0100451
Radek Krejci6799a052017-05-19 14:23:23 +0200452/** @} Server-side Call Home on TLS */
453
roman2eab4742023-06-06 10:00:26 +0200454#endif /* NC_ENABLED_SSH_TLS */
Michal Vasko45f298f2016-01-29 10:26:26 +0100455
Michal Vaskoc09730e2019-01-17 10:07:26 +0100456#ifdef __cplusplus
457}
458#endif
459
Michal Vasko45f298f2016-01-29 10:26:26 +0100460#endif /* NC_SESSION_SERVER_CH_H_ */