Greenbone Security Assistant  7.0.0
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...
 
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

#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 235 of file gsad_base.c.

Referenced by xsl_transform_with_stylesheet().

#define G_LOG_DOMAIN   "gsad base"

GLib log domain.

Definition at line 62 of file gsad_base.c.

#define XSL_PATH   "gsad.xsl"

Location of XSL file.

Definition at line 35 of file gsad_base.c.

Referenced by xsl_transform().

Function Documentation

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 214 of file gsad_base.c.

Referenced by exec_omp_post(), gsad_message(), and handle_request().

215 {
216  struct tm *tm;
217 
218  tm = localtime (time);
219  if (tm == NULL
220  || (strftime (string,
221  199,
222  "%c %Z",
223  tm)
224  == 0))
225  {
226  string[0] = '\0';
227  return string;
228  }
229  return string;
230 }

Here is the caller graph for this function:

int get_chroot_state ( )

Gets the chroot state.

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

Definition at line 114 of file gsad_base.c.

References chroot_state.

Referenced by init_language_lists(), and register_i18n_ext_module().

115 {
116  return chroot_state;
117 }
int chroot_state
Whether chroot is used.
Definition: gsad.c:344

Here is the caller graph for this function:

int gsad_base_cleanup ( )

Base init.

Returns
0 success, -1 error.

Definition at line 99 of file gsad_base.c.

Referenced by gsad_cleanup().

100 {
101 #ifdef USE_LIBXSLT
102  xsltCleanupGlobals ();
103  xmlCleanupParser ();
104 #endif
105  return 0;
106 }

Here is the caller graph for this function:

int gsad_base_init ( )

Base init.

Returns
0 success, 1 XML needs thread support.

Definition at line 82 of file gsad_base.c.

Referenced by main().

83 {
84 #ifdef USE_LIBXSLT
85  if (!xmlHasFeature (XML_WITH_THREAD))
86  return 1;
87  /* Required by libxml for thread safety. */
88  xmlInitParser ();
89 #endif
90  return 0;
91 }

Here is the caller graph for this function:

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 440 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 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(), 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_permission(), edit_resource(), edit_scanner(), edit_tag(), edit_target(), edit_user(), empty_trashcan_omp(), exec_omp_get(), exec_omp_post(), export_omp_doc_omp(), export_preference_file_omp(), export_resource(), get_aggregate_omp(), get_feeds_omp(), get_info(), get_my_settings_omp(), get_one(), get_protocol_doc_omp(), get_system_reports_omp(), handle_request(), import_config_omp(), import_port_list_omp(), import_report_format_omp(), move_task_omp(), new_note(), new_override(), new_permission(), new_permissions(), 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().

443 {
444  gchar *xml, *message, *resp;
445  const char* xml_flag;
446 
447  if (credentials && credentials->params)
448  xml_flag = params_value (credentials->params, "xml");
449  else
450  xml_flag = NULL;
451 
452  if (function)
453  {
454  message = g_strdup_printf ("<gsad_response>"
455  "<title>%s: %s:%i (GSA %s)</title>"
456  "<message>%s</message>"
457  "<backurl>%s</backurl>"
458  "<token>%s</token>"
459  "</gsad_response>",
460  title,
461  function,
462  line,
463  GSAD_VERSION,
464  msg,
465  backurl ? backurl : "/omp?cmd=get_tasks",
466  credentials ? credentials->token : "");
467  }
468  else
469  {
470  message = g_strdup_printf ("<gsad_response>"
471  "<title>%s (GSA %s)</title>"
472  "<message>%s</message>"
473  "<backurl>%s</backurl>"
474  "<token>%s</token>"
475  "</gsad_response>",
476  title,
477  GSAD_VERSION,
478  msg,
479  backurl ? backurl : "/omp?cmd=get_tasks",
480  credentials ? credentials->token : "");
481  }
482 
483  if (credentials)
484  {
485  gchar *pre;
486  time_t now;
487  char ctime_now[200];
488 
489  now = time (NULL);
490  ctime_r_strip_newline (&now, ctime_now);
491 
492  pre = g_markup_printf_escaped
493  ("<envelope>"
494  "<version>%s</version>"
495  "<vendor_version>%s</vendor_version>"
496  "<token>%s</token>"
497  "<time>%s</time>"
498  "<login>%s</login>"
499  "<role>%s</role>"
500  "<i18n>%s</i18n>"
501  "<charts>%i</charts>"
502  "<client_address>%s</client_address>",
503  GSAD_VERSION,
505  credentials->token,
506  ctime_now,
507  credentials->username,
508  credentials->role,
509  credentials->language,
510  credentials->charts,
511  credentials->client_address);
512  xml = g_strdup_printf ("%s%s"
513  "<capabilities>%s</capabilities>"
514  "</envelope>",
515  pre,
516  message,
517  credentials->capabilities);
518  g_free (pre);
519  }
520  else
521  {
522  xml = g_strdup (message);
523  }
524  g_free (message);
525 
526  if (xml_flag && strcmp (xml_flag, "0"))
527  return xml;
528 
529  resp = xsl_transform (xml, response_data);
530  if (resp == NULL)
531  {
532  resp = g_strdup ("<html>"
533  "<body>"
534  "An internal server error has occurred during XSL"
535  " transformation."
536  "</body>"
537  "</html>");
538  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
539  }
540  g_free (xml);
541  return resp;
542 }
char * capabilities
Capabilites of manager.
Definition: gsad_base.h:76
char * username
Name of user.
Definition: gsad_base.h:69
char * client_address
Client'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:682
char * role
User's role.
Definition: gsad_base.h:71
const gchar * vendor_version_get()
Get the vendor version.
Definition: gsad_base.c:148
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:418
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:214

Here is the call graph for this function:

const gchar* label_name_get ( )

Get the login label name.

Returns
login label name

Definition at line 159 of file gsad_base.c.

References label_name.

Referenced by login_xml().

160 {
161  return label_name;
162 }
gchar * label_name
Definition: gsad_base.c:69

Here is the caller graph for this function:

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 172 of file gsad_base.c.

References label_name.

Referenced by main().

173 {
174  if (!g_regex_match_simple ("^[a-zA-Z0-9\\-_\\.\\:]+$", name, 0, 0))
175  return -1;
176 
177  g_free (label_name);
178  label_name = g_strdup (name);
179  return 0;
180 }
gchar * label_name
Definition: gsad_base.c:69

Here is the caller graph for this function:

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 557 of file gsad_base.c.

References label_name_get(), and vendor_version_get().

Referenced by exec_omp_post(), and handle_request().

559 {
560  GString *xml;
561  const gchar *label = label_name_get();
562 
563  xml = g_string_new ("");
564  xml_string_append (xml,
565  "<login_page>"
566  "<version>%s</version>"
567  "<vendor_version>%s</vendor_version>"
568  "<token>%s</token>"
569  "<time>%s</time>",
570  GSAD_VERSION,
572  token ? token : "",
573  time);
574 
575  if (label)
576  xml_string_append(xml,
577  "<label>%s</label>",
578  label);
579  if (message)
580  xml_string_append (xml,
581  "<message>%s</message>",
582  message);
583  if (url)
584  xml_string_append (xml,
585  "<url>%s</url>",
586  url);
587  if (i18n)
588  xml_string_append (xml,
589  "<i18n>%s</i18n>",
590  i18n);
591  if (guest)
592  xml_string_append (xml,
593  "<guest><username>%s</username></guest>",
594  guest);
595  g_string_append (xml, "</login_page>");
596 
597  return g_string_free (xml, FALSE);
598 }
const gchar * vendor_version_get()
Get the vendor version.
Definition: gsad_base.c:148
const gchar * label_name_get()
Get the login label name.
Definition: gsad_base.c:159

Here is the call graph for this function:

Here is the caller graph for this function:

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 779 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(), clone_omp(), create_agent_omp(), create_alert_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_port_list_omp(), create_role_omp(), create_scanner_omp(), create_schedule_omp(), create_tag_omp(), create_target_omp(), create_task_omp(), create_user_omp(), delete_asset_omp(), get_info(), import_report_format_omp(), params_append_bin(), and process_bulk_omp().

780 {
781  param_t *param;
782 
783  if (name == NULL)
784  name = "";
785  if (value == NULL)
786  value = "";
787 
788  param = g_malloc0 (sizeof (param_t));
789  param->valid = 0;
790  param->valid_utf8 = 0;
791  param->value = g_strdup (value);
792  param->value_size = strlen (value);
793  param->array_len = 0;
794  g_hash_table_insert (params, g_strdup (name), param);
795  return param;
796 }
gchar * value
Definition: gsad_base.h:146
int valid_utf8
Definition: gsad_base.h:151
int value_size
Definition: gsad_base.h:152
int array_len
Definition: gsad_base.h:153
Request parameter.
Definition: gsad_base.h:144
int valid
Definition: gsad_base.h:150

Here is the caller graph for this function:

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 812 of file gsad_base.c.

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

814 {
815  param_t *param;
816  char *new_value;
817 
818  param = params_get (params, name);
819 
820  if (param == NULL)
821  {
822  char *value;
823 
824  value = g_malloc0 (chunk_size + 1);
825  memcpy (value + chunk_offset, chunk_data, chunk_size);
826 
827  param = params_add (params, name, "");
828  g_free (param->value);
829  param->value = value;
830  param->value_size = chunk_size;
831  return param;
832  }
833 
834  new_value = realloc (param->value,
835  param->value_size + chunk_size + 1);
836  if (new_value == NULL)
837  return NULL;
838  param->value = new_value;
839  memcpy (param->value + chunk_offset,
840  chunk_data,
841  chunk_size);
842  param->value[chunk_offset + chunk_size] = '\0';
843  param->value_size += chunk_size;
844 
845  return param;
846 }
gchar * value
Definition: gsad_base.h:146
param_t * params_get(params_t *params, const char *name)
Get param.
Definition: gsad_base.c:650
int value_size
Definition: gsad_base.h:152
Request parameter.
Definition: gsad_base.h:144
param_t * params_add(params_t *params, const char *name, const char *value)
Add a param.
Definition: gsad_base.c:779

Here is the call graph for this function:

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 732 of file gsad_base.c.

References param::filename.

Referenced by create_agent_omp().

733 {
734  param_t *param;
735  param = g_hash_table_lookup (params, name);
736  return param ? param->filename : NULL;
737 }
gchar * filename
Definition: gsad_base.h:148
Request parameter.
Definition: gsad_base.h:144

Here is the caller graph for this function:

void params_free ( params_t params)

Make a params.

Parameters
[in]paramsParams.

Definition at line 635 of file gsad_base.c.

Referenced by free_resources().

636 {
637  if (params)
638  g_hash_table_destroy (params);
639 }

Here is the caller graph for this function:

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 650 of file gsad_base.c.

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

651 {
652  param_t *param;
653  param = g_hash_table_lookup (params, name);
654  return param;
655 }
Request parameter.
Definition: gsad_base.h:144

Here is the caller graph for this function:

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 666 of file gsad_base.c.

Referenced by bulk_delete_omp(), clone_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(), exec_omp_get(), exec_omp_post(), 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().

667 {
668  param_t *param;
669  param = g_hash_table_lookup (params, name);
670  return param ? 1 : 0;
671 }
Request parameter.
Definition: gsad_base.h:144

Here is the caller graph for this function:

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 858 of file gsad_base.c.

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

860 {
861  return g_hash_table_iter_next (iterator, (gpointer*) name, (gpointer*) param);
862 }

Here is the caller graph for this function:

params_t* params_new ( )

Make a params.

Returns
Freshly allocated params. Free with params_free.

Definition at line 624 of file gsad_base.c.

Referenced by exec_omp_get(), handle_request(), and redirect_handler().

625 {
626  return g_hash_table_new_full (g_str_hash, g_str_equal, g_free, param_free);
627 }

Here is the caller graph for this function:

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 716 of file gsad_base.c.

References param::original_value.

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

717 {
718  param_t *param;
719  param = g_hash_table_lookup (params, name);
720  return param ? param->original_value : NULL;
721 }
gchar * original_value
Definition: gsad_base.h:147
Request parameter.
Definition: gsad_base.h:144

Here is the caller graph for this function:

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 764 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().

765 {
766  param_t *param;
767  param = g_hash_table_lookup (params, name);
768  return param ? param->valid : 0;
769 }
Request parameter.
Definition: gsad_base.h:144
int valid
Definition: gsad_base.h:150

Here is the caller graph for this function:

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 682 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(), exec_omp_get(), exec_omp_post(), export_omp_doc_omp(), export_preference_file_omp(), export_resource(), get_aggregate_omp(), get_info(), get_one(), get_result_omp(), get_system_report_omp(), get_system_reports_omp(), gsad_message(), handle_request(), import_config_omp(), import_port_list_omp(), import_report_format_omp(), move_task_omp(), new_note(), new_override(), new_permissions(), 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().

683 {
684  param_t *param;
685  param = g_hash_table_lookup (params, name);
686  return param ? param->value : NULL;
687 }
gchar * value
Definition: gsad_base.h:146
Request parameter.
Definition: gsad_base.h:144
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 698 of file gsad_base.c.

References param::value_size.

Referenced by create_agent_omp().

699 {
700  param_t *param;
701  param = g_hash_table_lookup (params, name);
702  return param ? param->value_size : -1;
703 }
int value_size
Definition: gsad_base.h:152
Request parameter.
Definition: gsad_base.h:144

Here is the caller graph for this function:

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 748 of file gsad_base.c.

References param::values.

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

749 {
750  param_t *param;
751  param = g_hash_table_lookup (params, name);
752  return param ? param->values : NULL;
753 }
Request parameter.
Definition: gsad_base.h:144
params_t * values
Definition: gsad_base.h:149

Here is the caller graph for this function:

void set_chroot_state ( int  state)

Sets the chroot state.

Parameters
[in]stateThe new chroot state.

Definition at line 125 of file gsad_base.c.

References chroot_state.

126 {
127  chroot_state = state;
128 }
int chroot_state
Whether chroot is used.
Definition: gsad.c:344
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 191 of file gsad_base.c.

Referenced by save_my_settings_omp(), user_add(), and user_set_language().

192 {
193  if (language == NULL || strcmp (language, "Browser Language") == 0)
194  *lang = NULL;
195  else if (strcmp (language, "Chinese") == 0)
196  *lang = g_strdup ("zh_CN");
197  else if (strcmp (language, "English") == 0)
198  *lang = g_strdup ("en");
199  else if (strcmp (language, "German") == 0)
200  *lang = g_strdup ("de");
201  else
202  *lang = g_strdup (language);
203 }

Here is the caller graph for this function:

const gchar* vendor_version_get ( )

Get the vendor version.

Returns
Vendor version.

Definition at line 148 of file gsad_base.c.

References vendor_version.

Referenced by gsad_message(), handle_request(), and login_xml().

149 {
150  return vendor_version ? vendor_version : "";
151 }
gchar * vendor_version
Version from vendor, or NULL.
Definition: gsad_base.c:67

Here is the caller graph for this function:

void vendor_version_set ( const gchar *  version)

Set the vendor version.

Parameters
[in]versionVendor version.

Definition at line 136 of file gsad_base.c.

References vendor_version.

Referenced by main().

137 {
138  g_free (vendor_version);
139  vendor_version = g_strdup (version);
140 }
gchar * vendor_version
Version from vendor, or NULL.
Definition: gsad_base.c:67

Here is the caller graph for this function:

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 418 of file gsad_base.c.

References XSL_PATH, and xsl_transform_with_stylesheet().

Referenced by exec_omp_post(), gsad_message(), and handle_request().

419 {
420  return xsl_transform_with_stylesheet (xml_text, XSL_PATH, response_data);
421 }
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:254
#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:

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 254 of file gsad_base.c.

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

Referenced by handle_request(), and xsl_transform().

257 {
258 #ifdef USE_LIBXSLT
259  xsltStylesheetPtr cur = NULL;
260  xmlDocPtr doc, res;
261  xmlChar *doc_txt_ptr = NULL;
262  int doc_txt_len;
263 
264  g_debug ("xsl stylesheet: [%s]\n", xml_text);
265  g_debug ("text to transform: [%s]\n", xml_text);
266 
267  exsltRegisterAll ();
269 
270  xmlSubstituteEntitiesDefault (1);
271  xmlLoadExtDtdDefaultValue = 1;
272  cur = xsltParseStylesheetFile ((const xmlChar *) xsl_stylesheet);
273  if (cur == NULL)
274  {
275  g_warning ("Failed to parse stylesheet %s", xsl_stylesheet);
276  if (response_data)
277  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
278  return g_strdup (FAIL_HTML);
279  }
280 
281  doc = xmlParseMemory (xml_text, strlen (xml_text));
282  if (doc == NULL)
283  {
284  g_warning ("Failed to parse stylesheet %s", xsl_stylesheet);
285  xsltFreeStylesheet (cur);
286  if (response_data)
287  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
288  return g_strdup (FAIL_HTML);
289  }
290 
291  res = xsltApplyStylesheet (cur, doc, NULL);
292  if (res == NULL)
293  {
294  g_warning ("Failed to apply stylesheet %s", xsl_stylesheet);
295  xsltFreeStylesheet (cur);
296  xmlFreeDoc (doc);
297  if (response_data)
298  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
299  return g_strdup (FAIL_HTML);
300  }
301  xmlFreeDoc (doc);
302 
303  if (xsltSaveResultToString (&doc_txt_ptr, &doc_txt_len, res, cur) < 0)
304  {
305  g_warning ("Failed to store transformation result.");
306  xsltFreeStylesheet (cur);
307  xmlFreeDoc (res);
308  if (response_data)
309  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
310  return g_strdup (FAIL_HTML);
311  }
312 
313  xsltFreeStylesheet (cur);
314  xmlFreeDoc (res);
315  malloc_trim (0);
316 
317  return (char *) doc_txt_ptr;
318 #else
319  int content_fd;
320  gint exit_status;
321  gchar **cmd;
322  gboolean success = TRUE;
323  gchar *standard_out = NULL;
324  gchar *standard_err = NULL;
325  char content_file[] = "/tmp/gsa_xsl_transform_XXXXXX";
326  GError *error;
327 
328  /* Create a temporary file. */
329 
330  content_fd = mkstemp (content_file);
331  if (content_fd == -1)
332  {
333  g_warning ("%s: mkstemp: %s\n", __FUNCTION__, strerror (errno));
334  return g_strdup (FAIL_HTML);
335  }
336 
337  /* Copy text to temporary file. */
338 
339  g_debug ("text to transform: [%s]\n", xml_text);
340 
341  error = NULL;
342  g_file_set_contents (content_file, xml_text, strlen (xml_text), &error);
343  if (error)
344  {
345  g_warning ("%s", error->message);
346  g_error_free (error);
347  unlink (content_file);
348  close (content_fd);
349  return g_strdup (FAIL_HTML);
350  }
351 
352  /* Run xsltproc on the temporary file. */
353 
354  cmd = (gchar **) g_malloc (4 * sizeof (gchar *));
355  cmd[0] = g_strdup ("xsltproc");
356  cmd[1] = g_strdup (xsl_stylesheet);
357  cmd[2] = g_strdup (content_file);
358  cmd[3] = NULL;
359  g_debug ("%s: Spawning in parent dir: %s %s %s\n",
360  __FUNCTION__, cmd[0], cmd[1], cmd[2]);
361  if ((g_spawn_sync (NULL,
362  cmd,
363  NULL, /* Environment. */
364  G_SPAWN_SEARCH_PATH,
365  NULL, /* Setup function. */
366  NULL,
367  &standard_out,
368  &standard_err,
369  &exit_status,
370  NULL)
371  == FALSE)
372  || (WIFEXITED (exit_status) == 0)
373  || WEXITSTATUS (exit_status))
374  {
375  g_debug ("%s: failed to transform the xml: %d (WIF %i, WEX %i)",
376  __FUNCTION__,
377  exit_status,
378  WIFEXITED (exit_status),
379  WEXITSTATUS (exit_status));
380  g_debug ("%s: stderr: %s\n", __FUNCTION__, standard_err);
381  g_debug ("%s: stdout: %s\n", __FUNCTION__, standard_out);
382  success = FALSE;
383  }
384 
385  /* Cleanup. */
386 
387  g_free (cmd[0]);
388  g_free (cmd[1]);
389  g_free (cmd[2]);
390  g_free (cmd);
391  g_free (standard_err);
392 
393  unlink (content_file);
394  close (content_fd);
395 
396  if (success)
397  return standard_out;
398 
399  g_free (standard_out);
400 
401  if (response_data)
402  response_data->http_status_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
403  return g_strdup (FAIL_HTML);
404 #endif
405 }
#define FAIL_HTML
HTML returned when XSL transform fails.
Definition: gsad_base.c:235
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

gchar* label_name = NULL

Definition at line 69 of file gsad_base.c.

Referenced by label_name_get(), and label_name_set().

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().