Skip to content
API Documentation
BastionGuard™
BastionGuard-mailproxy.cpp File Reference

Go to the source code of this file.

Classes

struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::MailSignatureConfig
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::MailRelayProfile
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::MailSecurityConfig
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::SmtpSessionState
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::UploadStatus
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::ThunderbirdSmtpEntry
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::ThunderbirdIdentityEntry
struct  anonymous_namespace{BastionGuard-mailproxy.cpp}::SmtpIO

Namespaces

namespace  anonymous_namespace{BastionGuard-mailproxy.cpp}

Macros

#define _(s)

Functions

static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::trim (const std::string &s)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::to_lower (std::string s)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::normalize_newlines_to_crlf (std::string s)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::mail_json_path_user ()
static std::vector< std::string > anonymous_namespace{BastionGuard-mailproxy.cpp}::json_to_string_vector (const json &j)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::is_valid_ipv4 (const std::string &host)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::validate_mail_security_config (const MailSecurityConfig &cfg, std::string &err_out)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::load_mail_security_config (MailSecurityConfig &cfg, std::string &err_out)
static const MailRelayProfile * anonymous_namespace{BastionGuard-mailproxy.cpp}::select_profile_for_sender (const MailSecurityConfig &cfg, const std::string &from_email_raw)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::extract_header_value (const std::string &raw, const std::string &header_name)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::build_basic_signature_text (const MailSignatureConfig &sig)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::html_escape (const std::string &s)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::build_basic_signature_html (const MailSignatureConfig &sig, bool include_logo)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::thunderbird_base_dir ()
static std::map< std::string, std::string > anonymous_namespace{BastionGuard-mailproxy.cpp}::parse_profiles_ini (const std::string &path)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::find_default_thunderbird_profile_dir ()
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::parse_pref_line (const std::string &line, std::string &key, std::string &value)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::load_thunderbird_smtp_map (std::map< std::string, ThunderbirdSmtpEntry > &smtp_map, std::map< std::string, ThunderbirdIdentityEntry > &identity_map, std::string &err_out)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::import_thunderbird_profiles_into_config (MailSecurityConfig &cfg, std::string &err_out)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::has_header_separator (const std::string &raw)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::queue_dir_path ()
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::enqueue_failed_mail (const std::string &mail_from, const std::vector< std::string > &rcpt_to, const std::string &payload, const std::string &last_error)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::ensure_basic_headers_layout (const std::string &raw, const std::string &mail_from, const std::vector< std::string > &rcpt_to)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::split_headers_body (const std::string &entity, std::string &headers, std::string &body)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::extract_content_type_lower (const std::string &headers)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::extract_transfer_encoding_lower (const std::string &headers)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::is_supported_transfer_encoding (const std::string &cte)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::extract_boundary_param (const std::string &content_type_lower)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::is_boundary_line (const std::string &line, const std::string &boundary)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::is_closing_boundary_line (const std::string &line, const std::string &boundary)
static std::vector< std::string > anonymous_namespace{BastionGuard-mailproxy.cpp}::split_lines_keep_crlf (const std::string &s)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::fixed_signature_logo_path ()
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::read_file_binary (const std::string &path, std::string &out, std::string &err_out)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::base64_decode (const std::string &input)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::quoted_printable_decode (const std::string &input)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::base64_encode_wrapped (const std::string &input, size_t wrap=76)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::generate_boundary (const std::string &prefix)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::make_inline_logo_mime_part (const std::string &png_base64)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::wrap_html_with_inline_logo_related (const std::string &html_entity_in, const MailSignatureConfig &sig, std::string &html_entity_out, std::string &err_out)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::inject_signature_into_entity (const std::string &entity_in, const MailSignatureConfig &sig, std::string &entity_out, bool &injected_any, std::string &err_out, int depth=0)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::inject_signature_mandatory (const MailSecurityConfig &cfg, const MailRelayProfile &profile, const std::string &raw_message, std::string &out_message, std::string &err_out)
static size_t anonymous_namespace{BastionGuard-mailproxy.cpp}::payload_source (char *ptr, size_t size, size_t nmemb, void *userp)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::send_via_remote_smtp (const MailRelayProfile &profile, const std::string &mail_from, const std::vector< std::string > &rcpts, const std::string &raw_message, std::string &err_out)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::smtp_extract_path (const std::string &cmd, const std::string &prefix)
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::receive_data_block (const SmtpIO &io, std::string &out_data)
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::user_data_dir ()
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::tls_cert_path ()
static std::string anonymous_namespace{BastionGuard-mailproxy.cpp}::tls_key_path ()
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::generate_self_signed_cert (const std::string &cert_path, const std::string &key_path)
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::restore_thunderbird_smtp_from_backup ()
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::redirect_thunderbird_smtp_to_proxy (int proxy_port_plain, int proxy_port_submission)
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::install_cert_in_thunderbird (const std::string &cert_path)
static SSL_CTX * anonymous_namespace{BastionGuard-mailproxy.cpp}::create_tls_server_ctx ()
static bool anonymous_namespace{BastionGuard-mailproxy.cpp}::upgrade_to_tls (SmtpIO &io, SSL_CTX *tls_ctx)
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::reset_session (SmtpSessionState &st)
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::send_ehlo_capabilities (const SmtpIO &io, bool tls_active, bool can_starttls)
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::handle_client (int client_fd, sockaddr_storage client_addr, SSL_CTX *tls_ctx, bool implicit_tls_listener)
static int anonymous_namespace{BastionGuard-mailproxy.cpp}::create_server_socket (const std::string &host, int port, int *extra_fd=nullptr)
static void anonymous_namespace{BastionGuard-mailproxy.cpp}::on_signal (int)
static void accept_loop (int server_fd, SSL_CTX *tls_ctx, bool implicit_tls_listener)
int main ()

Variables

std::atomic< bool > anonymous_namespace{BastionGuard-mailproxy.cpp}::g_running {true}

Macro Definition Documentation

◆ _

#define _ ( s)
Value:
gettext(s)

Definition at line 47 of file BastionGuard-mailproxy.cpp.

Referenced by AboutPage::AboutPage(), AboutWindow::AboutWindow(), accept_loop(), SettingsWindow::activate_tab_by_name(), RestoreDeviceBox::add_boot_options(), BootOptionsBox::add_chk_reinstall_grub(), BootOptionsBox::add_chk_update_grub(), BootOptionsBox::add_chk_update_initramfs(), RsyncLogBox::add_combo(), SnapshotBackendBox::add_description(), RestoreDeviceBox::add_device_combo(), BackupDeviceBox::add_device_row(), RootGuardPage::add_installed_application_defaults(), CronTab::add_job(), SnapshotBackendBox::add_opt_btrfs(), SnapshotBackendBox::add_opt_rsync(), BackupBox::add_progress_area(), InotifyEngine::add_recursive(), RootGuardPage::add_rule_from_entry(), ScheduleBox::add_schedule_option(), CronTab::add_script_file(), RsyncLogBox::add_search_entry(), BackupDeviceBox::add_smb_row(), AurScan::addDynamicRootMonitor(), ScanPage::addInotifyRecursive(), AurScan::addMonitorRecursively(), ConnectionsPage::addOrUpdateDetailRow(), AlertWindow::AlertWindow(), AlertWindowRealtime::AlertWindowRealtime(), AntiPhishingEngine::AntiPhishingEngine(), AntiRansomEngine::AntiRansomEngine(), AntiRansomwarePage::AntiRansomwarePage(), BrowserProxy::apply(), FirewallRuleManager::apply(), ProxyConfig::apply(), UsersBox::apply_user_mode(), Backend::applyFirewallFromBlacklist(), Backend::applyFirewallFromPhishingBlacklist(), MainWindow::applyProtectionEnabled(), FirewallRuleManager::applyWithFirewalld(), FirewallRuleManager::applyWithUfw(), SnapshotRepo::auto_remove(), BankPage::auto_update_bank_list(), Device::automount_udisks(), Device::automount_udisks_iso(), SnapshotRepo::available(), Backend::Backend(), BackupBox::BackupBox(), BackupDeviceBox::BackupDeviceBox(), ClamdConfig::backupFile(), BackupFinishBox::BackupFinishBox(), BackupInProgressDialog::BackupInProgressDialog(), BackupPage::BackupPage(), BackupWindow::BackupWindow(), BankGuiWindow::BankGuiWindow(), BankPage::BankPage(), SettingsPage::boolText(), BootOptionsWindow::BootOptionsWindow(), PasswordDialog::build(), SettingsPage::build_antiphish_tab(), SettingsPage::build_antiransom_advanced_tab(), SettingsPage::build_antiransom_tab(), SettingsPage::build_clamav_db_tab(), BackupWindow::build_content(), RestoreWindow::build_content(), SettingsWindow::build_content(), SetupWizardWindow::build_content(), SettingsPage::build_email_security_tab(), BankGuiWindow::build_headerbar(), FirstRunServicesWindow::build_headerbar(), MainWindow::build_headerbar(), SecureGuiWindow::build_headerbar(), SettingsWindow::build_headerbar(), SnapshotRow::build_meta_text(), SettingsPage::build_options_tab(), BackupWindow::build_pages(), BastionGuard::wizard::WizardWindow::build_pages(), RestoreWindow::build_pages(), SettingsPage::build_proxy_bypass_tab(), USBScanPage::build_scan_report(), SettingsPage::build_secure_payments_tab(), SettingsPage::build_services_section(), BackupWindow::build_sidebar(), BastionGuard::wizard::WizardWindow::build_sidebar(), MainWindow::build_sidebar(), RestoreWindow::build_sidebar(), SettingsWindow::build_sidebar(), SettingsWindow::build_sidebar(), SetupWizardWindow::build_sidebar(), SettingsPage::build_system_services_tab(), VpnPage::build_tab_config(), VpnPage::build_tab_connection(), VpnPage::build_tab_killswitch(), SetupWizardWindow::build_timeshift_page(), BackupInProgressDialog::build_ui(), FirstRunServicesWindow::build_ui(), ImportDialog::build_ui(), SmbShareDialog::build_ui(), SnapshotBackendBox::build_ui(), SnapshotListBox::build_ui(), SnapshotRow::build_ui(), VpnPage::build_ui(), USBScanPage::build_usb_card(), SettingsPage::build_user_services_tab(), SettingsPage::build_whitelist_tab(), ConnectionsPage::buildAppTreeView(), BackupPage::buildBackupTab(), AboutPage::buildContent(), ConnectionsPage::buildDetailTreeView(), StatsPage::buildGrid(), BackupPage::buildGrubTab(), AlertDialog::buildHeaderBar(), LanguageDialog::buildHeaderBar(), MainWindow::buildHeaderBar(), BackupPage::buildLogSection(), MainWindow::buildSidebar(), ConnectionsPage::buildSparkline(), ConnectionsPage::buildToolbar(), RulesPage::buildToolbar(), RulesPage::buildTreeView(), AlertDialog::buildUI(), AppsPage::buildUI(), LanguageDialog::buildUI(), NetworkPage::buildUI(), PasswordImportDialog::buildUi(), PasswordManagerPage::buildUi(), PasswordVaultView::buildUi(), SettingsPage::buildUi(), RestoreDeviceBox::check_and_mount_devices(), Main::check_and_remove_timeshift_btrfs(), Main::check_and_repair_filesystems(), BackupDeviceBox::check_backup_location(), Main::check_btrfs_layout_system(), Main::check_btrfs_volume(), Main::check_dependencies(), AppConsole::check_if_admin(), AppGtk::check_if_admin(), MainWindow::check_if_deletion_running(), SnapshotRepo::check_status(), DashboardPage::check_updates_async(), AntiPhishingEngine::check_url(), WebProbe::check_url(), HibpProvider::checkEmail(), LeakCheckProvider::checkEmail(), BrowserProxy::chromium_set_policy(), Main::clean_logs(), SnapshotRepo::cleanup_symlink_dir(), ScanPage::cloudCheckMalwareBazaar(), ScanPage::cloudCheckMalwareBazaarWorker(), compile_yara_ruleset(), BastionGuard::wizard::WizardWindow::configure_browser_doh(), BastionGuard::wizard::WizardWindow::configure_dnsmasq(), configure_graphics_backend(), AppConsole::confirm_restore(), SettingsWindow::connect_signals(), ConnectionsPage::ConnectionsPage(), BankPage::copy_banklist_to_system(), anonymous_namespace{Quarantine.cpp}::copy_then_remove(), copy_to_final(), copy_token_to_user(), copy_with_pkexec(), AppLock::create(), BackupWindow::create_actions(), BootOptionsWindow::create_actions(), DeleteWindow::create_actions(), ExcludeListSummaryWindow::create_actions(), RestoreWindow::create_actions(), SetupWizardWindow::create_actions(), RsyncLogBox::create_filters(), create_log_popup(), ExcludeBox::create_pattern_row(), Main::create_pre_restore_snapshot_btrfs(), RsyncLogBox::create_progressbar(), Main::create_restore_scripts(), anonymous_namespace{Backend.cpp}::create_secure_firewall_input(), anonymous_namespace{BastionGuard-mailproxy.cpp}::create_server_socket(), Main::create_snapshot(), Main::create_snapshot_for_tag(), Main::create_snapshot_with_btrfs(), Main::create_snapshot_with_rsync(), SnapshotRepo::create_symlinks(), anonymous_namespace{BastionGuard-mailproxy.cpp}::create_tls_server_ctx(), UsersBox::create_user_row(), UpdatePage::createSourceRow(), CronTab::crontab_read_all(), DashboardPage::DashboardPage(), Main::delete_begin(), SnapshotRepo::delete_directory_thread(), MainWindow::delete_selected(), DeleteBox::delete_snapshots(), Main::delete_thread(), DeleteBox::DeleteBox(), DeleteFinishBox::DeleteFinishBox(), DeleteWindow::DeleteWindow(), detect_desktop_user(), detect_distro(), Main::detect_system_devices(), BastionGuard::wizard::WizardWindow::detect_webserver(), detect_webserver(), BackupDeviceBox::device_list_refresh(), TeeJee.FileSystem::dir_create(), TeeJee.FileSystem::dir_delete(), PacManager::disable_env_fallback(), PacManager::disable_gnome(), PacManager::disable_kde(), PacManager::disable_xfce(), ScanPage::disableAllMonitors(), RsyncLogBox::display_status(), do_accept(), DonatePage::DonatePage(), PacManager::enable_env_fallback(), PacManager::enable_gnome(), PacManager::enable_kde(), PacManager::enable_xfce(), ScanPage::enableAutoScanDownloads(), ScanPage::enableGlobalDownloadMonitor(), Backend::enablePhishAutoUpdate(), DelayedScanQueue::enqueue(), ensure_config_dir(), ensure_dir_exists(), ensure_dir_safe(), ensure_flag_dir(), ensure_log_file(), CaInstaller::ensure_trusted(), ensure_trusted_loaded(), ensure_trusted_loaded(), AlertApp::ensure_user_token(), Backend::ensureQuarantinePath(), ensureQuarantinePath(), ensureUserWrapperInstalled(), EstimateBox::EstimateBox(), ExcludeAppsBox::ExcludeAppsBox(), ExcludeBox::ExcludeBox(), ExcludeListSummaryWindow::ExcludeListSummaryWindow(), ExcludeMessageWindow::ExcludeMessageWindow(), CronTab::export(), TeeJee.FileSystem::file_copy(), TeeJee.FileSystem::file_delete(), TeeJee.FileSystem::file_line_count(), TeeJee.FileSystem::file_move(), TeeJee.FileSystem::file_read(), TeeJee.FileSystem::file_read_array(), TeeJee.FileSystem::file_write(), BastionGuard::wizard::WizardWindow::finish_execution(), FinishBox::FinishBox(), BrowserProxy::firefox_set_profile(), FirewallChoiceDialog::FirewallChoiceDialog(), Main::fix_crypttab_file(), Main::fix_fstab_file(), fmtSize(), SnapshotRepo::from_path(), BastionGuard::wizard::gen_cert_commands(), BastionGuard::wizard::gen_web_commands(), TlsIntercept::detail::generate_ca(), Device::get_block_devices_using_blkid(), TlsIntercept::detail::get_ca(), Main::get_restore_messages(), Main::get_space_needed_for_rsync_snapshot(), Backend::getClamonaccStatus(), Backend::getDbVersion(), Backend::getLastUpdateDate(), Quarantine::getQuarantinePath(), GoogleSafe::GoogleSafe(), TeeJee.GtkHelper::gtk_inputbox(), anonymous_namespace{BastionGuard-mailproxy.cpp}::handle_client(), handle_client(), ScanPage::handleInfectedFiles(), ScanPage::handleInfectedFileWithName(), ScanPage::handleInotifyFileEvent(), SnapshotRepo::has_btrfs_system(), SnapshotRepo::has_space(), AppConsole::help_message(), AppGtk::help_message(), IdentityLeakPage::IdentityLeakPage(), Main::import_timeshift_config_if_available(), ImportDialog::ImportDialog(), anonymous_namespace{RootGuardPage.cpp}::incident_title(), MainWindow::init_about_page(), ExcludeBox::init_actions(), UsersBox::init_btrfs_home_option(), MiscBox::init_date_format_option(), SettingsWindow::init_delayed(), ExcludeAppsBox::init_exclude_summary_link(), SnapshotRepo::init_from_device(), MainWindow::init_sidebar(), MainWindow::init_snapshots_page(), CustomMessageDialog::init_window(), AurScan::initialize(), Main::initialize_repo(), RestoreWindow::initialize_tab(), anonymous_namespace{BastionGuard-mailproxy.cpp}::inject_signature_into_entity(), anonymous_namespace{BastionGuard-mailproxy.cpp}::inject_signature_mandatory(), CronTab::install(), BastionGuard::wizard::WizardWindow::install_browser_policies(), BrowserProxy::install_ca_all_browsers(), install_ca_nss_user(), install_ca_system(), anonymous_namespace{BastionGuard-mailproxy.cpp}::install_cert_in_thunderbird(), TlsIntercept::detail::install_generated_ca(), BastionGuard::wizard::install_native_host(), BastionGuard::wizard::install_nftables_conf(), CaInstaller::install_nss_user(), BastionGuard::wizard::install_phishing_blacklist(), BastionGuard::wizard::install_system_ca(), CaInstaller::install_system_via_pkexec(), install_to_system_data(), Backend::installClamdIfMissing(), SmbMount::is_available(), BankOpener::is_payment_domain(), is_payment_domain(), SecureList::is_payment_domain(), BankOpener::is_trusted_domain(), is_trusted_domain(), label_for_menu_id(), ClamApp::launch_main_window(), launch_sandbox(), AppConsole::list_all_devices(), AppConsole::list_devices(), AppConsole::list_grub_devices(), AppConsole::list_snapshots(), listen_one(), LiveScanDialog::LiveScanDialog(), DomainFilter::load(), load_allowlist(), anonymous_namespace{bastionguard-firewall.cpp}::load_and_validate_ips(), Main::load_app_config(), load_blocklist(), load_config(), AboutPage::load_database_info(), DomainFilter::load_file(), AboutPage::load_license_text(), load_list_file(), anonymous_namespace{BastionGuard-mailproxy.cpp}::load_mail_security_config(), load_or_create_token(), load_payments_list_only(), load_picture_fixed(), PrivacyPage::load_privacy_state(), YaraEngine::load_rules(), load_samba_dirs(), load_style(), AlertApp::load_token(), AntiRansomEngine::load_yara_rules(), SettingsPage::loadAdvancedConfig(), loadCloudApiKeys(), ScanPage::loadCloudConfig(), PasswordImportDialog::loadFile(), SettingsPage::loadPhishLists(), SettingsPage::loadScannerConfig(), Backend::loadSMBCredentials(), Backend::loadWhitelist(), AntiRansomwarePage::loadYaraRules(), SettingsPage::loadYaraRules(), MalwareBazaar::lookupHash(), LeakMonitor::loop(), Device::luks_unlock(), Main::Main(), main(), main(), main(), MainWindow::MainWindow(), DashboardPage::make_card(), RootGuardPage::make_rule_editor(), TlsIntercept::detail::make_ssl_ctx_for_host(), PrivacyPage::manual_unlock_devices(), AppConsole::map_devices(), LiveScanDialog::mark_finished(), RootGuardPage::mark_rules_dirty(), MainWindow::mark_selected(), InotifyEngine::maybe_inspect_archive(), BankPage::merge_whitelist_into_banks_json(), Backend::mergeWhitelistSources(), monitor_loop(), PrivacyPage::monitor_loop(), SmbMount::mount(), USBScanPage::mount_partition(), Main::mount_target_devices(), Quarantine::move(), AlertWindow::move_to_quarantine(), AlertWindowRealtime::move_to_quarantine(), Backend::moveToQuarantine(), BackupDeviceBox::on_add_smb_share_clicked(), BankPage::on_add_whitelist_clicked(), PhishingCheckCard::on_analyze_clicked(), PhishingPage::on_analyze_requested(), VpnPage::on_browse_clicked(), MainWindow::on_close_request(), MainWindow::on_close_request(), SmbShareDialog::on_connect_clicked(), VpnPage::on_connect_clicked(), VpnPage::on_disconnect_clicked(), BastionGuard::wizard::WizardWindow::on_finish(), VpnPage::on_generate_config_clicked(), VpnPage::on_generate_keys_clicked(), VpnPage::on_import_clicked(), VpnPage::on_killswitch_toggled(), MainWindow::on_language_changed(), BankPage::on_open_bank_clicked(), BankGuiWindow::on_open_clicked(), SecureGuiWindow::on_open_clicked(), DonatePage::on_open_donate(), RootGuardPage::on_protection_toggled(), BankPage::on_refresh_clicked(), PrivacyPage::on_refresh_clicked(), LocalWarningServer::on_request(), ImportDialog::on_response(), RootGuardPage::on_snapshot(), PrivacyPage::on_toggle_privacy(), PasswordManagerPage::onAddClicked(), SambaPage::onAddDir(), SettingsPage::onAddPath(), SimpleHandler::OnAfterCreated(), SettingsPage::onAntiphishToggled(), SettingsPage::onAntiransomToggled(), ScanPage::onAurPkgbuildDetected(), SimpleHandler::OnBeforeBrowse(), SimpleHandler::OnBeforeClose(), BackupPage::onBuildRecovery(), SimpleHandler::OnCertificateError(), IdentityLeakPage::onCheckClicked(), IdentityLeakPage::onCheckPasswordClicked(), AntiRansomwarePage::onChooseFile(), PasswordImportDialog::onChooseFile(), ScanPage::onChooseFile(), ScanPage::onChooseFileFinish(), AntiRansomwarePage::onChooseFolder(), ScanPage::onChooseFolder(), ScanPage::onChooseFolderFinish(), RulesPage::onCreateRule(), MainWindow::onDaemonAlert(), MainWindow::onDaemonConnected(), MainWindow::onDaemonDisconnected(), PasswordManagerPage::onDeleteAllClicked(), PasswordManagerPage::onDeleteEntry(), PasswordManagerPage::onEditEntry(), PasswordVaultView::onExportClicked(), PasswordImportDialog::onImportClicked(), PasswordManagerPage::onImportClicked(), PasswordImportDialog::onImportDone(), BackupPage::onInstallGrub(), PasswordManagerPage::onLockClicked(), AntiRansomwarePage::onManualScan(), IdentityLeakPage::onMonitorToggled(), MainWindow::onNewConnection(), PasswordImportDialog::onProgressTick(), SettingsPage::onQuarantineClicked(), SettingsPage::onRealtimeToggled(), PasswordManagerPage::onRefreshClicked(), BackupPage::onRemoveGrub(), PasswordManagerPage::onRevealEntry(), UpdatePage::onSaneAutoToggled(), SettingsPage::onSave(), IdentityLeakPage::onSaveHibpApi(), IdentityLeakPage::onSaveLeakCheckApi(), UpdatePage::onSaveSourcesClicked(), SambaPage::onScanNow(), UpdatePage::onServiceToggled(), ConnectionsPage::onSparkTick(), ScanPage::onStartScan(), AlertDialog::onTick(), IdentityLeakPage::onToggleApiVisibility(), IdentityLeakPage::onToggleLeakCheckApiVisibility(), PasswordManagerPage::onUnlockClicked(), UpdatePage::onUpdateClicked(), PasswordManagerPage::onVaultViewClicked(), MainWindow::onVerdict(), SecurePopupWindowDelegate::OnWindowCreated(), LeakDatabase::open(), SecureBrowser::open(), BankPage::open_bank_in_sandbox(), SecureList::open_if_allowed(), BankOpener::open_if_trusted(), anonymous_namespace{bastionguard-firewall.cpp}::open_input_securely(), RsyncLogBox::open_log(), SecureBrowser::open_notify(), open_notify_window(), SecureList::open_system_browser(), parse_args(), AppConsole::parse_arguments(), AppGtk::parse_arguments(), RsyncTask::parse_log(), RsyncLogBox::parse_log_file(), PasswordImportDialog::PasswordImportDialog(), PasswordManagerPage::PasswordManagerPage(), PasswordSearchRow::PasswordSearchRow(), PasswordVaultView::PasswordVaultView(), anonymous_namespace{RootGuardPage.cpp}::path_resolution_text(), BackupBox::pause(), persistQuarantinePath(), PhishingCheckCard::PhishingCheckCard(), PhishingPage::PhishingPage(), PasswordVaultView::populate(), BankPage::populate_bank_list(), PasswordImportDialog::populatePreview(), SnapshotRepo::print_status(), PrivacyPage::PrivacyPage(), AntiRansomwarePage::processLogLine(), QuarantinePage::QuarantinePage(), Main::query_subvolume_id(), Main::query_subvolume_info(), Main::query_subvolume_quota(), read_current_ports(), anonymous_namespace{BastionGuard-mailproxy.cpp}::read_file_binary(), read_last_lines(), NtfsRecoveryImpl::read_mft_record_from_mirror(), AppConsole::read_stdin_device(), read_webports_conf(), ScanPage::readOutput(), NetworkPage::rebuildMapMarkers(), NtfsRecoveryImpl::recover(), anonymous_namespace{RootGuardPage.cpp}::recovery_note(), anonymous_namespace{BastionGuard-mailproxy.cpp}::redirect_thunderbird_smtp_to_proxy(), reexec_inside_bwrap_with_custom_dns(), BackupDeviceBox::refresh(), FinishBox::refresh(), SettingsPage::refresh_clamav_db_list(), BootOptionsBox::refresh_cmb_grub_dev(), VpnPage::refresh_public_ip(), VpnPage::refresh_state_ui(), SetupWizardWindow::refresh_timeshift_page(), SettingsPage::refreshAntiransomRules(), QuarantinePage::refreshList(), SettingsPage::refreshPhishLists(), SettingsPage::refreshState(), MainWindow::refreshSystemIntegrationStatus(), Backend::reload_dnsmasq(), bsc::service::DaemonService::reload_firewall(), Quarantine::remove(), Subvolume::remove(), SnapshotRepo::remove_all(), Snapshot::remove_btrfs(), ExcludeBox::remove_clicked(), RootGuardPage::remove_event(), SnapshotRepo::remove_invalid(), CronTab::remove_job(), SnapshotRepo::remove_marked_for_deletion(), Snapshot::remove_rsync(), CronTab::remove_script_file(), RootGuardPage::remove_selected_rule(), SnapshotRepo::remove_untagged(), Backend::removeSambaDir(), RootGuardPage::render_events(), RootGuardPage::render_incidents(), anonymous_namespace{BankPage.cpp}::restart_cef_service_user(), restart_clamd(), BrowserProxy::restore(), MainWindow::restore(), ProxyConfig::restore(), Quarantine::restore(), RestoreBox::restore(), Subvolume::restore(), RootGuardPage::restore_event(), Main::restore_execute_btrfs(), Main::restore_execute_rsync(), Main::restore_other_console(), Main::restore_other_gui(), AppConsole::restore_snapshot(), Main::restore_snapshot(), RestoreBox::RestoreBox(), RestoreDeviceBox::RestoreDeviceBox(), RestoreExcludeBox::RestoreExcludeBox(), RestoreFinishBox::RestoreFinishBox(), RestoreSummaryBox::RestoreSummaryBox(), RestoreWindow::RestoreWindow(), RootGuardPage::RootGuardPage(), RsyncLogWindow::RsyncLogWindow(), AntiPhishingEngine::run(), AntiRansomEngine::run(), DelayedScanQueue::run(), FirewallRuleManager::run(), InotifyEngine::run(), LeakCheckWorker::run(), BastionGuard::wizard::run_all_elevated_steps(), USBScanPage::run_clamdscan_async(), BastionGuard::wizard::WizardWindow::run_enable_user_agents(), BastionGuard::wizard::WizardWindow::run_locale_setup_pre(), BastionGuard::wizard::WizardWindow::run_net_setup(), run_phishing_updater_script(), PrivacyPage::run_privacy_script_async(), run_single_directory_scan(), run_single_file_scan(), SetupWizardWindow::run_timeshift_import(), BastionGuard::wizard::run_wizard_setup(), BackupPage::runAsyncStreaming(), SaneSecurityUpdater::runHeadless(), AntiRansomwarePage::runYaraOnPath(), SambaPage::SambaPage(), Main::save_app_config(), RootGuardPage::save_application_rules(), save_config(), PrivacyPage::save_privacy_state(), SettingsPage::saveAdvancedConfig(), SettingsPage::saveAllowlistUI(), ScanPage::saveCloudConfig(), SambaPage::saveConfig(), Backend::saveGoogleSafeConfig(), SettingsPage::saveScannerConfig(), Backend::saveSMBCredentials(), Backend::saveWhitelist(), ClamdConfig::saveWithBackup(), AntiRansomEngine::scan_file(), ScanPage::scanAurAuto(), AntiRansomwarePage::scanDirectoryRecursively(), ScanPage::scanFileAutomatically(), ScanPage::ScanPage(), AurScan::scanPKGBUILD(), ScanPromptWindow::ScanPromptWindow(), Backend::scanSambaDir(), ScheduleBox::ScheduleBox(), Backend::scheduleFirewallApply(), SecureGuiWindow::SecureGuiWindow(), AppConsole::select_grub_device(), AppConsole::select_snapshot(), AppConsole::select_snapshot_device(), send_alert_dbus(), send_archive_alert(), USBScanPage::send_dbus_alert(), send_device_added(), send_device_removed(), send_socket_alert(), anonymous_namespace{BastionGuard-mailproxy.cpp}::send_via_remote_smtp(), AntiRansomwarePage::sendAlert(), MainWindow::sendDesktopActivityState(), Backend::sendRansomwareAlert(), session_close(), session_close_if_pid(), Main::set_first_run_flag(), BastionGuard::wizard::WizardWindow::set_page(), DashboardPage::set_update_status(), Backend::setPhishingPort(), Backend::setSambaEnabled(), SettingsPage::SettingsPage(), SettingsPage::SettingsPage(), SettingsWindow::SettingsWindow(), PrivacyPage::setup_auto_refresh_toggle(), BastionGuard::wizard::setup_certificates(), BastionGuard::wizard::setup_firewall_ports(), Backend::setupAlertListener(), SetupWizardWindow::SetupWizardWindow(), PasswordManagerPage::setVaultState(), PrivacyPage::show_next_alert(), RootGuardPage::show_next_alert(), USBScanPage::show_scan_result(), SettingsPage::show_service_error_dialog(), show_service_error_dialog(), ScanPage::showAlertWindow(), ScanPage::showCloudPrivacyDisclaimer(), MainWindow::showDashboard(), ConnectionsPage::showDetailView(), PasswordVaultView::showEntryDetail(), MainWindow::showLanguageDialog(), IdentityLeakPage::showLeakCheckDisclaimer(), IdentityLeakPage::showPrivacyPopup(), Backend::smb_collect_files(), Backend::smb_collect_files_impl(), Backend::smb_copy_file(), Backend::smb_read_file_with_ctx(), SmbShareDialog::SmbShareDialog(), AntiRansomEngine::start(), LocalWarningServer::start(), Backend::start_antiphish(), Backend::start_antiransom(), AppConsole::start_application(), BankPage::start_auto_update_timer(), BastionGuard::wizard::WizardWindow::start_execution(), PrivacyPage::start_monitor_thread(), USBScanPage::start_monitor_thread(), PacManager::start_pacd_user(), PrivacyPage::start_privacy_daemon(), AlertApp::start_tcp_listener(), IdentityLeakPage::startMonitor(), AurScan::startMonitoring(), AntiRansomwarePage::startRealtimeLogReader(), StatsPage::StatsPage(), AntiRansomEngine::stop(), bsc::task::TaskRunner::stop(), LocalWarningServer::stop(), Backend::stop_antiphish(), Backend::stop_antiransom(), BankPage::stop_auto_update_timer(), PacManager::stop_pacd_user(), AurScan::stopMonitoring(), BackupBox::take_snapshot(), tb_import_profiles(), UpdatePage::testConnection(), Backend::testGoogleSafeKey(), Device::tooltip_text(), touch_flag_file(), BackupDeviceBox::try_change_device(), PrivacyPage::unblock_devices_local(), Device::unmount(), Main::unmount_device(), Device::unmount_udisks(), SnapshotBackendBox::update_description(), DashboardPage::update_from_logs(), USBScanPage::update_log_view(), BackupFinishBox::update_message(), DeleteFinishBox::update_message(), RestoreFinishBox::update_message(), BackupWindow::update_page_title(), RestoreWindow::update_page_title(), SetupWizardWindow::update_page_title(), Main::update_partitions(), update_ports_in_file(), PrivacyPage::update_process_list(), MainWindow::update_statusbar(), ScheduleBox::update_statusbar(), update_webserver_ports(), Backend::updateBankListFromURL(), UpdatePage::updateFromExtraSources(), QuarantinePage::updateMonitor(), UpdatePage::UpdatePage(), Backend::updatePhishLists(), BackupPage::updateRecoveryStatus(), UpdatePage::updateSaneSecurity(), Backend::updateSanesecurityDB(), NetworkPage::updateSummary(), Backend::updateYaraRules(), USBScanPage::USBScanPage(), UsersBox::UsersBox(), Main::validate_cmd_tags(), DeleteWindow::validate_current_tab(), anonymous_namespace{BastionGuard-mailproxy.cpp}::validate_mail_security_config(), MainWindow::view_snapshot_log(), VpnPage::VpnPage(), BastionGuard::wizard::WizardWindow::WizardWindow(), BastionGuard::wizard::WizardWindow::worker_run(), anonymous_namespace{BastionGuard-mailproxy.cpp}::wrap_html_with_inline_logo_related(), BastionGuard::wizard::WizardWindow::write_config_file(), Snapshot::write_control_file(), PrivacyPage::write_log(), write_log(), anonymous_namespace{wizard_setup.cpp}::write_temp_script_and_elevate(), write_temp_script_and_elevate(), yara_callback(), yara_callback_gui(), and PrivacyPage::~PrivacyPage().

Function Documentation

◆ accept_loop()

void accept_loop ( int server_fd,
SSL_CTX * tls_ctx,
bool implicit_tls_listener )
static

Definition at line 2547 of file BastionGuard-mailproxy.cpp.

2547 {
2548 while (g_running) {
2549 sockaddr_storage client_addr{};
2550 socklen_t len = sizeof(client_addr);
2551
2552 int client_fd = ::accept(server_fd, reinterpret_cast<sockaddr*>(&client_addr), &len);
2553 if (client_fd < 0) {
2554 if (!g_running) break;
2555 if (errno == EINTR) continue;
2556 std::cerr << _("[mailproxy] accept() fallita: ") << std::strerror(errno) << "\n";
2557 continue;
2558 }
2559
2560 std::thread([client_fd, client_addr, tls_ctx, implicit_tls_listener]() {
2561 handle_client(client_fd, client_addr, tls_ctx, implicit_tls_listener);
2562 }).detach();
2563 }
2564}
#define _(s)
static void handle_client(tcp::socket client, int argc, char **argv)

References _, accept_loop(), anonymous_namespace{BastionGuard-mailproxy.cpp}::g_running, and handle_client().

Referenced by accept_loop(), and main().

◆ main()

int main ( void )

Definition at line 2566 of file BastionGuard-mailproxy.cpp.

2566 {
2567 std::signal(SIGINT, on_signal);
2568 std::signal(SIGTERM, on_signal);
2569
2570 setlocale(LC_ALL, "");
2571 bindtextdomain("BastionGuard", "/usr/share/locale");
2572 textdomain("BastionGuard");
2573
2574 SSL_library_init();
2575 SSL_load_error_strings();
2576 OpenSSL_add_all_algorithms();
2577
2578 curl_global_init(CURL_GLOBAL_DEFAULT);
2579
2581 std::string cfg_err;
2582
2583 if (!load_mail_security_config(cfg, cfg_err)) {
2584 std::cerr << _("[mailproxy] JSON non disponibile/valido, provo import Thunderbird: ")
2585 << cfg_err << "\n";
2586
2587 MailSecurityConfig tb_cfg;
2588 tb_cfg.version = 2;
2589 tb_cfg.enabled = true;
2590 tb_cfg.scan_outgoing = true;
2591 tb_cfg.inject_signature = true;
2592 tb_cfg.local_host = "127.0.0.1";
2593 tb_cfg.local_port = 2525;
2594 tb_cfg.local_tls_port = 2465;
2595 tb_cfg.local_submission_port = 2587;
2596 tb_cfg.advertise_starttls = true;
2597 tb_cfg.enable_implicit_tls_listener = true;
2598
2599 std::string tb_err;
2600 if (!import_thunderbird_profiles_into_config(tb_cfg, tb_err)) {
2601 std::cerr << _("[mailproxy] import Thunderbird fallito: ") << tb_err
2602 << _(", avvio in modalità pass-through (nessun relay)\n");
2603 // Crea un profilo placeholder vuoto: il proxy ascolta ma non rilancia le mail
2604 MailRelayProfile placeholder;
2605 placeholder.id = "bastionguard";
2606 placeholder.label = "BastionGuard";
2607 tb_cfg.profiles.push_back(std::move(placeholder));
2608 tb_cfg.enabled = false;
2609 } else {
2610 std::cerr << _("[mailproxy] configurazione importata da Thunderbird\n");
2611 }
2612
2613 cfg = std::move(tb_cfg);
2614 }
2615
2616 const std::string host = cfg.local_host;
2617 const int plain_port = cfg.local_port;
2618 const int tls_port = cfg.local_tls_port;
2619 const int submission_port = cfg.local_submission_port;
2620
2622
2623 int plain_fd = -1;
2624 int submission_fd = -1;
2625 int tls_fd = -1;
2626 SSL_CTX* tls_ctx = nullptr;
2627
2628 int plain_fd6 = -1, submission_fd6 = -1, tls_fd6 = -1;
2629
2630 plain_fd = create_server_socket(host, plain_port, &plain_fd6);
2631 if (plain_fd < 0) {
2632 curl_global_cleanup();
2633 return 1;
2634 }
2635 std::cerr << _("[mailproxy] ascolto plain su ") << host << ":" << plain_port << "\n";
2636
2637 if (submission_port > 0) {
2638 submission_fd = create_server_socket(host, submission_port, &submission_fd6);
2639 if (submission_fd < 0) {
2640 std::cerr << _("[mailproxy] impossibile aprire porta submission ")
2641 << submission_port << " (verifica porta occupata)\n";
2642 } else {
2643 std::cerr << _("[mailproxy] ascolto submission su ")
2644 << host << ":" << submission_port << "\n";
2645 }
2646 }
2647
2649 tls_ctx = create_tls_server_ctx();
2650 if (!tls_ctx) {
2651 std::cerr << _("[mailproxy] TLS locale non disponibile; listener plain/submission attivi senza TLS\n");
2652 }
2653 }
2654
2655 if (tls_ctx && cfg.enable_implicit_tls_listener) {
2656 tls_fd = create_server_socket(host, tls_port, &tls_fd6);
2657 if (tls_fd < 0) {
2658 std::cerr << _("[mailproxy] impossibile aprire porta TLS ")
2659 << tls_port << " (verifica privilegi/porta occupata)\n";
2660 } else {
2661 std::cerr << _("[mailproxy] ascolto TLS su ")
2662 << host << ":" << tls_port << "\n";
2663 }
2664 }
2665
2666 if (!cfg.enabled) {
2667 std::cerr << _("[mailproxy] protezione email disabilitata: relay trasparente attivo\n");
2668 }
2669
2670
2671 auto launch_listener = [&](int fd, SSL_CTX* ctx, bool implicit_tls) -> std::thread {
2672 if (fd < 0) return {};
2673 return std::thread([fd, ctx, implicit_tls]() {
2674 accept_loop(fd, ctx, implicit_tls);
2675 ::close(fd);
2676 });
2677 };
2678
2679 std::thread tls_thread = launch_listener(tls_fd, tls_ctx, true);
2680 std::thread tls_thread6 = launch_listener(tls_fd6, tls_ctx, true);
2681 std::thread sub_thread = launch_listener(submission_fd, tls_ctx, false);
2682 std::thread sub_thread6 = launch_listener(submission_fd6, tls_ctx, false);
2683 std::thread plain_thread6 = launch_listener(plain_fd6, tls_ctx, false);
2684
2685 accept_loop(plain_fd, tls_ctx, false);
2686 ::close(plain_fd);
2687
2688 if (plain_thread6.joinable()) plain_thread6.join();
2689 if (sub_thread.joinable()) sub_thread.join();
2690 if (sub_thread6.joinable()) sub_thread6.join();
2691 if (tls_thread6.joinable()) tls_thread6.join();
2692
2693 if (tls_thread.joinable())
2694 tls_thread.join();
2695
2696 ::close(plain_fd);
2697
2698 if (tls_ctx)
2699 SSL_CTX_free(tls_ctx);
2700
2701 curl_global_cleanup();
2702 std::cerr << _("[mailproxy] terminato\n");
2703 return 0;
2704}
static void accept_loop(int server_fd, SSL_CTX *tls_ctx, bool implicit_tls_listener)
static bool import_thunderbird_profiles_into_config(MailSecurityConfig &cfg, std::string &err_out)
static bool load_mail_security_config(MailSecurityConfig &cfg, std::string &err_out)
static int create_server_socket(const std::string &host, int port, int *extra_fd=nullptr)
std::vector< MailRelayProfile > profiles

References _, accept_loop(), MailSecurityConfig::advertise_starttls, anonymous_namespace{BastionGuard-mailproxy.cpp}::create_server_socket(), anonymous_namespace{BastionGuard-mailproxy.cpp}::create_tls_server_ctx(), MailSecurityConfig::enable_implicit_tls_listener, MailSecurityConfig::enabled, MailRelayProfile::id, anonymous_namespace{BastionGuard-mailproxy.cpp}::import_thunderbird_profiles_into_config(), MailSecurityConfig::inject_signature, MailRelayProfile::label, anonymous_namespace{BastionGuard-mailproxy.cpp}::load_mail_security_config(), MailSecurityConfig::local_host, MailSecurityConfig::local_port, MailSecurityConfig::local_submission_port, MailSecurityConfig::local_tls_port, main(), anonymous_namespace{BastionGuard-mailproxy.cpp}::on_signal(), MailSecurityConfig::profiles, anonymous_namespace{BastionGuard-mailproxy.cpp}::restore_thunderbird_smtp_from_backup(), MailSecurityConfig::scan_outgoing, and MailSecurityConfig::version.