* Copyright (c) 2020 Huawei Technologies Co.,Ltd.
*
* openGauss is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*
* policy_common.h
*
* IDENTIFICATION
* src/include/gs_policy/policy_common.h
*
* -------------------------------------------------------------------------
*/
#ifndef _GS_POLICY_COMMON_H
#define _GS_POLICY_COMMON_H
#include "nodes/parsenodes.h"
#include "nodes/plannodes.h"
#include <vector>
#include "postgres.h"
#include "gs_set.h"
#include "gs_map.h"
#include "gs_vector.h"
#include "pgaudit.h"
struct GsPolicyFQDN {
GsPolicyFQDN():m_value_schema(0), m_value_object(0), is_function(false){}
Oid m_value_schema;
Oid m_value_object;
gs_stl::gs_string m_value_object_attrib;
bool is_function;
};
struct GsPolicyLabel {
bool operator == (const GsPolicyLabel &arg) const;
bool operator < (const GsPolicyLabel& arg) const;
int operator - (const GsPolicyLabel& arg) const;
long long m_id;
gs_stl::gs_string m_name;
gs_stl::gs_string m_type;
gs_stl::gs_string m_data_value;
GsPolicyFQDN m_data_value_fqdn;
gs_stl::gs_string m_data_type;
};
struct GsPolicyLabelKey {
gs_stl::gs_string m_name;
gs_stl::gs_string m_type;
};
typedef gs_stl::gs_set<gs_stl::gs_string> policy_labelname_set;
typedef gs_stl::gs_set<Oid> policy_oid_set;
typedef gs_stl::gs_set<GsPolicyLabel> policy_labels_set;
typedef gs_stl::gs_map<gs_stl::gs_string, policy_labels_set> policy_labels_map;
typedef gs_stl::gs_set<gs_stl::gs_string> policy_label_tables_set;
extern void create_policy_label(CreatePolicyLabelStmt *stmt);
extern void load_existing_labels(Relation rel, policy_labels_map *existing_labels);
extern void alter_policy_label(AlterPolicyLabelStmt *stmt);
extern void drop_policy_label(DropPolicyLabelStmt *stmt);
extern bool VerifyLabelHasColumn(RangeVar *rel, GsPolicyFQDN *fqdn,
const gs_stl::gs_set<gs_stl::gs_string> *labels);
typedef bool(*ValidateBehaviourPtr)(const char *func_name, const char* func_parameters,
bool* invalid_params, bool is_audit);
extern PGDLLIMPORT ValidateBehaviourPtr validate_masking_behaviour_hook;
typedef bool (*LoadLabelsPtr)(bool);
extern PGDLLIMPORT LoadLabelsPtr load_labels_hook;
typedef void (*RelationBuildPtr)(Relation);
extern PGDLLIMPORT RelationBuildPtr RelationBuildRlsPolicies_hook;
typedef void(*GetRlsPoliciesPtr)(const Query *query, const RangeTblEntry *rte,
const Relation relation, List *&rlsQuals, List *&withCheckOptions,
int rtIndex, bool &hasRowSecurity, bool &hasSubLink);
extern PGDLLIMPORT GetRlsPoliciesPtr get_rls_policies_hook;
typedef void (*ReseThreadValuesPtr)();
extern THR_LOCAL PGDLLIMPORT ReseThreadValuesPtr reset_policy_thr_hook;
typedef bool (*LoadPoliciesPtr)(bool);
extern PGDLLIMPORT LoadPoliciesPtr load_rls_policies_hook;
extern PGDLLIMPORT LoadPoliciesPtr load_audit_policies_hook;
extern PGDLLIMPORT LoadPoliciesPtr load_masking_policies_hook;
extern PGDLLIMPORT LoadPoliciesPtr load_security_policies_hook;
typedef void (*LightUnifiedAuditExecutorPtr)(const Query *query);
extern THR_LOCAL PGDLLIMPORT LightUnifiedAuditExecutorPtr light_unified_audit_executor_hook;
typedef void (*OpFusionUnifiedAuditExecutorPtr)(const PlannedStmt *plannedStmt);
extern PGDLLIMPORT OpFusionUnifiedAuditExecutorPtr opfusion_unified_audit_executor_hook;
typedef void (*OpFusionUnifiedAuditFlushLogsPtr)(AuditResult audit_result);
extern PGDLLIMPORT OpFusionUnifiedAuditFlushLogsPtr opfusion_unified_audit_flush_logs_hook;
typedef bool (*LoadPolicyAccessPtr)(bool);
extern PGDLLIMPORT LoadPolicyAccessPtr load_policy_access_hook;
extern PGDLLIMPORT LoadPolicyAccessPtr load_masking_policy_actions_hook;
extern PGDLLIMPORT LoadPolicyAccessPtr load_security_access_hook;
typedef bool (*LoadPolicyPrivilegesPtr)(bool);
extern PGDLLIMPORT LoadPolicyPrivilegesPtr load_policy_privileges_hook;
extern PGDLLIMPORT LoadPolicyPrivilegesPtr load_security_privileges_hook;
typedef bool (*LoadPolicyFilterPtr)(bool);
extern PGDLLIMPORT LoadPolicyFilterPtr load_policy_filter_hook;
extern PGDLLIMPORT LoadPolicyFilterPtr load_masking_policy_filter_hook;
extern PGDLLIMPORT LoadPolicyFilterPtr load_security_filter_hook;
typedef bool (*IsMaskingHasObjPtr)(bool, const gs_stl::gs_string);
extern PGDLLIMPORT IsMaskingHasObjPtr isMaskingHasObj_hook;
typedef bool (*CheckPolicyPrivilegesForLabelPtr)(const policy_labels_map*);
extern PGDLLIMPORT CheckPolicyPrivilegesForLabelPtr check_audit_policy_privileges_for_label_hook;
typedef bool (*CheckPolicyAccessForLabelPtr)(const policy_labels_map*);
extern PGDLLIMPORT CheckPolicyAccessForLabelPtr check_audit_policy_access_for_label_hook;
typedef bool (*CheckPolicyActionsForLabelPtr)(const policy_labels_map*);
extern PGDLLIMPORT CheckPolicyActionsForLabelPtr check_masking_policy_actions_for_label_hook;
extern PGDLLIMPORT CheckPolicyActionsForLabelPtr check_rls_policy_actions_for_label_hook;
typedef void (*LoginUserPtr)(const char* , const char* , bool , bool );
extern THR_LOCAL PGDLLIMPORT LoginUserPtr user_login_hook;
typedef bool (*VerifyCopyCommandIsReparsed)(List*, const char*, gs_stl::gs_string&);
extern THR_LOCAL PGDLLIMPORT VerifyCopyCommandIsReparsed copy_need_to_be_reparse;
typedef bool (*IsRecompilePrepareStmtPtr)(const char *stmt_name);
extern PGDLLIMPORT IsRecompilePrepareStmtPtr recompile_prepare_stmt_hook;
typedef void (*IsInsidePrepareStmtPtr)(const char *stmt_name);
extern PGDLLIMPORT IsInsidePrepareStmtPtr prepare_stmt_state_hook;
typedef bool (*IsLabelExistPtr)(const char *label_name);
extern PGDLLIMPORT IsLabelExistPtr verify_label_hook;
typedef void (*InSideView)(bool);
extern PGDLLIMPORT InSideView query_from_view_hook;
typedef void (*GsSaveManagementEvent)(const char *message);
extern PGDLLIMPORT GsSaveManagementEvent gs_save_mng_event_hook;
typedef void (*GsSendManagementEvent)(AuditResult result_type);
extern PGDLLIMPORT GsSendManagementEvent gs_send_mng_event_hook;
typedef bool (*VerifyLabelsByPolicy)(const char* filter_tree, const policy_labelname_set *policy_labels,
Oid policyOid, gs_stl::gs_string *polname);
extern PGDLLIMPORT VerifyLabelsByPolicy gs_verify_labels_by_policy_hook;
bool get_files_list(const char *dir,std::vector<std::string>& files,const char *ext, int queue_size);
bool is_policy_enabled();
bool is_security_policy_relation(Oid table_oid);
#endif