Greenbone Security Assistant
Data Structures | Macros | Typedefs | Functions | Variables
gsad_http_handler.c File Reference

HTTP handling of GSA. More...

#include "gsad_http_handler.h"
#include "gsad_base.h"
#include "gsad_credentials.h"
#include "gsad_gmp.h"
#include "gsad_i18n.h"
#include "gsad_settings.h"
#include "gsad_user.h"
#include "utils.h"
#include "validator.h"
#include <assert.h>
#include <glib.h>
#include <gvm/base/networking.h>
#include <gvm/util/xmlutils.h>
#include <stdlib.h>
#include <string.h>

Data Structures

struct  url_map
 URL regexp to handler function mapping. More...
 
struct  http_handler
 
struct  method_router
 

Macros

#define G_LOG_DOMAIN   "gsad http handler"
 GLib log domain. More...
 
#define TOKEN_REGEXP   "^[a-z0-9\\-]+$"
 
#define SLAVE_ID_REGEXP   "^[a-z0-9\\-]+$"
 

Typedefs

typedef struct url_map url_map_t
 
typedef struct method_router method_router_t
 

Functions

http_handler_thttp_handler_add (http_handler_t *handlers, http_handler_t *next)
 
int http_handler_start (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int http_handler_next (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
http_handler_thttp_handler_new_with_data (http_handler_func_t func, http_handler_free_func_t freefunc, void *data)
 
void http_handler_free_internal (http_handler_t *handler)
 
http_handler_thttp_handler_new (http_handler_func_t func)
 
void http_handler_free (http_handler_t *handler)
 
int handle_get_post (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
void method_router_free (http_handler_t *handler)
 
http_handler_tmethod_router_new ()
 
void method_router_set_get_handler (http_handler_t *router, http_handler_t *handler)
 
void method_router_set_post_handler (http_handler_t *router, http_handler_t *handler)
 
int handle_url (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *current, void *data)
 
url_map_turl_map_new (const gchar *regexp, http_handler_t *handler)
 
void url_handler_free (http_handler_t *handler)
 
http_handler_turl_handler_new (const gchar *regexp, http_handler_t *handler)
 
http_handler_turl_handler_add_func (http_handler_t *handlers, const gchar *regexp, http_handler_func_t handle)
 
int handle_validate (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_invalid_method (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int get_user_from_connection (http_connection_t *connection, user_t **user)
 
int handle_get_user (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_setup_user (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_setup_credentials (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_logout (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_gmp_get (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_gmp_post (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_system_report (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_index (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_static_file (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
int handle_static_config (http_connection_t *connection, const char *method, const char *url, gsad_connection_info_t *con_info, http_handler_t *handler, void *data)
 
http_handler_tinit_http_handlers ()
 
void cleanup_http_handlers ()
 
int handle_request (void *cls, http_connection_t *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls)
 HTTP request handler for GSAD. More...
 

Variables

validator_t http_validator
 Validator instance for http params. More...
 
http_handler_thandlers
 

Detailed Description

HTTP handling of GSA.

HTTP URL handling/routing.

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "gsad http handler"

GLib log domain.

◆ SLAVE_ID_REGEXP

#define SLAVE_ID_REGEXP   "^[a-z0-9\\-]+$"

◆ TOKEN_REGEXP

#define TOKEN_REGEXP   "^[a-z0-9\\-]+$"

Typedef Documentation

◆ method_router_t

◆ url_map_t

typedef struct url_map url_map_t

Function Documentation

◆ cleanup_http_handlers()

void cleanup_http_handlers ( )

◆ get_user_from_connection()

int get_user_from_connection ( http_connection_t connection,
user_t **  user 
)

◆ handle_get_post()

int handle_get_post ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_get_user()

int handle_get_user ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_gmp_get()

int handle_gmp_get ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_gmp_post()

int handle_gmp_post ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_index()

int handle_index ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_invalid_method()

int handle_invalid_method ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_logout()

int handle_logout ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_request()

int handle_request ( void *  cls,
http_connection_t connection,
const char *  url,
const char *  method,
const char *  version,
const char *  upload_data,
size_t *  upload_data_size,
void **  con_cls 
)

HTTP request handler for GSAD.

This routine is an MHD_AccessHandlerCallback, the request handler for microhttpd.

Parameters
[in]clsA pointer to http_handler_t
[in]connectionConnection handle, e.g. used to send response.
[in]urlThe URL requested.
[in]method"GET" or "POST", others are disregarded.
[in]versionNot used for this callback.
[in]upload_dataData used for POST requests.
[in]upload_data_sizeSize of upload_data.
[out]con_clsFor exchange of connection-related data (here a struct gsad_connection_info).
Returns
MHD_NO in case of problems. MHD_YES if all is OK.

◆ handle_setup_credentials()

int handle_setup_credentials ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_setup_user()

int handle_setup_user ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_static_config()

int handle_static_config ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_static_file()

int handle_static_file ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)
Todo:
validation, URL length restriction (allows you to view ANY file that the user running the gsad might look at!)
Todo:
use glibs path functions

◆ handle_system_report()

int handle_system_report ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ handle_url()

int handle_url ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t current,
void *  data 
)

◆ handle_validate()

int handle_validate ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ http_handler_add()

http_handler_t* http_handler_add ( http_handler_t handlers,
http_handler_t next 
)

◆ http_handler_free()

void http_handler_free ( http_handler_t handler)

◆ http_handler_free_internal()

void http_handler_free_internal ( http_handler_t handler)

◆ http_handler_new()

http_handler_t* http_handler_new ( http_handler_func_t  func)

◆ http_handler_new_with_data()

http_handler_t* http_handler_new_with_data ( http_handler_func_t  func,
http_handler_free_func_t  freefunc,
void *  data 
)

◆ http_handler_next()

int http_handler_next ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ http_handler_start()

int http_handler_start ( http_connection_t connection,
const char *  method,
const char *  url,
gsad_connection_info_t con_info,
http_handler_t handler,
void *  data 
)

◆ init_http_handlers()

http_handler_t* init_http_handlers ( )

◆ method_router_free()

void method_router_free ( http_handler_t handler)

◆ method_router_new()

http_handler_t* method_router_new ( )

◆ method_router_set_get_handler()

void method_router_set_get_handler ( http_handler_t router,
http_handler_t handler 
)

◆ method_router_set_post_handler()

void method_router_set_post_handler ( http_handler_t router,
http_handler_t handler 
)

◆ url_handler_add_func()

http_handler_t* url_handler_add_func ( http_handler_t handlers,
const gchar *  regexp,
http_handler_func_t  handle 
)

◆ url_handler_free()

void url_handler_free ( http_handler_t handler)

◆ url_handler_new()

http_handler_t* url_handler_new ( const gchar *  regexp,
http_handler_t handler 
)

◆ url_map_new()

url_map_t* url_map_new ( const gchar *  regexp,
http_handler_t handler 
)

Variable Documentation

◆ handlers

http_handler_t* handlers

◆ http_validator

validator_t http_validator

Validator instance for http params.