blob: bf59ce4a4f7649f9aca11a91d7162047cd8018c3 [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
Michal Vaskob83a3fa2021-05-26 09:53:42 +020030#if defined (NC_ENABLED_SSH) || defined (NC_ENABLED_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 */
220typedef int (*nc_server_ch_new_session_cb)(const char *client_name, struct nc_session *new_session);
221
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.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200230 * @return 0 if the thread was successfully created, -1 on error.
231 */
Michal Vasko93224072021-11-09 12:14:28 +0100232int nc_connect_ch_client_dispatch(const char *client_name, nc_server_ch_session_acquire_ctx_cb acquire_ctx_cb,
233 nc_server_ch_session_release_ctx_cb release_ctx_cb, void *ctx_cb_data, nc_server_ch_new_session_cb new_session_cb);
Michal Vasko2e6defd2016-10-07 15:48:15 +0200234
Radek Krejci6799a052017-05-19 14:23:23 +0200235/** @} Server-side Call Home */
236
Michal Vasko2e6defd2016-10-07 15:48:15 +0200237#endif /* NC_ENABLED_SSH || NC_ENABLED_TLS */
238
239#ifdef NC_ENABLED_SSH
Michal Vasko45f298f2016-01-29 10:26:26 +0100240
241/**
Radek Krejci6799a052017-05-19 14:23:23 +0200242 * @defgroup server_ch_ssh Server-side Call Home on SSH
243 * @ingroup server_ch
244 *
245 * @brief SSH settings for the Call Home functionality
246 * @{
247 */
248
249/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100250 * @brief Add Call Home SSH host keys the server will identify itself with. Only the name is set, the key itself
251 * wil be retrieved using a callback.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200252 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200253 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200254 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100255 * @param[in] name Arbitrary name of the host key.
Michal Vasko7d255882017-02-09 13:35:08 +0100256 * @param[in] idx Optional index where to add the key. -1 adds at the end.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200257 * @return 0 on success, -1 on error.
258 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200259int 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 +0200260
261/**
262 * @brief Delete Call Home SSH host keys. Their order is preserved.
Michal Vasko45f298f2016-01-29 10:26:26 +0100263 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200264 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200265 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskoc446a382021-06-18 08:54:05 +0200266 * @param[in] name Name of the host key. NULL matches all the keys, but if @p idx != -1 then this must be NULL.
267 * @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 +0100268 * @return 0 on success, -1 on error.
269 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200270int 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 +0100271
272/**
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100273 * @brief Move Call Home SSH host key.
274 *
Michal Vasko50d2a5c2017-02-14 10:29:49 +0100275 * @param[in] client_name Exisitng Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200276 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100277 * @param[in] key_mov Name of the host key that will be moved.
Michal Vaskoc446a382021-06-18 08:54:05 +0200278 * @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 +0100279 * @return 0 in success, -1 on error.
280 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200281int nc_server_ssh_ch_client_endpt_mov_hostkey(const char *client_name, const char *endpt_name, const char *key_mov,
282 const char *key_after);
Michal Vaskofbfe8b62017-02-14 10:22:30 +0100283
284/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100285 * @brief Set accepted Call Home SSH authentication methods. All (publickey, password, interactive)
Michal Vaskof0537d82016-01-29 14:42:38 +0100286 * are supported by default.
Michal Vasko45f298f2016-01-29 10:26:26 +0100287 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200288 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200289 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100290 * @param[in] auth_methods Accepted authentication methods bit field of NC_SSH_AUTH_TYPE.
291 * @return 0 on success, -1 on error.
292 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200293int 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 +0100294
295/**
Michal Vaskoddce1212019-05-24 09:58:49 +0200296 * @brief Get accepted Call Home SSH authentication methods.
297 *
298 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200299 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskoddce1212019-05-24 09:58:49 +0200300 * @return Accepted authentication methods bit field of NC_SSH_AUTH_TYPE.
301 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200302int nc_server_ssh_ch_client_endpt_get_auth_methods(const char *client_name, const char *endpt_name);
Michal Vaskoddce1212019-05-24 09:58:49 +0200303
304/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100305 * @brief Set Call Home SSH authentication attempts of every client. 3 by default.
306 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200307 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200308 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100309 * @param[in] auth_attempts Failed authentication attempts before a client is dropped.
310 * @return 0 on success, -1 on error.
311 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200312int 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 +0100313
314/**
Michal Vaskocbad4c52019-06-27 16:30:35 +0200315 * @brief Set Call Home SSH authentication timeout. 30 seconds by default.
Michal Vasko45f298f2016-01-29 10:26:26 +0100316 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200317 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200318 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100319 * @param[in] auth_timeout Number of seconds before an unauthenticated client is dropped.
320 * @return 0 on success, -1 on error.
321 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200322int 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 +0100323
Radek Krejci6799a052017-05-19 14:23:23 +0200324/** @} Server-side Call Home on SSH */
325
Radek Krejci53691be2016-02-22 13:58:37 +0100326#endif /* NC_ENABLED_SSH */
Michal Vasko45f298f2016-01-29 10:26:26 +0100327
Radek Krejci53691be2016-02-22 13:58:37 +0100328#ifdef NC_ENABLED_TLS
Michal Vasko45f298f2016-01-29 10:26:26 +0100329
330/**
Radek Krejci6799a052017-05-19 14:23:23 +0200331 * @defgroup server_ch_tls Server-side Call Home on TLS
332 * @ingroup server_ch
333 *
334 * @brief TLS settings for the Call Home functionality
335 * @{
336 */
337
338/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100339 * @brief Set the server Call Home TLS certificate. Only the name is set, the certificate itself
340 * wil be retrieved using a callback.
Michal Vasko45f298f2016-01-29 10:26:26 +0100341 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200342 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200343 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100344 * @param[in] name Arbitrary certificate name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100345 * @return 0 on success, -1 on error.
346 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200347int 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 +0100348
349/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100350 * @brief Add a Call Home trusted certificate list. Can be both a CA or a client one.
Michal Vasko45f298f2016-01-29 10:26:26 +0100351 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200352 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200353 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100354 * @param[in] name Arbitary name identifying this certificate list.
Michal Vasko45f298f2016-01-29 10:26:26 +0100355 * @return 0 on success, -1 on error.
356 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200357int 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 +0100358
359/**
Michal Vasko4c1fb492017-01-30 14:31:07 +0100360 * @brief Remove a set Call Home trusted certificate list. CRLs and CTN entries are not affected.
Michal Vasko45f298f2016-01-29 10:26:26 +0100361 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200362 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200363 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko4c1fb492017-01-30 14:31:07 +0100364 * @param[in] name Name of the certificate list to delete. NULL deletes all the lists.
365 * @return 0 on success, -1 on not found.
Michal Vasko45f298f2016-01-29 10:26:26 +0100366 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200367int 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 +0100368
369/**
370 * @brief Set trusted Call Home Certificate Authority certificate locations. There
Michal Vaskof0537d82016-01-29 14:42:38 +0100371 * can only be one file and one directory, they are replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100372 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200373 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200374 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskob34b3e82016-02-26 15:04:58 +0100375 * @param[in] ca_file Path to a trusted CA cert store file in PEM format.
376 * Can be NULL.
377 * @param[in] ca_dir Path to a trusted CA cert store hashed directory
378 * (c_rehash utility can be used to create hashes)
379 * with PEM files. Can be NULL.
Michal Vasko45f298f2016-01-29 10:26:26 +0100380 * @return 0 on success, -1 on error.
381 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200382int nc_server_tls_ch_client_endpt_set_trusted_ca_paths(const char *client_name, const char *endpt_name, const char *ca_file,
383 const char *ca_dir);
Michal Vasko45f298f2016-01-29 10:26:26 +0100384
385/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100386 * @brief Set Call Home Certificate Revocation List locations. There can only be
Michal Vaskof0537d82016-01-29 14:42:38 +0100387 * one file and one directory, they are replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100388 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200389 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200390 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskob34b3e82016-02-26 15:04:58 +0100391 * @param[in] crl_file Path to a CRL store file in PEM format. Can be NULL.
392 * @param[in] crl_dir Path to a CRL store hashed directory (c_rehash utility
393 * can be used to create hashes) with PEM files. Can be NULL.
Michal Vasko45f298f2016-01-29 10:26:26 +0100394 * @return 0 on success, -1 on error.
395 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200396int nc_server_tls_ch_client_endpt_set_crl_paths(const char *client_name, const char *endpt_name, const char *crl_file,
397 const char *crl_dir);
Michal Vasko45f298f2016-01-29 10:26:26 +0100398
399/**
400 * @brief Destroy and clean Call Home CRLs. Call Home certificates, private keys,
Michal Vaskof0537d82016-01-29 14:42:38 +0100401 * and CTN entries are not affected.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200402 *
403 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200404 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100405 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200406void nc_server_tls_ch_client_endpt_clear_crls(const char *client_name, const char *endpt_name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100407
408/**
Michal Vasko3cf4aaa2017-02-01 15:03:36 +0100409 * @brief Add a cert-to-name entry.
Michal Vasko45f298f2016-01-29 10:26:26 +0100410 *
Michal Vaskoc446a382021-06-18 08:54:05 +0200411 * It is possible to add an entry step-by-step, specifying first only @p ip and in later calls
412 * @p fingerprint, @p map_type, and optionally @p name spearately.
Michal Vasko3cf4aaa2017-02-01 15:03:36 +0100413 *
Michal Vasko50d2a5c2017-02-14 10:29:49 +0100414 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200415 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko3cf4aaa2017-02-01 15:03:36 +0100416 * @param[in] id Priority of the entry. It must be unique. If already exists, the entry with this id
417 * is modified.
418 * @param[in] fingerprint Matching certificate fingerprint. If NULL, kept temporarily unset.
419 * @param[in] map_type Type of username-certificate mapping. If 0, kept temporarily unset.
Michal Vaskoc446a382021-06-18 08:54:05 +0200420 * @param[in] name Specific username used only if @p map_type == NC_TLS_CTN_SPECIFED.
Michal Vasko45f298f2016-01-29 10:26:26 +0100421 * @return 0 on success, -1 on error.
422 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200423int nc_server_tls_ch_client_endpt_add_ctn(const char *client_name, const char *endpt_name, uint32_t id,
424 const char *fingerprint, NC_TLS_CTN_MAPTYPE map_type, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100425
426/**
Michal Vasko58c22a22016-11-23 13:49:53 +0100427 * @brief Remove a Call Home cert-to-name entry.
Michal Vasko45f298f2016-01-29 10:26:26 +0100428 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200429 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200430 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vasko45f298f2016-01-29 10:26:26 +0100431 * @param[in] id Priority of the entry. -1 matches all the priorities.
432 * @param[in] fingerprint Fingerprint fo the entry. NULL matches all the fingerprints.
433 * @param[in] map_type Mapping type of the entry. 0 matches all the mapping types.
434 * @param[in] name Specific username for the entry. NULL matches all the usernames.
435 * @return 0 on success, -1 on not finding any match.
436 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200437int nc_server_tls_ch_client_endpt_del_ctn(const char *client_name, const char *endpt_name, int64_t id,
438 const char *fingerprint, NC_TLS_CTN_MAPTYPE map_type, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100439
Michal Vaskodf5e6af2016-11-23 13:50:56 +0100440/**
441 * @brief Get a Call Home cert-to-name entry.
442 *
443 * If a parameter is NULL, it is ignored. If its dereferenced value is NULL,
444 * it is filled and returned. If the value is set, it is used as a filter.
445 * Returns first matching entry.
446 *
447 * @param[in] client_name Existing Call Home client name.
Michal Vaskoadf30f02019-06-24 09:34:47 +0200448 * @param[in] endpt_name Existing endpoint name of the client.
Michal Vaskodf5e6af2016-11-23 13:50:56 +0100449 * @param[in,out] id Priority of the entry.
450 * @param[in,out] fingerprint Fingerprint fo the entry.
451 * @param[in,out] map_type Mapping type of the entry.
452 * @param[in,out] name Specific username for the entry.
453 * @return 0 on success, -1 on not finding any match.
454 */
Michal Vaskoadf30f02019-06-24 09:34:47 +0200455int nc_server_tls_ch_client_endpt_get_ctn(const char *client_name, const char *endpt_name, uint32_t *id, char **fingerprint,
456 NC_TLS_CTN_MAPTYPE *map_type, char **name);
Michal Vaskodf5e6af2016-11-23 13:50:56 +0100457
Radek Krejci6799a052017-05-19 14:23:23 +0200458/** @} Server-side Call Home on TLS */
459
Radek Krejci53691be2016-02-22 13:58:37 +0100460#endif /* NC_ENABLED_TLS */
Michal Vasko45f298f2016-01-29 10:26:26 +0100461
Michal Vaskoc09730e2019-01-17 10:07:26 +0100462#ifdef __cplusplus
463}
464#endif
465
Michal Vasko45f298f2016-01-29 10:26:26 +0100466#endif /* NC_SESSION_SERVER_CH_H_ */