diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C index 422d0687a6265a2e077585727059c55a439aa4e1..1a2d068749d5bedc19d51b18f8f0a998ff81046f 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C +++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C @@ -25,6 +25,7 @@ License #include "dynamicCode.H" #include "dynamicCodeContext.H" +#include "argList.H" #include "stringOps.H" #include "Fstream.H" #include "IOstreams.H" @@ -64,10 +65,10 @@ void Foam::dynamicCode::checkSecurity if (isAdministrator()) { FatalIOErrorInFunction(dict) - << "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)" + << "This code should not be executed by someone" + << " with administrator rights for security reasons." << nl + << "It generates a shared library which is loaded using dlopen" + << nl << endl << exit(FatalIOError); } @@ -292,8 +293,8 @@ bool Foam::dynamicCode::writeDigest(const std::string& sha1) const Foam::dynamicCode::dynamicCode(const word& codeName, const word& codeDirName) : - codeRoot_(stringOps::expand("<case>")/topDirName), - libSubDir_(stringOps::expand("platforms/$WM_OPTIONS/lib")), + codeRoot_(argList::envGlobalPath()/topDirName), + libSubDir_(stringOps::expand("platforms/${WM_OPTIONS}/lib")), codeName_(codeName), codeDirName_(codeDirName) { diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index f06b9cfc1e983595919cfcef088b1309032cf8a4..f7c622e746b4d68748bd08f7228def6815957556 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -463,6 +463,14 @@ bool Foam::argList::postProcess(int argc, char *argv[]) } +// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // + +Foam::fileName Foam::argList::envGlobalPath() +{ + return Foam::getEnv("FOAM_CASE"); +} + + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // Foam::word Foam::argList::optionCompat(const word& optName) diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H index 379c6617d2d3547dd1c86322aa734def9531fb7c..e569e02e5256b78141c58c1cdf881a869f089831 100644 --- a/src/OpenFOAM/global/argList/argList.H +++ b/src/OpenFOAM/global/argList/argList.H @@ -272,6 +272,18 @@ public: // Member Functions + // Environment + + //- Global case (directory) from environment variable + // + // Returns the contents of the \c FOAM_CASE variable, + // which has previously been set by argList or by Time. + // + // This will normally be identical to the value of globalPath(), + // but obtained via the environment. + static fileName envGlobalPath(); + + // Low-level //- Scan for -help, -doc options etc prior to checking the validity diff --git a/src/functionObjects/utilities/systemCall/systemCall.C b/src/functionObjects/utilities/systemCall/systemCall.C index 0b19fda5e363502890b87f7ac3e3f025ba3daff2..3e54b1d04fbceb1aa64b2eaee0df7f40494b60c1 100644 --- a/src/functionObjects/utilities/systemCall/systemCall.C +++ b/src/functionObjects/utilities/systemCall/systemCall.C @@ -114,9 +114,17 @@ bool Foam::functionObjects::systemCall::read(const dictionary& dict) if (executeCalls_.empty() && endCalls_.empty() && writeCalls_.empty()) { WarningInFunction - << "no executeCalls, endCalls or writeCalls defined." + << "No executeCalls, endCalls or writeCalls defined." << endl; } + else if (isAdministrator()) + { + FatalErrorInFunction + << "System calls should not be executed by someone" + << " with administrator rights for security reasons." << nl + << nl << endl + << exit(FatalError); + } else if (!dynamicCode::allowSystemOperations) { FatalErrorInFunction diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index 1104fabc3ff54fea690328ef74746590801a6c7b..6a4272a423d6da3710cf0af12174a9f3e60588d2 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C @@ -25,7 +25,7 @@ License #include "noiseModel.H" #include "functionObject.H" -#include "stringOps.H" +#include "argList.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -143,7 +143,7 @@ Foam::fileName Foam::noiseModel::baseFileDir(const label dataseti) const { return ( - stringOps::expand("<case>") // ie, globalPath() + argList::envGlobalPath() / functionObject::outputPrefix / "noise" / outputPrefix_ diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C index c5474aee3bb3d71d0dfbed7dce955432463a2049..3e0c491292d84c6e7712c9f086b732f92645f03f 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C @@ -25,7 +25,7 @@ License #include "pointNoise.H" #include "noiseFFT.H" -#include "stringOps.H" +#include "argList.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -244,8 +244,7 @@ void pointNoise::calculate() if (!fName.isAbsolute()) { - // ie, globalPath() / name - fName = stringOps::expand("<case>")/fName; + fName = argList::envGlobalPath()/fName; } Function1Types::CSV<scalar> data("pressure", dict_, fName); diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index a60902aafb20105a3a4a0f0f2e53878f8560367d..d53c0c9b9f8ec48047d6301bd68d99c6ce0437fb 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -27,8 +27,8 @@ License #include "surfaceReader.H" #include "surfaceWriter.H" #include "noiseFFT.H" +#include "argList.H" #include "graph.H" -#include "stringOps.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -465,8 +465,7 @@ void surfaceNoise::calculate() if (!fName.isAbsolute()) { - // ie, globalPath() / name - fName = stringOps::expand("<case>")/fName; + fName = argList::envGlobalPath()/fName; } initialise(fName); diff --git a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C index 15cf1d3ee73afec80f581cea19e266edf174f60b..8456d61912e25a23a33ce2a1529f029b717f65aa 100644 --- a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C +++ b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriter.C @@ -25,6 +25,7 @@ License #include "boundaryDataSurfaceWriter.H" #include "makeSurfaceWriterMethods.H" +#include "argList.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -62,7 +63,7 @@ Foam::fileName Foam::boundaryDataSurfaceWriter::write const pointField& points = surf.points(); // Dummy time to use as an objectRegistry - const fileName caseDir(getEnv("FOAM_CASE")); + const fileName caseDir(argList::envGlobalPath()); Time dummyTime ( diff --git a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C index 14f1545e226277733ab816682c72fc38f7722e4b..d774e7f1be543bdff4af848ecee9e257cb1f60a3 100644 --- a/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C +++ b/src/sampling/sampledSurface/writers/boundaryData/boundaryDataSurfaceWriterImpl.C @@ -54,7 +54,7 @@ Foam::fileName Foam::boundaryDataSurfaceWriter::writeTemplate const faceList& faces = surf.faces(); // Dummy time to use as an objectRegistry - const fileName caseDir(getEnv("FOAM_CASE")); + const fileName caseDir(argList::envGlobalPath()); Time dummyTime (