public static byte[] ReadFile(IOConnectionInfo ioc) { Stream sIn = null; MemoryStream ms = null; try { sIn = IOConnection.OpenRead(ioc); if (sIn == null) { return(null); } ms = new MemoryStream(); MemUtil.CopyStream(sIn, ms); return(ms.ToArray()); } catch (Exception) { } finally { if (sIn != null) { sIn.Close(); } if (ms != null) { ms.Close(); } } return(null); }
private static List<UpdateComponentInfo> LoadInfoFile(string strUrl) { try { IOConnectionInfo ioc = IOConnectionInfo.FromPath(strUrl.Trim()); Stream s = IOConnection.OpenRead(ioc); if(s == null) throw new InvalidOperationException(); MemoryStream ms = new MemoryStream(); MemUtil.CopyStream(s, ms); s.Close(); byte[] pb = ms.ToArray(); ms.Close(); if(ioc.Path.EndsWith(".gz", StrUtil.CaseIgnoreCmp)) { // Decompress in try-catch, because some web filters // incorrectly pre-decompress the returned data // https://sourceforge.net/projects/keepass/forums/forum/329221/topic/4915083 try { byte[] pbDec = MemUtil.Decompress(pb); List<UpdateComponentInfo> l = LoadInfoFilePriv(pbDec, ioc); if(l != null) return l; } catch(Exception) { } } return LoadInfoFilePriv(pb, ioc); } catch(Exception) { } return null; }
public override void Import(PwDatabase pwStorage, Stream sInput, IStatusLogger slLogger) { MemoryStream ms = new MemoryStream(); MemUtil.CopyStream(sInput, ms); byte[] pbData = ms.ToArray(); ms.Close(); sInput.Close(); CsvImportForm dlg = new CsvImportForm(); dlg.InitEx(pwStorage, pbData); UIUtil.ShowDialogAndDestroy(dlg); }
protected bool DownloadFile(string sFile, string sTargetFolder) { const int MAXATTEMPTS = 3; int iAttempts = 0; string sSource = GetShortestAbsolutePath(sFile); while (iAttempts++ < MAXATTEMPTS) { try { string sTarget = GetShortestAbsolutePath(sTargetFolder + UrlUtil.GetFileName(sSource)); KeePassLib.Serialization.IOConnectionInfo ioc = KeePassLib.Serialization.IOConnectionInfo.FromPath(sSource); Stream s = KeePassLib.Serialization.IOConnection.OpenRead(ioc); if (s == null) { throw new InvalidOperationException(); } MemoryStream ms = new MemoryStream(); MemUtil.CopyStream(s, ms); s.Close(); byte[] pb = ms.ToArray(); ms.Close(); //Create target folder, Directory.CreateDirectory internally checks for existance of the folder Directory.CreateDirectory(sTargetFolder); File.WriteAllBytes(sTarget, pb); m_lDownloaded.Add(sTarget); PluginDebug.AddInfo("Download success", 0, "Source: " + sSource, "Target: " + sTargetFolder, "Download attempt: " + iAttempts.ToString()); return(true); } catch (Exception ex) { PluginDebug.AddInfo("Download failed", 0, "Source: " + sSource, "Target: " + sTargetFolder, "Download attempt: " + iAttempts.ToString(), ex.Message); System.Net.WebException exWeb = ex as System.Net.WebException; if (exWeb == null) { continue; } System.Net.HttpWebResponse wrResponse = exWeb.Response as System.Net.HttpWebResponse; if ((wrResponse == null) || (wrResponse.StatusCode != System.Net.HttpStatusCode.NotFound)) { continue; } iAttempts = MAXATTEMPTS; } } return(false); }
private static string DownloadString(string url) { var ioc = IOConnectionInfo.FromPath(url); using (var s = IOConnection.OpenRead(ioc)) { if (s == null) { throw new InvalidOperationException(); } using (var ms = new MemoryStream()) { MemUtil.CopyStream(s, ms); return(StrUtil.Utf8.GetString(ms.ToArray())); } } }
public static byte[] ComputeHash() { try // This works always or never { bool bOpened = OpenW(IntPtr.Zero, false); // The following seems to work even without opening the // clipboard, but opening maybe is safer uint u = NativeMethods.GetClipboardSequenceNumber(); if (bOpened) { CloseW(); } if (u == 0) { throw new UnauthorizedAccessException(); } SHA256Managed sha256 = new SHA256Managed(); return(sha256.ComputeHash(MemUtil.UInt32ToBytes(u))); } catch (Exception) { Debug.Assert(false); } if (NativeLib.GetPlatformID() == PlatformID.MacOSX) { string str = GetStringM(); byte[] pbText = StrUtil.Utf8.GetBytes("pb" + str); return((new SHA256Managed()).ComputeHash(pbText)); } if (NativeLib.IsUnix()) { string str = GetStringU(); byte[] pbText = StrUtil.Utf8.GetBytes("pb" + str); return((new SHA256Managed()).ComputeHash(pbText)); } try { MemoryStream ms = new MemoryStream(); byte[] pbPre = StrUtil.Utf8.GetBytes("pb"); ms.Write(pbPre, 0, pbPre.Length); // Prevent empty buffer if (Clipboard.ContainsAudio()) { Stream sAudio = Clipboard.GetAudioStream(); MemUtil.CopyStream(sAudio, ms); sAudio.Close(); } if (Clipboard.ContainsFileDropList()) { StringCollection sc = Clipboard.GetFileDropList(); foreach (string str in sc) { byte[] pbStr = StrUtil.Utf8.GetBytes(str); ms.Write(pbStr, 0, pbStr.Length); } } if (Clipboard.ContainsImage()) { using (Image img = Clipboard.GetImage()) { MemoryStream msImage = new MemoryStream(); img.Save(msImage, ImageFormat.Bmp); byte[] pbImg = msImage.ToArray(); ms.Write(pbImg, 0, pbImg.Length); msImage.Close(); } } if (Clipboard.ContainsText()) { string str = Clipboard.GetText(); byte[] pbText = StrUtil.Utf8.GetBytes(str); ms.Write(pbText, 0, pbText.Length); } byte[] pbData = ms.ToArray(); SHA256Managed sha256 = new SHA256Managed(); byte[] pbHash = sha256.ComputeHash(pbData); ms.Close(); return(pbHash); } catch (Exception) { Debug.Assert(false); } return(null); }
public override void Import(PwDatabase pwStorage, Stream sInput, IStatusLogger slLogger) { if (m_dAutoTypeConv == null) { Dictionary <string, string> d = new Dictionary <string, string>(); d[@"{login}"] = @"{USERNAME}"; d[@"{password}"] = @"{PASSWORD}"; d[@"{additional key}"] = @"{S:" + Password2Key + @"}"; d[@"{url}"] = @"{URL}"; d[@"{memo}"] = @"{NOTES}"; d[@"[tab]"] = @"{TAB}"; d[@"[enter]"] = @"{ENTER}"; m_dAutoTypeConv = d; } MemoryStream ms = new MemoryStream(); MemUtil.CopyStream(sInput, ms); byte[] pbData = ms.ToArray(); ms.Close(); string strFmt = KLRes.FileLoadFailed + MessageService.NewParagraph + KPRes.NoEncNoCompress; // The file must start with "<?xml" if ((pbData.Length < 6) || (pbData[0] != 0x3C) || (pbData[1] != 0x3F) || (pbData[2] != 0x78) || (pbData[3] != 0x6D) || (pbData[4] != 0x6C)) { throw new FormatException(strFmt); } string strData = Encoding.Default.GetString(pbData); strData = strData.Replace(@"&", @"&"); byte[] pbDataUtf8 = StrUtil.Utf8.GetBytes(strData); ms = new MemoryStream(pbDataUtf8, false); StreamReader sr = new StreamReader(ms, StrUtil.Utf8); XmlDocument xmlDoc = XmlUtilEx.CreateXmlDocument(); xmlDoc.Load(sr); XmlNode xmlRoot = xmlDoc.DocumentElement; foreach (XmlNode xmlChild in xmlRoot.ChildNodes) { if (xmlChild.Name == ElemGroup) { ReadGroup(xmlChild, pwStorage.RootGroup, pwStorage); } else if (xmlChild.Name == ElemEntry) { ReadEntry(xmlChild, pwStorage.RootGroup, pwStorage); } else if (xmlChild.Name == ElemUnsupp0) { } else { Debug.Assert(false); } } }
public override void Import(PwDatabase pwStorage, Stream sInput, IStatusLogger slLogger) { MemoryStream ms = new MemoryStream(); MemUtil.CopyStream(sInput, ms); byte[] pbData = ms.ToArray(); ms.Close(); try { string strData = StrUtil.Utf8.GetString(pbData); if (strData.StartsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", StrUtil.CaseIgnoreCmp) && (strData.IndexOf( "WhatSaved=\"Password Safe V3.29\"", StrUtil.CaseIgnoreCmp) >= 0)) { // Fix broken XML exported by Password Safe 3.29; // this has been fixed in 3.30 strData = strData.Replace("<DefaultUsername<![CDATA[", "<DefaultUsername><![CDATA["); strData = strData.Replace("<DefaultSymbols<![CDATA[", "<DefaultSymbols><![CDATA["); pbData = StrUtil.Utf8.GetBytes(strData); } } catch (Exception) { Debug.Assert(false); } ms = new MemoryStream(pbData, false); XmlDocument xmlDoc = XmlUtilEx.CreateXmlDocument(); xmlDoc.Load(ms); XmlNode xmlRoot = xmlDoc.DocumentElement; string strLineBreak = "\n"; try { XmlAttributeCollection xac = xmlRoot.Attributes; XmlNode xmlBreak = xac.GetNamedItem(AttribLineBreak); string strBreak = xmlBreak.Value; if (!string.IsNullOrEmpty(strBreak)) { strLineBreak = strBreak; } else { Debug.Assert(false); } } catch (Exception) { Debug.Assert(false); } foreach (XmlNode xmlChild in xmlRoot.ChildNodes) { if (xmlChild.Name == ElemEntry) { ImportEntry(xmlChild, pwStorage, strLineBreak); } } XmlNode xnUse = xmlRoot.SelectSingleNode(XPathUseDefaultUser); if (xnUse != null) { string strUse = XmlUtil.SafeInnerText(xnUse); if (StrUtil.StringToBool(strUse)) { XmlNode xn = xmlRoot.SelectSingleNode(XPathDefaultUser); if ((xn != null) && (pwStorage.DefaultUserName.Length == 0)) { pwStorage.DefaultUserName = XmlUtil.SafeInnerText(xn); if (pwStorage.DefaultUserName.Length > 0) { pwStorage.DefaultUserNameChanged = DateTime.UtcNow; } } } } ms.Close(); }