Update scanner information according to the input from the scanner.
This function simply records input from the scanner. Output to the scanner or client is almost always done via process_omp_client_input in reaction to client requests, the only exception being stop requests initiated in other processes.
786 const char *ver_str =
"< OTP/2.0 >\n";
787 size_t ver_len = strlen (ver_str);
811 && (messages[0] ==
' ' || messages[0] ==
'\n'))
812 from_scanner_start++, messages++;
814 if (scanner_is_loading (messages))
816 parse_scanner_loading (messages);
819 "Waiting for scanner to load NVTs: %d / %d.\n",
823 "Waiting for scanner to load: No information provided. (Message: %s)\n", messages);
834 if (sync_buffer ())
return -1;
837 if (strncasecmp (ver_str, messages, ver_len))
839 g_debug (
" scanner fail: expected \"%s\"" 840 " got \"%.12s\"\n\n", ver_str, messages);
843 from_scanner_start += ver_len;
863 switch (parse_scanner_bad_login (&messages))
869 switch (parse_scanner_done (&messages))
874 if (sync_buffer ())
return -1;
878 switch (parse_scanner_plugin_list_tags (&messages))
882 if (sync_buffer ())
return -1;
887 switch (parse_scanner_preference_value (&messages,
progress))
891 if (sync_buffer ())
return -1;
894 g_free (current_scanner_preference);
895 current_scanner_preference = NULL;
899 switch (parse_scanner_server (&messages))
905 if (sync_buffer ())
return -1;
918 while (from_start < from_end
919 && ((match = memchr (input,
921 from_end - from_start))
924 assert (match >= input);
933 if ((((match - input) + from_start + 1) < from_end)
935 && (match[2] ==
'>'))
942 from_scanner_start += match + 3 - messages;
944 messages = match + 3;
948 field = openvas_strip_space (message, match);
949 blank_control_chars (field);
951 g_debug (
" scanner old state %i\n", scanner_state);
952 g_debug (
" scanner field: %s\n", field);
953 switch (scanner_state)
956 if (strcasecmp (
"BYE", field))
961 switch (parse_scanner_done (&messages))
964 if (sync_buffer ())
goto return_error;
967 case -1:
goto return_error;
970 if (sync_buffer ())
goto return_error;
971 goto return_need_more;
979 char* description = g_strdup (field);
980 set_message_description (current_message, description);
987 assert (current_message == NULL);
988 current_message = make_message (field);
996 char *protocol, *formatted;
998 assert (current_message);
1000 protocol = g_newa (
char, strlen (field));
1002 if (sscanf (field,
"%i/%s",
1006 number = atoi (field);
1009 g_debug (
" scanner got debug port, number: %i, protocol: %s\n",
1012 set_message_port_number (current_message, number);
1013 set_message_port_protocol (current_message, protocol);
1016 if (formatted == NULL)
1017 formatted = g_strdup (field);
1018 set_message_port_string (current_message, formatted);
1025 if (current_message != NULL
1028 char* oid = g_strdup (field);
1029 set_message_oid (current_message, oid);
1032 free_message (current_message);
1033 current_message = NULL;
1036 switch (parse_scanner_done (&messages))
1038 case -1:
goto return_error;
1041 if (sync_buffer ())
goto return_error;
1042 goto return_need_more;
1048 if (current_message)
1051 char* description = g_strdup (field);
1052 set_message_description (current_message, description);
1059 assert (current_message == NULL);
1060 current_message = make_message (field);
1068 char *protocol, *formatted;
1070 assert (current_message);
1072 protocol = g_newa (
char, strlen (field));
1074 if (sscanf (field,
"%i/%s",
1078 number = atoi (field);
1081 g_debug (
" scanner got alarm port, number: %i, protocol: %s\n",
1084 set_message_port_number (current_message, number);
1085 set_message_port_protocol (current_message, protocol);
1088 if (formatted == NULL)
1089 formatted = g_strdup (field);
1090 set_message_port_string (current_message, formatted);
1097 if (current_message != NULL
1100 char* oid = g_strdup (field);
1101 set_message_oid (current_message, oid);
1104 free_message (current_message);
1105 current_message = NULL;
1108 switch (parse_scanner_done (&messages))
1110 case -1:
goto return_error;
1113 if (sync_buffer ())
goto return_error;
1114 goto return_need_more;
1120 if (current_message)
1123 char* description = g_strdup (field);
1124 set_message_description (current_message, description);
1131 assert (current_message == NULL);
1132 current_message = make_message (field);
1140 char *protocol, *formatted;
1142 assert (current_message);
1144 protocol = g_newa (
char, strlen (field));
1146 if (sscanf (field,
"%i/%s",
1150 number = atoi (field);
1153 g_debug (
" scanner got log port, number: %i, protocol: %s\n",
1156 set_message_port_number (current_message, number);
1157 set_message_port_protocol (current_message, protocol);
1160 if (formatted == NULL)
1161 formatted = g_strdup (field);
1162 set_message_port_string (current_message, formatted);
1169 if (current_message != NULL
1172 char* oid = g_strdup (field);
1173 set_message_oid (current_message, oid);
1176 free_message (current_message);
1177 current_message = NULL;
1180 switch (parse_scanner_done (&messages))
1182 case -1:
goto return_error;
1185 if (sync_buffer ())
goto return_error;
1186 goto return_need_more;
1193 if (strlen (field) == 0 && match[1] ==
'|')
1196 switch (parse_scanner_done (&messages))
1208 case -1:
goto return_error;
1211 if (sync_buffer ())
goto return_error;
1212 goto return_need_more;
1216 assert (current_plugin == NULL);
1217 current_plugin = nvti_new ();
1220 if (current_plugin == NULL) abort ();
1221 nvti_set_oid (current_plugin, field);
1227 nvti_set_name (current_plugin, field);
1233 nvti_set_category (current_plugin, category_number (field));
1239 nvti_set_copyright (current_plugin, field);
1245 nvti_set_family (current_plugin, field);
1251 nvti_set_version (current_plugin, field);
1257 nvti_set_cve (current_plugin, field);
1263 nvti_set_bid (current_plugin, field);
1269 nvti_set_xref (current_plugin, field);
1271 switch (parse_scanner_plugin_list_tags (&messages))
1275 if (sync_buffer ())
goto return_error;
1276 goto return_need_more;
1282 char* feed_version = g_strdup (field);
1283 g_debug (
" scanner got nvti_info: %s\n", feed_version);
1284 if (plugins_feed_version)
1285 g_free (plugins_feed_version);
1286 plugins_feed_version = feed_version;
1288 switch (parse_scanner_done (&messages))
1296 case -1:
goto return_error;
1299 if (sync_buffer ())
goto return_error;
1300 goto return_need_more;
1307 if (strlen (field) == 0 && match[1] ==
'|')
1310 switch (parse_scanner_done (&messages))
1312 case -1:
goto return_error;
1315 if (sync_buffer ())
goto return_error;
1316 goto return_need_more;
1337 int value_start = -1, value_end = -1, count;
1340 count = sscanf (field,
"%20[^[][%*[^]]]:%n%*[ -~]%n",
1341 name, &value_start, &value_end);
1342 if (count == 1 && value_start > 0 && value_end > 0
1343 && ((strcmp (name,
"SSH Authorization") == 0)
1344 || (strcmp (name,
"SMB Authorization") == 0)))
1345 current_scanner_preference = NULL;
1347 current_scanner_preference = g_strdup (field);
1349 switch (parse_scanner_preference_value (&messages,
1354 if (sync_buffer ())
goto return_error;
1355 goto return_need_more;
1357 g_free (current_scanner_preference);
1358 current_scanner_preference = NULL;
1363 if (strcasecmp (
"BYE", field) == 0)
1365 else if (strcasecmp (
"ERRMSG", field) == 0)
1367 else if (strcasecmp (
"FILE_ACCEPTED", field) == 0)
1370 switch (parse_scanner_done (&messages))
1372 case -1:
goto return_error;
1375 if (sync_buffer ())
goto return_error;
1376 goto return_need_more;
1379 else if (strcasecmp (
"ALARM", field) == 0)
1381 else if (strcasecmp (
"LOG", field) == 0)
1383 else if (strcasecmp (
"NVT_INFO", field) == 0)
1385 else if (strcasecmp (
"PLUGIN_LIST", field) == 0)
1389 else if (strcasecmp (
"PREFERENCES", field) == 0)
1391 assert (current_scanner_preference == NULL);
1394 else if (strcasecmp (
"TIME", field) == 0)
1398 else if (strcasecmp (
"STATUS", field) == 0)
1404 g_debug (
"New scanner command to implement: %s\n",
1411 assert (current_host == NULL);
1412 current_host = g_strdup (field);
1422 unsigned int current, max;
1423 g_debug (
" scanner got ports: %s\n", field);
1424 if (sscanf (field,
"%u/%u", ¤t, &max) == 2)
1432 g_free (current_host);
1433 current_host = NULL;
1436 switch (parse_scanner_done (&messages))
1438 case -1:
goto return_error;
1441 if (sync_buffer ())
goto return_error;
1442 goto return_need_more;
1448 if (strcasecmp (
"HOST_START", field) == 0)
1450 else if (strcasecmp (
"HOST_END", field) == 0)
1452 else if (strcasecmp (
"SCAN_START", field) == 0)
1454 else if (strcasecmp (
"SCAN_END", field) == 0)
1463 assert (current_host == NULL);
1464 current_host = g_strdup (field);
1472 assert (current_host);
1478 g_free (current_host);
1479 current_host = NULL;
1482 switch (parse_scanner_done (&messages))
1484 case -1:
goto return_error;
1487 if (sync_buffer ())
goto return_error;
1488 goto return_need_more;
1494 assert (current_host == NULL);
1495 current_host = g_strdup (field);
1501 assert (current_host);
1509 "Report Host", uuid, 1, 0);
1515 assert (current_host);
1519 g_free (current_host);
1520 current_host = NULL;
1523 switch (parse_scanner_done (&messages))
1525 case -1:
goto return_error;
1528 if (sync_buffer ())
goto return_error;
1529 goto return_need_more;
1553 switch (parse_scanner_done (&messages))
1555 case -1:
goto return_error;
1558 if (sync_buffer ())
goto return_error;
1559 goto return_need_more;
1612 switch (parse_scanner_done (&messages))
1614 case -1:
goto return_error;
1617 if (sync_buffer ())
goto return_error;
1618 goto return_need_more;
1624 g_debug (
" switch t\n");
1625 g_debug (
" cmp %i\n", strcasecmp (
"SERVER", field));
1626 if (strcasecmp (
"SERVER", field))
1630 switch (parse_scanner_server (&messages))
1633 case -1:
goto return_error;
1636 if (sync_buffer ())
goto return_error;
1637 goto return_need_more;
1644 g_debug (
" scanner new state: %i\n", scanner_state);
1659 from_start += match + 1 - input;
1664 if (sync_buffer ())
return -1;
int report_host_noticeable(report_t, const gchar *)
Check if a report host is alive and has at least one result.
void set_scan_host_start_time_otp(report_t, const char *, const char *)
Set the start time of a scanned host.
int scanner_total_loading
Scanner total number of plugins to be loaded, when still loading.
void manage_complete_nvt_cache_update(GList *, GList *, int)
Complete an update of the NVT cache.
scanner_init_state_t scanner_init_state
The initialisation state of the scanner.
GList * scanner_plugins_list
The full plugins list, during reading of scanner plugin list.
void set_task_run_status(task_t, task_status_t)
Set the run state of a task.
int scan_start_time_epoch(report_t)
Get the start time of a scan, in seconds since the epoch.
host_t host_notice(const char *, const char *, const char *, const char *, const char *, int, int)
Notice a host.
task_t current_scanner_task
The task currently running on the scanner.
void hosts_set_max_severity(report_t, int *, int *)
Set the maximum severity of each host in a scan.
task_status_t task_run_status(task_t)
Return the run state of a task.
void set_scan_start_time_otp(report_t, const char *)
Set the start time of a scan.
buffer_size_t from_scanner_start
The start of the data in the from_scanner buffer.
void set_scan_host_end_time_otp(report_t, const char *, const char *)
Set the end time of a scanned host.
void(* progress)()
Function to mark progress.
void clear_duration_schedules(task_t)
Clear once-off schedules from tasks where the duration has passed.
void hosts_set_identifiers()
Setup hosts and their identifiers after a scan, from host details.
void set_scan_ports(report_t, const char *, unsigned int, unsigned int)
Set the ports for a particular host in a scan.
void hosts_set_details(report_t report)
Store certain host details in the assets after a scan.
#define G_LOG_DOMAIN
GLib log domain.
void set_task_start_time_otp(task_t, char *)
Set the start time of a task.
buffer_size_t from_scanner_end
The end of the data in the from_scanner buffer.
void set_scanner_init_state(scanner_init_state_t state)
Set the scanner initialisation state, scanner_init_state.
void update_duration_schedule_periods(task_t)
Update tasks with limited run schedules which have durations.
report_t current_report
The report of the current task.
int manage_check_current_task()
Handle state changes to current task made by other processes.
void set_scan_end_time_otp(report_t, const char *)
Set the end time of a scan.
void set_task_end_time(task_t task, char *time)
Set the end time of a task.
char * report_uuid(report_t)
Return the UUID of a report.
void manage_transaction_stop(gboolean)
Commit the current transaction, if any.
int acknowledge_bye()
Acknowledge a scanner BYE.
void set_nvts_feed_version(const char *)
Set the feed version of the plugins in the plugin cache.
char * port_name_formatted(const char *)
Returns formatted port number, protocol and iana name from.
void manage_nvt_preferences_enable()
Enable the NVT preferences.
GList * scanner_preferences_list
The full preferences list, during reading of scanner plugin list.
int acknowledge_feed_version_info()
Acknowledge scanner PLUGINS_FEED_VERSION message,.
unsigned int buffer_size_t
char * from_scanner
Buffer of input from the scanner.
int scanner_current_loading
Scanner current number of loaded plugins, when still loading.
int delete_task_lock(task_t, int)
Complete deletion of a task.