* Use deletePathWrapped() in more places.

This commit is contained in:
Eelco Dolstra 2006-12-09 00:26:24 +00:00
parent fa33303146
commit 5f681988f2
3 changed files with 30 additions and 21 deletions

View file

@ -531,14 +531,28 @@ void getOwnership(const Path & path)
} }
static void deletePathWrapped(const Path & path) void deletePathWrapped(const Path & path,
unsigned long long & bytesFreed)
{ {
/* When using build users and we're not root, we may not have try {
sufficient permission to delete the path. So use the setuid /* First try to delete it ourselves. */
helper to change ownership to us. */ deletePath(path, bytesFreed);
if (haveBuildUsers() && !amPrivileged()) } catch (SysError & e) {
getOwnership(path); /* If this failed due to a permission error, then try it with
deletePath(path); the setuid helper. */
if (haveBuildUsers() && !amPrivileged()) {
getOwnership(path);
deletePath(path, bytesFreed);
} else
throw;
}
}
void deletePathWrapped(const Path & path)
{
unsigned long long dummy;
deletePathWrapped(path, dummy);
} }

View file

@ -637,7 +637,7 @@ Path LocalStore::addToStore(const Path & _srcPath, bool fixed,
if (!isValidPath(dstPath)) { if (!isValidPath(dstPath)) {
if (pathExists(dstPath)) deletePath(dstPath); if (pathExists(dstPath)) deletePathWrapped(dstPath);
copyPath(srcPath, dstPath); copyPath(srcPath, dstPath);
@ -673,7 +673,7 @@ Path LocalStore::addTextToStore(const string & suffix, const string & s,
if (!isValidPath(dstPath)) { if (!isValidPath(dstPath)) {
if (pathExists(dstPath)) deletePath(dstPath); if (pathExists(dstPath)) deletePathWrapped(dstPath);
writeStringToFile(dstPath, s); writeStringToFile(dstPath, s);
@ -710,18 +710,7 @@ void deleteFromStore(const Path & _path, unsigned long long & bytesFreed)
} }
txn.commit(); txn.commit();
try { deletePathWrapped(path, bytesFreed);
/* First try to delete it ourselves. */
deletePath(path, bytesFreed);
} catch (SysError & e) {
/* If this failed due to a permission error, then try it with
the setuid helper. */
if (haveBuildUsers() && !amPrivileged()) {
getOwnership(path);
deletePath(path, bytesFreed);
} else
throw;
}
} }

View file

@ -148,6 +148,12 @@ bool amPrivileged();
/* Recursively change the ownership of `path' to the current uid. */ /* Recursively change the ownership of `path' to the current uid. */
void getOwnership(const Path & path); void getOwnership(const Path & path);
/* Like deletePath(), but changes the ownership of `path' using the
setuid wrapper if necessary (and possible). */
void deletePathWrapped(const Path & path,
unsigned long long & bytesFreed);
void deletePathWrapped(const Path & path);
} }