Greenbone Vulnerability Management Libraries 22.4.1
hosts.h
Go to the documentation of this file.
1/* Copyright (C) 2013-2022 Greenbone Networks GmbH
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the 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 General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
28#ifndef _GVM_HOSTS_H
29#define _GVM_HOSTS_H
30
31#include <glib.h> /* for gchar, GList */
32#include <netinet/in.h> /* for in6_addr, in_addr */
33
34/* Static values */
35
37{
38 HOST_TYPE_NAME = 0, /* Hostname eg. foo */
39 HOST_TYPE_IPV4, /* eg. 192.168.1.1 */
40 HOST_TYPE_CIDR_BLOCK, /* eg. 192.168.15.0/24 */
41 HOST_TYPE_RANGE_SHORT, /* eg. 192.168.15.10-20 */
42 HOST_TYPE_RANGE_LONG, /* eg. 192.168.15.10-192.168.18.3 */
43 HOST_TYPE_IPV6, /* eg. ::1 */
44 HOST_TYPE_CIDR6_BLOCK, /* eg. ::ffee/120 */
45 HOST_TYPE_RANGE6_LONG, /* eg. ::1:200:7-::1:205:500 */
46 HOST_TYPE_RANGE6_SHORT, /* eg. ::1-fe10 */
47 HOST_TYPE_MAX /* Boundary checking. */
48};
49
50/* Typedefs */
51typedef struct gvm_host gvm_host_t;
52typedef struct gvm_vhost gvm_vhost_t;
53typedef struct gvm_hosts gvm_hosts_t;
54
55/* Data structures. */
56
64{
65 union
66 {
67 gchar *name;
68 struct in_addr addr;
69 struct in6_addr addr6;
70 };
72 GSList *vhosts;
73};
74
79{
80 char *value;
81 char *source;
82};
83
91{
92 gchar *orig_str;
94 size_t max_size;
95 size_t current;
96 size_t count;
97 size_t removed;
98 size_t duplicated;
99};
100
101/* Function prototypes. */
102
103/* gvm_hosts_t related */
104
106gvm_hosts_new (const gchar *);
107
109gvm_hosts_new_with_max (const gchar *, unsigned int);
110
113
114void
116
117void
119
120void
122
123void
125
126void
128
129GSList *
131
132int
133gvm_hosts_exclude (gvm_hosts_t *, const char *);
134
135int
136gvm_vhosts_exclude (gvm_host_t *, const char *);
137
138int
139gvm_hosts_exclude_with_max (gvm_hosts_t *, const char *, unsigned int);
140
141char *
143
144int
146
147int
149
150unsigned int
152
153unsigned int
155
156unsigned int
158
159/* gvm_host_t related */
160
162gvm_host_from_str (const gchar *hosts_str);
163
164int
165gvm_host_in_hosts (const gvm_host_t *, const struct in6_addr *,
166 const gvm_hosts_t *);
167
169gvm_host_find_in_hosts (const gvm_host_t *, const struct in6_addr *,
170 const gvm_hosts_t *);
171
172gchar *
174
175enum host_type
176gvm_host_type (const gvm_host_t *);
177
178gchar *
180
181int
182gvm_host_resolve (const gvm_host_t *, void *, int);
183
184int
185gvm_host_get_addr6 (const gvm_host_t *, struct in6_addr *);
186
187void
189
190void gvm_host_free (gpointer);
191
192gpointer gvm_duplicate_vhost (gconstpointer, gpointer);
193
196
197/* Miscellaneous functions */
198
200gvm_vhost_new (char *, char *);
201
202int
203gvm_get_host_type (const gchar *);
204
205#endif /* not _GVM_HOSTS_H */
void gvm_hosts_shuffle(gvm_hosts_t *)
Randomizes the order of the hosts objects in the collection. Not to be used while iterating over the ...
Definition: hosts.c:1395
void gvm_hosts_add(gvm_hosts_t *, gvm_host_t *)
Inserts a host object at the end of a hosts collection.
Definition: hosts.c:976
int gvm_host_in_hosts(const gvm_host_t *, const struct in6_addr *, const gvm_hosts_t *)
Returns whether a host has an equal host in a hosts collection. eg. 192.168.10.1 has an equal in list...
Definition: hosts.c:2067
void gvm_hosts_reverse(gvm_hosts_t *)
Reverses the order of the hosts objects in the collection. Not to be used while iterating over the si...
Definition: hosts.c:1427
int gvm_hosts_exclude(gvm_hosts_t *, const char *)
Excludes a set of hosts provided as a string from a hosts collection. Not to be used while iterating ...
Definition: hosts.c:1650
host_type
Definition: hosts.h:37
@ HOST_TYPE_RANGE_SHORT
Definition: hosts.h:41
@ HOST_TYPE_RANGE6_SHORT
Definition: hosts.h:46
@ HOST_TYPE_RANGE_LONG
Definition: hosts.h:42
@ HOST_TYPE_RANGE6_LONG
Definition: hosts.h:45
@ HOST_TYPE_NAME
Definition: hosts.h:38
@ HOST_TYPE_IPV6
Definition: hosts.h:43
@ HOST_TYPE_CIDR6_BLOCK
Definition: hosts.h:44
@ HOST_TYPE_MAX
Definition: hosts.h:47
@ HOST_TYPE_IPV4
Definition: hosts.h:39
@ HOST_TYPE_CIDR_BLOCK
Definition: hosts.h:40
gvm_host_t * gvm_host_find_in_hosts(const gvm_host_t *, const struct in6_addr *, const gvm_hosts_t *)
Find the gvm_host_t from a gvm_hosts_t structure.
Definition: hosts.c:1975
unsigned int gvm_hosts_removed(const gvm_hosts_t *)
Gets the count of single values in hosts string that were removed (duplicates / excluded....
Definition: hosts.c:1945
gvm_host_t * gvm_duplicate_host(gvm_host_t *)
Creates a deep copy of a host. gvm_host_free has to be called on it.
Definition: hosts.c:2024
GSList * gvm_hosts_resolve(gvm_hosts_t *)
Resolves host objects of type name in a hosts collection, replacing hostnames with IPv4 values....
Definition: hosts.c:1453
int gvm_vhosts_exclude(gvm_host_t *, const char *)
Exclude a list of vhosts from a host's vhosts list.
Definition: hosts.c:1521
void gvm_host_add_reverse_lookup(gvm_host_t *)
Add a host's reverse-lookup name to the vhosts list.
Definition: hosts.c:1800
void gvm_hosts_move_current_host_to_end(gvm_hosts_t *)
Move the current gvm_host_t from a gvm_hosts_t structure to the end of the hosts list.
Definition: hosts.c:1342
gvm_hosts_t * gvm_hosts_new_with_max(const gchar *, unsigned int)
Creates a new gvm_hosts_t structure and the associated hosts objects from the provided hosts_str.
Definition: hosts.c:1113
int gvm_hosts_reverse_lookup_only(gvm_hosts_t *)
Removes hosts that don't reverse-lookup from the hosts collection. Not to be used while iterating ove...
Definition: hosts.c:1842
gchar * gvm_host_value_str(const gvm_host_t *)
Gets a host's value in printable format.
Definition: hosts.c:2115
unsigned int gvm_hosts_count(const gvm_hosts_t *)
Gets the count of single hosts objects in a hosts collection.
Definition: hosts.c:1931
gvm_host_t * gvm_hosts_next(gvm_hosts_t *)
Gets the next gvm_host_t from a gvm_hosts_t structure. The state of iteration is kept internally with...
Definition: hosts.c:1324
void gvm_hosts_free(gvm_hosts_t *)
Frees memory occupied by an gvm_hosts_t structure.
Definition: hosts.c:1372
char * gvm_host_reverse_lookup(gvm_host_t *)
Checks for a host object reverse dns lookup existence.
Definition: hosts.c:1715
gchar * gvm_host_type_str(const gvm_host_t *)
Gets a host's type in printable format.
Definition: hosts.c:2099
int gvm_host_get_addr6(const gvm_host_t *, struct in6_addr *)
Gives a host object's value as an IPv6 address. If the host type is hostname, it resolves the IPv4 ad...
Definition: hosts.c:2193
int gvm_get_host_type(const gchar *)
Determines the host type in a buffer.
Definition: hosts.c:824
int gvm_hosts_exclude_with_max(gvm_hosts_t *, const char *, unsigned int)
Excludes a set of hosts provided as a string from a hosts collection. Not to be used while iterating ...
Definition: hosts.c:1576
gvm_hosts_t * gvm_hosts_new(const gchar *)
Creates a new gvm_hosts_t structure and the associated hosts objects from the provided hosts_str.
Definition: hosts.c:1310
void gvm_host_free(gpointer)
Frees the memory occupied by an gvm_host_t object.
Definition: hosts.c:955
unsigned int gvm_hosts_duplicated(const gvm_hosts_t *)
Gets the count of single values in hosts string that were duplicated and therefore removed from the l...
Definition: hosts.c:1959
int gvm_hosts_reverse_lookup_unify(gvm_hosts_t *)
Removes hosts duplicates that reverse-lookup to the same value. Not to be used while iterating over t...
Definition: hosts.c:1881
enum host_type gvm_host_type(const gvm_host_t *)
Gets a host object's type.
Definition: hosts.c:2084
gpointer gvm_duplicate_vhost(gconstpointer, gpointer)
Creates a deep copy of a gvm_vhost_t object.
Definition: hosts.c:920
gvm_vhost_t * gvm_vhost_new(char *, char *)
Creates a new gvm_vhost_t object.
Definition: hosts.c:885
int gvm_host_resolve(const gvm_host_t *, void *, int)
Resolves a host object's name to an IPv4 or IPv6 address. Host object should be of type HOST_TYPE_NAM...
Definition: hosts.c:2172
gvm_host_t * gvm_host_from_str(const gchar *hosts_str)
Creates a new gvm_host_t from a host string.
Definition: hosts.c:1666
The structure for a single host object.
Definition: hosts.h:64
struct in6_addr addr6
Definition: hosts.h:69
gchar * name
Definition: hosts.h:67
GSList * vhosts
Definition: hosts.h:72
struct in_addr addr
Definition: hosts.h:68
enum host_type type
Definition: hosts.h:71
The structure for Hosts collection.
Definition: hosts.h:91
size_t max_size
Definition: hosts.h:94
size_t removed
Definition: hosts.h:97
gchar * orig_str
Definition: hosts.h:92
size_t duplicated
Definition: hosts.h:98
size_t current
Definition: hosts.h:95
size_t count
Definition: hosts.h:96
gvm_host_t ** hosts
Definition: hosts.h:93
The structure for a single vhost object.
Definition: hosts.h:79
char * value
Definition: hosts.h:80
char * source
Definition: hosts.h:81