From 01461176f333b6c4000587e789e5bee9759d1e40 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 21 May 2017 14:26:21 +0100 Subject: [PATCH] Do not continue with symbolic links, not yet supported. --- osrepodbmgr.Core/ChangeLog | 6 ++++++ osrepodbmgr.Core/Workers/Compression.cs | 18 ++++++++++++++++++ osrepodbmgr.Core/Workers/Files.cs | 9 +++++++++ 3 files changed, 33 insertions(+) diff --git a/osrepodbmgr.Core/ChangeLog b/osrepodbmgr.Core/ChangeLog index eb343db..5d4ee02 100644 --- a/osrepodbmgr.Core/ChangeLog +++ b/osrepodbmgr.Core/ChangeLog @@ -1,3 +1,9 @@ +2017-05-21 Natalia Portillo + + * Workers/Files.cs: + * Workers/Compression.cs: + Do not continue with symbolic links, not yet supported. + 2017-05-21 Natalia Portillo * Workers/Clamd.cs: diff --git a/osrepodbmgr.Core/Workers/Compression.cs b/osrepodbmgr.Core/Workers/Compression.cs index b2086ff..e7c07c0 100644 --- a/osrepodbmgr.Core/Workers/Compression.cs +++ b/osrepodbmgr.Core/Workers/Compression.cs @@ -345,11 +345,29 @@ namespace osrepodbmgr.Core #endif long counter = 0; string format = null; + bool isLink = false; JsonTextReader jsReader = new JsonTextReader(new StringReader(lsarOutput)); while(jsReader.Read()) { if(jsReader.TokenType == JsonToken.PropertyName && jsReader.Value != null && jsReader.Value.ToString() == "XADFileName") counter++; + else if(jsReader.TokenType == JsonToken.PropertyName && jsReader.Value != null && jsReader.Value.ToString() == "XADIsLink") + { + jsReader.Read(); + if(jsReader.TokenType == JsonToken.Integer) + isLink = int.Parse(jsReader.Value.ToString()) > 0; + } + else if(jsReader.TokenType == JsonToken.PropertyName && jsReader.Value != null && jsReader.Value.ToString() == "XADIsHardLink") + { + jsReader.Read(); + // TODO: Support symlinks, devices, hardlinks, whatever? + if(jsReader.TokenType == JsonToken.Integer && isLink && int.Parse(jsReader.Value.ToString()) == 0) + { + if(Failed != null) + Failed("Archive contains unsupported symbolic links, not continuing."); + return; + } + } else if(jsReader.TokenType == JsonToken.PropertyName && jsReader.Value != null && jsReader.Value.ToString() == "lsarFormatName") { jsReader.Read(); diff --git a/osrepodbmgr.Core/Workers/Files.cs b/osrepodbmgr.Core/Workers/Files.cs index 083ad4d..7e5e079 100644 --- a/osrepodbmgr.Core/Workers/Files.cs +++ b/osrepodbmgr.Core/Workers/Files.cs @@ -338,6 +338,15 @@ namespace osrepodbmgr.Core filesPath = Context.path; string relpath = file.Substring(filesPath.Length + 1); + + // TODO: Support symlinks, devices, hardlinks, whatever? + if(fi.Attributes.HasFlag(FileAttributes.ReparsePoint)) + { + if(Failed != null) + Failed(string.Format("{0} is an unsupported symbolic link, not continuing.", relpath)); + return; + } + if(UpdateProgress != null) UpdateProgress(string.Format("Hashing file {0} of {1}", counter, Context.files.Count), null, counter, Context.files.Count); FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);