mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: add stub function to codedFixedValueFvPatchScalarField for version checking
- eg, fixedValue10_<SHA1>, its existence indicates that the correct library has been loaded
This commit is contained in:
@ -35,6 +35,20 @@ ${codeInclude}
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
// unique function name that can be checked if the correct library version
|
||||||
|
// has been loaded
|
||||||
|
bool ${typeName}_${SHA1sum}()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
${typeName}FixedValueFvPatchScalarField::
|
${typeName}FixedValueFvPatchScalarField::
|
||||||
|
|||||||
@ -35,7 +35,8 @@ License
|
|||||||
#include "dlLibraryTable.H"
|
#include "dlLibraryTable.H"
|
||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
#include "Pstream.H"
|
#include "PstreamReduceOps.H"
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -70,18 +71,11 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
Istream& is
|
Istream& is
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (isAdministrator())
|
codeStreamTools::checkSecurity
|
||||||
{
|
(
|
||||||
FatalIOErrorIn
|
"functionEntries::codeStream::execute(..)",
|
||||||
(
|
parentDict
|
||||||
"functionEntries::codeStream::execute(..)",
|
);
|
||||||
parentDict
|
|
||||||
) << "This code should not be executed by someone with administrator"
|
|
||||||
<< " rights due to security reasons." << endl
|
|
||||||
<< "(it writes a shared library which then gets loaded "
|
|
||||||
<< "using dlopen)"
|
|
||||||
<< exit(FatalIOError);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get code dictionary
|
// get code dictionary
|
||||||
// must reference parent for stringOps::expand to work nicely
|
// must reference parent for stringOps::expand to work nicely
|
||||||
@ -175,6 +169,7 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
copyFiles[0].file() = fileCsrc;
|
copyFiles[0].file() = fileCsrc;
|
||||||
copyFiles[0].set("codeInclude", codeInclude);
|
copyFiles[0].set("codeInclude", codeInclude);
|
||||||
copyFiles[0].set("code", code);
|
copyFiles[0].set("code", code);
|
||||||
|
copyFiles[0].set("SHA1sum", sha.str());
|
||||||
|
|
||||||
List<codeStreamTools::fileAndContent> filesContents(2);
|
List<codeStreamTools::fileAndContent> filesContents(2);
|
||||||
|
|
||||||
@ -218,8 +213,9 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool dummy = true;
|
// all processes must wait for compile
|
||||||
// reduce(dummy, orOp<bool>());
|
bool dummy = true;
|
||||||
|
reduce(dummy, orOp<bool>());
|
||||||
|
|
||||||
if (!dlLibraryTable::open(libPath, false))
|
if (!dlLibraryTable::open(libPath, false))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -49,6 +49,28 @@ const Foam::fileName Foam::codeStreamTools::codeTemplateDirName
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::codeStreamTools::checkSecurity
|
||||||
|
(
|
||||||
|
const char* title,
|
||||||
|
const dictionary& context
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (isAdministrator())
|
||||||
|
{
|
||||||
|
FatalIOErrorIn
|
||||||
|
(
|
||||||
|
title,
|
||||||
|
context
|
||||||
|
) << "This code should not be executed by someone with administrator"
|
||||||
|
<< " rights due to security reasons." << nl
|
||||||
|
<< "(it writes a shared library which then gets loaded "
|
||||||
|
<< "using dlopen)"
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Foam::fileName Foam::codeStreamTools::codePath(const word& subDirName)
|
Foam::fileName Foam::codeStreamTools::codePath(const word& subDirName)
|
||||||
{
|
{
|
||||||
return stringOps::expand("$FOAM_CASE/codeStream/" + subDirName);
|
return stringOps::expand("$FOAM_CASE/codeStream/" + subDirName);
|
||||||
@ -253,6 +275,13 @@ bool Foam::codeStreamTools::copyFilesContents(const fileName& dir) const
|
|||||||
// variables mapping
|
// variables mapping
|
||||||
HashTable<string> mapping(copyFiles_[i]);
|
HashTable<string> mapping(copyFiles_[i]);
|
||||||
mapping.set("typeName", name_);
|
mapping.set("typeName", name_);
|
||||||
|
|
||||||
|
// provide a zero digest if not otherwise specified
|
||||||
|
if (!mapping.found("SHA1sum"))
|
||||||
|
{
|
||||||
|
mapping.insert("SHA1sum", SHA1Digest().str());
|
||||||
|
}
|
||||||
|
|
||||||
copyAndExpand(is, os, mapping);
|
copyAndExpand(is, os, mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -145,6 +145,13 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
//- Check security for creating dynamic code
|
||||||
|
static void checkSecurity
|
||||||
|
(
|
||||||
|
const char* title,
|
||||||
|
const dictionary& context
|
||||||
|
);
|
||||||
|
|
||||||
//- Local path for specified code name
|
//- Local path for specified code name
|
||||||
// Expanded from \$FOAM_CASE/codeStream
|
// Expanded from \$FOAM_CASE/codeStream
|
||||||
static fileName codePath(const word& subDirName);
|
static fileName codePath(const word& subDirName);
|
||||||
|
|||||||
@ -124,7 +124,9 @@ void Foam::codedFixedValueFvPatchScalarField::writeLibrary
|
|||||||
// <<"new SHA1: " << sha << endl;
|
// <<"new SHA1: " << sha << endl;
|
||||||
|
|
||||||
|
|
||||||
// (void) codeStreamTools::upToDate(codePath, sha)
|
// only use side-effect of writing SHA1Digest for now
|
||||||
|
(void) codeStreamTools::upToDate(codePath, sha);
|
||||||
|
|
||||||
// TODO: compile on-demand
|
// TODO: compile on-demand
|
||||||
if (true)
|
if (true)
|
||||||
{
|
{
|
||||||
@ -152,6 +154,7 @@ void Foam::codedFixedValueFvPatchScalarField::writeLibrary
|
|||||||
copyFiles[0].file() = fileCsrc;
|
copyFiles[0].file() = fileCsrc;
|
||||||
copyFiles[0].set("codeInclude", codeInclude);
|
copyFiles[0].set("codeInclude", codeInclude);
|
||||||
copyFiles[0].set("code", code);
|
copyFiles[0].set("code", code);
|
||||||
|
copyFiles[0].set("SHA1sum", sha.str());
|
||||||
|
|
||||||
copyFiles[1].file() = fileHsrc;
|
copyFiles[1].file() = fileHsrc;
|
||||||
|
|
||||||
@ -190,18 +193,11 @@ void Foam::codedFixedValueFvPatchScalarField::writeLibrary
|
|||||||
|
|
||||||
void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
||||||
{
|
{
|
||||||
if (isAdministrator())
|
codeStreamTools::checkSecurity
|
||||||
{
|
(
|
||||||
FatalIOErrorIn
|
"codedFixedValueFvPatchScalarField::updateLibrary()",
|
||||||
(
|
dict_
|
||||||
"codedFixedValueFvPatchScalarField::updateLibrary()",
|
);
|
||||||
dict_
|
|
||||||
) << "This code should not be executed by someone with administrator"
|
|
||||||
<< " rights due to security reasons." << endl
|
|
||||||
<< "(it writes a shared library which then gets loaded "
|
|
||||||
<< "using dlopen)"
|
|
||||||
<< exit(FatalIOError);
|
|
||||||
}
|
|
||||||
|
|
||||||
// write code into redirectType_ subdir
|
// write code into redirectType_ subdir
|
||||||
const fileName codePath = codeStreamTools::codePath(redirectType_);
|
const fileName codePath = codeStreamTools::codePath(redirectType_);
|
||||||
@ -220,6 +216,16 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
|
|
||||||
void* lib = dlLibraryTable::findLibrary(libPath);
|
void* lib = dlLibraryTable::findLibrary(libPath);
|
||||||
|
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
// calculate old/new SHA1 for code
|
||||||
|
// check if the correct library version was already loaded.
|
||||||
|
// Find the library handle.
|
||||||
|
//
|
||||||
|
// string signatureName(redirectType_ + "_" + sha().str());
|
||||||
|
// void (*signatureFunction)();
|
||||||
|
// signatureFunction = reinterpret_cast<void(*)()>(dlSym(lib, signatureName));
|
||||||
|
|
||||||
if (dict_.found("code"))
|
if (dict_.found("code"))
|
||||||
{
|
{
|
||||||
if (!lib)
|
if (!lib)
|
||||||
@ -274,6 +280,7 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// all processes must wait for compile
|
||||||
bool dummy = true;
|
bool dummy = true;
|
||||||
reduce(dummy, orOp<bool>());
|
reduce(dummy, orOp<bool>());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user