Greenbone Security Assistant  7.0.3~git
gsad_base.c File Reference

Base functionality of GSA. More...

#include "gsad_base.h"
#include <openvas/omp/xml.h>
#include <glib.h>
#include <microhttpd.h>
#include <string.h>
#include <sys/wait.h>
#include <errno.h>
Include dependency graph for gsad_base.c:

Go to the source code of this file.

Macros

#define XSL_PATH   "gsad.xsl"
 Location of XSL file. More...
 
#define G_LOG_DOMAIN   "gsad base"
 GLib log domain. More...
 
#define FAIL_HTML
 HTML returned when XSL transform fails. More...
 

Functions

int gsad_base_init ()
 Base init. More...
 
int gsad_base_cleanup ()
 Base init. More...
 
int get_chroot_state ()
 Gets the chroot state. More...
 
void set_chroot_state (int state)
 Sets the chroot state. More...
 
int get_http_only ()
 Gets the http_only state. More...
 
void set_http_only (int state)
 Sets the http_only state. More...
 
void vendor_version_set (const gchar *version)
 Set the vendor version. More...
 
const gchar * vendor_version_get ()
 Get the vendor version. More...
 
const gchar * label_name_get ()
 Get the login label name. More...
 
int label_name_set (const gchar *name)
 Set the login label. More...
 
void set_language_code (gchar **lang, const gchar *language)
 Set language code of user. More...
 
char * ctime_r_strip_newline (time_t *time, char *string)
 Return string from ctime_r with newline replaces with terminator. More...
 
char * xsl_transform_with_stylesheet (const char *xml_text, const char *xsl_stylesheet, cmd_response_data_t *response_data)
 XSL Transformation. More...
 
char * xsl_transform (const char *xml_text, cmd_response_data_t *response_data)
 XSL Transformation. More...
 
char * gsad_message (credentials_t *credentials, const char *title, const char *function, int line, const char *msg, const char *backurl, cmd_response_data_t *response_data)
 Handles fatal errors. More...
 
gchar * login_xml (const gchar *message, const gchar *token, const gchar *time, const gchar *url, const gchar *i18n, const gchar *guest)
 Generate XML for login page. More...
 
params_tparams_new ()
 Make a params. More...
 
void params_free (params_t *params)
 Make a params. More...
 
param_tparams_get (params_t *params, const char *name)
 Get param. More...
 
int params_given (params_t *params, const char *name)
 Get whether a param was given at all. More...
 
const char * params_value (params_t *params, const char *name)
 Get value of param. More...
 
int params_value_size (params_t *params, const char *name)
 Get the size of the value of param. More...
 
const char * params_original_value (params_t *params, const char *name)
 Get original value of param, before validation. More...
 
const char * params_filename (params_t *params, const char *name)
 Get filename of param. More...
 
params_tparams_values (params_t *params, const char *name)
 Get values of param. More...
 
int params_valid (params_t *params, const char *name)
 Get whether a param is valid. More...
 
param_tparams_add (params_t *params, const char *name, const char *value)
 Add a param. More...
 
param_tparams_append_bin (params_t *params, const char *name, const char *chunk_data, int chunk_size, int chunk_offset)
 Append binary data to a param. More...
 
gboolean params_iterator_next (params_iterator_t *iterator, char **name, param_t **param)
 Increment a params iterator. More...
 

Variables

gchar * vendor_version = NULL
 Version from vendor, or NULL. More...
 
gchar * label_name = NULL
 

Detailed Description

Base functionality of GSA.

Definition in file gsad_base.c.

Macro Definition Documentation

◆ FAIL_HTML

#define FAIL_HTML
Value:
"<html>" \
"<body>" \
"An internal server error has occurred during XSL transformation." \
"</body>" \
"</html>"

HTML returned when XSL transform fails.

Definition at line 262 of file gsad_base.c.

Referenced by xsl_transform_with_stylesheet().

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "gsad base"

GLib log domain.

Definition at line 62 of file gsad_base.c.

◆ XSL_PATH

#define XSL_PATH   "gsad.xsl"

Location of XSL file.

Definition at line 35 of file gsad_base.c.

Referenced by xsl_transform().

Function Documentation

◆ ctime_r_strip_newline()

char* ctime_r_strip_newline ( time_t *  time,
char *  string 
)

Return string from ctime_r with newline replaces with terminator.

Parameters
[in]timeTime.
[out]stringTime string.
Returns
Return from ctime_r applied to time, with newline stripped off.

Definition at line 241 of file gsad_base.c.

Referenced by gsad_message(), and logout().

242 {
243  struct tm *tm;
244 
245  tm = localtime (time);
246  if (tm == NULL
247  || (strftime (string,
248  199,
249  "%c %Z",
250  tm)
251  == 0))
252  {
253  string[0] = '\0';
254  return string;
255  }
256  return string;
257 }
Here is the caller graph for this function:

◆ get_chroot_state()

int get_chroot_state ( )

Gets the chroot state.

Returns
The chroot state: 0 = no chroot, 1 = chroot in effect

Definition at line 119 of file gsad_base.c.

References chroot_state.

120 {
121  return chroot_state;
122 }
int chroot_state
Whether chroot is used.
Definition: gsad.c:375

◆ get_http_only()

int get_http_only ( )

Gets the http_only state.

Returns
The http_only state: 0 = using HTTPS, 1 = HTTP only

Definition at line 141 of file gsad_base.c.

Referenced by login_xml().

142 {
143  return http_only;
144 }
Here is the caller graph for this function:

◆ gsad_base_cleanup()

int gsad_base_cleanup ( )

Base init.

Returns
0 success, -1 error.

Definition at line 104 of file gsad_base.c.

105 {
106 #ifdef USE_LIBXSLT
107  xsltCleanupGlobals ();
108  xmlCleanupParser ();
109 #endif
110  return 0;
111 }

◆ gsad_base_init()

int gsad_base_init ( )

Base init.

Returns
0 success, 1 XML needs thread support.

Definition at line 87 of file gsad_base.c.

88 {
89 #ifdef USE_LIBXSLT
90  if (!xmlHasFeature (XML_WITH_THREAD))
91  return 1;
92  /* Required by libxml for thread safety. */
93  xmlInitParser ();
94 #endif
95  return 0;
96 }

◆ gsad_message()

char* gsad_message ( credentials_t credentials,
const char *  title,
const char *  function,
int  line,
const char *  msg,
const char *  backurl,
cmd_response_data_t response_data 
)

Handles fatal errors.

Todo:
Make it accept formatted strings.
Parameters
[in]credentialsUser authentication information.
[in]titleThe title for the message.
[in]functionThe function in which the error occurred.
[in]lineThe line number at which the error occurred.
[in]msgThe response message.
[in]backurlThe URL offered to get back to a sane situation. If NULL, the tasks page is used.
[out]response_dataExtra data return for the HTTP response.
Returns
An HTML document as a newly allocated string.

Definition at line 467 of file gsad_base.c.

References credentials_t::capabilities, credentials_t::charts, credentials_t::client_address, ctime_r_strip_newline(), cmd_response_data_t::http_status_code, credentials_t::language, credentials_t::params, params_value(), credentials_t::role, credentials_t::token, credentials_t::username, vendor_version_get(), and xsl_transform().

Referenced by bulk_delete_omp(), clone_omp(), delete_asset_omp(), delete_resource(), download_agent_omp(), download_ca_pub(), download_credential_omp(), download_key_pub(), download_ssl_cert(), edit_alert(), edit_asset(), edit_note(), edit_override(), edit_resource(), edit_scanner(), edit_tag(), edit_target(), empty_trashcan_omp(), export_omp_doc_omp(), export_preference_file_omp(), get_feeds_omp(), get_info(), get_one(), get_protocol_doc_omp(), get_system_reports_omp(), new_note(), new_override(), process_bulk_omp(), resource_action(), restore_omp(), run_wizard_omp(), save_config_family_omp(), save_config_nvt_omp(), save_config_omp(), save_filter_omp(), test_alert_omp(), toggle_tag_omp(), verify_agent_omp(), and verify_report_format_omp().

470 {
471  gchar *xml, *message, *resp;
472  const char* xml_flag;
473 
474  if (credentials && credentials->params)
475  xml_flag = params_value (credentials->params, "xml");
476  else
477  xml_flag = NULL;
478 
479  if (function)
480  {
481  message = g_strdup_printf ("<gsad_response>"
482  "<title>%s: %s:%i (GSA %s)</title>"
483  "<message>%s</message>"
484  "<backurl>%s</backurl>"
485  "<token>%s</token>"
486  "</gsad_response>",
487  title,
488  function,
489  line,
490  GSAD_VERSION,
491  msg,
492  backurl ? backurl : "/omp?cmd=get_tasks",
493  credentials ? credentials->token : "");
494  }
495  else
496  {
497  message = g_strdup_printf ("<gsad_response>"
498  "<title>%s (GSA %s)</title>"
499  "<message>%s</message>"
500  "<backurl>%s</backurl>"
501  "<token>%s</token>"
502  "</gsad_response>",
503  title,
504  GSAD_VERSION,
505  msg,
506  backurl ? backurl : "/omp?cmd=get_tasks",
507  credentials ? credentials->token : "");
508  }
509 
510  if (credentials)
511  {
512  gchar *pre;
513  time_t now;
514  char ctime_now[200];
515 
516  now = time (NULL);
517  ctime_r_strip_newline (&now, ctime_now);
518 
519  pre = g_markup_printf_escaped
520  ("<envelope>"
521  "<version>%s</version>"
522  "<vendor_version>%s</vendor_version>"
523  "<token>%s</token>"
524  "<time>%s</time>"
525  "<login>%s</login>"
526  "<role>%s</role>"
527  "<i18n>%s</i18n>"
528  "<charts>%i</charts>"
529  "<client_address>%s</client_address>",
530  GSAD_VERSION,
532  credentials->token,
533  ctime_now,
534  credentials->username,
535  credentials->role,
536  credentials->language,
537  credentials->charts,
538  credentials->client_address);
539  xml = g_strdup_printf ("%s%s"
540  "<capabilities>%s</capabilities>"
541  "</envelope>",
542  pre,
543  message,
544  credentials->capabilities);
545  g_free (pre);
546  }
547  else
548  {
549  xml = g_strdup (message);
550  }
551  g_free (message);
552 
553  if (xml_flag && strcmp (xml_flag, "0"))
554  return xml;
555 
556  resp = xsl_transform (xml, response_data);
557  if (resp == NULL)
558  {
559  resp = g_strdup ("<html>"
560  "<body>"
561  "An internal server error has occurred during XSL"
562  " transformation."
563  "</body>"
564  "</html>");
565  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
566  }
567  g_free (xml);
568  return resp;
569 }
char * capabilities
Capabilites of manager.
Definition: gsad_base.h:76
char * username
Name of user.
Definition: gsad_base.h:69
char * client_address
Client&#39;s address.
Definition: gsad_base.h:80
char * token
Session token.
Definition: gsad_base.h:73
const char * params_value(params_t *params, const char *name)
Get value of param.
Definition: gsad_base.c:711
char * role
User&#39;s role.
Definition: gsad_base.h:71
const gchar * vendor_version_get()
Get the vendor version.
Definition: gsad_base.c:175
int charts
Whether to show charts for this user.
Definition: gsad_base.h:85
char * xsl_transform(const char *xml_text, cmd_response_data_t *response_data)
XSL Transformation.
Definition: gsad_base.c:445
char * language
Accept-Language browser header.
Definition: gsad_base.h:77
params_t * params
Request parameters.
Definition: gsad_base.h:84
char * ctime_r_strip_newline(time_t *time, char *string)
Return string from ctime_r with newline replaces with terminator.
Definition: gsad_base.c:241
Here is the call graph for this function:
Here is the caller graph for this function:

◆ label_name_get()

const gchar* label_name_get ( )

Get the login label name.

Returns
login label name

Definition at line 186 of file gsad_base.c.

References label_name.

Referenced by login_xml().

187 {
188  return label_name;
189 }
gchar * label_name
Definition: gsad_base.c:69
Here is the caller graph for this function:

◆ label_name_set()

int label_name_set ( const gchar *  name)

Set the login label.

Parameters
[in]nameNew login label name.
Returns
0 on success -1 if name contains invalid characters

Definition at line 199 of file gsad_base.c.

References label_name.

200 {
201  if (!g_regex_match_simple ("^[a-zA-Z0-9\\-_\\.\\:]+$", name, 0, 0))
202  return -1;
203 
204  g_free (label_name);
205  label_name = g_strdup (name);
206  return 0;
207 }
gchar * label_name
Definition: gsad_base.c:69

◆ login_xml()

gchar* login_xml ( const gchar *  message,
const gchar *  token,
const gchar *  time,
const gchar *  url,
const gchar *  i18n,
const gchar *  guest 
)

Generate XML for login page.

Parameters
[in]messageLogin screen message, or NULL.
[out]tokenToken, or NULL.
[out]timeTime.
[out]urlURL.
[out]i18ni18n language code, or NULL.
[out]guestUsername for guest login, or NULL.
Returns
Freshly allocated login XML.

Definition at line 584 of file gsad_base.c.

References get_http_only(), label_name_get(), and vendor_version_get().

Referenced by logout().

586 {
587  GString *xml;
588  const gchar *label = label_name_get();
589 
590  xml = g_string_new ("");
591  xml_string_append (xml,
592  "<login_page>"
593  "<version>%s</version>"
594  "<vendor_version>%s</vendor_version>"
595  "<token>%s</token>"
596  "<http_only>%d</http_only>"
597  "<time>%s</time>",
598  GSAD_VERSION,
600  token ? token : "",
601  get_http_only (),
602  time);
603 
604  if (label)
605  xml_string_append(xml,
606  "<label>%s</label>",
607  label);
608  if (message)
609  xml_string_append (xml,
610  "<message>%s</message>",
611  message);
612  if (url)
613  xml_string_append (xml,
614  "<url>%s</url>",
615  url);
616  if (i18n)
617  xml_string_append (xml,
618  "<i18n>%s</i18n>",
619  i18n);
620  if (guest)
621  xml_string_append (xml,
622  "<guest><username>%s</username></guest>",
623  guest);
624  g_string_append (xml, "</login_page>");
625 
626  return g_string_free (xml, FALSE);
627 }
int get_http_only()
Gets the http_only state.
Definition: gsad_base.c:141
const gchar * vendor_version_get()
Get the vendor version.
Definition: gsad_base.c:175
const gchar * label_name_get()
Get the login label name.
Definition: gsad_base.c:186
Here is the call graph for this function:
Here is the caller graph for this function:

◆ params_add()

param_t* params_add ( params_t params,
const char *  name,
const char *  value 
)

Add a param.

Parameters
[in]paramsParams.
[in]nameName.
[in]valueValue. Must be a string.

Definition at line 808 of file gsad_base.c.

References param::array_len, param::valid, param::valid_utf8, param::value, and param::value_size.

Referenced by bulk_delete_omp(), delete_asset_omp(), get_info(), params_append_bin(), and process_bulk_omp().

809 {
810  param_t *param;
811 
812  if (name == NULL)
813  name = "";
814  if (value == NULL)
815  value = "";
816 
817  param = g_malloc0 (sizeof (param_t));
818  param->valid = 0;
819  param->valid_utf8 = 0;
820  param->value = g_strdup (value);
821  param->value_size = strlen (value);
822  param->array_len = 0;
823  g_hash_table_insert (params, g_strdup (name), param);
824  return param;
825 }
gchar * value
Definition: gsad_base.h:148
int valid_utf8
Definition: gsad_base.h:153
int value_size
Definition: gsad_base.h:154
int array_len
Definition: gsad_base.h:155
Request parameter.
Definition: gsad_base.h:146
int valid
Definition: gsad_base.h:152
Here is the caller graph for this function:

◆ params_append_bin()

param_t* params_append_bin ( params_t params,
const char *  name,
const char *  chunk_data,
int  chunk_size,
int  chunk_offset 
)

Append binary data to a param.

Appended data always has an extra NULL terminator.

Parameters
[in]paramsParams.
[in]nameName.
[in]chunk_dataData to append.
[in]chunk_sizeNumber of bytes to copy.
[in]chunk_offsetOffset in bytes into data from which to start.
Returns
Param appended to, or NULL on memory error.

Definition at line 841 of file gsad_base.c.

References params_add(), params_get(), param::value, and param::value_size.

843 {
844  param_t *param;
845  char *new_value;
846 
847  param = params_get (params, name);
848 
849  if (param == NULL)
850  {
851  char *value;
852 
853  value = g_malloc0 (chunk_size + 1);
854  memcpy (value + chunk_offset, chunk_data, chunk_size);
855 
856  param = params_add (params, name, "");
857  g_free (param->value);
858  param->value = value;
859  param->value_size = chunk_size;
860  return param;
861  }
862 
863  new_value = realloc (param->value,
864  param->value_size + chunk_size + 1);
865  if (new_value == NULL)
866  return NULL;
867  param->value = new_value;
868  memcpy (param->value + chunk_offset,
869  chunk_data,
870  chunk_size);
871  param->value[chunk_offset + chunk_size] = '\0';
872  param->value_size += chunk_size;
873 
874  return param;
875 }
gchar * value
Definition: gsad_base.h:148
param_t * params_get(params_t *params, const char *name)
Get param.
Definition: gsad_base.c:679
int value_size
Definition: gsad_base.h:154
Request parameter.
Definition: gsad_base.h:146
param_t * params_add(params_t *params, const char *name, const char *value)
Add a param.
Definition: gsad_base.c:808
Here is the call graph for this function:

◆ params_filename()

const char* params_filename ( params_t params,
const char *  name 
)

Get filename of param.

Parameters
[in]paramsParams.
[in]nameName.
Returns
Filename if param present and has a filename, else NULL.

Definition at line 761 of file gsad_base.c.

References param::filename.

Referenced by create_agent_omp().

762 {
763  param_t *param;
764  param = g_hash_table_lookup (params, name);
765  return param ? param->filename : NULL;
766 }
gchar * filename
Definition: gsad_base.h:150
Request parameter.
Definition: gsad_base.h:146
Here is the caller graph for this function:

◆ params_free()

void params_free ( params_t params)

Make a params.

Parameters
[in]paramsParams.

Definition at line 664 of file gsad_base.c.

665 {
666  if (params)
667  g_hash_table_destroy (params);
668 }

◆ params_get()

param_t* params_get ( params_t params,
const char *  name 
)

Get param.

Parameters
[in]paramsParams.
[in]nameName.
Returns
Param if present, else NULL.

Definition at line 679 of file gsad_base.c.

Referenced by delete_asset_omp(), delete_filter_omp(), delete_resource(), and params_append_bin().

680 {
681  param_t *param;
682  param = g_hash_table_lookup (params, name);
683  return param;
684 }
Request parameter.
Definition: gsad_base.h:146
Here is the caller graph for this function:

◆ params_given()

int params_given ( params_t params,
const char *  name 
)

Get whether a param was given at all.

Parameters
[in]paramsParams.
[in]nameName.
Returns
1 if given, else 0.

Definition at line 695 of file gsad_base.c.

Referenced by bulk_delete_omp(), create_alert_omp(), create_credential_omp(), create_note_omp(), create_override_omp(), create_permission_omp(), create_permissions_omp(), create_report_omp(), create_scanner_omp(), create_task_omp(), create_user_omp(), delete_asset_omp(), save_alert_omp(), save_auth_omp(), save_credential_omp(), save_note_omp(), save_override_omp(), save_permission_omp(), save_scanner_omp(), save_task_omp(), and save_user_omp().

696 {
697  param_t *param;
698  param = g_hash_table_lookup (params, name);
699  return param ? 1 : 0;
700 }
Request parameter.
Definition: gsad_base.h:146
Here is the caller graph for this function:

◆ params_iterator_next()

gboolean params_iterator_next ( params_iterator_t iterator,
char **  name,
param_t **  param 
)

Increment a params iterator.

Parameters
[in]iteratorIterator.
[out]nameName of param.
[out]paramParam.
Returns
TRUE if there was a next element, else FALSE.

Definition at line 887 of file gsad_base.c.

Referenced by bulk_delete_omp(), create_alert_omp(), create_task_omp(), create_user_omp(), member1(), process_bulk_omp(), run_wizard_omp(), save_alert_omp(), save_config_family_omp(), save_config_nvt_omp(), save_report_format_omp(), save_task_omp(), and save_user_omp().

889 {
890  return g_hash_table_iter_next (iterator, (gpointer*) name, (gpointer*) param);
891 }
Request parameter.
Definition: gsad_base.h:146
Here is the caller graph for this function:

◆ params_new()

params_t* params_new ( )

Make a params.

Returns
Freshly allocated params. Free with params_free.

Definition at line 653 of file gsad_base.c.

654 {
655  return g_hash_table_new_full (g_str_hash, g_str_equal, g_free, param_free);
656 }

◆ params_original_value()

const char* params_original_value ( params_t params,
const char *  name 
)

Get original value of param, before validation.

Only set if validation failed.

Parameters
[in]paramsParams.
[in]nameName.
Returns
Value if param present, else NULL.

Definition at line 745 of file gsad_base.c.

References param::original_value.

Referenced by create_note_omp(), create_override_omp(), save_note_omp(), and save_override_omp().

746 {
747  param_t *param;
748  param = g_hash_table_lookup (params, name);
749  return param ? param->original_value : NULL;
750 }
gchar * original_value
Definition: gsad_base.h:149
Request parameter.
Definition: gsad_base.h:146
Here is the caller graph for this function:

◆ params_valid()

int params_valid ( params_t params,
const char *  name 
)

Get whether a param is valid.

Parameters
[in]paramsParams.
[in]nameName.
Returns
1 if param present and valid, else 0.

Definition at line 793 of file gsad_base.c.

References param::valid.

Referenced by create_note_omp(), create_override_omp(), create_task_omp(), process_bulk_omp(), save_note_omp(), save_override_omp(), and save_task_omp().

794 {
795  param_t *param;
796  param = g_hash_table_lookup (params, name);
797  return param ? param->valid : 0;
798 }
Request parameter.
Definition: gsad_base.h:146
int valid
Definition: gsad_base.h:152
Here is the caller graph for this function:

◆ params_value()

const char* params_value ( params_t params,
const char *  name 
)

Get value of param.

Parameters
[in]paramsParams.
[in]nameName.
Returns
Value if param present, else NULL.

Definition at line 711 of file gsad_base.c.

References param::value.

Referenced by auth_settings_omp(), bulk_delete_omp(), clone_omp(), create_agent_omp(), create_alert_omp(), create_asset_omp(), create_config_omp(), create_container_task_omp(), create_credential_omp(), create_filter_omp(), create_group_omp(), create_host_omp(), create_note_omp(), create_override_omp(), create_permission_omp(), create_permissions_omp(), create_port_list_omp(), create_port_range_omp(), create_report_omp(), create_role_omp(), create_scanner_omp(), create_schedule_omp(), create_tag_omp(), create_target_omp(), create_task_omp(), create_user_omp(), cvss_calculator(), dashboard(), delete_asset_omp(), delete_resource(), download_agent_omp(), download_ca_pub(), download_credential_omp(), download_key_pub(), download_ssl_cert(), edit_alert(), edit_asset(), edit_note(), edit_override(), edit_resource(), edit_scanner(), edit_tag(), edit_target(), empty_trashcan_omp(), export_omp_doc_omp(), export_preference_file_omp(), export_resource(), get_aggregate_omp(), get_info(), get_one(), get_system_report_omp(), get_system_reports_omp(), gsad_message(), import_config_omp(), import_port_list_omp(), import_report_format_omp(), logout(), move_task_omp(), new_note(), new_override(), process_bulk_omp(), resource_action(), restore_omp(), run_wizard_omp(), save_agent_omp(), save_alert_omp(), save_asset_omp(), save_auth_omp(), save_chart_preference_omp(), save_config_family_omp(), save_config_nvt_omp(), save_config_omp(), save_container_task_omp(), save_credential_omp(), save_filter_omp(), save_group_omp(), save_my_settings_omp(), save_note_omp(), save_override_omp(), save_permission_omp(), save_port_list_omp(), save_report_format_omp(), save_role_omp(), save_scanner_omp(), save_schedule_omp(), save_tag_omp(), save_target_omp(), save_task_omp(), save_user_omp(), sync_config_omp(), test_alert_omp(), toggle_tag_omp(), verify_agent_omp(), verify_report_format_omp(), and verify_scanner_omp().

712 {
713  param_t *param;
714  param = g_hash_table_lookup (params, name);
715  return param ? param->value : NULL;
716 }
gchar * value
Definition: gsad_base.h:148
Request parameter.
Definition: gsad_base.h:146

◆ params_value_size()

int params_value_size ( params_t params,
const char *  name 
)

Get the size of the value of param.

Parameters
[in]paramsParams.
[in]nameName.
Returns
Size if param present, else -1.

Definition at line 727 of file gsad_base.c.

References param::value_size.

Referenced by create_agent_omp().

728 {
729  param_t *param;
730  param = g_hash_table_lookup (params, name);
731  return param ? param->value_size : -1;
732 }
int value_size
Definition: gsad_base.h:154
Request parameter.
Definition: gsad_base.h:146
Here is the caller graph for this function:

◆ params_values()

params_t* params_values ( params_t params,
const char *  name 
)

Get values of param.

Parameters
[in]paramsParams.
[in]nameName.
Returns
Values if param present, else NULL.

Definition at line 777 of file gsad_base.c.

References param::values.

Referenced by bulk_delete_omp(), create_alert_omp(), create_task_omp(), create_user_omp(), get_aggregate_omp(), process_bulk_omp(), run_wizard_omp(), save_alert_omp(), save_config_family_omp(), save_config_nvt_omp(), save_my_settings_omp(), save_report_format_omp(), save_task_omp(), and save_user_omp().

778 {
779  param_t *param;
780  param = g_hash_table_lookup (params, name);
781  return param ? param->values : NULL;
782 }
Request parameter.
Definition: gsad_base.h:146
params_t * values
Definition: gsad_base.h:151
Here is the caller graph for this function:

◆ set_chroot_state()

void set_chroot_state ( int  state)

Sets the chroot state.

Parameters
[in]stateThe new chroot state.

Definition at line 130 of file gsad_base.c.

References chroot_state.

131 {
132  chroot_state = state;
133 }
int chroot_state
Whether chroot is used.
Definition: gsad.c:375

◆ set_http_only()

void set_http_only ( int  state)

Sets the http_only state.

Parameters
[in]stateThe new http_only state.

Definition at line 152 of file gsad_base.c.

153 {
154  http_only = state;
155 }

◆ set_language_code()

void set_language_code ( gchar **  lang,
const gchar *  language 
)

Set language code of user.

Caller must handle locking.

Parameters
[in]langLanguage slot. May be a language name or code
[in]languageUser Interface Language.

Definition at line 218 of file gsad_base.c.

219 {
220  if (language == NULL || strcmp (language, "Browser Language") == 0)
221  *lang = NULL;
222  else if (strcmp (language, "Chinese") == 0)
223  *lang = g_strdup ("zh_CN");
224  else if (strcmp (language, "English") == 0)
225  *lang = g_strdup ("en");
226  else if (strcmp (language, "German") == 0)
227  *lang = g_strdup ("de");
228  else
229  *lang = g_strdup (language);
230 }

◆ vendor_version_get()

const gchar* vendor_version_get ( )

Get the vendor version.

Returns
Vendor version.

Definition at line 175 of file gsad_base.c.

References vendor_version.

Referenced by gsad_message(), and login_xml().

176 {
177  return vendor_version ? vendor_version : "";
178 }
gchar * vendor_version
Version from vendor, or NULL.
Definition: gsad_base.c:67
Here is the caller graph for this function:

◆ vendor_version_set()

void vendor_version_set ( const gchar *  version)

Set the vendor version.

Parameters
[in]versionVendor version.

Definition at line 163 of file gsad_base.c.

References vendor_version.

164 {
165  g_free (vendor_version);
166  vendor_version = g_strdup (version);
167 }
gchar * vendor_version
Version from vendor, or NULL.
Definition: gsad_base.c:67

◆ xsl_transform()

char* xsl_transform ( const char *  xml_text,
cmd_response_data_t response_data 
)

XSL Transformation.

Does the transformation from XML to HTML applying omp.xsl.

Parameters
[in]xml_textThe XML text to transform.
[out]response_dataExtra data return for the HTTP response.
Returns
HTML output from XSL transformation.

Definition at line 445 of file gsad_base.c.

References XSL_PATH, and xsl_transform_with_stylesheet().

Referenced by gsad_message(), and logout().

446 {
447  return xsl_transform_with_stylesheet (xml_text, XSL_PATH, response_data);
448 }
char * xsl_transform_with_stylesheet(const char *xml_text, const char *xsl_stylesheet, cmd_response_data_t *response_data)
XSL Transformation.
Definition: gsad_base.c:281
#define XSL_PATH
Location of XSL file.
Definition: gsad_base.c:35
Here is the call graph for this function:
Here is the caller graph for this function:

◆ xsl_transform_with_stylesheet()

char* xsl_transform_with_stylesheet ( const char *  xml_text,
const char *  xsl_stylesheet,
cmd_response_data_t response_data 
)

XSL Transformation.

Transforms XML by applying a given XSL stylesheet, usually into HTML.

Parameters
[in]xml_textThe XML text to transform.
[in]xsl_stylesheetThe file name of the XSL stylesheet to use.
[out]response_dataExtra data return for the HTTP response.
Returns
HTML output from XSL transformation.

Definition at line 281 of file gsad_base.c.

References FAIL_HTML, cmd_response_data_t::http_status_code, and register_i18n_ext_module().

Referenced by xsl_transform().

284 {
285 #ifdef USE_LIBXSLT
286  xsltStylesheetPtr cur = NULL;
287  xmlDocPtr doc, res;
288  xmlChar *doc_txt_ptr = NULL;
289  int doc_txt_len;
290 
291  g_debug ("xsl stylesheet: [%s]\n", xml_text);
292  g_debug ("text to transform: [%s]\n", xml_text);
293 
294  exsltRegisterAll ();
296 
297  xmlSubstituteEntitiesDefault (1);
298  xmlLoadExtDtdDefaultValue = 1;
299  cur = xsltParseStylesheetFile ((const xmlChar *) xsl_stylesheet);
300  if (cur == NULL)
301  {
302  g_warning ("Failed to parse stylesheet %s", xsl_stylesheet);
303  if (response_data)
304  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
305  return g_strdup (FAIL_HTML);
306  }
307 
308  doc = xmlParseMemory (xml_text, strlen (xml_text));
309  if (doc == NULL)
310  {
311  g_warning ("Failed to parse stylesheet %s", xsl_stylesheet);
312  xsltFreeStylesheet (cur);
313  if (response_data)
314  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
315  return g_strdup (FAIL_HTML);
316  }
317 
318  res = xsltApplyStylesheet (cur, doc, NULL);
319  if (res == NULL)
320  {
321  g_warning ("Failed to apply stylesheet %s", xsl_stylesheet);
322  xsltFreeStylesheet (cur);
323  xmlFreeDoc (doc);
324  if (response_data)
325  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
326  return g_strdup (FAIL_HTML);
327  }
328  xmlFreeDoc (doc);
329 
330  if (xsltSaveResultToString (&doc_txt_ptr, &doc_txt_len, res, cur) < 0)
331  {
332  g_warning ("Failed to store transformation result.");
333  xsltFreeStylesheet (cur);
334  xmlFreeDoc (res);
335  if (response_data)
336  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
337  return g_strdup (FAIL_HTML);
338  }
339 
340  xsltFreeStylesheet (cur);
341  xmlFreeDoc (res);
342  malloc_trim (0);
343 
344  return (char *) doc_txt_ptr;
345 #else
346  int content_fd;
347  gint exit_status;
348  gchar **cmd;
349  gboolean success = TRUE;
350  gchar *standard_out = NULL;
351  gchar *standard_err = NULL;
352  char content_file[] = "/tmp/gsa_xsl_transform_XXXXXX";
353  GError *error;
354 
355  /* Create a temporary file. */
356 
357  content_fd = mkstemp (content_file);
358  if (content_fd == -1)
359  {
360  g_warning ("%s: mkstemp: %s\n", __FUNCTION__, strerror (errno));
361  return g_strdup (FAIL_HTML);
362  }
363 
364  /* Copy text to temporary file. */
365 
366  g_debug ("text to transform: [%s]\n", xml_text);
367 
368  error = NULL;
369  g_file_set_contents (content_file, xml_text, strlen (xml_text), &error);
370  if (error)
371  {
372  g_warning ("%s", error->message);
373  g_error_free (error);
374  unlink (content_file);
375  close (content_fd);
376  return g_strdup (FAIL_HTML);
377  }
378 
379  /* Run xsltproc on the temporary file. */
380 
381  cmd = (gchar **) g_malloc (4 * sizeof (gchar *));
382  cmd[0] = g_strdup ("xsltproc");
383  cmd[1] = g_strdup (xsl_stylesheet);
384  cmd[2] = g_strdup (content_file);
385  cmd[3] = NULL;
386  g_debug ("%s: Spawning in parent dir: %s %s %s\n",
387  __FUNCTION__, cmd[0], cmd[1], cmd[2]);
388  if ((g_spawn_sync (NULL,
389  cmd,
390  NULL, /* Environment. */
391  G_SPAWN_SEARCH_PATH,
392  NULL, /* Setup function. */
393  NULL,
394  &standard_out,
395  &standard_err,
396  &exit_status,
397  NULL)
398  == FALSE)
399  || (WIFEXITED (exit_status) == 0)
400  || WEXITSTATUS (exit_status))
401  {
402  g_debug ("%s: failed to transform the xml: %d (WIF %i, WEX %i)",
403  __FUNCTION__,
404  exit_status,
405  WIFEXITED (exit_status),
406  WEXITSTATUS (exit_status));
407  g_debug ("%s: stderr: %s\n", __FUNCTION__, standard_err);
408  g_debug ("%s: stdout: %s\n", __FUNCTION__, standard_out);
409  success = FALSE;
410  }
411 
412  /* Cleanup. */
413 
414  g_free (cmd[0]);
415  g_free (cmd[1]);
416  g_free (cmd[2]);
417  g_free (cmd);
418  g_free (standard_err);
419 
420  unlink (content_file);
421  close (content_fd);
422 
423  if (success)
424  return standard_out;
425 
426  g_free (standard_out);
427 
428  if (response_data)
429  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
430  return g_strdup (FAIL_HTML);
431 #endif
432 }
#define FAIL_HTML
HTML returned when XSL transform fails.
Definition: gsad_base.c:262
void register_i18n_ext_module()
Register the i18n XSLT extension module.
Definition: xslt_i18n.c:533
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ label_name

gchar* label_name = NULL

Definition at line 69 of file gsad_base.c.

Referenced by label_name_get(), and label_name_set().

◆ vendor_version

gchar* vendor_version = NULL

Version from vendor, or NULL.

Definition at line 67 of file gsad_base.c.

Referenced by vendor_version_get(), and vendor_version_set().