blob: 2bc56450eee91de8404e1171182b4b30946558e0 [file] [log] [blame]
// Copyright 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "firewalld/firewall_service.h"
#include "firewalld/dbus_interface.h"
#include "firewalld/iptables.h"
namespace firewalld {
FirewallService::FirewallService(const scoped_refptr<dbus::Bus>& bus)
: org::chromium::FirewalldAdaptor(&iptables_),
dbus_object_{nullptr, bus, dbus::ObjectPath{kFirewallServicePath}},
weak_ptr_factory_{this} {}
void FirewallService::RegisterAsync(const CompletionAction& callback) {
RegisterWithDBusObject(&dbus_object_);
// Track permission_broker's lifetime so that we can close firewall holes
// if/when permission_broker exits.
permission_broker_.reset(
new org::chromium::PermissionBroker::ObjectManagerProxy(
dbus_object_.GetBus()));
permission_broker_->SetPermissionBrokerRemovedCallback(
base::Bind(&FirewallService::OnPermissionBrokerRemoved,
weak_ptr_factory_.GetWeakPtr()));
dbus_object_.RegisterAsync(callback);
}
void FirewallService::OnPermissionBrokerRemoved(const dbus::ObjectPath& path) {
LOG(INFO) << "permission_broker died, plugging all firewall holes";
iptables_.PlugAllHoles();
}
} // namespace firewalld