35 #include <sys/types.h> 41 #include <openvas/misc/openvas_server.h> 47 #define G_LOG_DOMAIN "md main" 99 write_string_to_server (
char*
const string)
101 char* point = string;
102 char* end =
string + strlen (
string);
113 return point - string;
114 else if (errno == EINTR)
118 g_warning (
"%s: Failed to write to scanner: %s\n", __FUNCTION__,
127 point, (
size_t) (end - point));
130 if (count == GNUTLS_E_AGAIN)
132 return point - string;
133 if (count == GNUTLS_E_INTERRUPTED)
136 if (count == GNUTLS_E_REHANDSHAKE)
139 g_warning (
"%s: failed to write to server: %s\n",
141 gnutls_strerror ((
int) count));
146 if (count)
logf (
"=> server %.*s\n", (
int) count, point);
148 g_debug (
"s> server (string) %.*s\n", (
int) count, point);
150 g_debug (
"=> server (string) %zi bytes\n", count);
152 g_debug (
"=> server (string) done\n");
164 write_to_server_buffer ()
178 else if (errno == EINTR)
182 g_warning (
"%s: Failed to write to scanner: %s\n", __FUNCTION__,
195 if (count == GNUTLS_E_AGAIN)
198 if (count == GNUTLS_E_INTERRUPTED)
201 if (count == GNUTLS_E_REHANDSHAKE)
204 g_warning (
"%s: failed to write to server: %s\n",
206 gnutls_strerror ((
int) count));
211 if (count)
logf (
"=> server %.*s\n",
217 g_debug (
"=> server %zi bytes\n", count);
219 g_debug (
"=> server done\n");
250 else if (errno == EAGAIN)
254 g_warning (
"%s: Failed to read from scanner: %s\n", __FUNCTION__,
267 if (count == GNUTLS_E_AGAIN)
270 if (count == GNUTLS_E_INTERRUPTED)
273 if (count == GNUTLS_E_REHANDSHAKE)
276 g_debug (
" should rehandshake\n");
279 if (gnutls_error_is_fatal (count) == 0
280 && (count == GNUTLS_E_WARNING_ALERT_RECEIVED
281 || count == GNUTLS_E_FATAL_ALERT_RECEIVED))
284 const char*
alert_name = gnutls_alert_get_name (alert);
285 g_warning (
"%s: TLS Alert %d: %s\n", __FUNCTION__, alert,
288 g_warning (
"%s: failed to read from server: %s\n", __FUNCTION__,
289 gnutls_strerror (count));
359 g_warning (
"%s: failed to set scanner socket flag: %s\n",
360 __FUNCTION__, strerror (errno));
372 char*
string =
"< OTP/2.0 >\n";
385 string =
"CLIENT <|> NVT_INFO <|> CLIENT\n";
404 static char*
const ack =
"CLIENT <|> COMPLETE_LIST <|> CLIENT\n";
421 static char*
const ack =
"\n";
426 if (nvt_cache_mode == -1)
428 else if (nvt_cache_mode == -2)
446 switch (write_to_server_buffer ())
471 struct timeval timeout;
484 g_warning (
"%s: select failed (connect): %s\n", __FUNCTION__,
503 load_cas (gnutls_certificate_credentials_t *scanner_credentials)
508 dir = opendir (CA_DIR);
513 g_warning (
"%s: failed to open " CA_DIR
": %s\n", __FUNCTION__,
518 else while ((ent = readdir (dir)))
523 if ((strcmp (ent->d_name,
".") == 0) || (strcmp (ent->d_name,
"..") == 0))
526 name = g_build_filename (CA_DIR, ent->d_name, NULL);
528 if (S_ISREG (state.st_mode)
529 && (gnutls_certificate_set_x509_trust_file
530 (*scanner_credentials, name, GNUTLS_X509_FMT_PEM) < 0))
532 g_warning (
"%s: gnutls_certificate_set_x509_trust_file failed: %s\n",
588 struct sockaddr_un addr;
594 g_warning (
"%s: failed to create scanner socket: %s\n", __FUNCTION__,
599 addr.sun_family = AF_UNIX;
601 len = strlen (addr.sun_path) +
sizeof (addr.sun_family);
604 g_warning (
"%s: Failed to connect to scanner (%s): %s\n", __FUNCTION__,
627 g_warning (
"%s: failed to create scanner socket: %s\n", __FUNCTION__,
633 if (openvas_server_new_mem
814 if (port < 1 || port > 65535)
854 const char *key_priv)
880 while (attempts >= 0)
884 attempts = attempts - 1;
buffer_size_t from_scanner_start
The start of the data in the from_scanner buffer.
Protos for communication between openvas-manager and openvas-server.
int openvas_scanner_read()
Read as much from the server as the from_scanner buffer will.
void openvas_scanner_free()
Free the scanner allocated data. Doesn't close socket and terminate the session.
void openvas_scanner_set_certs(const char *ca_pub, const char *key_pub, const char *key_priv)
Set the scanner's CA Certificate, and public/private key pair.
scanner_init_state_t scanner_init_state
The initialisation state of the scanner.
#define logf(format, args...)
Dummy macro, enabled with LOG.
int openvas_scanner_peek()
Check if there is any data to receive from connected Scanner socket.
void reset_scanner_states()
Set the scanner initialisation state, scanner_init_state.
buffer_size_t from_scanner_size
The current size of the from_scanner buffer.
char * openvas_scanner_unix_path
void openvas_scanner_fd_set(fd_set *fd)
Add connected to Scanner's socket to an fd_set.
gnutls_certificate_credentials_t openvas_scanner_credentials
int openvas_scanner_connected()
Whether we have started a connection to the Scanner using openvas_scanner_connect().
int openvas_scanner_full()
Check whether the buffer for data from Scanner is full.
int openvas_scanner_connect_unix()
int openvas_scanner_realloc()
Reallocates the from_scanner buffer to a higher size.
int openvas_scanner_wait()
Wait for the scanner socket to be writable.
int openvas_scanner_socket
gnutls_session_t openvas_scanner_session
int openvas_scanner_is_loading()
Checks whether the connected to OpenVAS Scanner is still loading plugins. To be called right after op...
int openvas_scanner_set_address(const char *addr, int port)
Set the scanner's address and port. Will try to resolve addr if it is a hostname. ...
void openvas_scanner_fork()
Reset Scanner variables after a fork.
void init_otp_data()
Initialise OTP library data.
int openvas_scanner_write(int nvt_cache_mode)
Write as much as possible from the to_scanner buffer to the scanner.
char * alert_name(alert_t alert)
Return the name of an alert.
void set_scanner_init_state(scanner_init_state_t state)
Set the scanner initialisation state, scanner_init_state.
int scanner_init_offset
Offset into initialisation string being sent to scanner.
char * openvas_scanner_ca_pub
int openvas_scanner_connect()
Create a new connection to the scanner and set it as current scanner.
buffer_size_t from_scanner_end
The end of the data in the from_scanner buffer.
int openvas_scanner_get_nfds(int socket)
Get the nfds value to use for a select() call.
int openvas_usleep(unsigned int microseconds)
Sleep for some number of microseconds, handling interrupts.
int openvas_scanner_init(int cache_mode)
Initializes the already setup connection with the Scanner.
int openvas_scanner_session_peek()
Check if there is any data to receive from connected Scanner session.
int openvas_scanner_set_unix(const char *path)
Set the scanner's unix socket path.
buffer_size_t from_scanner_max_size
The max size of the from_scanner buffer.
char * openvas_scanner_key_priv
int process_otp_scanner_input(void(*progress)())
Process any lines available in from_scanner.
char * from_scanner
Buffer of input from the scanner.
struct sockaddr_in openvas_scanner_address
unsigned int buffer_size_t
int openvas_scanner_fd_isset(fd_set *fd)
Check if connected to Scanner is set in an fd_set.
char * openvas_scanner_key_pub
int openvas_scanner_close()
Finish the connection to the Scanner and free internal buffers.