OpenVAS Libraries  9.0.2
kb.h
Go to the documentation of this file.
1 /* OpenVAS Libraries
2  *
3  * Authors:
4  * Henri Doreau <henri.doreau@gmail.com>
5  *
6  * Copyright:
7  * Copyright (C) 2014 - Greenbone Networks GmbH.
8  *
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
23  *
24  * Knowledge base management API - Redis backend.
25  */
26 
27 #ifndef OPENVAS_KB_H
28 #define OPENVAS_KB_H
29 
30 #include <assert.h>
31 
32 #include "../base/nvti.h" /* for nvti_t */
33 
40 #define KB_PATH_DEFAULT "/tmp/redis.sock"
41 
42 
50  /* -- */
52 };
53 
57 enum kb_nvt_pos {
75 };
76 
81 struct kb_item
82 {
85  union
86  {
87  char *v_str;
88  int v_int;
89  };
91  struct kb_item *next;
93  size_t namelen;
94  char name[0];
95 };
96 
97 struct kb_operations;
98 
102 struct kb
103 {
104  const struct kb_operations *kb_ops;
105 };
106 
110 typedef struct kb *kb_t;
111 
119 {
120  /* ctor/dtor */
121  int (*kb_new) (kb_t *, const char *);
122  int (*kb_delete) (kb_t);
123  kb_t (*kb_find) (const char *, const char *);
124 
125  /* Actual kb operations */
126  struct kb_item *(*kb_get_single) (kb_t, const char *, enum kb_item_type);
127  char *(*kb_get_str) (kb_t, const char *);
128  int (*kb_get_int) (kb_t, const char *);
129  char *(*kb_get_nvt) (kb_t, const char *, enum kb_nvt_pos);
130  struct kb_item * (*kb_get_all) (kb_t, const char *);
131  struct kb_item * (*kb_get_pattern) (kb_t, const char *);
132  int (*kb_add_str) (kb_t, const char *, const char *);
133  int (*kb_set_str) (kb_t, const char *, const char *);
134  int (*kb_add_int) (kb_t, const char *, int);
135  int (*kb_set_int) (kb_t, const char *, int);
136  int (*kb_add_nvt) (kb_t, const nvti_t *, const char *);
137  int (*kb_del_items) (kb_t, const char *);
138 
139  /* Utils */
140  int (*kb_lnk_reset) (kb_t);
141  int (*kb_flush) (kb_t, const char *);
142 };
143 
149 extern const struct kb_operations *KBDefaultOperations;
150 
154 void kb_item_free (struct kb_item *);
155 
156 
162 static inline int kb_new (kb_t *kb, const char *kb_path)
163 {
164  assert (kb);
165  assert (KBDefaultOperations);
166  assert (KBDefaultOperations->kb_new);
167 
168  *kb = NULL;
169 
170  return KBDefaultOperations->kb_new (kb, kb_path);
171 }
172 
179 static inline kb_t kb_find (const char *kb_path, const char *key)
180 {
181  assert (KBDefaultOperations);
182  assert (KBDefaultOperations->kb_find);
183 
184  return KBDefaultOperations->kb_find (kb_path, key);
185 }
186 
194 static inline int
195 kb_nvt_add (kb_t kb, const nvti_t *nvt, const char *filename)
196 {
197  assert (kb);
198  assert (kb->kb_ops);
199  assert (kb->kb_ops->kb_add_nvt);
200 
201  return kb->kb_ops->kb_add_nvt (kb, nvt, filename);
202 }
203 
211 static inline char *
212 kb_nvt_get (kb_t kb, const char *oid, enum kb_nvt_pos position)
213 {
214  assert (kb);
215  assert (kb->kb_ops);
216  assert (kb->kb_ops->kb_add_nvt);
217 
218  return kb->kb_ops->kb_get_nvt (kb, oid, position);
219 }
220 
226 static inline int kb_delete (kb_t kb)
227 {
228  assert (kb);
229  assert (kb->kb_ops);
230  assert (kb->kb_ops->kb_delete);
231 
232  return kb->kb_ops->kb_delete (kb);
233 }
234 
243 static inline struct kb_item *
244 kb_item_get_single (kb_t kb, const char *name, enum kb_item_type type)
245 {
246  assert (kb);
247  assert (kb->kb_ops);
248  assert (kb->kb_ops->kb_get_single);
249 
250  return kb->kb_ops->kb_get_single (kb, name, type);
251 }
252 
260 static inline char *
261 kb_item_get_str (kb_t kb, const char *name)
262 {
263  assert (kb);
264  assert (kb->kb_ops);
265  assert (kb->kb_ops->kb_get_str);
266 
267  return kb->kb_ops->kb_get_str (kb, name);
268 }
269 
277 static inline int
278 kb_item_get_int (kb_t kb, const char *name)
279 {
280  assert (kb);
281  assert (kb->kb_ops);
282  assert (kb->kb_ops->kb_get_int);
283 
284  return kb->kb_ops->kb_get_int (kb, name);
285 }
286 
294 static inline struct kb_item *
295 kb_item_get_all (kb_t kb, const char *name)
296 {
297  assert (kb);
298  assert (kb->kb_ops);
299  assert (kb->kb_ops->kb_get_all);
300 
301  return kb->kb_ops->kb_get_all (kb, name);
302 }
303 
311 static inline struct kb_item *
312 kb_item_get_pattern (kb_t kb, const char *pattern)
313 {
314  assert (kb);
315  assert (kb->kb_ops);
316  assert (kb->kb_ops->kb_get_pattern);
317 
318  return kb->kb_ops->kb_get_pattern (kb, pattern);
319 }
320 
328 static inline int
329 kb_item_add_str (kb_t kb, const char *name, const char *str)
330 {
331  assert (kb);
332  assert (kb->kb_ops);
333  assert (kb->kb_ops->kb_add_str);
334 
335  return kb->kb_ops->kb_add_str (kb, name, str);
336 }
337 
345 static inline int
346 kb_item_set_str (kb_t kb, const char *name, const char *str)
347 {
348  assert (kb);
349  assert (kb->kb_ops);
350  assert (kb->kb_ops->kb_set_str);
351 
352  return kb->kb_ops->kb_set_str (kb, name, str);
353 }
354 
362 static inline int
363 kb_item_add_int (kb_t kb, const char *name, int val)
364 {
365  assert (kb);
366  assert (kb->kb_ops);
367  assert (kb->kb_ops->kb_add_int);
368 
369  return kb->kb_ops->kb_add_int (kb, name, val);
370 }
371 
379 static inline int
380 kb_item_set_int (kb_t kb, const char *name, int val)
381 {
382  assert (kb);
383  assert (kb->kb_ops);
384  assert (kb->kb_ops->kb_set_int);
385 
386  return kb->kb_ops->kb_set_int (kb, name, val);
387 }
388 
395 static inline int
396 kb_del_items (kb_t kb, const char *name)
397 {
398  assert (kb);
399  assert (kb->kb_ops);
400  assert (kb->kb_ops->kb_del_items);
401 
402  return kb->kb_ops->kb_del_items (kb, name);
403 }
404 
411 static inline int kb_lnk_reset (kb_t kb)
412 {
413  int rc = 0;
414 
415  assert (kb);
416  assert (kb->kb_ops);
417 
418  if (kb->kb_ops->kb_lnk_reset != NULL)
419  rc = kb->kb_ops->kb_lnk_reset (kb);
420 
421  return rc;
422 }
423 
430 static inline int kb_flush (kb_t kb, const char *except)
431 {
432  int rc = 0;
433 
434  assert (kb);
435  assert (kb->kb_ops);
436 
437  if (kb->kb_ops->kb_flush != NULL)
438  rc = kb->kb_ops->kb_flush (kb, except);
439 
440  return rc;
441 }
442 
443 #endif
Definition: kb.h:60
kb_nvt_pos
Possible positions of nvt values in cache list.
Definition: kb.h:57
Definition: kb.h:73
const struct kb_operations * KBDefaultOperations
Default KB operations. No selection mechanism is provided yet since there&#39;s only one implementation (...
Definition: kb_redis.c:1203
Definition: kb.h:69
struct kb_item *(* kb_get_all)(kb_t, const char *)
Definition: kb.h:130
Definition: kb.h:49
Definition: kb.h:51
void kb_item_free(struct kb_item *)
Release a KB item (or a list).
Definition: kb_redis.c:501
const char * val
Definition: nasl_init.c:525
Definition: kb.h:59
The structure of a information record that corresponds to a NVT.
Definition: nvti.h:64
Knowledge base item (defined by name, type (int/char*) and value). Implemented as a singly linked lis...
Definition: kb.h:81
struct kb_item * next
Definition: kb.h:91
const char * oid
Definition: nasl_builtin_find_service.c:55
enum kb_item_type type
Definition: kb.h:83
KB interface. Functions provided by an implementation. All functions have to be provided, there is no default/fallback. These functions should be called via the corresponding static inline wrappers below. See the wrappers for the documentation.
Definition: kb.h:118
Definition: kb.h:47
int(* kb_delete)(kb_t)
Definition: kb.h:122
Definition: kb.h:74
struct kb_item *(* kb_get_single)(kb_t, const char *, enum kb_item_type)
Definition: kb.h:126
int(* kb_get_int)(kb_t, const char *)
Definition: kb.h:128
int(* kb_set_str)(kb_t, const char *, const char *)
Definition: kb.h:133
Definition: kb.h:58
int(* kb_lnk_reset)(kb_t)
Definition: kb.h:140
int(* kb_del_items)(kb_t, const char *)
Definition: kb.h:137
int(* kb_flush)(kb_t, const char *)
Definition: kb.h:141
Definition: kb.h:48
Top-level KB. This is to be inherited by KB implementations.
Definition: kb.h:102
const struct kb_operations * kb_ops
Definition: kb.h:104
struct kb_item *(* kb_get_pattern)(kb_t, const char *)
Definition: kb.h:131
int(* kb_add_int)(kb_t, const char *, int)
Definition: kb.h:134
Definition: kb.h:64
Definition: kb.h:62
char *(* kb_get_nvt)(kb_t, const char *, enum kb_nvt_pos)
Definition: kb.h:129
Definition: kb.h:65
Definition: kb.h:68
Definition: kb.h:70
const char * name
Definition: nasl_init.c:524
Definition: kb.h:71
int v_int
Definition: kb.h:88
kb_item_type
Possible type of a kb_item.
Definition: kb.h:46
size_t namelen
Definition: kb.h:93
int(* kb_add_nvt)(kb_t, const nvti_t *, const char *)
Definition: kb.h:136
int(* kb_set_int)(kb_t, const char *, int)
Definition: kb.h:135
kb_t(* kb_find)(const char *, const char *)
Definition: kb.h:123
struct kb * kb_t
type abstraction to hide KB internals.
Definition: kb.h:110
Definition: kb.h:66
Definition: kb.h:63
char name[0]
Definition: kb.h:94
Definition: kb.h:67
char *(* kb_get_str)(kb_t, const char *)
Definition: kb.h:127
int(* kb_add_str)(kb_t, const char *, const char *)
Definition: kb.h:132
Definition: kb.h:72
char * v_str
Definition: kb.h:87
int(* kb_new)(kb_t *, const char *)
Definition: kb.h:121
Definition: kb.h:61