Пример #1
0
        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);
        }
Пример #2
0
		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;
		}
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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()));
                }
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        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(@"&", @"&amp;");

            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);
                }
            }
        }
Пример #8
0
        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();
        }