From 9076f5b21bd78f83f496e7f829e708305b67a58d Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Sat, 15 Dec 2018 14:39:12 +0100 Subject: [PATCH] ENH: provide argList::envGlobalPath() static method - this is identical to either of these solutions: * getEnv("FOAM_CASE") * stringOps::expand("<case>") but with a closer resemblance to argList or Time globalPath(), which makes the intent clearer. Avoids using raw strings in the caller, which improves compile-time checks. Used in situations where a class has no derivation path or other access to a time registry or command args. --- .../db/dynamicLibrary/dynamicCode/dynamicCode.C | 13 +++++++------ src/OpenFOAM/global/argList/argList.C | 8 ++++++++ src/OpenFOAM/global/argList/argList.H | 12 ++++++++++++ .../utilities/systemCall/systemCall.C | 10 +++++++++- .../noise/noiseModels/noiseModel/noiseModel.C | 4 ++-- .../noise/noiseModels/pointNoise/pointNoise.C | 5 ++--- .../noise/noiseModels/surfaceNoise/surfaceNoise.C | 5 ++--- .../boundaryData/boundaryDataSurfaceWriter.C | 3 ++- .../boundaryData/boundaryDataSurfaceWriterImpl.C | 2 +- 9 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C index 422d0687a62..1a2d068749d 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 f06b9cfc1e9..f7c622e746b 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 379c6617d2d..e569e02e525 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 0b19fda5e36..3e54b1d04fb 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 1104fabc3ff..6a4272a423d 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 c5474aee3bb..3e0c491292d 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 a60902aafb2..d53c0c9b9f8 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 15cf1d3ee73..8456d61912e 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 14f1545e226..d774e7f1be5 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 ( -- GitLab