summaryrefslogtreecommitdiff
path: root/src/FallocFileAllocationIterator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FallocFileAllocationIterator.cc')
-rw-r--r--src/FallocFileAllocationIterator.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/FallocFileAllocationIterator.cc b/src/FallocFileAllocationIterator.cc
index febcf19b..04590557 100644
--- a/src/FallocFileAllocationIterator.cc
+++ b/src/FallocFileAllocationIterator.cc
@@ -34,14 +34,33 @@
/* copyright --> */
#include "FallocFileAllocationIterator.h"
#include "DlAbortEx.h"
+#include "util.h"
+#include "LogFactory.h"
namespace aria2 {
+#ifdef __MINGW32__
+bool FallocFileAllocationIterator::gainPrivilegeAttempted_ = false;
+#endif // __MINGW32__
+
FallocFileAllocationIterator::FallocFileAllocationIterator(BinaryStream* stream,
int64_t offset,
int64_t totalLength)
: stream_(stream), offset_(offset), totalLength_(totalLength)
{
+#ifdef __MINGW32__
+ // Windows build: --file-allocation=falloc uses SetFileValidData
+ // which requires SE_MANAGE_VOLUME_NAME privilege. SetFileValidData
+ // has security implications (see
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/aa365544%28v=vs.85%29.aspx).
+ if (!gainPrivilegeAttempted_) {
+ if (!util::gainPrivilege(SE_MANAGE_VOLUME_NAME)) {
+ A2_LOG_WARN("--file-allocation=falloc will not work properly.");
+ }
+
+ gainPrivilegeAttempted_ = true;
+ }
+#endif // __MINGW32__
}
void FallocFileAllocationIterator::allocateChunk()