mirror of
https://github.com/NixOS/nix.git
synced 2025-11-26 04:00:59 +01:00
Fixed recalculated drv path issue.
This commit is contained in:
parent
51cff21c92
commit
f435abcdb6
3 changed files with 14 additions and 15 deletions
|
|
@ -629,7 +629,7 @@ static Expr prim_derivationStrict(EvalState & state, const ATermVector & args)
|
|||
* NOTE: we do not include the username into the hash calculation of the statepath yet, multiple different users can use the same dervation
|
||||
* but need different state paths. Thats why we keep a 'dummy' value e.g. global hash for everyone, and later at build time recalculate the real state path
|
||||
*/
|
||||
stateOutPath = makeStatePath(printHash(componentHash), drvName, stateIdentifier); //State path
|
||||
stateOutPath = makeStatePath(printHash(componentHash), drvName, stateIdentifier, queryCurrentUsername()); //State path
|
||||
drv.env["statePath"] = stateOutPath;
|
||||
|
||||
string enableStateS = bool2string("true");
|
||||
|
|
|
|||
|
|
@ -117,13 +117,11 @@ Path makeStorePath(const string & type, const Hash & hash, const string & suffix
|
|||
+ "-" + suffix;
|
||||
}
|
||||
|
||||
Path makeStatePath(const string & componentHash, const string & suffix, const string & stateIdentifier)
|
||||
Path makeStatePath(const string & componentHash, const string & suffix, const string & stateIdentifier, const string & username)
|
||||
{
|
||||
string suffix_stateIdentifier = stateIdentifier;
|
||||
suffix_stateIdentifier = "-" + suffix_stateIdentifier;
|
||||
|
||||
string username = queryCallingUsername(); //Should NOT be fake-able
|
||||
|
||||
/* e.g., "source:sha256:1abc...:/nix/store:foo.tar.gz" */
|
||||
string s = ":sha256:" + componentHash + ":"
|
||||
+ nixStoreState + ":" + suffix + ":" + stateIdentifier + ":" + username;
|
||||
|
|
@ -143,20 +141,21 @@ void checkStatePath(const Derivation & drv)
|
|||
string componentHash = drv.stateOutputs.find("state")->second.componentHash;
|
||||
string suffix = drv.env.find("name")->second;
|
||||
string stateIdentifier = drv.stateOutputs.find("state")->second.stateIdentifier;
|
||||
string drvUser = drv.stateOutputs.find("state")->second.username;
|
||||
|
||||
string callingUser = queryCallingUsername();
|
||||
|
||||
//TODO Name check
|
||||
//if( user != callinguser
|
||||
//Check name (TODO how about sharing of drvs between users?) (user is filled in on the fly)
|
||||
if(drvUser != callingUser)
|
||||
throw Error(format("The calling user does not match the user specified in the drv '%1%'") % drvPath);
|
||||
|
||||
|
||||
Path calculatedPath = makeStatePath(componentHash, suffix, stateIdentifier); //TODO INCLUDE USER !!!!!!!!!!!!
|
||||
|
||||
//TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! calculatedPath IS NOT CORRECT ANYMORE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
Path calculatedPath = makeStatePath(componentHash, suffix, stateIdentifier, callingUser);
|
||||
|
||||
printMsg(lvlError, format("Checking statePath validity: %1% %2%") % drvPath % calculatedPath);
|
||||
|
||||
//Check Calculated path
|
||||
if(drvPath != calculatedPath)
|
||||
Error(format("The statepath from the Derivation does not match the recalculated statepath, are u trying to spoof the statepath?"));
|
||||
throw Error(format("The statepath from the Derivation does not match the recalculated statepath, are u trying to spoof the statepath?"));
|
||||
}
|
||||
|
||||
Path makeFixedOutputPath(bool recursive,
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ Path makeFixedOutputPath(bool recursive,
|
|||
string hashAlgo, Hash hash, string name);
|
||||
|
||||
/* TODO ... */
|
||||
Path makeStatePath(const string & componentHash, const string & suffix, const string & stateIdentifier);
|
||||
Path makeStatePath(const string & componentHash, const string & suffix, const string & stateIdentifier, const string & user);
|
||||
|
||||
/* TODO ... */
|
||||
void checkStatePath(const Derivation & drv);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue