1 /* Copyright (C) 2009-2021 Greenbone Networks GmbH
2  *
3  * SPDX-License-Identifier: AGPL-3.0-or-later
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Affero General Public License as
7  * published by the Free Software Foundation, either version 3 of the
8  * License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Affero General Public License for more details.
14  *
15  * You should have received a copy of the GNU Affero General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 /*
20  * @file manage.h
21  * @brief Headers for Greenbone Vulnerability Manager: the Manage library.
22  */
23 
24 #ifndef _GVMD_MANAGE_H
25 #define _GVMD_MANAGE_H
26 
27 #include "iterator.h"
28 #include "manage_configs.h"
29 #include "manage_get.h"
30 #include "utils.h"
31 
32 #include <stdio.h>
33 #include <glib.h>
34 #include <gnutls/gnutls.h>
35 
36 #include <gvm/base/array.h>
37 #include <gvm/base/credentials.h>
38 #include <gvm/base/nvti.h>
39 #include <gvm/base/networking.h>
40 #include <gvm/util/serverutils.h>
41 #include <gvm/util/authutils.h>
42 #include <gvm/osp/osp.h>
43 
44 /**
45  * @brief Data structure for info used to connect to the database
46  */
47 typedef struct {
48   gchar *name; ///< The database name
49   gchar *host; ///< The database host or socket directory
50   gchar *port; ///< The database port or socket file extension
51   gchar *user; ///< The database user name
52 } db_conn_info_t;
53 
54 /**
55  * @brief OID of ping_host.nasl
56  */
57 #define OID_PING_HOST "1.3.6.1.4.1.25623.1.0.100315"
58 
59 /**
60  * @brief OID of ssh_authorization_init.nasl
61  */
62 #define OID_SSH_AUTH "1.3.6.1.4.1.25623.1.0.103591"
63 
64 /**
65  * @brief OID of smb_authorization.nasl
66  */
67 #define OID_SMB_AUTH "1.3.6.1.4.1.25623.1.0.90023"
68 
69 /**
70  * @brief OID of gb_esxi_authorization.nasl
71  */
72 #define OID_ESXI_AUTH "1.3.6.1.4.1.25623.1.0.105058"
73 
74 /**
75  * @brief OID of gb_snmp_authorization.nasl
76  */
77 #define OID_SNMP_AUTH "1.3.6.1.4.1.25623.1.0.105076"
78 
79 /**
80  * @brief OID of find_services.nasl
81  */
82 #define OID_SERVICES "1.3.6.1.4.1.25623.1.0.10330"
83 
84 /**
85  * @brief OID of logins.nasl
86  */
87 #define OID_LOGINS "1.3.6.1.4.1.25623.1.0.10870"
88 
89 /**
90  * @brief OID of global_settings.nasl
91  */
92 #define OID_GLOBAL_SETTINGS "1.3.6.1.4.1.25623.1.0.12288"
93 
94 /**
95  * @brief Flag with all Glib log levels.
96  */
97 #define ALL_LOG_LEVELS  (G_LOG_LEVEL_MASK       \
98                          | G_LOG_FLAG_FATAL     \
99                          | G_LOG_FLAG_RECURSION)
100 
101 /**
102  * @brief Defines g_info for glib versions older than 2.40.
103  */
104 #ifndef g_info
105 #define g_info(...)  g_log (G_LOG_DOMAIN,         \
106                             G_LOG_LEVEL_INFO,     \
107                             __VA_ARGS__)
108 #endif /* g_info not defined */
109 
110 /**
111  * @brief Name value pair.
112  */
113 typedef struct
114 {
115   gchar *name;    ///< Name.
116   gchar *value;   ///< Param value.
117 } name_value_t;
118 
119 /**
120  * @brief Fork helper function type.
121  */
122 typedef int (*manage_connection_forker_t) (gvm_connection_t * conn,
123                                            const gchar* uuid);
124 
125 int
126 init_manage (GSList*, const db_conn_info_t *, int, int, int, int,
127              manage_connection_forker_t, int);
128 
129 int
130 init_manage_helper (GSList *, const db_conn_info_t *, int);
131 
132 void
133 init_manage_process (const db_conn_info_t*);
134 
135 void
136 cleanup_manage_process (gboolean);
137 
138 void
139 manage_cleanup_process_error (int);
140 
141 void
142 manage_reset_currents ();
143 
144 
145 /* Commands. */
146 
147 /**
148  * @brief A command.
149  */
150 typedef struct
151 {
152   gchar *name;     ///< Command name.
153   gchar *summary;  ///< Summary of command.
154 } command_t;
155 
156 /**
157  * @brief The GMP command list.
158  */
159 extern command_t gmp_commands[];
160 
161 
162 /* Certificate and key management. */
163 
164 gchar*
165 truncate_certificate (const gchar*);
166 
167 gchar*
168 truncate_private_key (const gchar*);
169 
170 int
171 get_certificate_info (const gchar *,
172                       gssize,
173                       time_t *,
174                       time_t *,
175                       gchar **,
176                       gchar **,
177                       gchar **,
178                       gchar **,
179                       gchar **,
180                       gnutls_x509_crt_fmt_t *);
181 
182 gchar *
183 certificate_iso_time (time_t);
184 
185 const gchar *
186 certificate_time_status (time_t, time_t);
187 
188 void
189 parse_ssldetails (const char *, time_t *, time_t *, gchar **, gchar **);
190 
191 const char*
192 tls_certificate_format_str (gnutls_x509_crt_fmt_t certificate_format);
193 
194 
195 /* Credentials. */
196 
197 extern credentials_t current_credentials;
198 
199 int
200 authenticate (credentials_t*);
201 
202 
203 /* Database. */
204 
205 int
206 manage_db_supported_version ();
207 
208 int
209 manage_db_version ();
210 
211 int
212 manage_scap_db_supported_version ();
213 
214 int
215 manage_scap_db_version ();
216 
217 int
218 manage_cert_db_supported_version ();
219 
220 int
221 manage_cert_db_version ();
222 
223 void
224 set_db_version (int version);
225 
226 int
227 manage_migrate (GSList*, const db_conn_info_t*);
228 
229 int
230 manage_encrypt_all_credentials (GSList *, const db_conn_info_t *);
231 
232 int
233 manage_decrypt_all_credentials (GSList *, const db_conn_info_t *);
234 
235 void
236 manage_session_set_timezone (const char *);
237 
238 void
239 manage_transaction_start ();
240 
241 void
242 manage_transaction_stop (gboolean);
243 
244 
245 /* Task structures. */
246 
247 /**
248  * @brief Task statuses, also used as scan/report statuses.
249  *
250  * These numbers are used in the database, so if the number associated with
251  * any symbol changes then a migrator must be added to update existing data.
252  */
253 typedef enum
254 {
255   TASK_STATUS_DELETE_REQUESTED = 0,
256   TASK_STATUS_DONE = 1,
257   TASK_STATUS_NEW  = 2,
258   TASK_STATUS_REQUESTED = 3,
259   TASK_STATUS_RUNNING   = 4,
260   TASK_STATUS_STOP_REQUESTED   = 10,
261   TASK_STATUS_STOP_WAITING     = 11,
262   TASK_STATUS_STOPPED = 12,
263   TASK_STATUS_INTERRUPTED = 13,
264   TASK_STATUS_DELETE_ULTIMATE_REQUESTED = 14,
265   /* 15 was removed (TASK_STATUS_STOP_REQUESTED_GIVEUP). */
266   TASK_STATUS_DELETE_WAITING = 16,
267   TASK_STATUS_DELETE_ULTIMATE_WAITING = 17,
268   TASK_STATUS_QUEUED = 18
269 } task_status_t;
270 
271 /**
272  * Minimum value for number of reports to keep on auto_delete
273  */
274 #define AUTO_DELETE_KEEP_MIN 2
275 
276 /**
277  * Maximum value for number of reports to keep on auto_delete
278  */
279 #define AUTO_DELETE_KEEP_MAX 1200
280 
281 
282 /**
283  * @brief Alive tests.
284  *
285  * These numbers are used in the database, so if the number associated with
286  * any symbol changes then a migrator must be added to update existing data.
287  */
288 typedef enum
289 {
290   ALIVE_TEST_TCP_ACK_SERVICE = 1,
291   ALIVE_TEST_ICMP = 2,
292   ALIVE_TEST_ARP = 4,
293   ALIVE_TEST_CONSIDER_ALIVE = 8,
294   ALIVE_TEST_TCP_SYN_SERVICE = 16
295 } alive_test_t;
296 
297 /**
298  * @brief Scanner types.
299  *
300  * These numbers are used in the database, so if the number associated with
301  * any symbol changes then a migrator must be added to update existing data.
302  */
303 typedef enum scanner_type
304 {
305   SCANNER_TYPE_NONE = 0,
306   SCANNER_TYPE_OSP = 1,
307   SCANNER_TYPE_OPENVAS = 2,
308   SCANNER_TYPE_CVE = 3,
309   /* 4 was removed (SCANNER_TYPE_GMP). */
310   SCANNER_TYPE_OSP_SENSOR = 5,
311   SCANNER_TYPE_MAX = 6,
312 } scanner_type_t;
313 
314 int
315 scanner_type_valid (scanner_type_t);
316 
317 typedef resource_t credential_t;
318 typedef resource_t alert_t;
319 typedef resource_t filter_t;
320 typedef resource_t group_t;
321 typedef resource_t host_t;
322 typedef resource_t tag_t;
323 typedef resource_t target_t;
324 typedef resource_t task_t;
325 typedef resource_t ticket_t;
326 typedef resource_t tls_certificate_t;
327 typedef resource_t result_t;
328 typedef resource_t report_t;
329 typedef resource_t report_host_t;
330 typedef resource_t report_format_t;
331 typedef resource_t report_format_param_t;
332 typedef resource_t role_t;
333 typedef resource_t note_t;
334 typedef resource_t nvt_t;
335 typedef resource_t override_t;
336 typedef resource_t permission_t;
337 typedef resource_t port_list_t;
338 typedef resource_t port_range_t;
339 typedef resource_t schedule_t;
340 typedef resource_t scanner_t;
341 typedef resource_t setting_t;
342 typedef resource_t user_t;
343 
344 
345 /* GMP GET support.
346  *
347  * The standalone parts of the GET support are in manage_get.h. */
348 
349 resource_t
350 get_iterator_resource (iterator_t*);
351 
352 user_t
353 get_iterator_owner (iterator_t*);
354 
355 
356 /* Resources. */
357 
358 int
359 manage_resource_name (const char *, const char *, char **);
360 
361 int
362 manage_trash_resource_name (const char *, const char *, char **);
363 
364 int
365 resource_count (const char *, const get_data_t *);
366 
367 int
368 resource_id_exists (const char *, const char *);
369 
370 int
371 trash_id_exists (const char *, const char *);
372 
373 gboolean
374 find_resource (const char*, const char*, resource_t*);
375 
376 const char *
377 type_name_plural (const char*);
378 
379 const char *
380 type_name (const char*);
381 
382 int
383 type_is_scap (const char*);
384 
385 int
386 delete_resource (const char *, const char *, int);
387 
388 
389 /* Events and Alerts. */
390 
391 /**
392  * @brief Data about a report sent by an alert.
393  */
394 typedef struct {
395   gchar *local_filename;          ///< Path to the local report file.
396   gchar *remote_filename;         ///< Path or filename to send to / as.
397   gchar *content_type;            ///< The MIME content type of the report.
398   gchar *report_format_name;      ///< Name of the report format used.
399 } alert_report_data_t;
400 
401 void
402 alert_report_data_free (alert_report_data_t *);
403 
404 void
405 alert_report_data_reset (alert_report_data_t *);
406 
407 /**
408  * @brief Default format string for alert email, when including report.
409  */
410 #define ALERT_MESSAGE_INCLUDE                                                 \
411  "Task '$n': $e\n"                                                            \
412  "\n"                                                                         \
413  "After the event $e,\n"                                                      \
414  "the following condition was met: $c\n"                                      \
415  "\n"                                                                         \
416  "This email escalation is configured to apply report format '$r'.\n"         \
417  "Full details and other report formats are available on the scan engine.\n"  \
418  "\n"                                                                         \
419  "$t"                                                                         \
420  "\n"                                                                         \
421  "$i"                                                                         \
422  "\n"                                                                         \
423  "\n"                                                                         \
424  "Note:\n"                                                                    \
425  "This email was sent to you as a configured security scan escalation.\n"     \
426  "Please contact your local system administrator if you think you\n"          \
427  "should not have received it.\n"
428 
429 /**
430  * @brief Default format string for SecInfo alert email, when including report.
431  */
432 #define SECINFO_ALERT_MESSAGE_INCLUDE                                         \
433  "Task '$n': $e\n"                                                            \
434  "\n"                                                                         \
435  "After the event $e,\n"                                                      \
436  "the following condition was met: $c\n"                                      \
437  "\n"                                                                         \
438  "This email escalation is configured to apply report format '$r'.\n"         \
439  "Full details and other report formats are available on the scan engine.\n"  \
440  "\n"                                                                         \
441  "$t"                                                                         \
442  "\n"                                                                         \
443  "$i"                                                                         \
444  "\n"                                                                         \
445  "\n"                                                                         \
446  "Note:\n"                                                                    \
447  "This email was sent to you as a configured security scan escalation.\n"     \
448  "Please contact your local system administrator if you think you\n"          \
449  "should not have received it.\n"
450 
451 /**
452  * @brief Default format string for alert email, when attaching report.
453  */
454 #define ALERT_MESSAGE_ATTACH                                                  \
455  "Task '$n': $e\n"                                                            \
456  "\n"                                                                         \
457  "After the event $e,\n"                                                      \
458  "the following condition was met: $c\n"                                      \
459  "\n"                                                                         \
460  "This email escalation is configured to attach report format '$r'.\n"        \
461  "Full details and other report formats are available on the scan engine.\n"  \
462  "\n"                                                                         \
463  "$t"                                                                         \
464  "\n"                                                                         \
465  "Note:\n"                                                                    \
466  "This email was sent to you as a configured security scan escalation.\n"     \
467  "Please contact your local system administrator if you think you\n"          \
468  "should not have received it.\n"
469 
470 /**
471  * @brief Default format string for SecInfo alert email, when attaching report.
472  */
473 #define SECINFO_ALERT_MESSAGE_ATTACH                                          \
474  "Task '$n': $e\n"                                                            \
475  "\n"                                                                         \
476  "After the event $e,\n"                                                      \
477  "the following condition was met: $c\n"                                      \
478  "\n"                                                                         \
479  "This email escalation is configured to attach report format '$r'.\n"        \
480  "Full details and other report formats are available on the scan engine.\n"  \
481  "\n"                                                                         \
482  "$t"                                                                         \
483  "\n"                                                                         \
484  "Note:\n"                                                                    \
485  "This email was sent to you as a configured security scan escalation.\n"     \
486  "Please contact your local system administrator if you think you\n"          \
487  "should not have received it.\n"
488 
489 /**
490  * @brief Default description format string for vFire alert.
491  */
492 #define ALERT_VFIRE_CALL_DESCRIPTION                                          \
493  "GVM Task '$n': $e\n"                                                        \
494  "\n"                                                                         \
495  "After the event $e,\n"                                                      \
496  "the following condition was met: $c\n"                                      \
497  "\n"                                                                         \
498  "This ticket includes reports in the following format(s):\n"                 \
499  "$r.\n"                                                                      \
500  "Full details and other report formats are available on the scan engine.\n"  \
501  "\n"                                                                         \
502  "$t"                                                                         \
503  "\n"                                                                         \
504  "Note:\n"                                                                    \
505  "This ticket was created automatically as a security scan escalation.\n"     \
506  "Please contact your local system administrator if you think it\n"           \
507  "was created or assigned erroneously.\n"
508 
509 /**
510  * @brief Types of task events.
511  */
512 typedef enum
513 {
514   EVENT_ERROR,
515   EVENT_TASK_RUN_STATUS_CHANGED,
516   EVENT_NEW_SECINFO,
517   EVENT_UPDATED_SECINFO,
518   EVENT_TICKET_RECEIVED,
519   EVENT_ASSIGNED_TICKET_CHANGED,
520   EVENT_OWNED_TICKET_CHANGED
521 } event_t;
522 
523 /**
524  * @brief Types of alerts.
525  */
526 typedef enum
527 {
528   ALERT_METHOD_ERROR,
529   ALERT_METHOD_EMAIL,
530   ALERT_METHOD_HTTP_GET,
531   ALERT_METHOD_SOURCEFIRE,
532   ALERT_METHOD_START_TASK,
533   ALERT_METHOD_SYSLOG,
534   ALERT_METHOD_VERINICE,
535   ALERT_METHOD_SEND,
536   ALERT_METHOD_SCP,
537   ALERT_METHOD_SNMP,
538   ALERT_METHOD_SMB,
539   ALERT_METHOD_TIPPINGPOINT,
540   ALERT_METHOD_VFIRE,
541 } alert_method_t;
542 
543 /**
544  * @brief Types of alert conditions.
545  */
546 typedef enum
547 {
548   ALERT_CONDITION_ERROR,
549   ALERT_CONDITION_ALWAYS,
550   ALERT_CONDITION_SEVERITY_AT_LEAST,
551   ALERT_CONDITION_SEVERITY_CHANGED,
552   ALERT_CONDITION_FILTER_COUNT_AT_LEAST,
553   ALERT_CONDITION_FILTER_COUNT_CHANGED
554 } alert_condition_t;
555 
556 int
557 manage_check_alerts (GSList *, const db_conn_info_t *);
558 
559 int
560 create_alert (const char*, const char*, const char*, const char*, event_t,
561               GPtrArray*, alert_condition_t, GPtrArray*, alert_method_t,
562               GPtrArray*, alert_t*);
563 
564 int
565 copy_alert (const char*, const char*, const char*, alert_t*);
566 
567 int
568 modify_alert (const char*, const char*, const char*, const char*,
569               const char*, event_t, GPtrArray*, alert_condition_t, GPtrArray*,
570               alert_method_t, GPtrArray*);
571 
572 int
573 delete_alert (const char *, int);
574 
575 char *
576 alert_uuid (alert_t);
577 
578 gboolean
579 find_alert_with_permission (const char *, alert_t *, const char *);
580 
581 int
582 manage_alert (const char *, const char *, event_t, const void*, gchar **);
583 
584 int
585 manage_test_alert (const char *, gchar **);
586 
587 int
588 alert_in_use (alert_t);
589 
590 int
591 trash_alert_in_use (alert_t);
592 
593 int
594 alert_writable (alert_t);
595 
596 int
597 trash_alert_writable (alert_t);
598 
599 int
600 alert_count (const get_data_t *);
601 
602 int
603 init_alert_iterator (iterator_t*, const get_data_t*);
604 
605 int
606 alert_iterator_event (iterator_t*);
607 
608 int
609 alert_iterator_condition (iterator_t*);
610 
611 int
612 alert_iterator_method (iterator_t*);
613 
614 char *
615 alert_iterator_filter_uuid (iterator_t*);
616 
617 char *
618 alert_iterator_filter_name (iterator_t*);
619 
620 int
621 alert_iterator_filter_trash (iterator_t*);
622 
623 int
624 alert_iterator_filter_readable (iterator_t*);
625 
626 int
627 alert_iterator_active (iterator_t*);
628 
629 const char*
630 alert_condition_name (alert_condition_t);
631 
632 gchar*
633 alert_condition_description (alert_condition_t, alert_t);
634 
635 const char*
636 event_name (event_t);
637 
638 gchar*
639 event_description (event_t, const void *, const char *);
640 
641 const char*
642 alert_method_name (alert_method_t);
643 
644 alert_condition_t
645 alert_condition_from_name (const char*);
646 
647 event_t
648 event_from_name (const char*);
649 
650 alert_method_t
651 alert_method_from_name (const char*);
652 
653 void
654 init_alert_data_iterator (iterator_t *, alert_t, int, const char *);
655 
656 const char*
657 alert_data_iterator_name (iterator_t*);
658 
659 const char*
660 alert_data_iterator_data (iterator_t*);
661 
662 void
663 init_alert_task_iterator (iterator_t*, alert_t, int);
664 
665 const char*
666 alert_task_iterator_name (iterator_t*);
667 
668 const char*
669 alert_task_iterator_uuid (iterator_t*);
670 
671 int
672 alert_task_iterator_readable (iterator_t*);
673 
674 void
675 init_task_alert_iterator (iterator_t*, task_t);
676 
677 const char*
678 task_alert_iterator_uuid (iterator_t*);
679 
680 const char*
681 task_alert_iterator_name (iterator_t*);
682 
683 
684 /* Task global variables and preprocessor variables. */
685 
686 /**
687  * @brief The task currently running on the scanner.
688  */
689 extern task_t current_scanner_task;
690 
691 extern report_t global_current_report;
692 
693 
694 /* Task code specific to the representation of tasks. */
695 
696 unsigned int
697 task_count (const get_data_t *);
698 
699 int
700 init_task_iterator (iterator_t*, const get_data_t *);
701 
702 task_status_t
703 task_iterator_run_status (iterator_t*);
704 
705 const char *
706 task_iterator_run_status_name (iterator_t*);
707 
708 int
709 task_iterator_total_reports (iterator_t*);
710 
711 int
712 task_iterator_finished_reports (iterator_t *);
713 
714 const char *
715 task_iterator_first_report (iterator_t*);
716 
717 const char *
718 task_iterator_last_report (iterator_t *);
719 
720 report_t
721 task_iterator_current_report (iterator_t *);
722 
723 const char *
724 task_iterator_hosts_ordering (iterator_t *);
725 
726 scanner_t
727 task_iterator_scanner (iterator_t *);
728 
729 const char *
730 task_iterator_usage_type (iterator_t *);
731 
732 int
733 task_uuid (task_t, char **);
734 
735 int
736 task_in_trash (task_t);
737 
738 int
739 task_in_trash_id (const gchar *);
740 
741 int
742 task_in_use (task_t);
743 
744 int
745 trash_task_in_use (task_t);
746 
747 int
748 task_writable (task_t);
749 
750 int
751 task_alterable (task_t);
752 
753 int
754 trash_task_writable (task_t);
755 
756 int
757 task_average_scan_duration (task_t);
758 
759 char*
760 task_owner_name (task_t);
761 
762 char*
763 task_name (task_t);
764 
765 char*
766 task_comment (task_t);
767 
768 char*
769 task_hosts_ordering (task_t);
770 
771 scanner_t
772 task_scanner (task_t);
773 
774 int
775 task_scanner_in_trash (task_t);
776 
777 config_t
778 task_config (task_t);
779 
780 char*
781 task_config_uuid (task_t);
782 
783 char*
784 task_config_name (task_t);
785 
786 int
787 task_config_in_trash (task_t);
788 
789 void
790 set_task_config (task_t, config_t);
791 
792 target_t
793 task_target (task_t);
794 
795 int
796 task_target_in_trash (task_t);
797 
798 void
799 set_task_target (task_t, target_t);
800 
801 void
802 set_task_hosts_ordering (task_t, const char *);
803 
804 void
805 set_task_scanner (task_t, scanner_t);
806 
807 void
808 set_task_usage_type (task_t, const char *);
809 
810 char*
811 task_description (task_t);
812 
813 void
814 set_task_description (task_t, char*, gsize);
815 
816 task_status_t
817 task_run_status (task_t);
818 
819 void
820 set_task_run_status (task_t, task_status_t);
821 
822 int
823 task_result_count (task_t, int);
824 
825 report_t
826 task_running_report (task_t);
827 
828 int
829 task_upload_progress (task_t);
830 
831 void
832 set_task_start_time_epoch (task_t, int);
833 
834 void
835 set_task_start_time_ctime (task_t, char*);
836 
837 void
838 set_task_end_time (task_t task, char* time);
839 
840 void
841 set_task_end_time_epoch (task_t, time_t);
842 
843 void
844 add_task_alert (task_t, alert_t);
845 
846 void
847 set_task_alterable (task_t, int);
848 
849 int
850 set_task_groups (task_t, array_t*, gchar**);
851 
852 int
853 set_task_schedule (task_t, schedule_t, int);
854 
855 int
856 set_task_schedule_periods (const gchar *, int);
857 
858 int
859 set_task_schedule_periods_id (task_t, int);
860 
861 unsigned int
862 task_report_count (task_t);
863 
864 int
865 task_last_report (task_t, report_t*);
866 
867 const char *
868 task_iterator_trend_counts (iterator_t *, int, int, int, double, int, int, int,
869                             double);
870 
871 int
872 task_schedule_periods (task_t);
873 
874 int
875 task_schedule_periods_uuid (const gchar *);
876 
877 schedule_t
878 task_schedule (task_t);
879 
880 schedule_t
881 task_schedule_uuid (const gchar *);
882 
883 int
884 task_schedule_in_trash (task_t);
885 
886 time_t
887 task_schedule_next_time_uuid (const gchar *);
888 
889 int
890 task_schedule_next_time (task_t);
891 
892 int
893 task_debugs_size (task_t);
894 
895 int
896 task_holes_size (task_t);
897 
898 int
899 task_infos_size (task_t);
900 
901 int
902 task_logs_size (task_t);
903 
904 int
905 task_warnings_size (task_t);
906 
907 int
908 task_false_positive_size (task_t);
909 
910 task_t
911 make_task (char*, char*, int, int);
912 
913 void
914 make_task_complete (task_t);
915 
916 int
917 copy_task (const char*, const char*, const char *, int, task_t*);
918 
919 void
920 set_task_name (task_t, const char *);
921 
922 gboolean
923 find_task_with_permission (const char*, task_t*, const char *);
924 
925 gboolean
926 find_trash_task_with_permission (const char*, task_t*, const char *);
927 
928 void
929 reset_task (task_t);
930 
931 int
932 set_task_parameter (task_t, const char*, char*);
933 
934 char*
935 task_observers (task_t);
936 
937 int
938 set_task_observers (task_t, const gchar *);
939 
940 int
941 request_delete_task_uuid (const char *, int);
942 
943 int
944 request_delete_task (task_t*);
945 
946 int
947 delete_task (task_t, int);
948 
949 void
950 append_to_task_comment (task_t, const char*, int);
951 
952 void
953 add_task_description_line (task_t, const char*, size_t);
954 
955 void
956 set_scan_ports (report_t, const char*, unsigned int, unsigned int);
957 
958 void
959 append_task_open_port (task_t task, const char *, const char*);
960 
961 int
962 manage_task_update_file (const gchar *, const char *, const void *);
963 
964 int
965 manage_task_remove_file (const gchar *, const char *);
966 
967 int
968 modify_task (const gchar *, const gchar *, const gchar *, const gchar *,
969              const gchar *, const gchar *, const gchar *, array_t *,
970              const gchar *, array_t *, const gchar *, const gchar *,
971              array_t *, const gchar *, gchar **, gchar **);
972 
973 void
974 init_config_file_iterator (iterator_t*, const char*, const char*);
975 
976 const char*
977 config_file_iterator_content (iterator_t*);
978 
979 int
980 config_file_iterator_length (iterator_t*);
981 
982 void
983 init_config_task_iterator (iterator_t*, config_t, int);
984 
985 const char*
986 config_task_iterator_name (iterator_t*);
987 
988 const char*
989 config_task_iterator_uuid (iterator_t*);
990 
991 int
992 config_task_iterator_readable (iterator_t*);
993 
994 
995 /* General severity related facilities. */
996 
997 int
998 severity_in_level (double, const char *);
999 
1000 const char*
1001 severity_to_level (double, int);
1002 
1003 const char*
1004 severity_to_type (double);
1005 
1006 /**
1007  * @brief Severity data for result count cache.
1008  */
1009 typedef struct
1010 {
1011   int* counts;       ///< Counts.
1012   int total;         ///< Total.
1013   double max;        ///< Max.
1014 } severity_data_t;
1015 
1016 double
1017 severity_data_value (int);
1018 
1019 void
1020 init_severity_data (severity_data_t*);
1021 
1022 void
1023 cleanup_severity_data (severity_data_t*);
1024 
1025 void
1026 severity_data_add (severity_data_t*, double);
1027 
1028 void
1029 severity_data_add_count (severity_data_t*, double, int);
1030 
1031 void
1032 severity_data_level_counts (const severity_data_t*,
1033                             int*, int*, int*, int*, int*, int*);
1034 
1035 
1036 /* General task facilities. */
1037 
1038 const char*
1039 run_status_name (task_status_t);
1040 
1041 int
1042 start_task (const char *, char**);
1043 
1044 int
1045 stop_task (const char *);
1046 
1047 int
1048 resume_task (const char *, char **);
1049 
1050 int
1051 move_task (const char*, const char*);
1052 
1053 
1054 /* Access control. */
1055 
1056 int
1057 user_may (const char *);
1058 
1059 extern int
1060 user_can_everything (const char *);
1061 
1062 extern int
1063 user_can_super_everyone (const char *);
1064 
1065 extern int
1066 user_has_super (const char *, user_t);
1067 
1068 
1069 /* Results. */
1070 
1071 /**
1072  * @brief SQL list of LSC families.
1073  */
1074 #define LSC_FAMILY_LIST                            \
1075   "'AIX Local Security Checks',"                   \
1076   " 'Amazon Linux Local Security Checks',"         \
1077   " 'CentOS Local Security Checks',"               \
1078   " 'Citrix Xenserver Local Security Checks',"     \
1079   " 'Debian Local Security Checks',"               \
1080   " 'F5 Local Security Checks',"                   \
1081   " 'Fedora Local Security Checks',"               \
1082   " 'FortiOS Local Security Checks',"              \
1083   " 'FreeBSD Local Security Checks',"              \
1084   " 'Gentoo Local Security Checks',"               \
1085   " 'HP-UX Local Security Checks',"                \
1086   " 'Huawei EulerOS Local Security Checks',"       \
1087   " 'JunOS Local Security Checks',"                \
1088   " 'Mac OS X Local Security Checks',"             \
1089   " 'Mageia Linux Local Security Checks',"         \
1090   " 'Mandrake Local Security Checks',"             \
1091   " 'Oracle Linux Local Security Checks',"         \
1092   " 'Palo Alto PAN-OS Local Security Checks',"     \
1093   " 'Red Hat Local Security Checks',"              \
1094   " 'Slackware Local Security Checks',"            \
1095   " 'Solaris Local Security Checks',"              \
1096   " 'SuSE Local Security Checks',"                 \
1097   " 'VMware Local Security Checks',"               \
1098   " 'Ubuntu Local Security Checks',"               \
1099   " 'Windows : Microsoft Bulletins'"
1100 
1101 /**
1102  * @brief Whole only families.
1103  */
1104 #define FAMILIES_WHOLE_ONLY                        \
1105   { "CentOS Local Security Checks",                \
1106     "Debian Local Security Checks",                \
1107     "Fedora Local Security Checks",                \
1108     "Huawei EulerOS Local Security Checks",        \
1109     "Oracle Linux Local Security Checks",          \
1110     "Red Hat Local Security Checks",               \
1111     "SuSE Local Security Checks",                  \
1112     "Ubuntu Local Security Checks",                \
1113     NULL }
1114 
1115 gboolean
1116 find_result_with_permission (const char*, result_t*, const char *);
1117 
1118 int
1119 result_uuid (result_t, char **);
1120 
1121 int
1122 result_detection_reference (result_t, report_t, const char *, const char *,
1123                             const char *, char **, char **, char **, char **,
1124                             char **);
1125 
1126 /* Reports. */
1127 
1128 /** @todo How is this documented? */
1129 #define OVAS_MANAGE_REPORT_ID_LENGTH UUID_LEN_STR
1130 
1131 /**
1132  * @brief Default apply_overrides setting
1133  */
1134 #define APPLY_OVERRIDES_DEFAULT 0
1135 
1136 /**
1137  * @brief Default quality of detection percentage.
1138  */
1139 #define QOD_DEFAULT 75
1140 
1141 /**
1142  * @brief Default min quality of detection percentage for filters.
1143  */
1144 #define MIN_QOD_DEFAULT 70
1145 
1146 void
1147 reports_clear_count_cache_for_override (override_t, int);
1148 
1149 void
1150 init_report_counts_build_iterator (iterator_t *, report_t, int, int,
1151                                    const char*);
1152 
1153 double
1154 report_severity (report_t, int, int);
1155 
1156 int
1157 report_host_count (report_t);
1158 
1159 int
1160 report_result_host_count (report_t, int);
1161 
1162 char *
1163 report_finished_hosts_str (report_t);
1164 
1165 gboolean
1166 find_report_with_permission (const char *, report_t *, const char *);
1167 
1168 report_t
1169 make_report (task_t, const char *, task_status_t);
1170 
1171 int
1172 qod_from_type (const char *);
1173 
1174 result_t
1175 make_result (task_t, const char*, const char*, const char*, const char*,
1176              const char*, const char*, const char*);
1177 
1178 result_t
1179 make_osp_result (task_t, const char*, const char*, const char*, const char*,
1180                  const char *, const char *, const char *, int, const char*);
1181 
1182 result_t
1183 make_cve_result (task_t, const char*, const char*, double, const char*);
1184 
1185 /**
1186  * @brief A CREATE_REPORT result.
1187  */
1188 typedef struct
1189 {
1190   char *description;       ///< Description of NVT.
1191   char *host;              ///< Host.
1192   char *hostname;          ///< Hostname.
1193   char *nvt_oid;           ///< OID of NVT.
1194   char *scan_nvt_version;  ///< Version of NVT used at scan time.
1195   char *port;              ///< Port.
1196   char *qod;               ///< QoD (quality of detection).
1197   char *qod_type;          ///< QoD type.
1198   char *severity;          ///< Severity score.
1199   char *threat;            ///< Threat.
1200 } create_report_result_t;
1201 
1202 /**
1203  * @brief A host detail for create_report.
1204  */
1205 typedef struct
1206 {
1207   char *ip;           ///< IP.
1208   char *name;         ///< Detail name.
1209   char *source_desc;  ///< Source description.
1210   char *source_name;  ///< Source name.
1211   char *source_type;  ///< Source type.
1212   char *value;        ///< Detail value.
1213 } host_detail_t;
1214 
1215 
1216 /**
1217  * @brief A detection detail for create_report.
1218  */
1219 typedef struct
1220 {
1221   char *product; ///< product of detection in result.
1222   char *source_name; ///< source_name of detection in result.
1223   char *source_oid; ///< source_oid of detection in result.
1224   char *location; ///< location of detection in result.
1225 } detection_detail_t;
1226 
1227 void
1228 host_detail_free (host_detail_t *);
1229 
1230 void
1231 insert_report_host_detail (report_t, const char *, const char *, const char *,
1232                            const char *, const char *, const char *);
1233 
1234 int
1235 manage_report_host_detail (report_t, const char *, const char *);
1236 
1237 void
1238 hosts_set_identifiers (report_t);
1239 
1240 void
1241 hosts_set_max_severity (report_t, int*, int*);
1242 
1243 void
1244 hosts_set_details (report_t report);
1245 
1246 void
1247 clear_duration_schedules (task_t);
1248 
1249 void
1250 update_duration_schedule_periods (task_t);
1251 
1252 int
1253 create_report (array_t*, const char *, const char *, const char *, const char *,
1254                array_t*, array_t*, array_t*, char **);
1255 
1256 void
1257 report_add_result (report_t, result_t);
1258 
1259 void
1260 report_add_results_array (report_t, GArray *);
1261 
1262 char*
1263 report_uuid (report_t);
1264 
1265 int
1266 task_last_resumable_report (task_t, report_t *);
1267 
1268 gchar*
1269 task_second_last_report_id (task_t);
1270 
1271 gchar*
1272 report_path_task_uuid (gchar*);
1273 
1274 gboolean
1275 report_task (report_t, task_t*);
1276 
1277 void
1278 report_compliance_by_uuid (const char *, int *, int *, int *);
1279 
1280 int
1281 report_scan_result_count (report_t, const char*, const char*, int, const char*,
1282                           const char*, int, int, int*);
1283 
1284 int
1285 report_counts (const char*, int*, int*, int*, int*, int*, double*,
1286                int, int);
1287 
1288 int
1289 report_counts_id (report_t, int*, int*, int*, int*, int*, double*,
1290                   const get_data_t*, const char*);
1291 
1292 int
1293 report_counts_id_no_filt (report_t, int*, int*, int*, int*, int*, int*,
1294                           double*, const get_data_t*, const char*);
1295 
1296 get_data_t*
1297 report_results_get_data (int, int, int, int);
1298 
1299 int
1300 scan_start_time_epoch (report_t);
1301 
1302 char*
1303 scan_start_time_uuid (const char *);
1304 
1305 char*
1306 scan_end_time_uuid (const char *);
1307 
1308 void
1309 set_scan_start_time_ctime (report_t, const char*);
1310 
1311 void
1312 set_scan_start_time_epoch (report_t, time_t);
1313 
1314 void
1315 set_scan_end_time (report_t, const char*);
1316 
1317 void
1318 set_scan_end_time_ctime (report_t, const char*);
1319 
1320 void
1321 set_scan_end_time_epoch (report_t, time_t);
1322 
1323 void
1324 set_scan_host_start_time_ctime (report_t, const char*, const char*);
1325 
1326 int
1327 scan_host_end_time (report_t, const char*);
1328 
1329 void
1330 set_scan_host_end_time (report_t, const char*, const char*);
1331 
1332 void
1333 set_scan_host_end_time_ctime (report_t, const char*, const char*);
1334 
1335 int
1336 report_timestamp (const char*, gchar**);
1337 
1338 int
1339 delete_report (const char *, int);
1340 
1341 int
1342 report_count (const get_data_t *);
1343 
1344 int
1345 init_report_iterator (iterator_t*, const get_data_t *);
1346 
1347 void
1348 init_report_iterator_task (iterator_t*, task_t);
1349 
1350 void
1351 init_report_errors_iterator (iterator_t*, report_t);
1352 
1353 const char*
1354 report_iterator_uuid (iterator_t*);
1355 
1356 int
1357 result_count (const get_data_t *, report_t, const char*);
1358 
1359 int
1360 init_result_get_iterator (iterator_t*, const get_data_t *, report_t,
1361                           const char*, const gchar *);
1362 
1363 gboolean
1364 next_report (iterator_t*, report_t*);
1365 
1366 result_t
1367 result_iterator_result (iterator_t*);
1368 
1369 const char*
1370 result_iterator_host (iterator_t*);
1371 
1372 const char*
1373 result_iterator_port (iterator_t*);
1374 
1375 const char*
1376 result_iterator_nvt_oid (iterator_t*);
1377 
1378 const char*
1379 result_iterator_nvt_name (iterator_t *);
1380 
1381 const char*
1382 result_iterator_nvt_summary (iterator_t *);
1383 
1384 const char*
1385 result_iterator_nvt_insight (iterator_t *);
1386 
1387 const char*
1388 result_iterator_nvt_affected (iterator_t *);
1389 
1390 const char*
1391 result_iterator_nvt_impact (iterator_t *);
1392 
1393 const char*
1394 result_iterator_nvt_solution (iterator_t *);
1395 
1396 const char*
1397 result_iterator_nvt_solution_type (iterator_t *);
1398 
1399 const char*
1400 result_iterator_nvt_solution_method (iterator_t *);
1401 
1402 const char*
1403 result_iterator_nvt_detection (iterator_t *);
1404 
1405 const char*
1406 result_iterator_nvt_family (iterator_t *);
1407 
1408 const char*
1409 result_iterator_nvt_cvss_base (iterator_t *);
1410 
1411 const char*
1412 result_iterator_nvt_tag (iterator_t *);
1413 
1414 const char*
1415 result_iterator_descr (iterator_t*);
1416 
1417 task_t
1418 result_iterator_task (iterator_t*);
1419 
1420 report_t
1421 result_iterator_report (iterator_t*);
1422 
1423 const char*
1424 result_iterator_scan_nvt_version (iterator_t*);
1425 
1426 const char*
1427 result_iterator_original_severity (iterator_t*);
1428 
1429 const char*
1430 result_iterator_severity (iterator_t *);
1431 
1432 double
1433 result_iterator_severity_double (iterator_t *);
1434 
1435 const char*
1436 result_iterator_original_level (iterator_t*);
1437 
1438 const char*
1439 result_iterator_level (iterator_t*);
1440 
1441 const char*
1442 result_iterator_solution_type (iterator_t*);
1443 
1444 const char*
1445 result_iterator_qod (iterator_t*);
1446 
1447 const char*
1448 result_iterator_qod_type (iterator_t*);
1449 
1450 const char*
1451 result_iterator_hostname (iterator_t*);
1452 
1453 const char*
1454 result_iterator_date (iterator_t*);
1455 
1456 const char*
1457 result_iterator_path (iterator_t*);
1458 
1459 const char*
1460 result_iterator_asset_host_id (iterator_t*);
1461 
1462 int
1463 result_iterator_may_have_notes (iterator_t*);
1464 
1465 int
1466 result_iterator_may_have_overrides (iterator_t*);
1467 
1468 int
1469 result_iterator_may_have_tickets (iterator_t*);
1470 
1471 gchar **
1472 result_iterator_cert_bunds (iterator_t*);
1473 
1474 gchar **
1475 result_iterator_dfn_certs (iterator_t*);
1476 
1477 int
1478 cleanup_result_nvts ();
1479 
1480 void
1481 init_report_host_iterator (iterator_t*, report_t, const char *, report_host_t);
1482 
1483 const char*
1484 host_iterator_host (iterator_t*);
1485 
1486 const char*
1487 host_iterator_start_time (iterator_t*);
1488 
1489 const char*
1490 host_iterator_end_time (iterator_t*);
1491 
1492 int
1493 host_iterator_current_port (iterator_t*);
1494 
1495 int
1496 host_iterator_max_port (iterator_t*);
1497 
1498 int
1499 collate_message_type (void* data, int, const void*, int, const void*);
1500 
1501 void
1502 trim_partial_report (report_t);
1503 
1504 int
1505 report_progress (report_t);
1506 
1507 gchar *
1508 manage_report (report_t, report_t, const get_data_t *, report_format_t,
1509                int, int, gsize *, gchar **, gchar **, gchar **, gchar **,
1510                gchar **);
1511 
1512 int
1513 manage_send_report (report_t, report_t, report_format_t, const get_data_t *,
1514                     int, int, int, int, int, int,
1515                     gboolean (*) (const char *,
1516                                   int (*) (const char*, void*),
1517                                   void*),
1518                     int (*) (const char *, void*), void *, const char *,
1519                     const gchar *);
1520 
1521 
1522 
1523 /* Reports. */
1524 
1525 void
1526 init_app_locations_iterator (iterator_t*, report_host_t, const gchar *);
1527 
1528 const char *
1529 app_locations_iterator_location (iterator_t *);
1530 
1531 void
1532 init_host_prognosis_iterator (iterator_t*, report_host_t);
1533 
1534 double
1535 prognosis_iterator_cvss_double (iterator_t*);
1536 
1537 const char*
1538 prognosis_iterator_cpe (iterator_t*);
1539 
1540 const char*
1541 prognosis_iterator_cve (iterator_t*);
1542 
1543 const char*
1544 prognosis_iterator_description (iterator_t*);
1545 
1546 
1547 /* Targets. */
1548 
1549 /**
1550  * @brief Absolute maximum number of IPs per target.
1551  *
1552  * The number of 70000 is chosen to cover "192.168.0.0-192.168.255.255".
1553  */
1554 #define MANAGE_ABSOLUTE_MAX_IPS_PER_TARGET 70000
1555 
1556 /**
1557  * @brief Default maximum number of hosts a target may specify.
1558  */
1559 #define MANAGE_MAX_HOSTS 4095
1560 
1561 /**
1562  * @brief Default maximum number of hosts a user host access may specify.
1563  */
1564 #define MANAGE_USER_MAX_HOSTS 16777216
1565 
1566 int
1567 manage_max_hosts ();
1568 
1569 void
1570 manage_filter_controls (const gchar *, int *, int *, gchar **, int *);
1571 
1572 void
1573 manage_report_filter_controls (const gchar *, int *, int *, gchar **, int *,
1574                                int *, gchar **, gchar **, gchar **, gchar **,
1575                                int *, int *, int *, int *, gchar **);
1576 
1577 gchar *
1578 manage_clean_filter (const gchar *);
1579 
1580 gchar *
1581 manage_clean_filter_remove (const gchar *, const gchar *);
1582 
1583 int
1584 manage_count_hosts (const char *, const char *);
1585 
1586 gboolean
1587 find_target_with_permission (const char *, target_t *, const char *);
1588 
1589 int
1590 create_target (const char*, const char*, const char*, const char*, const char*,
1591                const char *, const char*, credential_t, credential_t,
1592                const char *, credential_t, credential_t, credential_t,
1593                const char *, const char *, const char *, const char *,
1594                target_t*);
1595 
1596 int
1597 copy_target (const char*, const char*, const char *, target_t*);
1598 
1599 int
1600 modify_target (const char*, const char*, const char*, const char*, const char*,
1601                const char*, const char*, const char*, const char*, const char*,
1602                const char*, const char*, const char*, const char*, const char*,
1603                const char*);
1604 
1605 int
1606 delete_target (const char*, int);
1607 
1608 int
1609 target_count (const get_data_t *);
1610 
1611 void
1612 init_user_target_iterator (iterator_t*, target_t);
1613 
1614 void
1615 init_target_iterator_one (iterator_t*, target_t);
1616 
1617 int
1618 init_target_iterator (iterator_t*, const get_data_t *);
1619 
1620 const char*
1621 target_iterator_hosts (iterator_t*);
1622 
1623 const char*
1624 target_iterator_exclude_hosts (iterator_t*);
1625 
1626 const char*
1627 target_iterator_reverse_lookup_only (iterator_t*);
1628 
1629 const char*
1630 target_iterator_reverse_lookup_unify (iterator_t*);
1631 
1632 const char*
1633 target_iterator_comment (iterator_t*);
1634 
1635 int
1636 target_iterator_ssh_credential (iterator_t*);
1637 
1638 const char*
1639 target_iterator_ssh_port (iterator_t*);
1640 
1641 int
1642 target_iterator_smb_credential (iterator_t*);
1643 
1644 int
1645 target_iterator_esxi_credential (iterator_t*);
1646 
1647 int
1648 target_iterator_snmp_credential (iterator_t*);
1649 
1650 int
1651 target_iterator_ssh_elevate_credential (iterator_t*);
1652 
1653 int
1654 target_iterator_ssh_trash (iterator_t*);
1655 
1656 int
1657 target_iterator_smb_trash (iterator_t*);
1658 
1659 int
1660 target_iterator_esxi_trash (iterator_t*);
1661 
1662 int
1663 target_iterator_snmp_trash (iterator_t*);
1664 
1665 int
1666 target_iterator_ssh_elevate_trash (iterator_t*);
1667 
1668 const char*
1669 target_iterator_allow_simultaneous_ips (iterator_t*);
1670 
1671 const char*
1672 target_iterator_port_list_uuid (iterator_t*);
1673 
1674 const char*
1675 target_iterator_port_list_name (iterator_t*);
1676 
1677 int
1678 target_iterator_port_list_trash (iterator_t*);
1679 
1680 const char*
1681 target_iterator_alive_tests (iterator_t*);
1682 
1683 char*
1684 target_uuid (target_t);
1685 
1686 char*
1687 trash_target_uuid (target_t);
1688 
1689 char*
1690 target_name (target_t);
1691 
1692 char*
1693 trash_target_name (target_t);
1694 
1695 int
1696 trash_target_readable (target_t);
1697 
1698 char*
1699 target_hosts (target_t);
1700 
1701 char*
1702 target_exclude_hosts (target_t);
1703 
1704 char*
1705 target_reverse_lookup_only (target_t);
1706 
1707 char*
1708 target_reverse_lookup_unify (target_t);
1709 
1710 char*
1711 target_allow_simultaneous_ips (target_t);
1712 
1713 char*
1714 target_port_range (target_t);
1715 
1716 char*
1717 target_ssh_port (target_t);
1718 
1719 int
1720 target_in_use (target_t);
1721 
1722 int
1723 trash_target_in_use (target_t);
1724 
1725 int
1726 target_writable (target_t);
1727 
1728 int
1729 trash_target_writable (target_t);
1730 
1731 char*
1732 target_ssh_credential_name (const char *);
1733 
1734 void
1735 init_target_task_iterator (iterator_t*, target_t);
1736 
1737 const char*
1738 target_task_iterator_name (iterator_t*);
1739 
1740 const char*
1741 target_task_iterator_uuid (iterator_t*);
1742 
1743 int
1744 target_task_iterator_readable (iterator_t*);
1745 
1746 credential_t
1747 target_credential (target_t, const char*);
1748 
1749 int
1750 target_login_port (target_t, const char*);
1751 
1752 
1753 /* Configs.
1754  *
1755  * These are here because they need definitions that are still in manage.h. */
1756 
1757 scanner_t
1758 config_iterator_scanner (iterator_t*);
1759 
1760 int
1761 create_task_check_config_scanner (config_t, scanner_t);
1762 
1763 int
1764 modify_task_check_config_scanner (task_t, const char *, const char *);
1765 
1766 
1767 /* NVT's. */
1768 
1769 char *
1770 manage_nvt_name (nvt_t);
1771 
1772 char *
1773 nvt_name (const char *);
1774 
1775 char*
1776 nvts_feed_version ();
1777 
1778 time_t
1779 nvts_feed_version_epoch ();
1780 
1781 void
1782 set_nvts_feed_version (const char*);
1783 
1784 gboolean
1785 find_nvt (const char*, nvt_t*);
1786 
1787 int
1788 init_nvt_info_iterator (iterator_t*, get_data_t*, const char*);
1789 
1790 int
1791 nvt_info_count (const get_data_t *);
1792 
1793 int
1794 nvt_info_count_after (const get_data_t *, time_t, gboolean);
1795 
1796 void
1797 init_nvt_iterator (iterator_t*, nvt_t, config_t, const char*, const char*, int,
1798                    const char*);
1799 
1800 void
1801 init_cve_nvt_iterator (iterator_t*, const char *, int, const char*);
1802 
1803 const char*
1804 nvt_iterator_oid (iterator_t*);
1805 
1806 const char*
1807 nvt_iterator_version (iterator_t*);
1808 
1809 const char*
1810 nvt_iterator_name (iterator_t*);
1811 
1812 const char*
1813 nvt_iterator_summary (iterator_t*);
1814 
1815 const char*
1816 nvt_iterator_insight (iterator_t*);
1817 
1818 const char*
1819 nvt_iterator_affected (iterator_t*);
1820 
1821 const char*
1822 nvt_iterator_impact (iterator_t*);
1823 
1824 const char*
1825 nvt_iterator_description (iterator_t*);
1826 
1827 const char*
1828 nvt_iterator_tag (iterator_t*);
1829 
1830 int
1831 nvt_iterator_category (iterator_t*);
1832 
1833 const char*
1834 nvt_iterator_family (iterator_t*);
1835 
1836 const char*
1837 nvt_iterator_cvss_base (iterator_t*);
1838 
1839 const char*
1840 nvt_iterator_detection (iterator_t*);
1841 
1842 const char*
1843 nvt_iterator_qod (iterator_t*);
1844 
1845 const char*
1846 nvt_iterator_qod_type ( iterator_t *iterator );
1847 
1848 const char*
1849 nvt_iterator_solution (iterator_t*);
1850 
1851 const char*
1852 nvt_iterator_solution_type (iterator_t*);
1853 
1854 const char*
1855 nvt_iterator_solution_method (iterator_t*);
1856 
1857 char*
1858 nvt_default_timeout (const char *);
1859 
1860 int
1861 family_nvt_count (const char *);
1862 
1863 
1864 /* NVT selectors. */
1865 
1866 /**
1867  * @brief NVT selector type for "all" rule.
1868  */
1869 #define NVT_SELECTOR_TYPE_ALL 0
1870 
1871 /**
1872  * @brief NVT selector type for "family" rule.
1873  */
1874 #define NVT_SELECTOR_TYPE_FAMILY 1
1875 
1876 /**
1877  * @brief NVT selector type for "NVT" rule.
1878  */
1879 #define NVT_SELECTOR_TYPE_NVT 2
1880 
1881 /**
1882  * @brief Special NVT selector type for selecting all types in interfaces.
1883  */
1884 #define NVT_SELECTOR_TYPE_ANY 999
1885 
1886 void
1887 init_family_iterator (iterator_t*, int, const char*, int);
1888 
1889 const char*
1890 family_iterator_name (iterator_t*);
1891 
1892 int
1893 nvt_selector_family_growing (const char *, const char *, int);
1894 
1895 int
1896 nvt_selector_family_count (const char*, int);
1897 
1898 int
1899 nvt_selector_nvt_count (const char *, const char *, int);
1900 
1901 void
1902 init_nvt_selector_iterator (iterator_t*, const char*, config_t, int);
1903 
1904 const char*
1905 nvt_selector_iterator_nvt (iterator_t*);
1906 
1907 const char*
1908 nvt_selector_iterator_name (iterator_t*);
1909 
1910 int
1911 nvt_selector_iterator_include (iterator_t*);
1912 
1913 int
1914 nvt_selector_iterator_type (iterator_t*);
1915 
1916 
1917 /* NVT preferences. */
1918 
1919 void
1920 manage_nvt_preference_add (const char*, const char*);
1921 
1922 void
1923 manage_nvt_preferences_enable ();
1924 
1925 void
1926 init_nvt_preference_iterator (iterator_t*, const char*);
1927 
1928 const char*
1929 nvt_preference_iterator_name (iterator_t*);
1930 
1931 const char*
1932 nvt_preference_iterator_value (iterator_t*);
1933 
1934 char*
1935 nvt_preference_iterator_config_value (iterator_t*, config_t);
1936 
1937 char*
1938 nvt_preference_iterator_real_name (iterator_t*);
1939 
1940 char*
1941 nvt_preference_iterator_type (iterator_t*);
1942 
1943 char*
1944 nvt_preference_iterator_oid (iterator_t*);
1945 
1946 char*
1947 nvt_preference_iterator_id (iterator_t*);
1948 
1949 int
1950 nvt_preference_count (const char *);
1951 
1952 void
1953 xml_append_nvt_refs (GString *, const char *, int *);
1954 
1955 gchar*
1956 get_nvt_xml (iterator_t*, int, int, int, const char*, config_t, int);
1957 
1958 char*
1959 task_preference_value (task_t, const char *);
1960 
1961 int
1962 set_task_preferences (task_t, array_t *);
1963 
1964 void
1965 init_task_group_iterator (iterator_t *, task_t);
1966 
1967 const char*
1968 task_group_iterator_name (iterator_t*);
1969 
1970 const char*
1971 task_group_iterator_uuid (iterator_t*);
1972 
1973 void
1974 init_task_role_iterator (iterator_t *, task_t);
1975 
1976 const char*
1977 task_role_iterator_name (iterator_t*);
1978 
1979 const char*
1980 task_role_iterator_uuid (iterator_t*);
1981 
1982 /* NVT severities */
1983 void
1984 init_nvt_severity_iterator (iterator_t *, const char *);
1985 
1986 const char *
1987 nvt_severity_iterator_type (iterator_t *);
1988 
1989 const char *
1990 nvt_severity_iterator_origin (iterator_t *);
1991 
1992 const char *
1993 nvt_severity_iterator_date (iterator_t *);
1994 
1995 double
1996 nvt_severity_iterator_score (iterator_t *);
1997 
1998 const char *
1999 nvt_severity_iterator_value (iterator_t *);
2000 
2001 
2002 /* Credentials. */
2003 
2004 /**
2005  * @brief Export formats for credentials
2006  */
2007 typedef enum
2008 {
2009   CREDENTIAL_FORMAT_NONE = 0,   /// normal XML output
2010   CREDENTIAL_FORMAT_KEY = 1,    /// public key
2011   CREDENTIAL_FORMAT_RPM = 2,    /// RPM package
2012   CREDENTIAL_FORMAT_DEB = 3,    /// DEB package
2013   CREDENTIAL_FORMAT_EXE = 4,    /// EXE installer
2014   CREDENTIAL_FORMAT_PEM = 5,    /// Certificate PEM
2015   CREDENTIAL_FORMAT_ERROR = -1  /// Error / Invalid format
2016 } credential_format_t;
2017 
2018 int
2019 check_private_key (const char *, const char *);
2020 
2021 gboolean
2022 find_credential_with_permission (const char*, credential_t*, const char*);
2023 
2024 int
2025 create_credential (const char*, const char*, const char*, const char*,
2026                    const char*, const char*, const char*, const char*,
2027                    const char*, const char*, const char*, const char*,
2028                    const char*, credential_t*);
2029 
2030 int
2031 copy_credential (const char*, const char*, const char*,
2032                  credential_t*);
2033 
2034 int
2035 modify_credential (const char*, const char*, const char*, const char*,
2036                    const char*, const char*, const char*, const char*,
2037                    const char*, const char*, const char*, const char*,
2038                    const char*);
2039 
2040 int
2041 delete_credential (const char *, int);
2042 
2043 int
2044 credential_count (const get_data_t *);
2045 
2046 void
2047 set_credential_privacy_algorithm (credential_t, const char *);
2048 
2049 void
2050 set_credential_public_key (credential_t, const char *);
2051 
2052 void
2053 init_credential_iterator_one (iterator_t*, credential_t);
2054 
2055 int
2056 init_credential_iterator (iterator_t*, const get_data_t *);
2057 
2058 const char*
2059 credential_iterator_login (iterator_t*);
2060 
2061 const char*
2062 credential_iterator_auth_algorithm (iterator_t*);
2063 
2064 const char*
2065 credential_iterator_privacy_algorithm (iterator_t*);
2066 
2067 const char*
2068 credential_iterator_password (iterator_t*);
2069 
2070 const char*
2071 credential_iterator_community (iterator_t*);
2072 
2073 const char*
2074 credential_iterator_privacy_password (iterator_t*);
2075 
2076 const char*
2077 credential_iterator_public_key (iterator_t*);
2078 
2079 const char*
2080 credential_iterator_private_key (iterator_t*);
2081 
2082 const char*
2083 credential_iterator_type (iterator_t*);
2084 
2085 int
2086 credential_iterator_allow_insecure (iterator_t*);
2087 
2088 const char*
2089 credential_full_type (const char*);
2090 
2091 char*
2092 credential_iterator_rpm (iterator_t*);
2093 
2094 char*
2095 credential_iterator_deb (iterator_t*);
2096 
2097 char*
2098 credential_iterator_exe (iterator_t*);
2099 
2100 const char*
2101 credential_iterator_certificate (iterator_t*);
2102 
2103 gboolean
2104 credential_iterator_format_available (iterator_t*, credential_format_t);
2105 
2106 gchar *
2107 credential_iterator_formats_xml (iterator_t* iterator);
2108 
2109 char*
2110 credential_uuid (credential_t);
2111 
2112 char*
2113 trash_credential_uuid (credential_t);
2114 
2115 char*
2116 credential_name (credential_t);
2117 
2118 char*
2119 trash_credential_name (credential_t);
2120 
2121 char*
2122 credential_type (credential_t);
2123 
2124 void
2125 init_credential_target_iterator (iterator_t*, credential_t, int);
2126 
2127 const char*
2128 credential_target_iterator_uuid (iterator_t*);
2129 
2130 const char*
2131 credential_target_iterator_name (iterator_t*);
2132 
2133 int
2134 credential_target_iterator_readable (iterator_t*);
2135 
2136 void
2137 init_credential_scanner_iterator (iterator_t*, credential_t, int);
2138 
2139 const char*
2140 credential_scanner_iterator_uuid (iterator_t*);
2141 
2142 const char*
2143 credential_scanner_iterator_name (iterator_t*);
2144 
2145 int
2146 credential_scanner_iterator_readable (iterator_t*);
2147 
2148 int
2149 trash_credential_in_use (credential_t);
2150 
2151 int
2152 credential_in_use (credential_t);
2153 
2154 int
2155 trash_credential_writable (credential_t);
2156 
2157 int
2158 credential_writable (credential_t);
2159 
2160 int
2161 trash_credential_readable (credential_t);
2162 
2163 gchar*
2164 credential_value (credential_t, const char*);
2165 
2166 gchar*
2167 credential_encrypted_value (credential_t, const char*);
2168 
2169 
2170 
2171 /* Assets. */
2172 
2173 char *
2174 result_host_asset_id (const char *, result_t);
2175 
2176 char*
2177 host_uuid (resource_t);
2178 
2179 host_t
2180 host_notice (const char *, const char *, const char *, const char *,
2181              const char *, int, int);
2182 
2183 void
2184 init_host_identifier_iterator (iterator_t*, host_t, int, const char*);
2185 
2186 const char*
2187 host_identifier_iterator_value (iterator_t *);
2188 
2189 const char*
2190 host_identifier_iterator_source_type (iterator_t *);
2191 
2192 const char*
2193 host_identifier_iterator_source_id (iterator_t *);
2194 
2195 const char*
2196 host_identifier_iterator_source_data (iterator_t *);
2197 
2198 int
2199 host_identifier_iterator_source_orphan (iterator_t *);
2200 
2201 const char*
2202 host_identifier_iterator_os_id (iterator_t *);
2203 
2204 const char*
2205 host_identifier_iterator_os_title (iterator_t *);
2206 
2207 int
2208 init_asset_host_iterator (iterator_t *, const get_data_t *);
2209 
2210 int
2211 asset_iterator_writable (iterator_t *);
2212 
2213 int
2214 asset_iterator_in_use (iterator_t *);
2215 
2216 const char*
2217 asset_host_iterator_severity (iterator_t *);
2218 
2219 int
2220 asset_host_count (const get_data_t *);
2221 
2222 int
2223 init_asset_os_iterator (iterator_t *, const get_data_t *);
2224 
2225 const char*
2226 asset_os_iterator_title (iterator_t *);
2227 
2228 int
2229 asset_os_iterator_installs (iterator_t *);
2230 
2231 const char*
2232 asset_os_iterator_latest_severity (iterator_t *);
2233 
2234 const char*
2235 asset_os_iterator_highest_severity (iterator_t *);
2236 
2237 const char*
2238 asset_os_iterator_average_severity (iterator_t *);
2239 
2240 int
2241 asset_os_count (const get_data_t *);
2242 
2243 int
2244 total_asset_count (const get_data_t *);
2245 
2246 void
2247 init_os_host_iterator (iterator_t *, resource_t);
2248 
2249 const char*
2250 os_host_iterator_severity (iterator_t *);
2251 
2252 void
2253 init_host_detail_iterator (iterator_t *, resource_t);
2254 
2255 const char*
2256 host_detail_iterator_name (iterator_t *);
2257 
2258 const char*
2259 host_detail_iterator_value (iterator_t *);
2260 
2261 const char*
2262 host_detail_iterator_source_type (iterator_t *);
2263 
2264 const char*
2265 host_detail_iterator_source_id (iterator_t *);
2266 
2267 int
2268 modify_asset (const char *, const char *);
2269 
2270 int
2271 delete_asset (const char *, const char *, int);
2272 
2273 int
2274 create_asset_report (const char *, const char *);
2275 
2276 int
2277 create_asset_host (const char *, const char *, resource_t* );
2278 
2279 int
2280 add_assets_from_host_in_report (report_t report, const char *host);
2281 
2282 
2283 /* Notes. */
2284 
2285 gboolean
2286 find_note_with_permission (const char*, note_t*, const char *);
2287 
2288 int
2289 create_note (const char*, const char*, const char*, const char*, const char*,
2290              const char*, const char*, task_t, result_t, note_t*);
2291 
2292 int
2293 copy_note (const char*, note_t*);
2294 
2295 int
2296 delete_note (const char *, int);
2297 
2298 int
2299 note_uuid (note_t, char **);
2300 
2301 int
2302 modify_note (const gchar *, const char *, const char *, const char *,
2303              const char *, const char *, const char *, const char *,
2304              const gchar *, const gchar *);
2305 
2306 int
2307 note_count (const get_data_t *, nvt_t, result_t, task_t);
2308 
2309 int
2310 init_note_iterator (iterator_t*, const get_data_t*, nvt_t, result_t, task_t);
2311 
2312 const char*
2313 note_iterator_nvt_oid (iterator_t*);
2314 
2315 time_t
2316 note_iterator_creation_time (iterator_t*);
2317 
2318 time_t
2319 note_iterator_modification_time (iterator_t*);
2320 
2321 const char*
2322 note_iterator_text (iterator_t*);
2323 
2324 const char*
2325 note_iterator_hosts (iterator_t*);
2326 
2327 const char*
2328 note_iterator_port (iterator_t*);
2329 
2330 const char*
2331 note_iterator_threat (iterator_t*);
2332 
2333 task_t
2334 note_iterator_task (iterator_t*);
2335 
2336 result_t
2337 note_iterator_result (iterator_t*);
2338 
2339 time_t
2340 note_iterator_end_time (iterator_t*);
2341 
2342 int
2343 note_iterator_active (iterator_t*);
2344 
2345 const char*
2346 note_iterator_nvt_name (iterator_t *);
2347 
2348 const char *
2349 note_iterator_nvt_type (iterator_t *);
2350 
2351 const char*
2352 note_iterator_severity (iterator_t *);
2353 
2354 
2355 /* Overrides. */
2356 
2357 gboolean
2358 find_override_with_permission (const char*, override_t*, const char *);
2359 
2360 int
2361 create_override (const char*, const char*, const char*, const char*,
2362                  const char*, const char*, const char*, const char*,
2363                  const char*, task_t, result_t, override_t*);
2364 
2365 int
2366 override_uuid (override_t, char **);
2367 
2368 int
2369 copy_override (const char*, override_t*);
2370 
2371 int
2372 delete_override (const char *, int);
2373 
2374 int
2375 modify_override (const gchar *, const char *, const char *, const char *,
2376                  const char *, const char *, const char *, const char *,
2377                  const char *, const char *, const gchar *, const gchar *);
2378 
2379 int
2380 override_count (const get_data_t *, nvt_t, result_t, task_t);
2381 
2382 int
2383 init_override_iterator (iterator_t*, const get_data_t*, nvt_t, result_t,
2384                         task_t);
2385 
2386 const char*
2387 override_iterator_nvt_oid (iterator_t*);
2388 
2389 time_t
2390 override_iterator_creation_time (iterator_t*);
2391 
2392 time_t
2393 override_iterator_modification_time (iterator_t*);
2394 
2395 const char*
2396 override_iterator_text (iterator_t*);
2397 
2398 const char*
2399 override_iterator_hosts (iterator_t*);
2400 
2401 const char*
2402 override_iterator_port (iterator_t*);
2403 
2404 const char*
2405 override_iterator_threat (iterator_t*);
2406 
2407 const char*
2408 override_iterator_new_threat (iterator_t*);
2409 
2410 task_t
2411 override_iterator_task (iterator_t*);
2412 
2413 result_t
2414 override_iterator_result (iterator_t*);
2415 
2416 time_t
2417 override_iterator_end_time (iterator_t*);
2418 
2419 int
2420 override_iterator_active (iterator_t*);
2421 
2422 const char*
2423 override_iterator_nvt_name (iterator_t *);
2424 
2425 const char *
2426 override_iterator_nvt_type (iterator_t *);
2427 
2428 const char*
2429 override_iterator_severity (iterator_t *);
2430 
2431 const char*
2432 override_iterator_new_severity (iterator_t *);
2433 
2434 
2435 /* System reports. */
2436 
2437 /**
2438  * @brief A system report type iterator.
2439  */
2440 typedef struct
2441 {
2442   gchar **start;        ///< First type.
2443   gchar **current;      ///< Current type.
2444 } report_type_iterator_t;
2445 
2446 int
2447 init_system_report_type_iterator (report_type_iterator_t*, const char*,
2448                                   const char*);
2449 
2450 void
2451 cleanup_report_type_iterator (report_type_iterator_t*);
2452 
2453 gboolean
2454 next_report_type (report_type_iterator_t*);
2455 
2456 const char*
2457 report_type_iterator_name (report_type_iterator_t*);
2458 
2459 const char*
2460 report_type_iterator_title (report_type_iterator_t*);
2461 
2462 int
2463 manage_system_report (const char *, const char *, const char *, const char *,
2464                       const char *, char **);
2465 
2466 
2467 /* Scanners. */
2468 
2469 /**
2470  * @brief Default for max auto retry on connection to scanner lost.
2471  */
2472 #define SCANNER_CONNECTION_RETRY_DEFAULT 3
2473 
2474 int
2475 manage_create_scanner (GSList *, const db_conn_info_t *, const char *,
2476                        const char *, const char *, const char *, const char *,
2477                        const char *, const char *, const char *);
2478 
2479 int
2480 manage_modify_scanner (GSList *, const db_conn_info_t *, const char *,
2481                        const char *, const char *, const char *, const char *,
2482                        const char *, const char *, const char *, const char *);
2483 
2484 int
2485 manage_delete_scanner (GSList *, const db_conn_info_t *, const gchar *);
2486 
2487 int
2488 manage_verify_scanner (GSList *, const db_conn_info_t *, const gchar *);
2489 
2490 int
2491 manage_get_scanners (GSList *, const db_conn_info_t *);
2492 
2493 int
2494 create_scanner (const char*, const char *, const char *, const char *,
2495                 const char *, scanner_t *, const char *, const char *);
2496 
2497 int
2498 copy_scanner (const char*, const char*, const char *, scanner_t *);
2499 
2500 int
2501 modify_scanner (const char*, const char*, const char*, const char *,
2502                 const char *, const char *, const char *, const char *);
2503 
2504 int
2505 delete_scanner (const char *, int);
2506 
2507 gboolean
2508 find_scanner_with_permission (const char *, scanner_t *, const char *);
2509 
2510 int
2511 scanner_in_use (scanner_t);
2512 
2513 int
2514 trash_scanner_readable (scanner_t);
2515 
2516 int
2517 trash_scanner_in_use (scanner_t);
2518 
2519 int
2520 trash_scanner_writable (scanner_t);
2521 
2522 int
2523 scanner_writable (scanner_t);
2524 
2525 const char *
2526 scanner_uuid_default ();
2527 
2528 char *
2529 scanner_host (scanner_t);
2530 
2531 int
2532 scanner_port (scanner_t);
2533 
2534 int
2535 scanner_type (scanner_t);
2536 
2537 char *
2538 scanner_ca_pub (scanner_t);
2539 
2540 char *
2541 scanner_key_pub (scanner_t);
2542 
2543 char *
2544 scanner_key_priv (scanner_t);
2545 
2546 char*
2547 scanner_login (scanner_t);
2548 
2549 char*
2550 scanner_password (scanner_t);
2551 
2552 int
2553 scanner_count (const get_data_t *);
2554 
2555 char *
2556 openvas_default_scanner_host ();
2557 
2558 int
2559 init_scanner_iterator (iterator_t*, const get_data_t *);
2560 
2561 const char*
2562 scanner_iterator_host (iterator_t*);
2563 
2564 int
2565 scanner_iterator_port (iterator_t*);
2566 
2567 int
2568 scanner_iterator_type (iterator_t*);
2569 
2570 const char*
2571 scanner_iterator_credential_name (iterator_t *);
2572 
2573 credential_t
2574 scanner_iterator_credential (iterator_t *);
2575 
2576 int
2577 scanner_iterator_credential_trash (iterator_t*);
2578 
2579 const char*
2580 scanner_iterator_ca_pub (iterator_t *);
2581 
2582 const char*
2583 scanner_iterator_key_pub (iterator_t *);
2584 
2585 const char*
2586 scanner_iterator_credential_type (iterator_t *);
2587 
2588 void
2589 init_scanner_config_iterator (iterator_t*, scanner_t);
2590 
2591 const char*
2592 scanner_config_iterator_uuid (iterator_t *);
2593 
2594 const char*
2595 scanner_config_iterator_name (iterator_t *);
2596 
2597 int
2598 scanner_config_iterator_readable (iterator_t *);
2599 
2600 void
2601 init_scanner_task_iterator (iterator_t*, scanner_t);
2602 
2603 const char*
2604 scanner_task_iterator_uuid (iterator_t *);
2605 
2606 const char*
2607 scanner_task_iterator_name (iterator_t *);
2608 
2609 int
2610 scanner_task_iterator_readable (iterator_t *);
2611 
2612 char *
2613 scanner_name (scanner_t);
2614 
2615 char *
2616 scanner_uuid (scanner_t);
2617 
2618 char *
2619 trash_scanner_name (scanner_t);
2620 
2621 char *
2622 trash_scanner_uuid (scanner_t);
2623 
2624 int
2625 osp_get_version_from_iterator (iterator_t *, char **, char **, char **, char **,
2626                                char **, char **);
2627 
2628 int
2629 osp_get_details_from_iterator (iterator_t *, char **, GSList **);
2630 
2631 osp_connection_t *
2632 osp_connect_with_data (const char *,
2633                        int,
2634                        const char *,
2635                        const char *,
2636                        const char *);
2637 
2638 osp_connection_t *
2639 osp_scanner_connect (scanner_t);
2640 
2641 int
2642 get_scanner_connection_retry ();
2643 
2644 void
2645 set_scanner_connection_retry (int);
2646 
2647 int
2648 verify_scanner (const char *, char **);
2649 
2650 const char *
2651 get_relay_mapper_path ();
2652 
2653 void
2654 set_relay_mapper_path (const char *);
2655 
2656 int
2657 get_relay_migrate_sensors ();
2658 
2659 void
2660 set_relay_migrate_sensors (int);
2661 
2662 gboolean
2663 relay_supports_scanner_type (const char *, int, scanner_type_t);
2664 
2665 int
2666 slave_get_relay (const char *,
2667                  int,
2668                  const char *,
2669                  const char *,
2670                  gchar **,
2671                  int *,
2672                  gchar **);
2673 
2674 int
2675 slave_relay_connection (gvm_connection_t *, gvm_connection_t *);
2676 
2677 /* Scheduling. */
2678 
2679 /**
2680  * @brief Seconds between calls to manage_schedule.
2681  */
2682 #define SCHEDULE_PERIOD 10
2683 
2684 /**
2685  * @brief Minimum schedule timeout seconds.
2686  * This value must be greater than SCHEDULE_PERIOD.
2687  */
2688 #define SCHEDULE_TIMEOUT_MIN_SECS 20
2689 
2690 /**
2691  * @brief Default for schedule_timeout in minutes.
2692  */
2693 #define SCHEDULE_TIMEOUT_DEFAULT 60
2694 
2695 gboolean
2696 find_schedule_with_permission (const char*, schedule_t*, const char*);
2697 
2698 int
2699 create_schedule (const char *, const char*, const char *,
2700                  const char*, schedule_t *, gchar**);
2701 
2702 int
2703 copy_schedule (const char*, const char*, const char *, schedule_t *);
2704 
2705 int
2706 delete_schedule (const char*, int);
2707 
2708 void
2709 manage_auth_allow_all (int);
2710 
2711 const gchar*
2712 get_scheduled_user_uuid ();
2713 
2714 void
2715 set_scheduled_user_uuid (const gchar* uuid);
2716 
2717 void
2718 manage_sync (sigset_t *, int (*fork_update_nvt_cache) (), gboolean);
2719 
2720 int
2721 manage_rebuild_gvmd_data_from_feed (const char *,
2722                                     GSList *,
2723                                     const db_conn_info_t *,
2724                                     gchar **);
2725 
2726 int
2727 manage_schedule (manage_connection_forker_t,
2728                  gboolean,
2729                  sigset_t *);
2730 
2731 char *
2732 schedule_uuid (schedule_t);
2733 
2734 char *
2735 trash_schedule_uuid (schedule_t);
2736 
2737 char *
2738 schedule_name (schedule_t);
2739 
2740 char *
2741 trash_schedule_name (schedule_t);
2742 
2743 int
2744 schedule_duration (schedule_t);
2745 
2746 int
2747 schedule_period (schedule_t);
2748 
2749 int
2750 schedule_info (schedule_t, int, gchar **, gchar **);
2751 
2752 int
2753 init_schedule_iterator (iterator_t*, const get_data_t *);
2754 
2755 const char*
2756 schedule_iterator_timezone (iterator_t *);
2757 
2758 const char*
2759 schedule_iterator_icalendar (iterator_t *);
2760 
2761 int
2762 trash_schedule_in_use (schedule_t);
2763 
2764 int
2765 schedule_in_use (schedule_t);
2766 
2767 int
2768 trash_schedule_writable (schedule_t);
2769 
2770 int
2771 trash_schedule_readable (schedule_t);
2772 
2773 int
2774 schedule_writable (schedule_t);
2775 
2776 int
2777 schedule_count (const get_data_t *);
2778 
2779 void
2780 init_schedule_task_iterator (iterator_t*, schedule_t);
2781 
2782 const char*
2783 schedule_task_iterator_uuid (iterator_t *);
2784 
2785 const char*
2786 schedule_task_iterator_name (iterator_t *);
2787 
2788 int
2789 schedule_task_iterator_readable (iterator_t*);
2790 
2791 int
2792 modify_schedule (const char *, const char *, const char *, const char*,
2793                  const char *, gchar **);
2794 
2795 int
2796 get_schedule_timeout ();
2797 
2798 void
2799 set_schedule_timeout (int);
2800 
2801 
2802 /* Groups. */
2803 
2804 int
2805 init_group_iterator (iterator_t *, const get_data_t *);
2806 
2807 int
2808 copy_group (const char *, const char *, const char *, group_t *);
2809 
2810 int
2811 create_group (const char *, const char *, const char *, int, group_t *);
2812 
2813 int
2814 delete_group (const char *, int);
2815 
2816 char*
2817 group_uuid (group_t);
2818 
2819 gchar *
2820 group_users (group_t);
2821 
2822 int
2823 trash_group_in_use (group_t);
2824 
2825 int
2826 group_in_use (group_t);
2827 
2828 int
2829 trash_group_writable (group_t);
2830 
2831 int
2832 group_writable (group_t);
2833 
2834 int
2835 group_count (const get_data_t*);
2836 
2837 int
2838 modify_group (const char *, const char *, const char *, const char *);
2839 
2840 
2841 /* Permissions. */
2842 
2843 int
2844 create_permission (const char *, const char *, const char *, const char *,
2845                    const char *, const char *, permission_t *);
2846 
2847 int
2848 copy_permission (const char*, const char *, permission_t *);
2849 
2850 char*
2851 permission_uuid (permission_t);
2852 
2853 int
2854 permission_is_admin (const char *);
2855 
2856 int
2857 permission_in_use (permission_t);
2858 
2859 int
2860 trash_permission_in_use (permission_t);
2861 
2862 int
2863 permission_writable (permission_t);
2864 
2865 int
2866 trash_permission_writable (permission_t);
2867 
2868 int
2869 permission_count (const get_data_t *);
2870 
2871 int
2872 init_permission_iterator (iterator_t*, const get_data_t *);
2873 
2874 const char*
2875 permission_iterator_resource_type (iterator_t*);
2876 
2877 const char*
2878 permission_iterator_resource_uuid (iterator_t*);
2879 
2880 const char*
2881 permission_iterator_resource_name (iterator_t*);
2882 
2883 int
2884 permission_iterator_resource_in_trash (iterator_t*);
2885 
2886 int
2887 permission_iterator_resource_orphan (iterator_t*);
2888 
2889 int
2890 permission_iterator_resource_readable (iterator_t*);
2891 
2892 const char*
2893 permission_iterator_subject_type (iterator_t*);
2894 
2895 const char*
2896 permission_iterator_subject_uuid (iterator_t*);
2897 
2898 const char*
2899 permission_iterator_subject_name (iterator_t*);
2900 
2901 int
2902 permission_iterator_subject_in_trash (iterator_t*);
2903 
2904 int
2905 permission_iterator_subject_readable (iterator_t*);
2906 
2907 int
2908 delete_permission (const char*, int);
2909 
2910 int
2911 modify_permission (const char *, const char *, const char *, const char *,
2912                    const char *, const char *, const char *);
2913 
2914 /* Permission caching */
2915 
2916 void
2917 delete_permissions_cache_for_resource (const char*, resource_t);
2918 
2919 void
2920 delete_permissions_cache_for_user (user_t);
2921 
2922 
2923 /* Roles. */
2924 
2925 int
2926 manage_get_roles (GSList *, const db_conn_info_t *, int);
2927 
2928 int
2929 init_role_iterator (iterator_t *, const get_data_t *);
2930 
2931 int
2932 copy_role (const char *, const char *, const char *, role_t *);
2933 
2934 int
2935 create_role (const char *, const char *, const char *, role_t *);
2936 
2937 int
2938 delete_role (const char *, int);
2939 
2940 char*
2941 role_uuid (role_t);
2942 
2943 gchar *
2944 role_users (role_t);
2945 
2946 int
2947 trash_role_in_use (role_t);
2948 
2949 int
2950 role_in_use (role_t);
2951 
2952 int
2953 trash_role_writable (role_t);
2954 
2955 int
2956 role_writable (role_t);
2957 
2958 int
2959 role_count (const get_data_t*);
2960 
2961 int
2962 modify_role (const char *, const char *, const char *, const char *);
2963 
2964 
2965 /* Filter Utilities. */
2966 
2967 /**
2968  * @brief Keyword type.
2969  */
2970 typedef enum
2971 {
2972   KEYWORD_TYPE_UNKNOWN,
2973   KEYWORD_TYPE_INTEGER,
2974   KEYWORD_TYPE_DOUBLE,
2975   KEYWORD_TYPE_STRING
2976 } keyword_type_t;
2977 
2978 /**
2979  * @brief Comparison returns.
2980  */
2981 typedef enum
2982 {
2983   KEYWORD_RELATION_APPROX,
2984   KEYWORD_RELATION_COLUMN_ABOVE,
2985   KEYWORD_RELATION_COLUMN_APPROX,
2986   KEYWORD_RELATION_COLUMN_EQUAL,
2987   KEYWORD_RELATION_COLUMN_BELOW,
2988   KEYWORD_RELATION_COLUMN_REGEXP
2989 } keyword_relation_t;
2990 
2991 /**
2992  * @brief Keyword.
2993  */
2994 struct keyword
2995 {
2996   gchar *column;                 ///< The column prefix, or NULL.
2997   int approx;                    ///< Whether the keyword is like "~example".
2998   int equal;                     ///< Whether the keyword is like "=example".
2999   int integer_value;             ///< Integer value of the keyword.
3000   double double_value;           ///< Floating point value of the keyword.
3001   int quoted;                    ///< Whether the keyword was quoted.
3002   gchar *string;                 ///< The keyword string, outer quotes removed.
3003   keyword_type_t type;           ///< Type of keyword.
3004   keyword_relation_t relation;   ///< The relation.
3005 };
3006 
3007 /**
3008  * @brief Keyword type.
3009  */
3010 typedef struct keyword keyword_t;
3011 
3012 int
3013 keyword_special (keyword_t *);
3014 
3015 const char *
3016 keyword_relation_symbol (keyword_relation_t);
3017 
3018 void
3019 filter_free (array_t*);
3020 
3021 array_t *
3022 split_filter (const gchar*);
3023 
3024 
3025 /* Filters. */
3026 
3027 /**
3028  * @brief filt_id value to use term or built-in default filter.
3029  */
3030 #define FILT_ID_NONE "0"
3031 
3032 /**
3033  * @brief filt_id value to use the filter in the user setting if possible.
3034  */
3035 #define FILT_ID_USER_SETTING "-2"
3036 
3037 gboolean
3038 find_filter (const char*, filter_t*);
3039 
3040 gboolean
3041 find_filter_with_permission (const char*, filter_t*, const char*);
3042 
3043 char*
3044 filter_uuid (filter_t);
3045 
3046 char*
3047 filter_name (filter_t);
3048 
3049 gchar*
3050 filter_term (const char *);
3051 
3052 gchar*
3053 filter_term_value (const char *, const char *);
3054 
3055 int
3056 filter_term_apply_overrides (const char *);
3057 
3058 int
3059 filter_term_min_qod (const char *);
3060 
3061 int
3062 create_filter (const char*, const char*, const char*, const char*, filter_t*);
3063 
3064 int
3065 copy_filter (const char*, const char*, const char*, filter_t*);
3066 
3067 int
3068 delete_filter (const char *, int);
3069 
3070 int
3071 trash_filter_in_use (filter_t);
3072 
3073 int
3074 filter_in_use (filter_t);
3075 
3076 int
3077 trash_filter_writable (filter_t);
3078 
3079 int
3080 filter_writable (filter_t);
3081 
3082 int
3083 filter_count (const get_data_t*);
3084 
3085 int
3086 init_filter_iterator (iterator_t*, const get_data_t*);
3087 
3088 const char*
3089 filter_iterator_type (iterator_t*);
3090 
3091 const char*
3092 filter_iterator_term (iterator_t*);
3093 
3094 void
3095 init_filter_alert_iterator (iterator_t*, filter_t);
3096 
3097 const char*
3098 filter_alert_iterator_name (iterator_t*);
3099 
3100 const char*
3101 filter_alert_iterator_uuid (iterator_t*);
3102 
3103 int
3104 filter_alert_iterator_readable (iterator_t*);
3105 
3106 int
3107 modify_filter (const char*, const char*, const char*, const char*, const char*);
3108 
3109 
3110 /* Schema. */
3111 
3112 int
3113 manage_schema (gchar *, gchar **, gsize *, gchar **, gchar **);
3114 
3115 
3116 /* Trashcan. */
3117 
3118 int
3119 manage_restore (const char *);
3120 
3121 int
3122 manage_empty_trashcan ();
3123 
3124 
3125 /* SecInfo */
3126 
3127 int
3128 manage_read_info (gchar *, gchar *, gchar *, gchar **);
3129 
3130 int
3131 info_name_count (const gchar *, const gchar *);
3132 
3133 /* SCAP. */
3134 
3135 int
3136 manage_scap_loaded ();
3137 
3138 const char *
3139 manage_scap_update_time ();
3140 
3141 /* CPE. */
3142 
3143 void
3144 init_cpe_cve_iterator (iterator_t *, const char *, int, const char *);
3145 
3146 int
3147 init_cpe_info_iterator (iterator_t*, get_data_t*, const char*);
3148 
3149 int
3150 cpe_info_count (const get_data_t *get);
3151 
3152 const char*
3153 cpe_info_iterator_title (iterator_t*);
3154 
3155 const char*
3156 cpe_info_iterator_status (iterator_t*);
3157 
3158 const char *
3159 cpe_info_iterator_severity (iterator_t*);
3160 
3161 const char*
3162 cpe_info_iterator_deprecated_by_id (iterator_t*);
3163 
3164 const char*
3165 cpe_info_iterator_cve_refs (iterator_t*);
3166 
3167 const char*
3168 cpe_info_iterator_nvd_id (iterator_t*);
3169 
3170 /* CVE. */
3171 
3172 const char*
3173 cve_iterator_name (iterator_t*);
3174 
3175 const char*
3176 cve_iterator_cvss_score (iterator_t*);
3177 
3178 const char*
3179 cve_info_iterator_severity (iterator_t*);
3180 
3181 const char*
3182 cve_info_iterator_vector (iterator_t*);
3183 
3184 const char*
3185 cve_info_iterator_description (iterator_t*);
3186 
3187 const char*
3188 cve_info_iterator_products (iterator_t*);
3189 
3190 int
3191 init_cve_info_iterator (iterator_t*, get_data_t*, const char*);
3192 
3193 int
3194 cve_info_count (const get_data_t *get);
3195 
3196 gchar *
3197 cve_cvss_base (const gchar *);
3198 
3199 /* OVAL definitions */
3200 int
3201 init_ovaldef_info_iterator (iterator_t*, get_data_t*, const char*);
3202 
3203 int
3204 ovaldef_info_count (const get_data_t *get);
3205 
3206 const char*
3207 ovaldef_info_iterator_version (iterator_t*);
3208 
3209 const char*
3210 ovaldef_info_iterator_deprecated (iterator_t*);
3211 
3212 const char*
3213 ovaldef_info_iterator_class (iterator_t*);
3214 
3215 const char*
3216 ovaldef_info_iterator_title (iterator_t*);
3217 
3218 const char*
3219 ovaldef_info_iterator_description (iterator_t*);
3220 
3221 const char*
3222 ovaldef_info_iterator_file (iterator_t*);
3223 
3224 const char*
3225 ovaldef_info_iterator_status (iterator_t*);
3226 
3227 const char*
3228 ovaldef_info_iterator_severity (iterator_t*);
3229 
3230 const char*
3231 ovaldef_info_iterator_cve_refs (iterator_t*);
3232 
3233 char *
3234 ovaldef_severity (const char *);
3235 
3236 char *
3237 ovaldef_version (const char *);
3238 
3239 char *
3240 ovaldef_uuid (const char *, const char *);
3241 
3242 char *
3243 ovaldef_cves (const char *);
3244 
3245 /* CERT data */
3246 int
3247 manage_cert_loaded ();
3248 
3249 /* CERT-Bund */
3250 
3251 int
3252 init_cert_bund_adv_info_iterator (iterator_t*, get_data_t*, const char*);
3253 
3254 int
3255 cert_bund_adv_info_count (const get_data_t *get);
3256 
3257 const char*
3258 cert_bund_adv_info_iterator_title (iterator_t*);
3259 
3260 const char*
3261 cert_bund_adv_info_iterator_summary (iterator_t*);
3262 
3263 const char*
3264 cert_bund_adv_info_iterator_cve_refs (iterator_t*);
3265 
3266 const char*
3267 cert_bund_adv_info_iterator_severity (iterator_t*);
3268 
3269 void
3270 init_cve_cert_bund_adv_iterator (iterator_t*, const char*, int, const char*);
3271 
3272 void
3273 init_nvt_cert_bund_adv_iterator (iterator_t*, const char*);
3274 
3275 const char*
3276 nvt_cert_bund_adv_iterator_name (iterator_t*);
3277 
3278 /* DFN-CERT */
3279 
3280 int
3281 init_dfn_cert_adv_info_iterator (iterator_t*, get_data_t*, const char*);
3282 
3283 int
3284 dfn_cert_adv_info_count (const get_data_t *get);
3285 
3286 const char*
3287 dfn_cert_adv_info_iterator_title (iterator_t*);
3288 
3289 const char*
3290 dfn_cert_adv_info_iterator_summary (iterator_t*);
3291 
3292 const char*
3293 dfn_cert_adv_info_iterator_cve_refs (iterator_t*);
3294 
3295 const char*
3296 dfn_cert_adv_info_iterator_severity (iterator_t*);
3297 
3298 void
3299 init_cve_dfn_cert_adv_iterator (iterator_t*, const char*, int, const char*);
3300 
3301 void
3302 init_nvt_dfn_cert_adv_iterator (iterator_t*, const char*);
3303 
3304 const char*
3305 nvt_dfn_cert_adv_iterator_name (iterator_t*);
3306 
3307 /* All SecInfo Data */
3308 
3309 int
3310 secinfo_count_after (const get_data_t *, const char *, time_t, gboolean);
3311 
3312 void
3313 init_ovaldi_file_iterator (iterator_t*);
3314 
3315 const char*
3316 ovaldi_file_iterator_name (iterator_t*);
3317 
3318 
3319 /* Settings. */
3320 
3321 int
3322 manage_max_rows (int);
3323 
3324 int
3325 setting_count (const char *);
3326 
3327 int
3328 setting_is_default_ca_cert (const gchar *);
3329 
3330 char *
3331 setting_filter (const char *);
3332 
3333 void
3334 init_setting_iterator (iterator_t *, const char *, const char *, int, int, int,
3335                        const char *);
3336 
3337 const char*
3338 setting_iterator_uuid (iterator_t*);
3339 
3340 const char*
3341 setting_iterator_name (iterator_t*);
3342 
3343 const char*
3344 setting_iterator_comment (iterator_t*);
3345 
3346 const char*
3347 setting_iterator_value (iterator_t*);
3348 
3349 int
3350 modify_setting (const gchar *, const gchar *, const gchar *, gchar **);
3351 
3352 int
3353 manage_modify_setting (GSList *, const db_conn_info_t *, const gchar *,
3354                        const gchar *, const char *);
3355 
3356 char *
3357 manage_default_ca_cert ();
3358 
3359 
3360 /* Users. */
3361 
3362 gboolean
3363 find_user_by_name_with_permission (const char *, user_t *, const char *);
3364 
3365 int
3366 manage_create_user (GSList *, const db_conn_info_t *, const gchar *,
3367                     const gchar *, const gchar *);
3368 
3369 int
3370 manage_delete_user (GSList *, const db_conn_info_t *, const gchar *,
3371                     const gchar *);
3372 
3373 int
3374 manage_get_users (GSList *, const db_conn_info_t *, const gchar *, int);
3375 
3376 report_host_t
3377 manage_report_host_add (report_t, const char *, time_t, time_t);
3378 
3379 int
3380 report_host_noticeable (report_t, const gchar *);
3381 
3382 void
3383 report_host_set_end_time (report_host_t, time_t);
3384 
3385 gchar*
3386 host_routes_xml (host_t);
3387 
3388 int
3389 manage_set_password (GSList *, const db_conn_info_t *, const gchar *,
3390                      const gchar *);
3391 
3392 gchar *
3393 manage_user_hash (const gchar *);
3394 
3395 gchar *
3396 manage_user_uuid (const gchar *, auth_method_t);
3397 
3398 int
3399 manage_user_exists (const gchar *, auth_method_t);
3400 
3401 int
3402 copy_user (const char*, const char*, const char*, user_t*);
3403 
3404 gchar *
3405 keyfile_to_auth_conf_settings_xml (const gchar *);
3406 
3407 int
3408 init_user_iterator (iterator_t*, const get_data_t*);
3409 
3410 const char*
3411 user_iterator_role (iterator_t*);
3412 
3413 const char*
3414 user_iterator_method (iterator_t*);
3415 
3416 const char*
3417 user_iterator_hosts (iterator_t*);
3418 
3419 int
3420 user_iterator_hosts_allow (iterator_t*);
3421 
3422 const char*
3423 user_iterator_ifaces (iterator_t*);
3424 
3425 int
3426 user_iterator_ifaces_allow (iterator_t*);
3427 
3428 void
3429 init_user_group_iterator (iterator_t *, user_t);
3430 
3431 const char*
3432 user_group_iterator_uuid (iterator_t*);
3433 
3434 const char*
3435 user_group_iterator_name (iterator_t*);
3436 
3437 int
3438 user_group_iterator_readable (iterator_t*);
3439 
3440 void
3441 init_user_role_iterator (iterator_t *, user_t);
3442 
3443 const char*
3444 user_role_iterator_uuid (iterator_t*);
3445 
3446 const char*
3447 user_role_iterator_name (iterator_t*);
3448 
3449 int
3450 user_role_iterator_readable (iterator_t*);
3451 
3452 int
3453 create_user (const gchar *, const gchar *, const gchar *, const gchar *,
3454              int, const gchar *, int, const array_t *, array_t *, gchar **,
3455              array_t *, gchar **, gchar **, user_t *, int);
3456 
3457 int
3458 delete_user (const char *, const char *, int, int, const char*, const char*);
3459 
3460 int
3461 modify_user (const gchar *, gchar **, const gchar *, const gchar *,
3462              const gchar*, const gchar *, int, const gchar *, int,
3463              const array_t *, array_t *, gchar **, array_t *, gchar **,
3464              gchar **);
3465 
3466 int
3467 user_in_use (user_t);
3468 
3469 int
3470 trash_user_in_use (user_t);
3471 
3472 int
3473 user_writable (user_t);
3474 
3475 int
3476 trash_user_writable (user_t);
3477 
3478 int
3479 user_count (const get_data_t*);
3480 
3481 gchar*
3482 user_name (const char *);
3483 
3484 char*
3485 user_uuid (user_t);
3486 
3487 gchar*
3488 user_ifaces (const char *);
3489 
3490 int
3491 user_ifaces_allow (const char *);
3492 
3493 gchar*
3494 user_hosts (const char *);
3495 
3496 int
3497 user_hosts_allow (const char *);
3498 
3499 int
3500 init_vuln_iterator (iterator_t*, const get_data_t*);
3501 
3502 int
3503 vuln_iterator_results (iterator_t*);
3504 
3505 time_t
3506 vuln_iterator_oldest (iterator_t*);
3507 
3508 time_t
3509 vuln_iterator_newest (iterator_t*);
3510 
3511 const char*
3512 vuln_iterator_type (iterator_t*);
3513 
3514 int
3515 vuln_iterator_hosts (iterator_t*);
3516 
3517 double
3518 vuln_iterator_severity (iterator_t*);
3519 
3520 int
3521 vuln_iterator_qod (iterator_t*);
3522 
3523 int
3524 vuln_count (const get_data_t*);
3525 
3526 void
3527 manage_get_ldap_info (int *, gchar **, gchar **, int *, gchar **);
3528 
3529 void
3530 manage_set_ldap_info (int, gchar *, gchar *, int, gchar *);
3531 
3532 void
3533 manage_get_radius_info (int *, char **, char **);
3534 
3535 void
3536 manage_set_radius_info (int, gchar *, gchar *);
3537 
3538 
3539 /* Tags */
3540 
3541 char*
3542 tag_uuid (target_t);
3543 
3544 int
3545 copy_tag (const char*, const char*, const char*, tag_t*);
3546 
3547 int
3548 create_tag (const char *, const char *, const char *, const char *,
3549             array_t *, const char *, const char *, tag_t *, gchar **);
3550 
3551 int
3552 delete_tag (const char *, int);
3553 
3554 int
3555 modify_tag (const char *, const char *, const char *, const char *,
3556             const char *, array_t *, const char *, const char *, const char*,
3557             gchar **);
3558 
3559 int
3560 init_tag_iterator (iterator_t*, const get_data_t*);
3561 
3562 int
3563 tag_count (const get_data_t *get);
3564 
3565 const char*
3566 tag_iterator_resource_type (iterator_t*);
3567 
3568 int
3569 tag_iterator_active (iterator_t*);
3570 
3571 const char*
3572 tag_iterator_value (iterator_t*);
3573 
3574 int
3575 tag_iterator_resources (iterator_t*);
3576 
3577 resource_t
3578 tag_resource_iterator_id (iterator_t*);
3579 
3580 const char*
3581 tag_resource_iterator_uuid (iterator_t*);
3582 
3583 int
3584 tag_resource_iterator_location (iterator_t*);
3585 
3586 const char*
3587 tag_resource_iterator_name (iterator_t*);
3588 
3589 int
3590 tag_resource_iterator_readable (iterator_t*);
3591 
3592 int
3593 init_tag_name_iterator (iterator_t*, const get_data_t*);
3594 
3595 const char*
3596 tag_name_iterator_name (iterator_t*);
3597 
3598 int
3599 init_resource_tag_iterator (iterator_t*, const char*, resource_t, int,
3600                             const char*, int);
3601 
3602 const char*
3603 resource_tag_iterator_uuid (iterator_t*);
3604 
3605 const char*
3606 resource_tag_iterator_name (iterator_t*);
3607 
3608 const char*
3609 resource_tag_iterator_value (iterator_t*);
3610 
3611 const char*
3612 resource_tag_iterator_comment (iterator_t*);
3613 
3614 int
3615 resource_tag_exists (const char*, resource_t, int);
3616 
3617 int
3618 resource_tag_count (const char*, resource_t, int);
3619 
3620 int
3621 tag_in_use (tag_t);
3622 
3623 int
3624 trash_tag_in_use (tag_t);
3625 
3626 int
3627 tag_writable (tag_t);
3628 
3629 int
3630 trash_tag_writable (tag_t);
3631 
3632 
3633 /* Resource aggregates */
3634 
3635 /**
3636  * @brief Sort data for aggregates commands.
3637  */
3638 typedef struct {
3639   gchar *field;  ///< The field to sort by.
3640   gchar *stat;   ///< The statistic to sort by.
3641   int order;     ///< The sort order.
3642 } sort_data_t;
3643 
3644 void
3645 sort_data_free (sort_data_t*);
3646 
3647 int
3648 init_aggregate_iterator (iterator_t*, const char *, const get_data_t *, int,
3649                          GArray *, const char *, const char*, GArray*, GArray*,
3650                          int, int, const char *, const char *);
3651 
3652 int
3653 aggregate_iterator_count (iterator_t*);
3654 
3655 double
3656 aggregate_iterator_min (iterator_t*, int);
3657 
3658 double
3659 aggregate_iterator_max (iterator_t*, int);
3660 
3661 double
3662 aggregate_iterator_mean (iterator_t*, int);
3663 
3664 double
3665 aggregate_iterator_sum (iterator_t*, int);
3666 
3667 const char*
3668 aggregate_iterator_text (iterator_t*, int, int);
3669 
3670 const char*
3671 aggregate_iterator_value (iterator_t*);
3672 
3673 const char*
3674 aggregate_iterator_subgroup_value (iterator_t*);
3675 
3676 
3677 /* Feeds. */
3678 
3679 #define NVT_FEED 1
3680 #define SCAP_FEED 2
3681 #define CERT_FEED 3
3682 #define GVMD_DATA_FEED 4
3683 
3684 gboolean
3685 manage_gvmd_data_feed_dir_exists (const char *);
3686 
3687 gboolean
3688 manage_gvmd_data_feed_dirs_exist ();
3689 
3690 const gchar *
3691 get_feed_lock_path ();
3692 
3693 void
3694 set_feed_lock_path (const char *);
3695 
3696 int
3697 get_feed_lock_timeout ();
3698 
3699 void
3700 set_feed_lock_timeout (int);
3701 
3702 void
3703 write_sync_start (int);
3704 
3705 int
3706 feed_lockfile_lock (lockfile_t *);
3707 
3708 int
3709 feed_lockfile_lock_timeout (lockfile_t*);
3710 
3711 int
3712 feed_lockfile_unlock (lockfile_t *);
3713 
3714 int
3715 gvm_migrate_secinfo (int);
3716 
3717 gboolean
3718 gvm_sync_script_perform_selftest (const gchar *, gchar **);
3719 
3720 gboolean
3721 gvm_get_sync_script_identification (const gchar *, gchar **, int);
3722 
3723 gboolean
3724 gvm_get_sync_script_description (const gchar *, gchar **);
3725 
3726 gboolean
3727 gvm_get_sync_script_feed_version (const gchar *, gchar **);
3728 
3729 int
3730 manage_update_nvts_osp (const gchar *);
3731 
3732 int
3733 manage_rebuild (GSList *, const db_conn_info_t *);
3734 
3735 int
3736 manage_dump_vt_verification (GSList *, const db_conn_info_t *);
3737 
3738 
3739 /* Wizards. */
3740 
3741 int
3742 manage_run_wizard (const gchar *, int (*) (void*, gchar*, gchar**),
3743                    void *, array_t *, int, const char*,
3744                    gchar **, gchar **, gchar **);
3745 
3746 
3747 /* Helpers. */
3748 
3749 gchar *
3750 xml_escape_text_truncated (const char *, size_t, const char *);
3751 
3752 int
3753 column_is_timestamp (const char*);
3754 
3755 char*
3756 type_columns (const char *);
3757 
3758 char*
3759 type_trash_columns (const char *);
3760 
3761 gboolean
3762 manage_migrate_needs_timezone (GSList *, const db_conn_info_t *);
3763 
3764 
3765 /* Optimize. */
3766 
3767 int
3768 manage_optimize (GSList *, const db_conn_info_t *, const gchar *);
3769 
3770 
3771 /* Signal management */
3772 
3773 int
3774 sql_cancel ();
3775 
3776 
3777 /* General settings */
3778 const char *
3779 get_vt_verification_collation ();
3780 
3781 void
3782 set_vt_verification_collation (const char *);
3783 
3784 #endif /* not _GVMD_MANAGE_H */
3785