mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-09-06 17:25:16 +00:00
164 lines
5.6 KiB
C++
164 lines
5.6 KiB
C++
![]() |
/* AppArmor Profile Editor (C) 2006 Novell, Inc.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "wx/wxprec.h"
|
||
|
|
||
|
#ifndef WX_PRECOMP
|
||
|
#include "wx/wx.h"
|
||
|
#endif
|
||
|
|
||
|
#include <wx/config.h>
|
||
|
#include "Configuration.h"
|
||
|
|
||
|
// Initialize all of the static variables
|
||
|
wxString Configuration::mProfileDirectory = wxEmptyString;
|
||
|
wxString Configuration::mProfileEditorExecutable = wxEmptyString;
|
||
|
wxString Configuration::mParserCommand = wxEmptyString;
|
||
|
wxString Configuration::mTemplateText = wxEmptyString;
|
||
|
wxColour Configuration::mCommentColour = wxColour(DEFAULT_COMMENT_COLOUR);
|
||
|
wxColour Configuration::mIncludeColour = wxColour(DEFAULT_INCLUDE_COLOUR);
|
||
|
wxColour Configuration::mCapColour = wxColour(DEFAULT_CAP_COLOUR);
|
||
|
wxColour Configuration::mPathColour = wxColour(DEFAULT_PATH_COLOUR);
|
||
|
wxColour Configuration::mPermColour = wxColour(DEFAULT_PERM_COLOUR);
|
||
|
wxFont Configuration::mCapabilityFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
|
||
|
wxFont Configuration::mCommentFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL);
|
||
|
wxFont Configuration::mIncludeFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
|
||
|
wxFont Configuration::mPathFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
|
||
|
wxFont Configuration::mPermsFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL);
|
||
|
|
||
|
/**
|
||
|
* Reads in the initial variables
|
||
|
*/
|
||
|
void Configuration::Initialize()
|
||
|
{
|
||
|
// Read in all of the values
|
||
|
mProfileEditorExecutable = wxTheApp->argv[0];
|
||
|
mProfileDirectory = wxConfig::Get()->Read(_("ProfileDirectory"), Configuration::BestGuessProfileDirectory());
|
||
|
mParserCommand = wxConfig::Get()->Read(_("Parser"), BestGuessParserCommand());
|
||
|
mTemplateText = wxConfig::Get()->Read(_("ProfileTemplate"), wxEmptyString);
|
||
|
mCommentColour = _ReadColour(_("CommentColour"), mCommentColour);
|
||
|
mIncludeColour = _ReadColour(_("IncludeColour"), mIncludeColour);
|
||
|
mCapColour = _ReadColour(_("CapabilityColour"), mCapColour);
|
||
|
mPathColour = _ReadColour(_("PathColour"), mPathColour);
|
||
|
mPermColour = _ReadColour(_("PermissionColour"), mPermColour);
|
||
|
_ReadFont(_("CommentFont"), mCommentFont);
|
||
|
_ReadFont(_("IncludeFont"), mIncludeFont);
|
||
|
_ReadFont(_("CapabilityFont"), mCapabilityFont);
|
||
|
_ReadFont(_("PathFont"), mPathFont);
|
||
|
_ReadFont(_("PermsFont"), mPermsFont);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Profiles are most likely stored in either /etc/subdomain.d or
|
||
|
* /etc/apparmor.d. Stat each to see which.
|
||
|
* @param void
|
||
|
* @return profile directory
|
||
|
*/
|
||
|
wxString Configuration::BestGuessProfileDirectory(void)
|
||
|
{
|
||
|
if (wxDirExists(_("/etc/apparmor.d")))
|
||
|
return (_("/etc/apparmor.d"));
|
||
|
else if (wxDirExists(_("/etc/subdomain.d")))
|
||
|
return (_("/etc/subdomain.d"));
|
||
|
else
|
||
|
return (_("/"));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The parser is probably apparmor_parser or
|
||
|
* subdomain_parser. If it's neither, the user
|
||
|
* will need to set it manually, so return /bin/false
|
||
|
* @return the path to the parser
|
||
|
*/
|
||
|
wxString Configuration::BestGuessParserCommand()
|
||
|
{
|
||
|
if (wxFileExists(_("/sbin/apparmor_parser")))
|
||
|
return _("/sbin/apparmor_parser");
|
||
|
else if (wxFileExists(_("/sbin/subdomain_parser")))
|
||
|
return _("/sbin/subdomain_parser");
|
||
|
else
|
||
|
return _("/bin/false");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Writes all of the values to disk
|
||
|
* @return only true for now
|
||
|
*/
|
||
|
bool Configuration::CommitChanges()
|
||
|
{
|
||
|
wxConfig::Get()->Write(_("ProfileDirectory"), mProfileDirectory);
|
||
|
wxConfig::Get()->Write(_("Parser"), mParserCommand);
|
||
|
wxConfig::Get()->Write(_("ProfileTemplate"), mTemplateText);
|
||
|
_WriteColour(_("CommentColour"), mCommentColour);
|
||
|
_WriteColour(_("IncludeColour"), mIncludeColour);
|
||
|
_WriteColour(_("CapabilityColour"), mCapColour);
|
||
|
_WriteColour(_("PathColour"), mPathColour);
|
||
|
_WriteColour(_("PermissionColour"), mPermColour);
|
||
|
wxConfig::Get()->Write(_("CommentFont"), mCommentFont.GetNativeFontInfoDesc());
|
||
|
wxConfig::Get()->Write(_("IncludeFont"), mIncludeFont.GetNativeFontInfoDesc());
|
||
|
wxConfig::Get()->Write(_("CapabilityFont"), mCapabilityFont.GetNativeFontInfoDesc());
|
||
|
wxConfig::Get()->Write(_("PathFont"), mPathFont.GetNativeFontInfoDesc());
|
||
|
wxConfig::Get()->Write(_("PermsFont"), mPermsFont.GetNativeFontInfoDesc());
|
||
|
wxConfig::Get()->Flush();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Reads a colour setting from the config file and translates it into
|
||
|
* a wxColour. If it can't convert the stored value, or the stored value
|
||
|
* does not exist, it will return whatever is passed as defaultColour.
|
||
|
* @param key the configuration key
|
||
|
* @param defaultColour a colour to return
|
||
|
* @return a colour
|
||
|
*/
|
||
|
wxColour Configuration::_ReadColour(const wxString& key, const wxColour& defaultColour)
|
||
|
{
|
||
|
wxColour ret;
|
||
|
wxString tmpStr = wxConfig::Get()->Read(key, wxEmptyString);
|
||
|
|
||
|
if (tmpStr.Length() == 6)
|
||
|
{
|
||
|
ret.Set(wxHexToDec(tmpStr.Mid(0,2)), // Red
|
||
|
wxHexToDec(tmpStr.Mid(2,2)), // Green
|
||
|
wxHexToDec(tmpStr.Mid(4,2)) // Blue
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (ret.Ok())
|
||
|
return ret;
|
||
|
else
|
||
|
return defaultColour;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Reads a font from the configuration file, and sets it as the 'font'
|
||
|
* @param key configuration key
|
||
|
* @param font the font to set
|
||
|
*/
|
||
|
void Configuration::_ReadFont(const wxString& key, wxFont& font)
|
||
|
{
|
||
|
wxString tmpStr;
|
||
|
if (wxConfig::Get()->Read(key, &tmpStr))
|
||
|
font.SetNativeFontInfo(tmpStr);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Takes a wxColour and converts it to a hex string for writing to disk.
|
||
|
* @param key configuration key
|
||
|
* @param colour the colour to convert
|
||
|
*/
|
||
|
void Configuration::_WriteColour(const wxString& key, const wxColour& colour)
|
||
|
{
|
||
|
wxConfig::Get()->Write(key, wxString::Format(_T("%02x%02x%02x"),
|
||
|
colour.Red(),
|
||
|
colour.Green(),
|
||
|
colour.Blue()));
|
||
|
}
|
||
|
|