Greenbone Vulnerability Management Libraries 22.8.0
serverutils.h File Reference

GnuTLS based functions for server communication - header file. More...

#include <glib.h>
#include <gnutls/gnutls.h>
#include <stdarg.h>
#include <sys/param.h>
#include <netinet/ip.h>
Include dependency graph for serverutils.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  gvm_connection_t
 Connection. More...
 

Functions

void gvm_connection_free (gvm_connection_t *)
 Free connection.
 
void gvm_connection_close (gvm_connection_t *)
 Close a server connection and its socket.
 
int gvm_server_verify (gnutls_session_t)
 Verify certificate.
 
int gvm_server_open (gnutls_session_t *, const char *, int)
 Connect to the server using a given host and port.
 
int gvm_server_open_verify (gnutls_session_t *, const char *, int, const char *, const char *, const char *, int)
 Connect to the server using a given host, port and cert.
 
int gvm_server_open_with_cert (gnutls_session_t *, const char *, int, const char *, const char *, const char *)
 Connect to the server using a given host, port and cert.
 
int gvm_server_close (int, gnutls_session_t)
 Close a server connection and its socket.
 
int gvm_server_attach (int, gnutls_session_t *)
 Attach a socket to a session, and shake hands with the peer.
 
int gvm_server_sendf (gnutls_session_t *, const char *,...) __attribute__((format(printf
 
int int gvm_server_vsendf (gnutls_session_t *, const char *, va_list)
 Send a string to the server.
 
int gvm_socket_vsendf (int, const char *, va_list)
 Send a string to the server.
 
int gvm_server_sendf_xml (gnutls_session_t *, const char *,...)
 Format and send an XML string to the server.
 
int gvm_server_sendf_xml_quiet (gnutls_session_t *, const char *,...)
 Format and send an XML string to the server.
 
int gvm_connection_sendf_xml (gvm_connection_t *, const char *,...)
 Format and send an XML string to the server.
 
int gvm_connection_sendf_xml_quiet (gvm_connection_t *, const char *,...)
 Format and send an XML string to the server.
 
int gvm_connection_sendf (gvm_connection_t *, const char *,...)
 Format and send a string to the server.
 
int gvm_server_new (unsigned int, gchar *, gchar *, gchar *, gnutls_session_t *, gnutls_certificate_credentials_t *)
 Make a session for connecting to a server.
 
int gvm_server_new_mem (unsigned int, const char *, const char *, const char *, gnutls_session_t *, gnutls_certificate_credentials_t *)
 Make a session for connecting to a server, with certificates stored in memory.
 
int gvm_server_free (int, gnutls_session_t, gnutls_certificate_credentials_t)
 Cleanup a server session.
 
int gvm_server_session_free (gnutls_session_t, gnutls_certificate_credentials_t)
 
int load_gnutls_file (const char *, gnutls_datum_t *)
 Loads a file's data into gnutls_datum_t struct.
 
void unload_gnutls_file (gnutls_datum_t *)
 Unloads a gnutls_datum_t struct's data.
 
int set_gnutls_dhparams (gnutls_certificate_credentials_t, const char *)
 Set a gnutls session's Diffie-Hellman parameters.
 

Detailed Description

GnuTLS based functions for server communication - header file.

This module supplies low-level communication functions for communication with a server over GnuTLS.

Definition in file serverutils.h.

Function Documentation

◆ gvm_connection_close()

void gvm_connection_close ( gvm_connection_t connection)

Close a server connection and its socket.

Parameters
[in]connectionConnection.

Definition at line 505 of file serverutils.c.

506{
507 gvm_connection_free (connection);
508}
void gvm_connection_free(gvm_connection_t *client_connection)
Free connection.
Definition: serverutils.c:92

References gvm_connection_free().

Here is the call graph for this function:

◆ gvm_connection_free()

void gvm_connection_free ( gvm_connection_t client_connection)

Free connection.

Parameters
[in]client_connectionConnection.

Definition at line 92 of file serverutils.c.

93{
94 if (client_connection->tls)
95 gvm_server_free (client_connection->socket, client_connection->session,
96 client_connection->credentials);
97 else
98 close_unix (client_connection);
99}
static int close_unix(gvm_connection_t *client_connection)
Close UNIX socket connection.
Definition: serverutils.c:57
int gvm_server_free(int server_socket, gnutls_session_t server_session, gnutls_certificate_credentials_t server_credentials)
Cleanup a server session.
Definition: serverutils.c:1271
int tls
Whether uses TCP-TLS (vs UNIX socket).
Definition: serverutils.h:31
gnutls_certificate_credentials_t credentials
Credentials.
Definition: serverutils.h:34
int socket
Socket.
Definition: serverutils.h:32
gnutls_session_t session
Session.
Definition: serverutils.h:33

References close_unix(), gvm_connection_t::credentials, gvm_server_free(), gvm_connection_t::session, gvm_connection_t::socket, and gvm_connection_t::tls.

Referenced by gvm_connection_close().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_connection_sendf()

int gvm_connection_sendf ( gvm_connection_t connection,
const char *  format,
  ... 
)

Format and send a string to the server.

Parameters
[in]connectionConnection.
[in]formatprintf-style format string for message.
Returns
0 on success, -1 on error.

Definition at line 824 of file serverutils.c.

825{
826 va_list ap;
827 int rc;
828
829 va_start (ap, format);
830 rc = gvm_connection_vsendf (connection, format, ap);
831 va_end (ap);
832 return rc;
833}
static int gvm_connection_vsendf(gvm_connection_t *connection, const char *fmt, va_list ap)
Send a string to the server.
Definition: serverutils.c:758

References gvm_connection_vsendf().

Referenced by gmp_ping_c(), gmp_resume_task_report_c(), gmp_start_task_ext_c(), gmp_start_task_report_c(), gmp_stop_task_c(), and gvm_connection_sendf_xml().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_connection_sendf_xml()

int gvm_connection_sendf_xml ( gvm_connection_t connection,
const char *  format,
  ... 
)

Format and send an XML string to the server.

Escape XML in string and character args.

Parameters
[in]connectionConnection.
[in]formatprintf-style format string for message.
Returns
0 on success, -1 on error.

Definition at line 912 of file serverutils.c.

913{
914 va_list ap;
915 gchar *msg;
916 int rc;
917
918 va_start (ap, format);
919 msg = g_markup_vprintf_escaped (format, ap);
920 rc = gvm_connection_sendf (connection, "%s", msg);
921 g_free (msg);
922 va_end (ap);
923 return rc;
924}
int gvm_connection_sendf(gvm_connection_t *connection, const char *format,...)
Format and send a string to the server.
Definition: serverutils.c:824

References gvm_connection_sendf().

Here is the call graph for this function:

◆ gvm_connection_sendf_xml_quiet()

int gvm_connection_sendf_xml_quiet ( gvm_connection_t connection,
const char *  format,
  ... 
)

Format and send an XML string to the server.

Escape XML in string and character args.

Quiet version, only logs warnings.

Parameters
[in]connectionConnection.
[in]formatprintf-style format string for message.
Returns
0 on success, -1 on error.

Definition at line 966 of file serverutils.c.

968{
969 va_list ap;
970 gchar *msg;
971 int rc;
972
973 va_start (ap, format);
974 msg = g_markup_vprintf_escaped (format, ap);
975 rc = gvm_connection_sendf_quiet (connection, "%s", msg);
976 g_free (msg);
977 va_end (ap);
978 return rc;
979}
static int gvm_connection_sendf_quiet(gvm_connection_t *connection, const char *format,...)
Format and send a string to the server.
Definition: serverutils.c:864

References gvm_connection_sendf_quiet().

Referenced by gmp_authenticate_info_ext_c().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_attach()

int gvm_server_attach ( int  socket,
gnutls_session_t *  session 
)

Attach a socket to a session, and shake hands with the peer.

Parameters
[in]socketSocket.
[in]sessionPointer to GNUTLS session. FIXME: Why is this a pointer to a session?
Returns
0 on success, -1 on error.

Definition at line 570 of file serverutils.c.

571{
572 int ret;
573
574 ret = server_attach_internal (socket, session, NULL, 0);
575 return ret ? -1 : 0;
576}
static int server_attach_internal(int, gnutls_session_t *, const char *, int)
Attach a socket to a session, and shake hands with the peer.
Definition: serverutils.c:522

References server_attach_internal().

Here is the call graph for this function:

◆ gvm_server_close()

int gvm_server_close ( int  socket,
gnutls_session_t  session 
)

Close a server connection and its socket.

Parameters
[in]socketSocket connected to server.
[in]sessionGNUTLS session with server.
Returns
0 on success, -1 on error.

Definition at line 494 of file serverutils.c.

495{
496 return gvm_server_free (socket, session, NULL);
497}

References gvm_server_free().

Referenced by osp_connection_close().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_free()

int gvm_server_free ( int  server_socket,
gnutls_session_t  server_session,
gnutls_certificate_credentials_t  server_credentials 
)

Cleanup a server session.

This shuts down the TLS session, closes the socket and releases the TLS resources.

Parameters
[in]server_socketThe socket connected to the server.
[in]server_sessionThe session with the server.
[in]server_credentialsCredentials or NULL.
Returns
0 success, -1 error.

Definition at line 1271 of file serverutils.c.

1273{
1274 /* Turn off blocking. */
1275 // FIX get flags first
1276 if (fcntl (server_socket, F_SETFL, O_NONBLOCK) == -1)
1277 {
1278 g_warning ("%s: failed to set server socket flag: %s\n", __func__,
1279 strerror (errno));
1280 return -1;
1281 }
1282
1283 while (1)
1284 {
1285 int ret = gnutls_bye (server_session, GNUTLS_SHUT_WR);
1286 if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED)
1287 {
1288 continue;
1289 }
1290 if (ret)
1291 {
1292 g_debug (" Failed to gnutls_bye: %s\n",
1293 gnutls_strerror ((int) ret));
1294 /* Carry on successfully anyway, as this often fails, perhaps
1295 * because the server is closing the connection first. */
1296 break;
1297 }
1298 break;
1299 }
1300
1301 /* The former separate code in gvm_server_close and here
1302 differed in the order the TLS session and socket was closed. The
1303 way we do it here seems to be the right thing but for full
1304 backward compatibility we do it for calls from
1305 gvm_server_close in the old way. We can distinguish the two
1306 modes by the existence of server_credentials. */
1307 if (server_credentials)
1308 {
1309 if (close (server_socket) == -1)
1310 {
1311 g_warning ("%s: failed to close server socket: %s\n", __func__,
1312 strerror (errno));
1313 return -1;
1314 }
1315 gnutls_deinit (server_session);
1316 gnutls_certificate_free_credentials (server_credentials);
1317 }
1318 else
1319 {
1320 gnutls_deinit (server_session);
1321 close (server_socket);
1322 }
1323
1324 gnutls_global_deinit ();
1325
1326 return 0;
1327}

Referenced by gvm_connection_free(), and gvm_server_close().

Here is the caller graph for this function:

◆ gvm_server_new()

int gvm_server_new ( unsigned int  end_type,
gchar *  ca_cert_file,
gchar *  cert_file,
gchar *  key_file,
gnutls_session_t *  server_session,
gnutls_certificate_credentials_t *  server_credentials 
)

Make a session for connecting to a server.

Parameters
[in]end_typeConnection end type (GNUTLS_SERVER or GNUTLS_CLIENT).
[in]ca_cert_fileCertificate authority file.
[in]cert_fileCertificate file.
[in]key_fileKey file.
[out]server_sessionThe session with the server.
[out]server_credentialsServer credentials.
Returns
0 on success, -1 on error.

Definition at line 1144 of file serverutils.c.

1147{
1148 return server_new_internal (end_type, NULL, ca_cert_file, cert_file, key_file,
1149 server_session, server_credentials);
1150}
static int server_new_internal(unsigned int, const char *, const gchar *, const gchar *, const gchar *, gnutls_session_t *, gnutls_certificate_credentials_t *)
Make a session for connecting to a server.
Definition: serverutils.c:1079

References server_new_internal().

Here is the call graph for this function:

◆ gvm_server_new_mem()

int gvm_server_new_mem ( unsigned int  end_type,
const char *  ca_cert,
const char *  pub_key,
const char *  priv_key,
gnutls_session_t *  session,
gnutls_certificate_credentials_t *  credentials 
)

Make a session for connecting to a server, with certificates stored in memory.

Parameters
[in]end_typeConnection end type: GNUTLS_SERVER or GNUTLS_CLIENT.
[in]ca_certCertificate authority public key.
[in]pub_keyPublic key.
[in]priv_keyPrivate key.
[out]sessionThe session with the server.
[out]credentialsServer credentials.
Returns
0 on success, -1 on error.

Definition at line 1166 of file serverutils.c.

1170{
1171 if (server_new_gnutls_init (credentials))
1172 return -1;
1173
1174 if (pub_key && priv_key)
1175 {
1176 int ret;
1177 gnutls_datum_t pub, priv;
1178
1179 pub.data = (void *) pub_key;
1180 pub.size = strlen (pub_key);
1181 priv.data = (void *) priv_key;
1182 priv.size = strlen (priv_key);
1183
1184 ret = gnutls_certificate_set_x509_key_mem (*credentials, &pub, &priv,
1185 GNUTLS_X509_FMT_PEM);
1186 if (ret < 0)
1187 {
1188 g_warning ("%s: %s\n", __func__, gnutls_strerror (ret));
1189 return -1;
1190 }
1191 }
1192
1193 if (ca_cert)
1194 {
1195 int ret;
1196 gnutls_datum_t data;
1197
1198 data.data = (void *) ca_cert;
1199 data.size = strlen (ca_cert);
1200 ret = gnutls_certificate_set_x509_trust_mem (*credentials, &data,
1201 GNUTLS_X509_FMT_PEM);
1202 if (ret < 0)
1203 {
1204 g_warning ("%s: %s\n", __func__, gnutls_strerror (ret));
1205 gnutls_certificate_free_credentials (*credentials);
1206 return -1;
1207 }
1208 }
1209
1210 if (server_new_gnutls_set (end_type, NULL, session, credentials))
1211 {
1212 gnutls_certificate_free_credentials (*credentials);
1213 return -1;
1214 }
1215
1216 return 0;
1217}
static int server_new_gnutls_init(gnutls_certificate_credentials_t *server_credentials)
Initialize a server session.
Definition: serverutils.c:989
static int server_new_gnutls_set(unsigned int end_type, const char *priority, gnutls_session_t *server_session, gnutls_certificate_credentials_t *server_credentials)
Set the server credencials.
Definition: serverutils.c:1021

References server_new_gnutls_init(), and server_new_gnutls_set().

Referenced by gvm_server_open_verify().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_open()

int gvm_server_open ( gnutls_session_t *  session,
const char *  host,
int  port 
)

Connect to the server using a given host and port.

Parameters
[in]sessionPointer to GNUTLS session.
[in]hostHost to connect to.
[in]portPort to connect to.
Returns
0 on success, -1 on error.

Definition at line 480 of file serverutils.c.

481{
482 return gvm_server_open_with_cert (session, host, port, NULL, NULL, NULL);
483}
int gvm_server_open_with_cert(gnutls_session_t *session, const char *host, int port, const char *ca_mem, const char *pub_mem, const char *priv_mem)
Connect to the server using a given host, port and cert.
Definition: serverutils.c:462

References gvm_server_open_with_cert().

Here is the call graph for this function:

◆ gvm_server_open_verify()

int gvm_server_open_verify ( gnutls_session_t *  session,
const char *  host,
int  port,
const char *  ca_mem,
const char *  pub_mem,
const char *  priv_mem,
int  verify 
)

Connect to the server using a given host, port and cert.

Parameters
[in]sessionPointer to GNUTLS session.
[in]hostHost to connect to.
[in]portPort to connect to.
[in]ca_memCA cert.
[in]pub_memPublic key.
[in]priv_memPrivate key.
[in]verifyWhether to verify.
Returns
0 on success, -1 on error.
Warning
On success we are leaking the credentials. We can't free them because the session only makes a shallow copy.

Definition at line 314 of file serverutils.c.

317{
318 int ret;
319 int server_socket;
320 struct addrinfo address_hints;
321 struct addrinfo *addresses, *address;
322 gchar *port_string;
323 int host_type;
324
325 gnutls_certificate_credentials_t credentials;
326
327 /* Ensure that host and port have sane values. */
328 if (port < 1 || port > 65535)
329 {
330 g_warning ("Failed to create client TLS session. "
331 "Invalid port %d",
332 port);
333 return -1;
334 }
338 {
339 g_warning ("Failed to create client TLS session. Invalid host %s", host);
340 return -1;
341 }
342
346 if (gvm_server_new_mem (GNUTLS_CLIENT, ca_mem, pub_mem, priv_mem, session,
347 &credentials))
348 {
349 g_warning ("Failed to create client TLS session.");
350 return -1;
351 }
352
353 if (ca_mem && pub_mem && priv_mem)
354 {
355 set_cert_pub_mem (pub_mem);
356 set_cert_priv_mem (priv_mem);
357
358 gnutls_certificate_set_retrieve_function (credentials,
360 }
361
362 /* Create the port string. */
363
364 port_string = g_strdup_printf ("%i", port);
365
366 /* Get all possible addresses. */
367
368 memset (&address_hints, 0, sizeof (address_hints));
369 address_hints.ai_family = AF_UNSPEC; /* IPv4 or IPv6. */
370 address_hints.ai_socktype = SOCK_STREAM;
371 address_hints.ai_protocol = 0;
372
373 if (getaddrinfo (host, port_string, &address_hints, &addresses))
374 {
375 g_free (port_string);
376 g_warning ("Failed to get server addresses for %s: %s", host,
377 gai_strerror (errno));
378 gnutls_deinit (*session);
379 gnutls_certificate_free_credentials (credentials);
380 return -1;
381 }
382 g_free (port_string);
383
384 /* Try to connect to each address in turn. */
385
386 for (address = addresses; address; address = address->ai_next)
387 {
388 /* Make server socket. */
389
390 if (address->ai_family == AF_INET6)
391 server_socket = socket (PF_INET6, SOCK_STREAM, 0);
392 else
393 server_socket = socket (PF_INET, SOCK_STREAM, 0);
394 if (server_socket == -1)
395 {
396 g_warning ("Failed to create server socket");
397 freeaddrinfo (addresses);
398 gnutls_deinit (*session);
399 gnutls_certificate_free_credentials (credentials);
400 return -1;
401 }
402
403 /* Connect to server. */
404
405 if (connect (server_socket, address->ai_addr, address->ai_addrlen) == -1)
406 {
407 close (server_socket);
408 continue;
409 }
410 break;
411 }
412
413 freeaddrinfo (addresses);
414
415 if (address == NULL)
416 {
417 g_warning ("Failed to connect to server");
418 gnutls_deinit (*session);
419 gnutls_certificate_free_credentials (credentials);
420 return -1;
421 }
422
423 g_debug (" Connected to server '%s' port %d.", host, port);
424
425 /* Complete setup of server session. */
426 ret = server_attach_internal (server_socket, session, host, port);
427 if (ret)
428 {
429 if (ret == -2)
430 {
431 close (server_socket);
432 gnutls_deinit (*session);
433 gnutls_certificate_free_credentials (credentials);
434 }
435 close (server_socket);
436 return -1;
437 }
438 if (verify && gvm_server_verify (*session))
439 {
440 close (server_socket);
441 return -1;
442 }
443
444 return server_socket;
445}
int gvm_get_host_type(const gchar *str_stripped)
Determines the host type in a buffer.
Definition: hosts.c:810
host_type
Definition: hosts.h:34
@ HOST_TYPE_NAME
Definition: hosts.h:35
@ HOST_TYPE_IPV6
Definition: hosts.h:40
@ HOST_TYPE_IPV4
Definition: hosts.h:36
static void set_cert_priv_mem(const char *data)
Save cert_priv_mem with private certificate.
Definition: serverutils.c:217
static int client_cert_callback(gnutls_session_t session, const gnutls_datum_t *req_ca_rdn, int nreqs, const gnutls_pk_algorithm_t *sign_algos, int sign_algos_length, gnutls_retr2_st *st)
Callback function to be called in order to retrieve the certificate to be used in the handshake.
Definition: serverutils.c:262
int gvm_server_new_mem(unsigned int end_type, const char *ca_cert, const char *pub_key, const char *priv_key, gnutls_session_t *session, gnutls_certificate_credentials_t *credentials)
Make a session for connecting to a server, with certificates stored in memory.
Definition: serverutils.c:1166
int gvm_server_verify(gnutls_session_t session)
Verify certificate.
Definition: serverutils.c:111
static void set_cert_pub_mem(const char *data)
Save cert_pub_mem with public certificate.
Definition: serverutils.c:204

References client_cert_callback(), gvm_get_host_type(), gvm_server_new_mem(), gvm_server_verify(), HOST_TYPE_IPV4, HOST_TYPE_IPV6, HOST_TYPE_NAME, server_attach_internal(), set_cert_priv_mem(), and set_cert_pub_mem().

Referenced by gvm_server_open_with_cert().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_open_with_cert()

int gvm_server_open_with_cert ( gnutls_session_t *  session,
const char *  host,
int  port,
const char *  ca_mem,
const char *  pub_mem,
const char *  priv_mem 
)

Connect to the server using a given host, port and cert.

Verify if all cert args are given.

Parameters
[in]sessionPointer to GNUTLS session.
[in]hostHost to connect to.
[in]portPort to connect to.
[in]ca_memCA cert.
[in]pub_memPublic key.
[in]priv_memPrivate key.
Returns
0 on success, -1 on error.

Definition at line 462 of file serverutils.c.

465{
466 return gvm_server_open_verify (session, host, port, ca_mem, pub_mem, priv_mem,
467 ca_mem && pub_mem && priv_mem);
468}
int gvm_server_open_verify(gnutls_session_t *session, const char *host, int port, const char *ca_mem, const char *pub_mem, const char *priv_mem, int verify)
Connect to the server using a given host, port and cert.
Definition: serverutils.c:314

References gvm_server_open_verify().

Referenced by gvm_server_open(), and osp_send_command().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_sendf()

int gvm_server_sendf ( gnutls_session_t *  ,
const char *  ,
  ... 
)

◆ gvm_server_sendf_xml()

int gvm_server_sendf_xml ( gnutls_session_t *  session,
const char *  format,
  ... 
)

Format and send an XML string to the server.

Escape XML in string and character args.

Parameters
[in]sessionPointer to GNUTLS session.
[in]formatprintf-style format string for message.
Returns
0 on success, -1 on error.

Definition at line 887 of file serverutils.c.

888{
889 va_list ap;
890 gchar *msg;
891 int rc;
892
893 va_start (ap, format);
894 msg = g_markup_vprintf_escaped (format, ap);
895 rc = gvm_server_sendf (session, "%s", msg);
896 g_free (msg);
897 va_end (ap);
898 return rc;
899}
int gvm_server_sendf(gnutls_session_t *session, const char *format,...)
Format and send a string to the server.
Definition: serverutils.c:804

References gvm_server_sendf().

Referenced by gmp_create_lsc_credential(), gmp_create_lsc_credential_key(), and gmp_create_task().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_sendf_xml_quiet()

int gvm_server_sendf_xml_quiet ( gnutls_session_t *  session,
const char *  format,
  ... 
)

Format and send an XML string to the server.

Escape XML in string and character args.

Quiet version, only logs warnings.

Parameters
[in]sessionPointer to GNUTLS session.
[in]formatprintf-style format string for message.
Returns
0 on success, -1 on error.

Definition at line 939 of file serverutils.c.

940{
941 va_list ap;
942 gchar *msg;
943 int rc;
944
945 va_start (ap, format);
946 msg = g_markup_vprintf_escaped (format, ap);
947 rc = gvm_server_sendf_quiet (session, "%s", msg);
948 g_free (msg);
949 va_end (ap);
950 return rc;
951}
static int gvm_server_sendf_quiet(gnutls_session_t *session, const char *format,...)
Format and send a string to the server.
Definition: serverutils.c:844

References gvm_server_sendf_quiet().

Referenced by gmp_authenticate(), gmp_authenticate_info_ext(), and gmp_create_lsc_credential().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_server_session_free()

int gvm_server_session_free ( gnutls_session_t  ,
gnutls_certificate_credentials_t   
)

◆ gvm_server_verify()

int gvm_server_verify ( gnutls_session_t  session)

Verify certificate.

Parameters
[in]sessionPointer to GNUTLS session.
Returns
0 on success, 1 on failure, -1 on error.

Definition at line 111 of file serverutils.c.

112{
113 unsigned int status;
114 int ret;
115
116 ret = gnutls_certificate_verify_peers2 (session, &status);
117 if (ret < 0)
118 {
119 g_warning ("%s: failed to verify peers: %s", __func__,
120 gnutls_strerror (ret));
121 return -1;
122 }
123
124 if (status & GNUTLS_CERT_INVALID)
125 g_warning ("%s: the certificate is not trusted", __func__);
126
127 if (status & GNUTLS_CERT_SIGNER_NOT_CA)
128 g_warning ("%s: the certificate's issuer is not a CA", __func__);
129
130 if (status & GNUTLS_CERT_INSECURE_ALGORITHM)
131 g_warning ("%s: the certificate was signed using an insecure algorithm",
132 __func__);
133
134 if (status & GNUTLS_CERT_SIGNER_NOT_FOUND)
135 g_warning ("%s: the certificate hasn't got a known issuer", __func__);
136
137 if (status & GNUTLS_CERT_REVOKED)
138 g_warning ("%s: the certificate has been revoked", __func__);
139
140 if (status & GNUTLS_CERT_EXPIRED)
141 g_warning ("%s: the certificate has expired", __func__);
142
143 if (status & GNUTLS_CERT_NOT_ACTIVATED)
144 g_warning ("%s: the certificate is not yet activated", __func__);
145
146 if (status)
147 return 1;
148
149 return 0;
150}

Referenced by gvm_server_open_verify().

Here is the caller graph for this function:

◆ gvm_server_vsendf()

int int gvm_server_vsendf ( gnutls_session_t *  session,
const char *  fmt,
va_list  ap 
)

Send a string to the server.

Parameters
[in]sessionPointer to GNUTLS session.
[in]fmtFormat of string to send.
[in]apArgs for fmt.
Returns
0 on success, 1 if server closed connection, -1 on error.

Definition at line 728 of file serverutils.c.

729{
730 return gvm_server_vsendf_internal (session, fmt, ap, 0);
731}
static int gvm_server_vsendf_internal(gnutls_session_t *session, const char *fmt, va_list ap, int quiet)
Send a string to the server.
Definition: serverutils.c:590

References gvm_server_vsendf_internal().

Referenced by gvm_server_sendf(), osp_send_command(), and osp_send_command_str().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ gvm_socket_vsendf()

int gvm_socket_vsendf ( int  socket,
const char *  fmt,
va_list  ap 
)

Send a string to the server.

Parameters
[in]socketSocket to send string through.
[in]fmtFormat of string to send.
[in]apArgs for fmt.
Returns
0 on success, 1 if server closed connection, -1 on error.

Definition at line 743 of file serverutils.c.

744{
745 return unix_vsendf_internal (socket, fmt, ap, 0);
746}
static int unix_vsendf_internal(int socket, const char *fmt, va_list ap, int quiet)
Send a string to the server.
Definition: serverutils.c:658

References unix_vsendf_internal().

Referenced by osp_send_command(), and osp_send_command_str().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ load_gnutls_file()

int load_gnutls_file ( const char *  file,
gnutls_datum_t *  loaded_file 
)

Loads a file's data into gnutls_datum_t struct.

Parameters
[in]fileFile to load.
[out]loaded_fileDestination to load file into.
Returns
0 if success, -1 if error.

Definition at line 161 of file serverutils.c.

162{
163 FILE *f = NULL;
164 int64_t filelen;
165 void *ptr;
166
167 if (!(f = fopen (file, "r")) || fseek (f, 0, SEEK_END) != 0
168 || (filelen = ftell (f)) < 0 || fseek (f, 0, SEEK_SET) != 0
169 || !(ptr = g_malloc0 ((size_t) filelen))
170 || fread (ptr, 1, (size_t) filelen, f) < (size_t) filelen)
171 {
172 if (f)
173 fclose (f);
174 return -1;
175 }
176
177 loaded_file->data = ptr;
178 loaded_file->size = filelen;
179 fclose (f);
180 return 0;
181}

Referenced by set_gnutls_dhparams().

Here is the caller graph for this function:

◆ set_gnutls_dhparams()

int set_gnutls_dhparams ( gnutls_certificate_credentials_t  creds,
const char *  dhparams_file 
)

Set a gnutls session's Diffie-Hellman parameters.

Parameters
[in]credsGnuTLS credentials.
[in]dhparams_filePath to PEM file containing the DH parameters.
Returns
0 on success, -1 on error.

Definition at line 1228 of file serverutils.c.

1230{
1231 int ret;
1232 gnutls_datum_t data;
1233
1234 if (!creds || !dhparams_file)
1235 return -1;
1236
1237 if (load_gnutls_file (dhparams_file, &data))
1238 return -1;
1239
1240/* Disable false positive warning about potential leak of memory */
1241#ifndef __clang_analyzer__
1242
1243 gnutls_dh_params_t params = g_malloc0 (sizeof (gnutls_dh_params_t));
1244 ret = gnutls_dh_params_import_pkcs3 (params, &data, GNUTLS_X509_FMT_PEM);
1245 unload_gnutls_file (&data);
1246 if (ret)
1247 {
1248 g_free (params);
1249 return -1;
1250 }
1251 else
1252 gnutls_certificate_set_dh_params (creds, params);
1253 return 0;
1254
1255#endif
1256}
int load_gnutls_file(const char *file, gnutls_datum_t *loaded_file)
Loads a file's data into gnutls_datum_t struct.
Definition: serverutils.c:161
void unload_gnutls_file(gnutls_datum_t *data)
Unloads a gnutls_datum_t struct's data.
Definition: serverutils.c:189

References load_gnutls_file(), and unload_gnutls_file().

Here is the call graph for this function:

◆ unload_gnutls_file()

void unload_gnutls_file ( gnutls_datum_t *  data)

Unloads a gnutls_datum_t struct's data.

Parameters
[in]dataPointer to gnutls_datum_t struct to be unloaded.

Definition at line 189 of file serverutils.c.

190{
191 if (data)
192 g_free (data->data);
193}

Referenced by set_gnutls_dhparams().

Here is the caller graph for this function: