connectivity/source/drivers/dbase/DTable.cxx               |    2 
 download.lst                                               |    4 
 external/liborcus/UnpackedTarball_liborcus.mk              |   16 
 external/liborcus/forcepoint-83.patch.1                    |   38 
 external/liborcus/forcepoint-84.patch.1                    |   38 
 external/liborcus/forcepoint-87.patch.1                    |   27 
 external/liborcus/forcepoint-95.patch.1                    |   11 
 external/nss/ExternalProject_nss.mk                        |    4 
 hwpfilter/source/hwpreader.cxx                             |   12 
 include/sfx2/strings.hrc                                   |    2 
 include/sfx2/viewfrm.hxx                                   |    1 
 officecfg/registry/schema/org/openoffice/Office/Common.xcs |   16 
 sfx2/source/view/viewfrm.cxx                               |   40 
 solenv/clang-format/blacklist                              |    1 
 svl/source/passwordcontainer/passwordcontainer.cxx         |  166 ++-
 svl/source/passwordcontainer/passwordcontainer.hxx         |   69 +
 sw/inc/IDocumentMarkAccess.hxx                             |    5 
 sw/inc/deletelistener.hxx                                  |   92 ++
 sw/qa/core/data/rtf/fail/forcepoint-82.rtf                 |   28 
 sw/qa/core/data/rtf/pass/forcepoint-96.rtf                 |    8 
 sw/qa/core/data/rtf/pass/forcepoint104.rtf                 |  571 +++++++++++++
 sw/qa/core/layout/data/tdf122894-4.doc                     |binary
 sw/qa/core/layout/layout.cxx                               |    5 
 sw/qa/extras/layout/data/LIBREOFFICE-UXTSOREL.rtf          |binary
 sw/qa/extras/layout/data/forcepoint102.rtf                 |  178 ++++
 sw/qa/extras/layout/data/forcepoint89.html                 |binary
 sw/qa/extras/layout/data/forcepoint90.rtf                  |    1 
 sw/qa/extras/layout/data/forcepoint91.html                 |binary
 sw/qa/extras/layout/data/forcepoint92.doc                  |binary
 sw/qa/extras/layout/data/forcepoint93-1.rtf                |binary
 sw/qa/extras/layout/data/forcepoint93-2.rtf                |binary
 sw/qa/extras/layout/data/forcepoint94.html                 |binary
 sw/qa/extras/layout/data/forcepoint98.html                 |binary
 sw/qa/extras/layout/data/forcepoint99.html                 |binary
 sw/qa/extras/layout/data/tdf147485-forcepoint.doc          |binary
 sw/qa/extras/layout/layout.cxx                             |   80 +
 sw/qa/extras/uiwriter/uiwriter.cxx                         |    4 
 sw/source/core/doc/DocumentContentOperationsManager.cxx    |   31 
 sw/source/core/doc/docbm.cxx                               |   22 
 sw/source/core/inc/MarkManager.hxx                         |    2 
 sw/source/core/inc/frame.hxx                               |   11 
 sw/source/core/layout/ftnfrm.cxx                           |    3 
 sw/source/core/layout/layact.cxx                           |    3 
 sw/source/core/layout/objectformattertxtfrm.cxx            |   54 -
 sw/source/core/layout/sectfrm.cxx                          |    3 
 sw/source/core/layout/tabfrm.cxx                           |   73 +
 sw/source/core/layout/wsfrm.cxx                            |    2 
 sw/source/core/text/itratr.cxx                             |    2 
 sw/source/core/text/itrform2.cxx                           |   15 
 sw/source/core/text/itrform2.hxx                           |    2 
 sw/source/core/text/porfld.cxx                             |   13 
 sw/source/core/text/porlay.cxx                             |    4 
 sw/source/core/text/porrst.cxx                             |    2 
 sw/source/core/text/txtfrm.cxx                             |    8 
 sw/source/core/undo/unbkmk.cxx                             |    2 
 sw/source/core/undo/undobj.cxx                             |    2 
 sw/source/ui/misc/bookmark.cxx                             |    2 
 sw/source/uibase/dochdl/swdtflvr.cxx                       |    4 
 sw/source/uibase/shells/textsh1.cxx                        |    2 
 sw/source/uibase/utlui/content.cxx                         |    2 
 sw/source/uibase/utlui/navipi.cxx                          |    2 
 ucb/source/ucp/webdav-curl/CurlSession.cxx                 |   79 +
 ucb/source/ucp/webdav-curl/DAVProperties.cxx               |    3 
 ucb/source/ucp/webdav-curl/webdavcontent.cxx               |    4 
 ucb/source/ucp/webdav-curl/webdavresponseparser.cxx        |   19 
 uui/source/iahndl-authentication.cxx                       |    5 
 vcl/source/helper/strhelper.cxx                            |    3 
 vcl/source/outdev/textline.cxx                             |    2 
 writerfilter/source/dmapper/DomainMapperTableManager.cxx   |    2 
 69 files changed, 1630 insertions(+), 172 deletions(-)

New commits:
commit 2930cdcc11a191c2c4f328ac123c7d651f5360dd
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Wed May 4 18:04:14 2022 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:47:57 2022 +0200

    ucb: webdav-curl: if LOCK fails, display error message
    
    Sharepoint may reject LOCK with HTTP/1.1 403 FORBIDDEN
    and then a dialog pops up via UUIInteractionHelper that says
    "Server error message: ."
    
    Let's actually put some error message in the dialog, why not the
    HTTP status line, plus a little prefix to see which method failed.
    
    Change-Id: Ied895787f813c5cddcb18eb4f693d5bfc8c62076
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133835
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit cb64a52afc92891ab853b9bb1294610bb9ca98d0)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133856
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit 061fbad1e33f68726ee5605c7903f4ae219d8539)

diff --git a/ucb/source/ucp/webdav-curl/CurlSession.cxx 
b/ucb/source/ucp/webdav-curl/CurlSession.cxx
index 1c0201cd7680..4fe05ab97e72 100644
--- a/ucb/source/ucp/webdav-curl/CurlSession.cxx
+++ b/ucb/source/ucp/webdav-curl/CurlSession.cxx
@@ -19,6 +19,7 @@
 #include <comphelper/string.hxx>
 
 #include <o3tl/safeint.hxx>
+#include <o3tl/string_view.hxx>
 
 #include <officecfg/Inet.hxx>
 
@@ -752,15 +753,15 @@ struct CurlProcessor
     static auto URIReferenceToURI(CurlSession& rSession, OUString const& 
rURIReference) -> CurlUri;
 
     static auto ProcessRequestImpl(
-        CurlSession& rSession, CurlUri const& rURI, curl_slist* 
pRequestHeaderList,
-        uno::Reference<io::XOutputStream> const* pxOutStream,
+        CurlSession& rSession, CurlUri const& rURI, OUString const& rMethod,
+        curl_slist* pRequestHeaderList, uno::Reference<io::XOutputStream> 
const* pxOutStream,
         uno::Sequence<sal_Int8> const* pInData,
         ::std::pair<::std::vector<OUString> const&, DAVResource&> const* 
pRequestedHeaders,
         ResponseHeaders& rHeaders) -> void;
 
     static auto ProcessRequest(
-        CurlSession& rSession, CurlUri const& rURI, ::std::vector<CurlOption> 
const& rOptions,
-        DAVRequestEnvironment const* pEnv,
+        CurlSession& rSession, CurlUri const& rURI, OUString const& rMethod,
+        ::std::vector<CurlOption> const& rOptions, DAVRequestEnvironment 
const* pEnv,
         ::std::unique_ptr<curl_slist, deleter_from_fn<curl_slist, 
curl_slist_free_all>>
             pRequestHeaderList,
         uno::Reference<io::XOutputStream> const* pxOutStream,
@@ -807,7 +808,8 @@ auto CurlProcessor::URIReferenceToURI(CurlSession& 
rSession, OUString const& rUR
 
 /// main function to initiate libcurl requests
 auto CurlProcessor::ProcessRequestImpl(
-    CurlSession& rSession, CurlUri const& rURI, curl_slist* const 
pRequestHeaderList,
+    CurlSession& rSession, CurlUri const& rURI, OUString const& rMethod,
+    curl_slist* const pRequestHeaderList,
     uno::Reference<io::XOutputStream> const* const pxOutStream,
     uno::Sequence<sal_Int8> const* const pInData,
     ::std::pair<::std::vector<OUString> const&, DAVResource&> const* const 
pRequestedHeaders,
@@ -1007,6 +1009,14 @@ auto CurlProcessor::ProcessRequestImpl(
     }
     else
     {
+        // create message containing the HTTP method and response status line
+        OUString statusLine("\n" + rMethod + "\n=>\n");
+        if (!rHeaders.HeaderFields.empty() && 
!rHeaders.HeaderFields.back().first.empty()
+            && rHeaders.HeaderFields.back().first.front().startsWith("HTTP"))
+        {
+            statusLine += ::rtl::OStringToOUString(
+                rHeaders.HeaderFields.back().first.front().trim(), 
RTL_TEXTENCODING_ASCII_US);
+        }
         switch (statusCode)
         {
             case SC_REQUEST_TIMEOUT:
@@ -1041,7 +1051,7 @@ auto CurlProcessor::ProcessRequestImpl(
                 [[fallthrough]];
             }
             default:
-                throw DAVException(DAVException::DAV_HTTP_ERROR, "", 
statusCode);
+                throw DAVException(DAVException::DAV_HTTP_ERROR, statusLine, 
statusCode);
         }
     }
 
@@ -1098,8 +1108,8 @@ static auto TryRemoveExpiredLockToken(CurlSession& 
rSession, CurlUri const& rURI
 }
 
 auto CurlProcessor::ProcessRequest(
-    CurlSession& rSession, CurlUri const& rURI, ::std::vector<CurlOption> 
const& rOptions,
-    DAVRequestEnvironment const* const pEnv,
+    CurlSession& rSession, CurlUri const& rURI, OUString const& rMethod,
+    ::std::vector<CurlOption> const& rOptions, DAVRequestEnvironment const* 
const pEnv,
     ::std::unique_ptr<curl_slist, deleter_from_fn<curl_slist, 
curl_slist_free_all>>
         pRequestHeaderList,
     uno::Reference<io::XOutputStream> const* const pxOutStream,
@@ -1293,7 +1303,7 @@ auto CurlProcessor::ProcessRequest(
 
         try
         {
-            ProcessRequestImpl(rSession, rURI, pRequestHeaderList.get(), 
&xTempOutStream,
+            ProcessRequestImpl(rSession, rURI, rMethod, 
pRequestHeaderList.get(), &xTempOutStream,
                                pxInStream ? &data : nullptr, 
pRequestedHeaders, headers);
             if (pxOutStream)
             { // only copy to result stream if transfer was successful
@@ -1482,7 +1492,8 @@ auto CurlSession::OPTIONS(OUString const& rURIReference,
         g_NoBody, { CURLOPT_CUSTOMREQUEST, "OPTIONS", "CURLOPT_CUSTOMREQUEST" }
     };
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
nullptr, nullptr, &headers);
+    CurlProcessor::ProcessRequest(*this, uri, "OPTIONS", options, &rEnv, 
nullptr, nullptr, nullptr,
+                                  &headers);
 
     for (auto const& it : result.properties)
     {
@@ -1626,7 +1637,7 @@ auto CurlProcessor::PropFind(
     assert(xResponseInStream.is());
     assert(xResponseOutStream.is());
 
-    CurlProcessor::ProcessRequest(rSession, rURI, options, &rEnv, 
::std::move(pList),
+    CurlProcessor::ProcessRequest(rSession, rURI, "PROPFIND", options, &rEnv, 
::std::move(pList),
                                   &xResponseOutStream, &xRequestInStream, 
nullptr);
 
     if (o_pResourceInfos)
@@ -1774,8 +1785,8 @@ auto CurlSession::PROPPATCH(OUString const& rURIReference,
         { CURLOPT_INFILESIZE_LARGE, len, nullptr, CurlOption::Type::CurlOffT }
     };
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, 
::std::move(pList), nullptr,
-                                  &xRequestInStream, nullptr);
+    CurlProcessor::ProcessRequest(*this, uri, "PROPPATCH", options, &rEnv, 
::std::move(pList),
+                                  nullptr, &xRequestInStream, nullptr);
 }
 
 auto CurlSession::HEAD(OUString const& rURIReference, ::std::vector<OUString> 
const& rHeaderNames,
@@ -1790,7 +1801,8 @@ auto CurlSession::HEAD(OUString const& rURIReference, 
::std::vector<OUString> co
     ::std::pair<::std::vector<OUString> const&, DAVResource&> const 
headers(rHeaderNames,
                                                                             
io_rResource);
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
nullptr, nullptr, &headers);
+    CurlProcessor::ProcessRequest(*this, uri, "HEAD", options, &rEnv, nullptr, 
nullptr, nullptr,
+                                  &headers);
 }
 
 auto CurlSession::GET(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv)
@@ -1812,8 +1824,8 @@ auto CurlSession::GET(OUString const& rURIReference, 
DAVRequestEnvironment const
 
     ::std::vector<CurlOption> const options{ { CURLOPT_HTTPGET, 1L, nullptr } 
};
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
&xResponseOutStream, nullptr,
-                                  nullptr);
+    CurlProcessor::ProcessRequest(*this, uri, "GET", options, &rEnv, nullptr, 
&xResponseOutStream,
+                                  nullptr, nullptr);
 
     uno::Reference<io::XInputStream> const xResponseInStream(
         io::SequenceInputStream::createStreamFromSequence(m_xContext,
@@ -1832,7 +1844,7 @@ auto CurlSession::GET(OUString const& rURIReference, 
uno::Reference<io::XOutputS
 
     ::std::vector<CurlOption> const options{ { CURLOPT_HTTPGET, 1L, nullptr } 
};
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
&rxOutStream, nullptr,
+    CurlProcessor::ProcessRequest(*this, uri, "GET", options, &rEnv, nullptr, 
&rxOutStream, nullptr,
                                   nullptr);
 }
 
@@ -1854,8 +1866,8 @@ auto CurlSession::GET(OUString const& rURIReference, 
::std::vector<OUString> con
     ::std::pair<::std::vector<OUString> const&, DAVResource&> const 
headers(rHeaderNames,
                                                                             
io_rResource);
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
&xResponseOutStream, nullptr,
-                                  &headers);
+    CurlProcessor::ProcessRequest(*this, uri, "GET", options, &rEnv, nullptr, 
&xResponseOutStream,
+                                  nullptr, &headers);
 
     uno::Reference<io::XInputStream> const xResponseInStream(
         io::SequenceInputStream::createStreamFromSequence(m_xContext,
@@ -1878,7 +1890,7 @@ auto CurlSession::GET(OUString const& rURIReference, 
uno::Reference<io::XOutputS
     ::std::pair<::std::vector<OUString> const&, DAVResource&> const 
headers(rHeaderNames,
                                                                             
io_rResource);
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
&rxOutStream, nullptr,
+    CurlProcessor::ProcessRequest(*this, uri, "GET", options, &rEnv, nullptr, 
&rxOutStream, nullptr,
                                   &headers);
 }
 
@@ -1924,7 +1936,7 @@ auto CurlSession::PUT(OUString const& rURIReference,
     ::std::vector<CurlOption> const options{ { CURLOPT_INFILESIZE_LARGE, len, 
nullptr,
                                                CurlOption::Type::CurlOffT } };
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, 
::std::move(pList), nullptr,
+    CurlProcessor::ProcessRequest(*this, uri, "PUT", options, &rEnv, 
::std::move(pList), nullptr,
                                   &rxInStream, nullptr);
 }
 
@@ -1964,7 +1976,7 @@ auto CurlSession::POST(OUString const& rURIReference, 
OUString const& rContentTy
     uno::Reference<io::XOutputStream> const xResponseOutStream(xSeqOutStream);
     assert(xResponseOutStream.is());
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, 
::std::move(pList),
+    CurlProcessor::ProcessRequest(*this, uri, "POST", options, &rEnv, 
::std::move(pList),
                                   &xResponseOutStream, &rxInStream, nullptr);
 
     uno::Reference<io::XInputStream> const xResponseInStream(
@@ -2007,8 +2019,8 @@ auto CurlSession::POST(OUString const& rURIReference, 
OUString const& rContentTy
 
     ::std::vector<CurlOption> const options{ { CURLOPT_POST, 1L, nullptr } };
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, 
::std::move(pList), &rxOutStream,
-                                  &rxInStream, nullptr);
+    CurlProcessor::ProcessRequest(*this, uri, "POST", options, &rEnv, 
::std::move(pList),
+                                  &rxOutStream, &rxInStream, nullptr);
 }
 
 auto CurlSession::MKCOL(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv) -> void
@@ -2021,7 +2033,8 @@ auto CurlSession::MKCOL(OUString const& rURIReference, 
DAVRequestEnvironment con
         g_NoBody, { CURLOPT_CUSTOMREQUEST, "MKCOL", "CURLOPT_CUSTOMREQUEST" }
     };
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
nullptr, nullptr, nullptr);
+    CurlProcessor::ProcessRequest(*this, uri, "MKCOL", options, &rEnv, 
nullptr, nullptr, nullptr,
+                                  nullptr);
 }
 
 auto CurlProcessor::MoveOrCopy(CurlSession& rSession, OUString const& 
rSourceURIReference,
@@ -2050,8 +2063,8 @@ auto CurlProcessor::MoveOrCopy(CurlSession& rSession, 
OUString const& rSourceURI
         g_NoBody, { CURLOPT_CUSTOMREQUEST, pMethod, "CURLOPT_CUSTOMREQUEST" }
     };
 
-    CurlProcessor::ProcessRequest(rSession, uriSource, options, &rEnv, 
::std::move(pList), nullptr,
-                                  nullptr, nullptr);
+    CurlProcessor::ProcessRequest(rSession, uriSource, 
OUString::createFromAscii(pMethod), options,
+                                  &rEnv, ::std::move(pList), nullptr, nullptr, 
nullptr);
 }
 
 auto CurlSession::COPY(OUString const& rSourceURIReference, OUString const& 
rDestinationURI,
@@ -2082,7 +2095,8 @@ auto CurlSession::DESTROY(OUString const& rURIReference, 
DAVRequestEnvironment c
         g_NoBody, { CURLOPT_CUSTOMREQUEST, "DELETE", "CURLOPT_CUSTOMREQUEST" }
     };
 
-    CurlProcessor::ProcessRequest(*this, uri, options, &rEnv, nullptr, 
nullptr, nullptr, nullptr);
+    CurlProcessor::ProcessRequest(*this, uri, "DESTROY", options, &rEnv, 
nullptr, nullptr, nullptr,
+                                  nullptr);
 }
 
 auto CurlProcessor::Lock(
@@ -2115,8 +2129,9 @@ auto CurlProcessor::Lock(
     TimeValue startTime;
     osl_getSystemTime(&startTime);
 
-    CurlProcessor::ProcessRequest(rSession, rURI, options, pEnv, 
::std::move(pRequestHeaderList),
-                                  &xResponseOutStream, pxRequestInStream, 
nullptr);
+    CurlProcessor::ProcessRequest(rSession, rURI, "LOCK", options, pEnv,
+                                  ::std::move(pRequestHeaderList), 
&xResponseOutStream,
+                                  pxRequestInStream, nullptr);
 
     ::std::vector<ucb::Lock> const 
acquiredLocks(parseWebDAVLockResponse(xResponseInStream));
     SAL_WARN_IF(acquiredLocks.empty(), "ucb.ucp.webdav.curl",
@@ -2292,8 +2307,8 @@ auto CurlProcessor::Unlock(CurlSession& rSession, CurlUri 
const& rURI,
     ::std::vector<CurlOption> const options{ { CURLOPT_CUSTOMREQUEST, "UNLOCK",
                                                "CURLOPT_CUSTOMREQUEST" } };
 
-    CurlProcessor::ProcessRequest(rSession, rURI, options, pEnv, 
::std::move(pList), nullptr,
-                                  nullptr, nullptr);
+    CurlProcessor::ProcessRequest(rSession, rURI, "UNLOCK", options, pEnv, 
::std::move(pList),
+                                  nullptr, nullptr, nullptr);
 }
 
 auto CurlSession::UNLOCK(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv) -> void
commit cf1fa4900840b94380ae29c8f296356b995b6482
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue May 3 19:11:31 2022 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:47:56 2022 +0200

    ucb: webdav-curl: fix handling of non-standard properties
    
    Sharepoint uses properties like these:
    
    "http://schemas.microsoft.com/repl/resourcetag";
    "urn:schemas-microsoft-com:Win32CreationTime"
    
    They aren't standard and don't match our own ucbprops namespace, and it
    looks like they should be handled by an encoding to a name like
    "<prop:Win32CreationTime xmlns:prop=\"urn:schemas-microsoft-com:\">"
    
    Unfortunately WebDAVResponseParser::endElement() didn't do that when
    handling a PROPFIND reply to get the property names.
    
    This causes a crash when all properties are copied in
    UniversalContentBroker::globalTransfer(), which is called by
    SfxMedium::DoBackup_Impl() when the setting
    "/org.openoffice.Office.Common/Save/Document/CreateBackup"
    is in effect.
    
    Change-Id: I2d6480bfd2f828b6e7fc431ba4b333d95ec12718
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133769
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 65362d63b9019e45d1224ed6d78d4e1d443d6b00)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133727
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    (cherry picked from commit 8a8226630e7e2458835f21f57cb73769ef06c668)

diff --git a/ucb/source/ucp/webdav-curl/DAVProperties.cxx 
b/ucb/source/ucp/webdav-curl/DAVProperties.cxx
index b362d512c52a..78fc5c6fdccc 100644
--- a/ucb/source/ucp/webdav-curl/DAVProperties.cxx
+++ b/ucb/source/ucp/webdav-curl/DAVProperties.cxx
@@ -76,6 +76,9 @@ void DAVProperties::createSerfPropName( OUString const& 
rFullName,
     }
     else
     {
+        // this must not be a URI - WebDAVResponseParser must have converted it
+        // to the "<prop:" form above
+        assert(rFullName.indexOf(':') == -1);
         // Add our namespace to our own properties.
         rName.nspace = "http://ucb.openoffice.org/dav/props/";;
         rName.name
diff --git a/ucb/source/ucp/webdav-curl/webdavresponseparser.cxx 
b/ucb/source/ucp/webdav-curl/webdavresponseparser.cxx
index 6d7902a2f9c3..ae05397d897a 100644
--- a/ucb/source/ucp/webdav-curl/webdavresponseparser.cxx
+++ b/ucb/source/ucp/webdav-curl/webdavresponseparser.cxx
@@ -522,6 +522,15 @@ namespace
         }
     }
 
+    OUString MakePropertyName(WebDAVContext const& rContext)
+    {
+        OUString ret;
+        OString const name(OUStringToOString(rContext.getName(), 
RTL_TEXTENCODING_UTF8));
+        OString const nameSpace(OUStringToOString(rContext.getNamespace(), 
RTL_TEXTENCODING_UTF8));
+        DAVProperties::createUCBPropName(nameSpace.getStr(), name.getStr(), 
ret);
+        return ret;
+    }
+
     void SAL_CALL WebDAVResponseParser::endElement( const OUString& aName )
     {
         const sal_Int32 nLen(aName.getLength());
@@ -531,9 +540,9 @@ namespace
         {
             if(collectThisPropertyAsName())
             {
-                // When collecting property names and parent is prop, just 
append the prop name
-                // to the collection, no need to parse deeper
-                maPropStatNames.push_back(mpContext->getNamespace() + 
mpContext->getName());
+                // name must be encoded as expected by createSerfPropName()
+                OUString const name(MakePropertyName(*mpContext));
+                maPropStatNames.emplace_back(name);
             }
             else
             {
@@ -850,9 +859,7 @@ namespace
                                     && isCollectingProperties())
                                 {
                                     http_dav_ucp::DAVPropertyValue 
aDAVPropertyValue;
-                                    OString const 
name(OUStringToOString(mpContext->getParent()->getName(), 
RTL_TEXTENCODING_UTF8));
-                                    OString const 
nameSpace(OUStringToOString(mpContext->getParent()->getNamespace(), 
RTL_TEXTENCODING_UTF8));
-                                    
DAVProperties::createUCBPropName(nameSpace.getStr(), name.getStr(), 
aDAVPropertyValue.Name);
+                                    aDAVPropertyValue.Name = 
MakePropertyName(*mpContext->getParent());
                                     if 
(UCBDeadPropertyValue::createFromXML(m_UCBType, m_UCBValue, 
aDAVPropertyValue.Value))
                                     {
                                         
maPropStatProperties.push_back(aDAVPropertyValue);
commit 2dfacdc8041fc52c76e29cc0fe8d6b79e029bf8a
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Mon May 2 16:44:31 2022 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:45:04 2022 +0200

    tdf#148426 ucb: webdav-curl: fall-back to GET if OPTIONS status 500
    
    With the ndr.de server, OPTIONS on an image URL results in a status 500
    Internal Server Error and an unexpected closed connection:
    
    
16.591:info:ucb.ucp.webdav.curl:1634132:1634170:ucb/source/ucp/webdav-curl/CurlSession.cxx:285:
 debug log: 0x7f9c94004988: transfer closed with 222 bytes remaining to read
    
    Apparently Neon always reported the closed connection problem with a
    string:
    "Could not read response body: connection was closed by server"
    
    The HTTP status code is extracted in makeStatusCode() and the string
    doesn't contain it, so the status is reported as 0 up the stack.
    
    With curl, it can apparently happen that either CURLE_PARTIAL_FILE is
    returned, in which case the status is ignored and reported as 0,
    or CURLE_OK is returned and the status 500 is reported up the stack.
    
    Adapt the handling in Content::open() to fall back to GET in case of a
    500 status.
    
    Change-Id: I5f3dce7f67ce25c87bf3882c89e7ff2d386bcbad
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133707
    Tested-by: Jenkins
    Tested-by: Gabor Kelemen <kelem...@ubuntu.com>
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 5801b887629dbd784116ec6878b61bb99e991647)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133723
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
    (cherry picked from commit 5459e6ef2554005ec045b76195ef1ba813a2dd34)

diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx 
b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
index f159cdf8dd37..0bad0cf927a7 100644
--- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
@@ -2253,7 +2253,9 @@ uno::Any Content::open(
                     DAVOptions aDAVOptions;
                     getResourceOptions( xEnv, aDAVOptions, xResAccess );
 
-                    if ( aDAVOptions.getHttpResponseStatusCode() != SC_NONE )
+                    if (aDAVOptions.getHttpResponseStatusCode() != SC_NONE
+                        // tdf#148426 fall back to GET in case of 500
+                        && aDAVOptions.getHttpResponseStatusCode() != 
SC_INTERNAL_SERVER_ERROR)
                     {
                         // throws exception as if there was a server error, a 
DAV exception
                         throw DAVException( DAVException::DAV_HTTP_ERROR,
commit 0edb39a63b3bcb1a4e2540b1206eb711ac49d848
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Sun Apr 24 21:22:47 2022 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:07:40 2022 +0200

    ofz#46905 Null-dereference
    
    Change-Id: I26427ee1e010ce79e40c550459d9f53598570a7b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133291
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 5f1d341779b9a773e3147542f6b80d4b3547bb43)

diff --git a/vcl/source/outdev/textline.cxx b/vcl/source/outdev/textline.cxx
index 571855dde2b5..0898475e90b2 100644
--- a/vcl/source/outdev/textline.cxx
+++ b/vcl/source/outdev/textline.cxx
@@ -599,6 +599,8 @@ void OutputDevice::ImplDrawStrikeoutChar( long nBaseX, long 
nBaseY,
     int nStrikeStrLen = (nWidth+(nStrikeoutWidth-1)) / nStrikeoutWidth;
     if( nStrikeStrLen > nMaxStrikeStrLen )
         nStrikeStrLen = nMaxStrikeStrLen;
+    else if (nStrikeStrLen < 0)
+        nStrikeStrLen = 0;
 
     // build the strikeout string
     for( int i = nTestStrLen; i < nStrikeStrLen; ++i)
commit 3e59c01644f3a1e9a5ba15c1f3e37ce0ead50c25
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Apr 26 16:51:01 2022 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:07:39 2022 +0200

    ofz#47042 previous use of static variable affecting later runs
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133453
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit 24c7741adcb373b4de508b16deef56343119df26)
    
    Change-Id: I64fb184e43fb025798781c85c9a0a8e0354b21b0

diff --git a/hwpfilter/source/hwpreader.cxx b/hwpfilter/source/hwpreader.cxx
index fa337533b3b3..12eb4960f97f 100644
--- a/hwpfilter/source/hwpreader.cxx
+++ b/hwpfilter/source/hwpreader.cxx
@@ -71,7 +71,6 @@
     rendEl("text:span"); \
     tstart = false
 
-static hchar *field = nullptr;
 static char buf[1024];
 
 namespace
@@ -97,12 +96,13 @@ struct HwpReaderPrivate
         bInHeader = false;
         nPnPos = 0;
         pPn = nullptr;
-
+        pField = nullptr;
     }
     bool bFirstPara;
     bool bInBody;
     bool bInHeader;
     ShowPageNum *pPn;
+    hchar *pField;
     int nPnPos;
 };
 
@@ -2932,7 +2932,7 @@ void HwpReader::make_text_p3(HWPPara * para,bool 
bParaStart)
                 firstspace = 1;
                 if( hbox->type[0] == 4 && hbox->type[1] == 0 )
                 {
-                     field = hbox->str3.get();
+                     d->pField = hbox->str3.get();
                 }
                 else{
                      makeFieldCode(str, hbox);
@@ -2945,7 +2945,7 @@ void HwpReader::make_text_p3(HWPPara * para,bool 
bParaStart)
                 if( hbox->type[0] == 4 && hbox->type[1] == 0 )
                 {
                      makeFieldCode(str, hbox);
-                     field = nullptr;
+                     d->pField = nullptr;
                 }
                 infield = false;
                 str.clear();
@@ -3113,8 +3113,8 @@ void HwpReader::makeFieldCode(hchar_string const & rStr, 
FieldCode const *hbox)
     if( hbox->type[0] == 4 && hbox->type[1] == 0 )
     {
         padd("text:placeholder-type", sXML_CDATA, "text");
-        if( field )
-              padd("text:description", sXML_CDATA, 
reinterpret_cast<sal_Unicode const *>(hconv(field)));
+        if (d->pField)
+              padd("text:description", sXML_CDATA, 
reinterpret_cast<sal_Unicode const *>(hconv(d->pField)));
         rstartEl( "text:placeholder", mxList.get());
         mxList->clear();
         rchars( reinterpret_cast<sal_Unicode const *>(rStr.c_str()) );
commit 670cc9df3dc820fa51700a987198b87907d80d90
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Sat Apr 9 09:56:23 2022 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:07:39 2022 +0200

    ofz#46526 Abrt
    
    Change-Id: Iaec536b0989c4ec11b39b1534c7798e46715d7a0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132710
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 67851564d74bc8108e4802abfeb4fb88f4adf71d)

diff --git a/connectivity/source/drivers/dbase/DTable.cxx 
b/connectivity/source/drivers/dbase/DTable.cxx
index 6bd9ce2bbaf1..f3c15904072e 100644
--- a/connectivity/source/drivers/dbase/DTable.cxx
+++ b/connectivity/source/drivers/dbase/DTable.cxx
@@ -917,7 +917,7 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const 
OSQLColumns & _rCols, bool
             {
                 case DataType::DATE:
                 {
-                    if (aStr.getLength() != nLen)
+                    if (nLen < 8 || aStr.getLength() != nLen)
                     {
                         (_rRow->get())[i]->setNull();
                         break;
commit 713296ecd30bab02d41fcd23f19afed28d916701
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Mar 22 17:22:22 2022 +0000
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:07:39 2022 +0200

    add Initialization Vectors to password storage
    
    old ones default to the current all zero case and continue to work
    as before
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131974
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 192fa1e3bfc6269f2ebb91716471485a56074aea)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132306
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit ab77587ec300f5c30084471000663c46ddf25dad)
    
    Change-Id: I6fe3b02fafcce1b5e7133e77e76a5118177d77af

diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 3dbb4050d49e..f04172b3ef6d 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -27,6 +27,11 @@
       <info>
         <desc>Contains a container for passwords.</desc>
       </info>
+      <prop oor:name="InitializationVector" oor:type="xs:string">
+        <info>
+          <desc>Contains an initialization vector for the password 
encryption.</desc>
+        </info>
+      </prop>
       <prop oor:name="Password" oor:type="xs:string" oor:localized="false">
         <info>
           <desc>Contains a password encoded with the master password.</desc>
@@ -923,6 +928,11 @@
         </info>
         <value>false</value>
       </prop>
+      <prop oor:name="MasterInitializationVector" oor:type="xs:string">
+        <info>
+          <desc>Contains an initialization vector for the master password 
encryption.</desc>
+        </info>
+      </prop>
       <prop oor:name="Master" oor:type="xs:string" oor:nillable="false">
         <info>
           <desc>Contains the master password encrypted by itself.</desc>
diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx 
b/svl/source/passwordcontainer/passwordcontainer.cxx
index ff0b40df4016..380188ef495c 100644
--- a/svl/source/passwordcontainer/passwordcontainer.cxx
+++ b/svl/source/passwordcontainer/passwordcontainer.cxx
@@ -184,15 +184,18 @@ PassMap StorageItem::getInfo()
 
     Sequence< OUString > aNodeNames     = ConfigItem::GetNodeNames( "Store" );
     sal_Int32 aNodeCount = aNodeNames.getLength();
-    Sequence< OUString > aPropNames( aNodeCount );
+    Sequence< OUString > aPropNames( aNodeCount * 2);
 
     std::transform(aNodeNames.begin(), aNodeNames.end(), aPropNames.begin(),
         [](const OUString& rName) -> OUString {
             return "Store/Passwordstorage['" + rName + "']/Password"; });
+    std::transform(aNodeNames.begin(), aNodeNames.end(), aPropNames.getArray() 
+ aNodeCount,
+        [](const OUString& rName) -> OUString {
+            return "Store/Passwordstorage['" + rName + 
"']/InitializationVector"; });
 
     Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aPropNames );
 
-    if( aPropertyValues.getLength() != aNodeCount )
+    if( aPropertyValues.getLength() != aNodeCount * 2)
     {
         OSL_FAIL( "Problems during reading" );
         return aResult;
@@ -208,14 +211,16 @@ PassMap StorageItem::getInfo()
             OUString aName = aUrlUsr[1];
 
             OUString aEPasswd;
+            OUString aIV;
             aPropertyValues[aNodeInd] >>= aEPasswd;
+            aPropertyValues[aNodeInd + aNodeCount] >>= aIV;
 
             PassMap::iterator aIter = aResult.find( aUrl );
             if( aIter != aResult.end() )
-                aIter->second.emplace_back( aName, aEPasswd );
+                aIter->second.emplace_back( aName, aEPasswd, aIV );
             else
             {
-                NamePassRecord aNewRecord( aName, aEPasswd );
+                NamePassRecord aNewRecord( aName, aEPasswd, aIV );
                 std::vector< NamePassRecord > listToAdd( 1, aNewRecord );
 
                 aResult.insert( PairUrlRecord( aUrl, listToAdd ) );
@@ -279,17 +284,19 @@ sal_Int32 StorageItem::getStorageVersion()
     return nResult;
 }
 
-bool StorageItem::getEncodedMP( OUString& aResult )
+bool StorageItem::getEncodedMP( OUString& aResult, OUString& aResultIV )
 {
     if( hasEncoded )
     {
         aResult = mEncoded;
+        aResultIV = mEncodedIV;
         return true;
     }
 
-    Sequence< OUString > aNodeNames( 2 );
+    Sequence< OUString > aNodeNames( 3 );
     aNodeNames[0] = "HasMaster";
     aNodeNames[1] = "Master";
+    aNodeNames[2] = "MasterInitializationVector";
 
     Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aNodeNames );
 
@@ -301,32 +308,37 @@ bool StorageItem::getEncodedMP( OUString& aResult )
 
     aPropertyValues[0] >>= hasEncoded;
     aPropertyValues[1] >>= mEncoded;
+    aPropertyValues[2] >>= mEncodedIV;
 
     aResult = mEncoded;
+    aResultIV = mEncodedIV;
 
     return hasEncoded;
 }
 
 
-void StorageItem::setEncodedMP( const OUString& aEncoded, bool bAcceptEmpty )
+void StorageItem::setEncodedMP( const OUString& aEncoded, const OUString& 
aEncodedIV, bool bAcceptEmpty )
 {
-    Sequence< OUString > sendNames(3);
-    Sequence< uno::Any > sendVals(3);
+    Sequence< OUString > sendNames(4);
+    Sequence< uno::Any > sendVals(4);
 
     sendNames[0] = "HasMaster";
     sendNames[1] = "Master";
-    sendNames[2] = "StorageVersion";
+    sendNames[2] = "MasterInitializationVector";
+    sendNames[3] = "StorageVersion";
 
     bool bHasMaster = ( !aEncoded.isEmpty() || bAcceptEmpty );
     sendVals[0] <<= bHasMaster;
     sendVals[1] <<= aEncoded;
-    sendVals[2] <<= nCurrentStorageVersion;
+    sendVals[2] <<= aEncodedIV;
+    sendVals[3] <<= nCurrentStorageVersion;
 
     ConfigItem::SetModified();
     ConfigItem::PutProperties( sendNames, sendVals );
 
     hasEncoded = bHasMaster;
     mEncoded = aEncoded;
+    mEncodedIV = aEncodedIV;
 }
 
 
@@ -362,11 +374,13 @@ void StorageItem::update( const OUString& aURL, const 
NamePassRecord& aRecord )
     forIndex.push_back( aURL );
     forIndex.push_back( aRecord.GetUserName() );
 
-    Sequence< beans::PropertyValue > sendSeq(1);
+    Sequence< beans::PropertyValue > sendSeq(2);
 
-    sendSeq[0].Name  = "Store/Passwordstorage['" + createIndex( forIndex ) + 
"']/Password";
+    sendSeq[0].Name  = "Store/Passwordstorage['" + createIndex( { aURL, 
aRecord.GetUserName() } ) + "']/InitializationVector";
+    sendSeq[0].Value <<= aRecord.GetPersistentIV();
 
-    sendSeq[0].Value <<= aRecord.GetPersPasswords();
+    sendSeq[1].Name  = "Store/Passwordstorage['" + createIndex( forIndex ) + 
"']/Password";
+    sendSeq[1].Value <<= aRecord.GetPersPasswords();
 
     ConfigItem::SetModified();
     ConfigItem::SetSetProperties( "Store", sendSeq );
@@ -427,7 +441,7 @@ void SAL_CALL PasswordContainer::disposing( const 
EventObject& )
     }
 }
 
-std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& 
aLine, const OUString& aMasterPasswd, css::task::PasswordRequestMode mode )
+std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& 
aLine, const OUString& aIV, const OUString& aMasterPasswd, 
css::task::PasswordRequestMode mode )
 {
     if( !aMasterPasswd.isEmpty() )
     {
@@ -442,9 +456,16 @@ std::vector< OUString > 
PasswordContainer::DecodePasswords( const OUString& aLin
             for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
                 code[ ind ] = static_cast<char>(aMasterPasswd.copy( ind*2, 2 
).toUInt32(16));
 
+            unsigned char iv[RTL_DIGEST_LENGTH_MD5] = {0};
+            if (!aIV.isEmpty())
+            {
+                for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
+                    iv[ ind ] = static_cast<char>(aIV.copy( ind*2, 2 
).toUInt32(16));
+            }
+
             rtlCipherError result = rtl_cipher_init (
                     aDecoder, rtl_Cipher_DirectionDecode,
-                    code, RTL_DIGEST_LENGTH_MD5, nullptr, 0 );
+                    code, RTL_DIGEST_LENGTH_MD5, iv, RTL_DIGEST_LENGTH_MD5 );
 
             if( result == rtl_Cipher_E_None )
             {
@@ -477,7 +498,7 @@ std::vector< OUString > PasswordContainer::DecodePasswords( 
const OUString& aLin
         "Can't decode!", css::uno::Reference<css::uno::XInterface>(), mode);
 }
 
-OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& 
lines, const OUString& aMasterPasswd )
+OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& 
lines, const OUString& aIV, const OUString& aMasterPasswd)
 {
     if( !aMasterPasswd.isEmpty() )
     {
@@ -494,9 +515,16 @@ OUString PasswordContainer::EncodePasswords(const 
std::vector< OUString >& lines
             for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
                 code[ ind ] = static_cast<char>(aMasterPasswd.copy( ind*2, 2 
).toUInt32(16));
 
+            unsigned char iv[RTL_DIGEST_LENGTH_MD5] = {0};
+            if (!aIV.isEmpty())
+            {
+                for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
+                    iv[ ind ] = static_cast<char>(aIV.copy( ind*2, 2 
).toUInt32(16));
+            }
+
             rtlCipherError result = rtl_cipher_init (
                     aEncoder, rtl_Cipher_DirectionEncode,
-                    code, RTL_DIGEST_LENGTH_MD5, nullptr, 0 );
+                    code, RTL_DIGEST_LENGTH_MD5, iv, RTL_DIGEST_LENGTH_MD5 );
 
             if( result == rtl_Cipher_E_None )
             {
@@ -564,7 +592,7 @@ void PasswordContainer::UpdateVector( const OUString& aURL, 
std::vector< NamePas
 
             if( aRecord.HasPasswords( PERSISTENT_RECORD ) )
             {
-                aNPIter.SetPersPasswords( aRecord.GetPersPasswords() );
+                aNPIter.SetPersPasswords( aRecord.GetPersPasswords(), 
aRecord.GetPersistentIV() );
 
                 if( writeFile )
                 {
@@ -597,7 +625,8 @@ UserRecord PasswordContainer::CopyToUserRecord( const 
NamePassRecord& aRecord, b
     {
         try
         {
-            ::std::vector< OUString > aDecodedPasswords = DecodePasswords( 
aRecord.GetPersPasswords(), GetMasterPassword( aHandler ), 
css::task::PasswordRequestMode_PASSWORD_ENTER );
+            ::std::vector< OUString > aDecodedPasswords = DecodePasswords( 
aRecord.GetPersPasswords(), aRecord.GetPersistentIV(),
+                                                                           
GetMasterPassword( aHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER );
             aPasswords.insert( aPasswords.end(), aDecodedPasswords.begin(), 
aDecodedPasswords.end() );
         }
         catch( NoMasterException& )
@@ -642,6 +671,19 @@ void SAL_CALL PasswordContainer::addPersistent( const 
OUString& Url, const OUStr
     PrivateAdd( Url, UserName, Passwords, PERSISTENT_RECORD, aHandler );
 }
 
+OUString PasswordContainer::createIV()
+{
+    rtlRandomPool randomPool = mRandomPool.get();
+    unsigned char iv[RTL_DIGEST_LENGTH_MD5];
+    rtl_random_getBytes(randomPool, iv, RTL_DIGEST_LENGTH_MD5);
+    OUStringBuffer aBuffer;
+    for (sal_uInt8 i : iv)
+    {
+        aBuffer.append(OUString::number(i >> 4, 16));
+        aBuffer.append(OUString::number(i & 15, 16));
+    }
+    return aBuffer.makeStringAndClear();
+}
 
 void PasswordContainer::PrivateAdd( const OUString& Url, const OUString& 
UserName, const Sequence< OUString >& Passwords, char Mode, const Reference< 
XInteractionHandler >& aHandler )
 {
@@ -649,7 +691,11 @@ void PasswordContainer::PrivateAdd( const OUString& Url, 
const OUString& UserNam
     ::std::vector< OUString > aStorePass = comphelper::sequenceToContainer< 
std::vector<OUString> >( Passwords );
 
     if( Mode == PERSISTENT_RECORD )
-        aRecord.SetPersPasswords( EncodePasswords( aStorePass, 
GetMasterPassword( aHandler ) ) );
+    {
+        OUString sIV = createIV();
+        OUString sEncodedPasswords = EncodePasswords( aStorePass, sIV, 
GetMasterPassword( aHandler ) );
+        aRecord.SetPersPasswords( sEncodedPasswords, sIV );
+    }
     else if( Mode == MEMORY_RECORD )
         aRecord.SetMemPasswords( aStorePass );
     else
@@ -842,10 +888,10 @@ OUString const & PasswordContainer::GetMasterPassword( 
const Reference< XInterac
 
     if( m_aMasterPasswd.isEmpty() && aHandler.is() )
     {
-        OUString aEncodedMP;
+        OUString aEncodedMP, aEncodedMPIV;
         bool bDefaultPassword = false;
 
-        if( !m_pStorageFile->getEncodedMP( aEncodedMP ) )
+        if( !m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) )
             aRMode = PasswordRequestMode_PASSWORD_CREATE;
         else if ( aEncodedMP.isEmpty() )
         {
@@ -867,14 +913,15 @@ OUString const & PasswordContainer::GetMasterPassword( 
const Reference< XInterac
                         m_aMasterPasswd = aPass;
                         std::vector< OUString > aMaster( 1, m_aMasterPasswd );
 
-                        m_pStorageFile->setEncodedMP( EncodePasswords( 
aMaster, m_aMasterPasswd ) );
+                        OUString sIV = createIV();
+                        m_pStorageFile->setEncodedMP( EncodePasswords( 
aMaster, sIV, m_aMasterPasswd ), sIV );
                     }
                     else
                     {
                         if (m_pStorageFile->getStorageVersion() == 0)
                             aPass = ReencodeAsOldHash(aPass);
 
-                        std::vector< OUString > aRM( DecodePasswords( 
aEncodedMP, aPass, aRMode ) );
+                        std::vector< OUString > aRM( DecodePasswords( 
aEncodedMP, aEncodedMPIV, aPass, aRMode ) );
                         if( aRM.empty() || aPass != aRM[0] )
                         {
                             bAskAgain = true;
@@ -1031,7 +1078,8 @@ Sequence< UrlRecord > SAL_CALL 
PasswordContainer::getAllPersistent( const Refere
             {
                 sal_Int32 oldLen = aUsers.getLength();
                 aUsers.realloc( oldLen + 1 );
-                aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), 
comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), 
GetMasterPassword( xHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ) 
) );
+                aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), 
comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), 
aNP.GetPersistentIV(),
+                                                                               
                                     GetMasterPassword( xHandler ), 
css::task::PasswordRequestMode_PASSWORD_ENTER ) ) );
             }
 
         if( aUsers.hasElements() )
@@ -1048,12 +1096,12 @@ Sequence< UrlRecord > SAL_CALL 
PasswordContainer::getAllPersistent( const Refere
 sal_Bool SAL_CALL PasswordContainer::authorizateWithMasterPassword( const 
uno::Reference< task::XInteractionHandler >& xHandler )
 {
     bool bResult = false;
-    OUString aEncodedMP;
+    OUString aEncodedMP, aEncodedMPIV;
     uno::Reference< task::XInteractionHandler > xTmpHandler = xHandler;
     ::osl::MutexGuard aGuard( mMutex );
 
     // the method should fail if there is no master password
-    if( m_pStorageFile && m_pStorageFile->useStorage() && 
m_pStorageFile->getEncodedMP( aEncodedMP ) )
+    if( m_pStorageFile && m_pStorageFile->useStorage() && 
m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) )
     {
         if ( aEncodedMP.isEmpty() )
         {
@@ -1122,8 +1170,8 @@ sal_Bool SAL_CALL 
PasswordContainer::changeMasterPassword( const uno::Reference<
 
         bool bCanChangePassword = true;
         // if there is already a stored master password it should be entered 
by the user before the change happen
-        OUString aEncodedMP;
-        if( !m_aMasterPasswd.isEmpty() || m_pStorageFile->getEncodedMP( 
aEncodedMP ) )
+        OUString aEncodedMP, aEncodedMPIV;
+        if( !m_aMasterPasswd.isEmpty() || m_pStorageFile->getEncodedMP( 
aEncodedMP, aEncodedMPIV ) )
             bCanChangePassword = authorizateWithMasterPassword( xTmpHandler );
 
         if ( bCanChangePassword )
@@ -1142,7 +1190,8 @@ sal_Bool SAL_CALL 
PasswordContainer::changeMasterPassword( const uno::Reference<
                 // store the new master password
                 m_aMasterPasswd = aPass;
                 std::vector< OUString > aMaster( 1, m_aMasterPasswd );
-                m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, 
m_aMasterPasswd ) );
+                OUString aIV = createIV();
+                m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, aIV, 
m_aMasterPasswd ), aIV );
 
                 // store all the entries with the new password
                 for ( const auto& rURL : aPersistent )
@@ -1167,7 +1216,7 @@ void SAL_CALL PasswordContainer::removeMasterPassword()
     if ( m_pStorageFile )
     {
         m_aMasterPasswd.clear();
-        m_pStorageFile->setEncodedMP( OUString() ); // let the master password 
be removed from configuration
+        m_pStorageFile->setEncodedMP( OUString(), OUString() ); // let the 
master password be removed from configuration
     }
 }
 
@@ -1178,8 +1227,8 @@ sal_Bool SAL_CALL PasswordContainer::hasMasterPassword(  )
     if ( !m_pStorageFile )
         throw uno::RuntimeException();
 
-    OUString aEncodedMP;
-    return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( 
aEncodedMP ) );
+    OUString aEncodedMP, aEncodedMPIV;
+    return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( 
aEncodedMP, aEncodedMPIV ) );
 }
 
 sal_Bool SAL_CALL PasswordContainer::allowPersistentStoring( sal_Bool bAllow )
@@ -1226,8 +1275,8 @@ sal_Bool SAL_CALL 
PasswordContainer::useDefaultMasterPassword( const uno::Refere
 
         bool bCanChangePassword = true;
         // if there is already a stored nondefault master password it should 
be entered by the user before the change happen
-        OUString aEncodedMP;
-        if( m_pStorageFile->getEncodedMP( aEncodedMP ) && 
!aEncodedMP.isEmpty() )
+        OUString aEncodedMP, aEncodedMPIV;
+        if( m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) && 
!aEncodedMP.isEmpty() )
             bCanChangePassword = authorizateWithMasterPassword( xTmpHandler );
 
         if ( bCanChangePassword )
@@ -1244,7 +1293,7 @@ sal_Bool SAL_CALL 
PasswordContainer::useDefaultMasterPassword( const uno::Refere
 
                 // store the empty string to flag the default master password
                 m_aMasterPasswd = aPass;
-                m_pStorageFile->setEncodedMP( OUString(), true );
+                m_pStorageFile->setEncodedMP( OUString(), OUString(), true );
 
                 // store all the entries with the new password
                 for ( const auto& rURL : aPersistent )
@@ -1268,8 +1317,8 @@ sal_Bool SAL_CALL 
PasswordContainer::isDefaultMasterPasswordUsed()
     if ( !m_pStorageFile )
         throw uno::RuntimeException();
 
-    OUString aEncodedMP;
-    return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( 
aEncodedMP ) && aEncodedMP.isEmpty() );
+    OUString aEncodedMP, aEncodedMPIV;
+    return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( 
aEncodedMP, aEncodedMPIV ) && aEncodedMP.isEmpty() );
 }
 
 
diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx 
b/svl/source/passwordcontainer/passwordcontainer.hxx
index cf5c717d0c9e..4e3a6629139e 100644
--- a/svl/source/passwordcontainer/passwordcontainer.hxx
+++ b/svl/source/passwordcontainer/passwordcontainer.hxx
@@ -33,6 +33,7 @@
 #include <unotools/configitem.hxx>
 #include <ucbhelper/interactionrequest.hxx>
 
+#include <rtl/random.h>
 #include <rtl/ref.hxx>
 #include <osl/mutex.hxx>
 
@@ -51,11 +52,12 @@ class NamePassRecord
     ::std::vector< OUString >                      m_aMemPass;
 
     // persistent passwords are encrypted in one string
-    bool                                                  m_bHasPersPass;
+    bool                                           m_bHasPersPass;
     OUString                                       m_aPersPass;
+    OUString                                       m_aPersistentIV;
 
     void InitArrays( bool bHasMemoryList, const ::std::vector< OUString >& 
aMemoryList,
-                     bool bHasPersistentList, const OUString& aPersistentList )
+                     bool bHasPersistentList, const OUString& aPersistentList, 
const OUString& aPersistentIV )
     {
         m_bHasMemPass = bHasMemoryList;
         if ( bHasMemoryList )
@@ -63,7 +65,10 @@ class NamePassRecord
 
         m_bHasPersPass = bHasPersistentList;
         if ( bHasPersistentList )
+        {
             m_aPersPass = aPersistentList;
+            m_aPersistentIV = aPersistentIV;
+        }
     }
 
 public:
@@ -75,11 +80,12 @@ public:
     {
     }
 
-    NamePassRecord( const OUString& aName, const OUString& aPersistentList )
+    NamePassRecord( const OUString& aName, const OUString& aPersistentList, 
const OUString& aPersistentIV )
         : m_aName( aName )
         , m_bHasMemPass( false )
         , m_bHasPersPass( true )
         , m_aPersPass( aPersistentList )
+        , m_aPersistentIV( aPersistentIV )
     {
     }
 
@@ -88,7 +94,8 @@ public:
         , m_bHasMemPass( false )
         , m_bHasPersPass( false )
     {
-        InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, 
aRecord.m_bHasPersPass, aRecord.m_aPersPass );
+        InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass,
+                    aRecord.m_bHasPersPass, aRecord.m_aPersPass, 
aRecord.m_aPersistentIV );
     }
 
     NamePassRecord& operator=( const NamePassRecord& aRecord )
@@ -99,7 +106,9 @@ public:
 
             m_aMemPass.clear();
             m_aPersPass.clear();
-            InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, 
aRecord.m_bHasPersPass, aRecord.m_aPersPass );
+            m_aPersistentIV.clear();
+            InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass,
+                        aRecord.m_bHasPersPass, aRecord.m_aPersPass, 
aRecord.m_aPersistentIV );
         }
         return *this;
     }
@@ -135,15 +144,24 @@ public:
         return OUString();
     }
 
+    OUString GetPersistentIV() const
+    {
+        if ( m_bHasPersPass )
+            return m_aPersistentIV;
+
+        return OUString();
+    }
+
     void SetMemPasswords( const ::std::vector< OUString >& aMemList )
     {
         m_aMemPass = aMemList;
         m_bHasMemPass = true;
     }
 
-    void SetPersPasswords( const OUString& aPersList )
+    void SetPersPasswords( const OUString& aPersList, const OUString& aPersIV )
     {
         m_aPersPass = aPersList;
+        m_aPersistentIV = aPersIV;
         m_bHasPersPass = true;
     }
 
@@ -158,6 +176,7 @@ public:
         {
             m_bHasPersPass = false;
             m_aPersPass.clear();
+            m_aPersistentIV.clear();
         }
     }
 
@@ -181,6 +200,7 @@ private:
     PasswordContainer*     mainCont;
     bool                   hasEncoded;
     OUString        mEncoded;
+    OUString        mEncodedIV;
 
     virtual void            ImplCommit() override;
 
@@ -201,8 +221,8 @@ public:
 
     sal_Int32 getStorageVersion();
 
-    bool getEncodedMP( OUString& aResult );
-    void setEncodedMP( const OUString& aResult, bool bAcceptEnmpty = false );
+    bool getEncodedMP( OUString& aResult, OUString& aResultIV );
+    void setEncodedMP( const OUString& aResult, const OUString& aResultIV, 
bool bAcceptEmpty = false );
     void setUseStorage( bool bUse );
     bool useStorage();
 
@@ -223,6 +243,29 @@ private:
     css::uno::Reference< css::lang::XComponent > mComponent;
     SysCredentialsConfig mUrlContainer;
 
+    class RandomPool
+    {
+    private:
+        rtlRandomPool m_aRandomPool;
+    public:
+        RandomPool() : m_aRandomPool(rtl_random_createPool())
+        {
+        }
+        rtlRandomPool get()
+        {
+            return m_aRandomPool;
+        }
+        ~RandomPool()
+        {
+            // Clean up random pool memory
+            rtl_random_destroyPool(m_aRandomPool);
+        }
+    };
+
+    RandomPool mRandomPool;
+
+    OUString createIV();
+
     /// @throws css::uno::RuntimeException
     css::uno::Sequence< css::task::UserRecord > CopyToUserRecordSequence(
                                         const ::std::vector< NamePassRecord >& 
original,
@@ -273,10 +316,10 @@ css::task::UrlRecord find(
                               const css::uno::Reference< 
css::task::XInteractionHandler >& Handler );
 
     /// @throws css::uno::RuntimeException
-    static ::std::vector< OUString > DecodePasswords( const OUString& aLine, 
const OUString& aMasterPassword, css::task::PasswordRequestMode mode );
+    static ::std::vector< OUString > DecodePasswords( const OUString& aLine, 
const OUString& aIV, const OUString& aMasterPassword, 
css::task::PasswordRequestMode mode );
 
     /// @throws css::uno::RuntimeException
-    static OUString EncodePasswords(const std::vector< OUString >& lines, 
const OUString& aMasterPassword );
+    static OUString EncodePasswords(const std::vector< OUString >& lines, 
const OUString& aIV, const OUString& aMasterPassword );
 
 public:
     PasswordContainer( const css::uno::Reference< 
css::lang::XMultiServiceFactory >& );
commit df05d27336927373bf83664a90156fbe505fc546
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Mar 23 13:03:30 2022 +0000
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:07:39 2022 +0200

    add infobar to prompt to refresh to replace old format
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131976
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit bbd196ff82bda9f66b4ba32a412f10cefe6da60e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132307
    Reviewed-by: Sophie Gautier <so...@libreoffice.org>
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>
    (cherry picked from commit c5d01b11db3c83cb4a89d3b388d78e20dd3990b5)
    
    Change-Id: Id99cbf2b50a4ebf289dae6fc67e22e20afcda35b

diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index 1f21f0a0f186..1db36e733c0c 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -297,6 +297,8 @@
 #define STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK   
NC_("STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK", "The certificate could not be 
validated and the document is only partially signed.")
 #define STR_SIGNATURE_OK                        NC_("STR_SIGNATURE_OK", "This 
document is digitally signed and the signature is valid.")
 #define STR_SIGNATURE_SHOW                      NC_("STR_SIGNATURE_SHOW", 
"Show Signatures")
+#define STR_REFRESH_MASTER_PASSWORD             
NC_("STR_REFRESH_MASTER_PASSWORD", "The master password is stored in an 
outdated format, you should refresh it")
+#define STR_REFRESH_PASSWORD                    NC_("STR_REFRESH_PASSWORD", 
"Refresh Password")
 
 #define STR_CLOSE_PANE                          NC_("STR_CLOSE_PANE", "Close 
Pane")
 #define STR_SFX_DOCK                            NC_("STR_SFX_DOCK", "Dock")
diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx
index fe336ba5f091..cc6a7dae7047 100644
--- a/include/sfx2/viewfrm.hxx
+++ b/include/sfx2/viewfrm.hxx
@@ -61,6 +61,7 @@ protected:
     DECL_LINK(WhatsNewHandler, Button*, void);
     DECL_LINK(SwitchReadOnlyHandler, Button*, void);
     DECL_LINK(SignDocumentHandler, Button*, void);
+    DECL_DLLPRIVATE_LINK(RefreshMasterPasswordHdl, Button*, void);
     SAL_DLLPRIVATE void KillDispatcher_Impl();
 
     virtual                 ~SfxViewFrame() override;
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index c22385427c00..885023465120 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -32,6 +32,7 @@
 #include <com/sun/star/frame/XLoadable.hpp>
 #include <com/sun/star/frame/XLayoutManager.hpp>
 #include <com/sun/star/frame/XComponentLoader.hpp>
+#include <com/sun/star/task/PasswordContainer.hpp>
 #include <officecfg/Office/Common.hxx>
 #include <officecfg/Setup.hxx>
 #include <toolkit/helper/vclunohelper.hxx>
@@ -1307,6 +1308,24 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, 
const SfxHint& rHint )
                     }
                 } //bShowTipOfTheDay
 
+                if (officecfg::Office::Common::Passwords::HasMaster::get() &&
+                    
officecfg::Office::Common::Passwords::StorageVersion::get() == 0)
+                {
+                    // master password stored in deprecated format
+                    VclPtr<SfxInfoBarWindow> pOldMasterPasswordInfoBar =
+                        AppendInfoBar("oldmasterpassword", "",
+                                      SfxResId(STR_REFRESH_MASTER_PASSWORD), 
InfobarType::DANGER, false);
+                    if (pOldMasterPasswordInfoBar)
+                    {
+                        VclPtrInstance<PushButton> const xBtn(&GetWindow());
+                        xBtn->SetText(SfxResId(STR_REFRESH_PASSWORD));
+                        xBtn->SetSizePixel(xBtn->GetOptimalSize());
+                        xBtn->SetClickHdl(LINK(this,
+                           SfxViewFrame, RefreshMasterPasswordHdl));
+                        pOldMasterPasswordInfoBar->addButton(xBtn);
+                    }
+                }
+
                 // read-only infobar if necessary
                 const SfxViewShell *pVSh;
                 const SfxShell *pFSh;
@@ -1467,6 +1486,27 @@ IMPL_LINK_NOARG(SfxViewFrame, SignDocumentHandler, 
Button*, void)
     GetDispatcher()->Execute(SID_SIGNATURE);
 }
 
+IMPL_LINK_NOARG(SfxViewFrame, RefreshMasterPasswordHdl, Button*, void)
+{
+    bool bChanged = false;
+    try
+    {
+        Reference< task::XPasswordContainer2 > xMasterPasswd(
+            
task::PasswordContainer::create(comphelper::getProcessComponentContext()));
+
+        css::uno::Reference<css::frame::XFrame> xFrame = 
GetFrame().GetFrameInterface();
+        css::uno::Reference<css::awt::XWindow> xContainerWindow = 
xFrame->getContainerWindow();
+
+        uno::Reference<task::XInteractionHandler> 
xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(),
+                                                              
xContainerWindow));
+        bChanged = xMasterPasswd->changeMasterPassword(xTmpHandler);
+    }
+    catch (const Exception&)
+    {}
+    if (bChanged)
+        RemoveInfoBar(u"oldmasterpassword");
+}
+
 void SfxViewFrame::Construct_Impl( SfxObjectShell *pObjSh )
 {
     m_pImpl->bResizeInToOut = true;
commit 7e35d53f51bb89ed3cea5f946214afb7d81e1b1e
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Mon Mar 21 20:58:34 2022 +0000
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:04:51 2022 +0200

    make hash encoding match decoding
    
    Seeing as old versions of the hash may be in the users config, add a
    StorageVersion field to the office config Passwords section which
    defaults to 0 to indicate the old hash is in use.
    
    Try the old varient when StorageVersion is 0. When a new encoded master
    password it set write StorageVersion of 1 to indicate a new hash is in
    use and use the new style when StorageVersion is 1.
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132080
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>
    (cherry picked from commit e890f54dbac57f3ab5acf4fbd31222095d3e8ab6)
    
    svl: fix crash if user cancels/closes master password dialog
    
    (regression from d7ba5614d90381d68f880ca7e7c5ef8bbb1b1c43)
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133932
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit bbb8617ece6d946957c2eb96287081029bce530f)
    
    Change-Id: I3174c37a5891bfc849984e0ec5c2c392b9c6e7b1

diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index b39c29fe2214..3dbb4050d49e 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -911,6 +911,12 @@
         </info>
         <value>false</value>
       </prop>
+      <prop oor:name="StorageVersion" oor:type="xs:int" oor:nillable="false">
+        <info>
+          <desc>Specifies what version of encoding scheme the password 
container uses.</desc>
+        </info>
+        <value>0</value>
+      </prop>
       <prop oor:name="HasMaster" oor:type="xs:boolean" oor:nillable="false">
         <info>
           <desc>Specifies if there is a valid master password.</desc>
diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx 
b/svl/source/passwordcontainer/passwordcontainer.cxx
index 02947cd3892c..ff0b40df4016 100644
--- a/svl/source/passwordcontainer/passwordcontainer.cxx
+++ b/svl/source/passwordcontainer/passwordcontainer.cxx
@@ -17,6 +17,8 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+#include <sal/log.hxx>
 
 #include "passwordcontainer.hxx"
 
@@ -259,6 +261,23 @@ bool StorageItem::useStorage()
     return aResult;
 }
 
+sal_Int32 StorageItem::getStorageVersion()
+{
+    Sequence<OUString> aNodeNames { "StorageVersion" };
+
+    Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aNodeNames );
+
+    if( aPropertyValues.getLength() != aNodeNames.getLength() )
+    {
+        OSL_FAIL( "Problems during reading" );
+        return 0;
+    }
+
+    sal_Int32 nResult = 0;
+    aPropertyValues[0] >>= nResult;
+
+    return nResult;
+}
 
 bool StorageItem::getEncodedMP( OUString& aResult )
 {
@@ -291,15 +310,17 @@ bool StorageItem::getEncodedMP( OUString& aResult )
 
 void StorageItem::setEncodedMP( const OUString& aEncoded, bool bAcceptEmpty )
 {
-    Sequence< OUString > sendNames(2);
-    Sequence< uno::Any > sendVals(2);
+    Sequence< OUString > sendNames(3);
+    Sequence< uno::Any > sendVals(3);
 
     sendNames[0] = "HasMaster";
     sendNames[1] = "Master";
+    sendNames[2] = "StorageVersion";
 
     bool bHasMaster = ( !aEncoded.isEmpty() || bAcceptEmpty );
     sendVals[0] <<= bHasMaster;
     sendVals[1] <<= aEncoded;
+    sendVals[2] <<= nCurrentStorageVersion;
 
     ConfigItem::SetModified();
     ConfigItem::PutProperties( sendNames, sendVals );
@@ -800,6 +821,18 @@ OUString PasswordContainer::RequestPasswordFromUser( 
PasswordRequestMode aRMode,
     return aResult;
 }
 
+// Mangle the key to match an old bug
+static OUString ReencodeAsOldHash(const OUString& rPass)
+{
+    OUStringBuffer aBuffer;
+    for (int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ++ind)
+    {
+        unsigned char i = static_cast<char>(rPass.copy(ind * 2, 
2).toUInt32(16));
+        aBuffer.append(static_cast< sal_Unicode >('a' + (i >> 4)));
+        aBuffer.append(static_cast< sal_Unicode >('a' + (i & 15)));
+    }
+    return aBuffer.makeStringAndClear();
+}
 
 OUString const & PasswordContainer::GetMasterPassword( const Reference< 
XInteractionHandler >& aHandler )
 {
@@ -838,6 +871,9 @@ OUString const & PasswordContainer::GetMasterPassword( 
const Reference< XInterac
                     }
                     else
                     {
+                        if (m_pStorageFile->getStorageVersion() == 0)
+                            aPass = ReencodeAsOldHash(aPass);
+
                         std::vector< OUString > aRM( DecodePasswords( 
aEncodedMP, aPass, aRMode ) );
                         if( aRM.empty() || aPass != aRM[0] )
                         {
@@ -1042,6 +1078,13 @@ sal_Bool SAL_CALL 
PasswordContainer::authorizateWithMasterPassword( const uno::R
 
                 do {
                     aPass = RequestPasswordFromUser( aRMode, xTmpHandler );
+
+
+                    if (!aPass.isEmpty() && 
m_pStorageFile->getStorageVersion() == 0)
+                    {
+                        aPass = ReencodeAsOldHash(aPass);
+                    }
+
                     bResult = ( !aPass.isEmpty() && aPass == m_aMasterPasswd );
                     aRMode = PasswordRequestMode_PASSWORD_REENTER; // further 
questions with error notification
                 } while( !bResult && !aPass.isEmpty() );
diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx 
b/svl/source/passwordcontainer/passwordcontainer.hxx
index 09fb7e03629d..cf5c717d0c9e 100644
--- a/svl/source/passwordcontainer/passwordcontainer.hxx
+++ b/svl/source/passwordcontainer/passwordcontainer.hxx
@@ -167,6 +167,10 @@ public:
 typedef ::std::pair< const OUString, ::std::vector< NamePassRecord > > 
PairUrlRecord;
 typedef ::std::map< OUString, ::std::vector< NamePassRecord > > PassMap;
 
+// org.openoffice.Office.Common/Passwords/StorageVersion bump if details of
+// how password details are saved changes. Enables migration from previous
+// schemes.
+constexpr sal_Int32 nCurrentStorageVersion = 1;
 
 class PasswordContainer;
 
@@ -195,6 +199,8 @@ public:
     void remove( const OUString& url, const OUString& rec );
     void clear();
 
+    sal_Int32 getStorageVersion();
+
     bool getEncodedMP( OUString& aResult );
     void setEncodedMP( const OUString& aResult, bool bAcceptEnmpty = false );
     void setUseStorage( bool bUse );
diff --git a/uui/source/iahndl-authentication.cxx 
b/uui/source/iahndl-authentication.cxx
index 4835a485dd2a..5764e62cb1c6 100644
--- a/uui/source/iahndl-authentication.cxx
+++ b/uui/source/iahndl-authentication.cxx
@@ -436,8 +436,9 @@ executeMasterPasswordDialog(
     OUStringBuffer aBuffer;
     for (sal_uInt8 i : aKey)
     {
-        aBuffer.append(static_cast< sal_Unicode >('a' + (i >> 4)));
-        aBuffer.append(static_cast< sal_Unicode >('a' + (i & 15)));
+        // match PasswordContainer::DecodePasswords aMasterPasswd.copy(index * 
2, 2).toUInt32(16));
+        aBuffer.append(OUString::number(i >> 4, 16));
+        aBuffer.append(OUString::number(i & 15, 16));
     }
     rInfo.SetPassword(aBuffer.makeStringAndClear());
 }
commit d5017b6c599009c3f3f05579bfee358ca5f2e301
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Apr 5 21:09:45 2022 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon May 9 10:02:35 2022 +0200

    forcepoint#104 sw: do not delete fieldmark chars in MoveNodeRange()
    
    The problem is that SwXTextTableCursor::mergeRange() wants to move some
    nodes, and the deleteMarks() deletes a fieldmark creating a SaveBookmark
    but it contains the positions relative to the CH_TXT_ATR_FIELD* still in
    the text, while deleting the fieldmark of course removes these.
    
    The SaveBookmark would need to adjust the indexes and store the
    separator position too and the vector would need to be restored in
    reverse order.
    
    But every time the SaveBookmarks are created, they are restored as well,
    so it looks simpler to just suppress deleting the CH_TXT_ATR_FIELD* in
    this case, and inserting them too (latter is already done when copying
    text).
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132531
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 5d41c2461642364b7159398024acccbee12f6e3e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132589
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit c489920f6f497a5bc4a9932eaa8408209b54294c)
    
    Change-Id: I690c6432a38eab6dec10adff74e638f0e52cca55

diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index 736f12e98c8f..3a13761672ef 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -235,9 +235,12 @@ class IDocumentMarkAccess
 
             @param ppMark
             [in] an iterator pointing to the Mark to be deleted.
+            @param isMoveNodes
+            [in] the mark is deleted only temporarily for a node move, do not
+                 remove fieldmark chars.
         */
         virtual std::unique_ptr<ILazyDeleter>
-            deleteMark(const IDocumentMarkAccess::const_iterator_t& ppMark) =0;
+            deleteMark(const IDocumentMarkAccess::const_iterator_t& ppMark, 
bool isMoveNodes) =0;
 
         /** Deletes a mark.
 
diff --git a/sw/qa/core/data/rtf/pass/forcepoint104.rtf 
b/sw/qa/core/data/rtf/pass/forcepoint104.rtf
new file mode 100644
index 000000000000..2effec385394
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint104.rtf
@@ -0,0 +1,571 @@
+{\rtf1\ansi\deflang1045\ftnbj\uc1\deff1
+{\fonttbl{\f0 \froman \fcharset238 Times New Roman;}{\f1 \fswiss 
\fcharset23838 Arial;}{\f2 \fnil \fcharset238 Wingdings;}{\f3 \froman 
\fcharset23838 Times New Roman;}{\f4 \fswiss \fcharset238 Arial;}{\f5 \fswiss 
\fcharset238 Times New Roman;}{\f6 \fswiss \fcharset23838 
+Lucida Sans;}{\f7 \froman \fcharset238 Symbol;}{\f8 \fswiss \fcharset238 
Lucida Sans;}{\f9 \froman \fcharset238 Times New Roman;}{\f10 \fnil Courier 
New;}}
+{\colortbl ;\red255\green255\blue255 ;\red0\green0\blue0 
;\red0\green64\blue128 ;\red255\green255\blue128 ;\red0\green0\blue255 
;\red0\green0\blue160 ;\red0\green0\blue0 ;\red0\green0\blue0 
;\red0\green0\blue0 ;\red131\green58\blue20 ;\red164\green79\blue36 
+;\red162\green78\blue34 ;\red255\green255\blue255 ;\red254\green255\blue255 
;\red250\green255\blue255 ;\red251\green255\blue255 ;\red27\green10\blue0 
;\red195\green114\blue46 ;\red252\green255\blue255 ;\red249\green255\blue255 
;\red17\green7\blue0 ;\red218\green211\blue185 
+;\red179\green89\blue0 ;\red170\green83\blue0 ;\red209\green110\blue0 
;\red237\green167\blue86 ;\red242\green153\blue51 ;\red220\green127\blue19 
;\red0\green0\blue9 ;\red0\green0\blue2 ;\red0\green32\blue0 ;}
+{\stylesheet{\fs20\cf0\cb1\ulc0 Normal;}{\cs1\f3\fs20\cf0\cb1\ulc0 Default 
Paragraph Font;}{\s2\f3\fs24\cf0\cb1\ulc2 TOC 
1;}{\s3\f3\fs24\cf0\cb1\ulc2\li180 TOC 2;}{\s4\f3\fs24\cf0\cb1\ulc2\li360 TOC 
3;}{\s5\f3\fs24\cf0\cb1\ulc2\li540 TOC 4;}{\s6\f3\fs24\cf0\cb1\ulc2\li720 
+TOC 5;}{\s7\f3\fs24\cf0\cb1\ulc2\li900 TOC 6;}{\s8\f3\fs24\cf0\cb1\ulc2\li1080 
TOC 7;}{\s9\f3\fs24\cf0\cb1\ulc2\li1260 TOC 
8;}{\s10\f3\fs24\cf0\cb1\ulc2\li1440 TOC 
9;}{\s11\f1\fs32\b\cf3\cb1\ulc0\sb240\sa60 Heading 
1;}{\s12\f1\fs28\b\cf3\cb1\ulc0\sb240\sa60\outlinelevel1 
+Heading 2;}{\s13\f1\fs26\b\cf3\cb1\ulc0\sb240\sa60\outlinelevel2 Heading 
3;}{\s14\f3\fs28\b\cf3\cb1\ulc0\sb240\sa60\outlinalevel3 Heading 
4;}{\s15\f3\fs26\b\i\cf3\cb1\ulc0\sb240\sa60\outlinelevel4 Heading 
5;}{\s16\f3\fs22\b\cf3\cb1\ulc0\sb240\sa60\outlinelevel5 
+Heading 6;}{\s17\f3\fs24\cf3\cb1\ulc0\sb240\sa60\outlinelevel6 Heading 
7;}{\s18\f3\fs24\i\cf0\cb1\ulc0\sb240\sa60\outlinelevel7 Heading 
8;}{\s19\f1\fs22\cf3\cb1\ulc0\sb240\sa60\outlinelevel8 Heading 
9;}{\s20\f1\fs32\b\cf0\cb1\ulc0\sb240\sa60\qc 
Title;}{\s21\f3\fs20\cf0\cb1\ulc0\fi-360\li360{\*\pn\pnlvlbody\pnstart1\pndec\ls0\ilvl0\pnhang
+{\pntxta \'2e}}\ls0\ilvl0 Numbered 
List;}{\s22\f3\fs20\cf0\cb1\ulc0\fi-360\li360{\*\pn\pnlvlblt\ls0\ilvl0\pnhang\pnf7{\pntxtb
 \'b7}}\ls0\ilvl0 Bulleted List;}{\s23\f3\fs20\cf0\cb1\ulc0\sa120 Body 
Text;}{\s24\f3\fs18\cf0\cb1\ulc0\sa120\sl480\slmult1 Body 
+Text 2;}{\s25\f3\fs16\cf0\cb1\ulc0\sa120 Body Text 
3;}{\s26\f3\fs20\cf0\cb1\ulc0 Note Heading;}{\s27\f10\fs20\cf0\cb1\ulc0 Plain 
Text;}{\s28\f3\fs20\b\cf0\cb1\ulc0 Strong;}{\s29\f3\fs20\i\cf0\cb1\ulc0 
Emphasis;}{\s30\f3\fs20\ul\cf5\cb1\ulc0 
Hyperlink;}{\s31\f3\fs20\cf0\cb1\ulc0\tx4320 
+Footer;}{\s32\f3\fs20\cf0\cb1\ulc0\tx4320 Header;}{\s33\f10\fs18\cf0\cb1\ulc0 
Code;}{\cs34\f3\fs20\i\cf3\cb1\ulc2 Field Label;}{\cs35\f3\fs22\b\cf0\cb1\ulc2 
Table Heading;}{\cs36\f6\fs16\b\protect\cf0\cb4\ulc0 
SSBookmark;}{\cs37\f3\fs20\b\ul\cf0\cb1\ulc0(
+Object type;}{\s38\f3\fs20\b\i\cf6\cb1\ulc0 List Header;}}
+{\*\listtable
+{\list\listtemplateid1
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'00.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List1;}\listid1
+}
+{\list\listtemplateid2
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\lerelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List2;}\listid2
+}
+{\list\listtemplateid3
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f9\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\nevelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List3;}\listid3
+}
+{\list\listtemplateid4
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f9\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List4;}\listid4
+}
+{\list\listtemplateid5
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List5;}\listid5
+}
+{\list\listtemplateid6
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List6;}\listid6
+}
+{\list\listtemplateid7
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'00.}{\levelnumbers \'01}\f5\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List7;}\listid7
+}
+{\list\listtemplateid8
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List8;}\listid8
+}
+{\list\listtemplateid9
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List9;}\listid9
+}
+{\list\listtemplateid10
+{\listlevel\level�fc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\meveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List10;}\listid10
+}
+{\list\listtemplateid11
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List11;}\listid11
+}
+{\list\listtemplateid12
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext 
\'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'04.}{\levelnumbers \'01}}
+{\listlevel\Levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext 
\'02\'08.}{\levelnumbers \'01}}
+{\listname List12;}\listid12
+}
+}
+{\*\listoverridetable
+{\listoverride\listid12\listoverridecount0\ls1}
+}
+\paperw11908\paperh16833\margl1440\margr1440\margt1440\margb1440\headery720\footery720\deftab720\formshade\aendnotes\aftnnrlc\pgbrdrhead\pgbrdrfoot
+\sectd\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\headery720\footery720\sbkpage\pgncont\pgndec
+\plain\f1\cf0\fs20
+{\header
+\trowd\trgaph60\trleft0\trrh230
+\clvertalt\clbrdrb\brdrs\brdrw1\cellx3510
+\clvertalt\clbrdrb\brdrs\brdrw1\cellx5760
+\clvertalt\clbrdrb\brdrs\brdrw1\cellx9360
+\pard\intbl\s32\tx4320\ql\lang1033\f0 Model Specification\cell
+\pard\intbl\s32\tx4320\qc\lang1045\f1\lang1033\f0 Phase 01\cell
+\pard\intbl\s32\tx4320\qr\lang1045\f1\lang1033\f0 Page: {\field{\fldinst 
PAGE}{\fldrslt 1}}\cell
+\lang1045\f0\intbl\row
+\pard\s32\tx4320\qr\f1\f0\par\f1}
+{\footer\ql\f5\ulc0\par\f1\ulc2}
+\pard\s20\sb240\sa60\qc\l`ng1033\f5\fs32 Table of 
Contents\par\pard\s0\ql\lang1045\f1\fs20\f5\ulc0\par\pard\s5\tqr\tldot\tx9270\li540\ql\f1\ulc2{\field{\fldinst
 TOC \\o "1-9"}{\fldrslt\f3\ulc0\fs24 Infrastruktura sieciowa\lang1033\f0\tab 
2\par\lang1045\f3 
+Sieci LAN\lang1033\f0\tab 2\par\pard\s6\tqr\tldot\tx9270\li720\ql\lang1045\f3 
201.0.0.0\f0\tab 2\par\f3 201.0.100.136/30 :sie\u263 \'e6 IP\f0\tab 2\par\f3 
201.0.12.0\f0\tab 2\par\f3 201.0.16.0\f0\tab 2\par\f3 201.0.3.0\f0\tab 2\par\f3 
201.0.6.0\f0\tab 
+2\par\f3 ca 201.0.9.0/27\f0\tab 3\par\f3 cpfcpf 201.0.100.124/30\f0\tab 
3\par\f3 DMZ 193.27.6.0\f0\tab 3\par\f3 flink 201.0.100.140/30\f0\tab 3\par\f3 
Internet\f0\tab 3\par\f3 pixcpf 201.0.100.124/30\f0\tab 3\par\f3 prod 
201.0.100.240/29\f0\tab 3\par\f3 
+RA 201.0.9.32/27\f0\tab 3\par\\\\f3 RAO 201.0.9.96/27 :sie\u263 \'e6 IP\f0\tab 
3\par\pard\s5\tqr\tldot\tx9270\li540\ql\f3 Urz\u261 \'b9dzenia\lang1033\f0\tab 
4\par\pard\s6\tqr\tldot\tx9270\li720\ql\lang1045\f3 pix1\f0\tab 4\par\f3 
pix21\f0\tab 4\par\f3 proxy1\f0\tab 
+4\par\f3 proxy21\f0\tab 5\par\f3 sw1\f0\tab 5\par\f3 sw2\f0\tab 5\par\f3 
sw21\f0\tab 5\par\f3 sw22\f0\tab 5\par\f3 sw23\f0\tab 5\par\f3 sw3\f0\tab 
5\par\f3 wentyl1\f0\tab 5\par\f3 wentyl21\f0\tab 
5\par\pard\s2\tqr\tldottx9270\ql}}\lang1033\f0\pard\s2\tqr\tldot\tx9270\ql\par\page\pard\s14\li720\sb240\sa60\ql\lang1045\f1{\*\bkmkstart
 
+Infrastruktura_sieciowa}{\*\bkmkstart 
BKM_82c14eb3_F991_4597_98f0_854dd833f496}\f3\cf3\ulc0\fs28\b Infrastruktura 
sieciowa{\field\fldlock{\*\fldinst 
+MERGEFIELD \lang1033\f0 
Pkg.Name}{\fldrslt}}\lang1033\f0\pard\s14\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\lang1045\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst
 MERGEFIELD \lang1033\f0\ulc0 
Pkg.Notes}{\fldrslt}}\cs36\lang1033\f8\highlight4\ulc0\fs16\b\protect\pard\s0\tqr\tx1170\li720\ql\par\pard\s0\li720\ql\cs1\lang1045\f1\highlight1\ulc2\fs20\b0\protect0\lang1045\f3\ulc0
 
+ \lang1045\f5\par\pard\s14\li720\sb240\sa60\ql\f1\ulc2{\*\bkmkstart 
Sieci_LAN}{\*\bkmkstart 
BKM_BDBBF25a_74dd_4037_B5e1_9d10c2183fbb}\f3\cf3\ulc0\fs28\b 
+Sieci LAN{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Pkg.Name}{\fldrslt}}\lang1033\f0\pard\s14\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\lang1045\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst
 MERGEFIELD \lang1033\f0\ulc0 
Pkg.Notes}{\fldrslt}}\cs36\lang1033\f8\highlight4\ulc0\fs16\b\protect\pard\s0\tqr\tx1170\li720\ql\par
+{\*\bkmkstart 
BKM_523ada47_3e82_4089_ABEB_5b4b9b2a30c7}\cs1\lang1045\f5\highlight1\fs20\b0\protect0\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 201.0.0.0{\field\fldlock{\*\fldinst 
+MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Sie\lang1045\f3\u263 \'e6\lang1045\f3  udost\lang1045\f3\u281 \'ea\lang1045\f3 
pniana klientom Izby za po\lang1045\f3\u347 \'9c\lang1045\f3 
+rednictwem sieci Exatel S.A.\lang1045\f5\par{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\f1\ulc2\pard\par
+\trowd\trgaph60\trleft64816\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIEND \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 201.0.0.0 255.255.255.255 1.0.0.11{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD 
\lang1033\f0 
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_523ada47_3e82_4089_ABEB_5b4b9b2a30c7}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_BFCA7b27_252f_4611_9ad1_4049708dd34a}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+201.0.100.136/30 :sie\u263 \'e6 IP{\field\fldlock{\*\fldinst MERGEFIELD 
\lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst
 MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend 
BKM_BFCA7b27_252f_4611_9ad1_4049708dd34a}}{\fldrslt}}\lang1045\f3\ulc0   
{\*\bkmkstart 
BKM_BB3e912_D587_439e_AAB8_4ea7a3473176}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+201.0.12.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Sie\lang1045\f3\u263 \'e6\lang1045\f3  udost\lang1045\f3\u281 \'ea\lang1045\f3 
pniana klientom 
+Izby za po\lang1045\f3\u347 \'9c\lang1045\f3 rednictwem sieci Exatel 
S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 201.0.12.0 255.255.255.0 201.0.12.11{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Cypryjska{\field\fldlock{\*\fldinst MERGEFIELD 
\lang1033\f0 
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_BB3e912_D587_439e_AAB8_4ea7a3473176}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_B99df3a2_6fcc_4716_953e_A4e4a7e0CFA0}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+201.0.16.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Sie\lang1045\f3\u263 \'e6\lang1045\f3  og\lang1045\f3\u243 \'f3\lang1045\f3 
lna Centrali 
+KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \l`ng1033\f0 
Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3|u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 201.0.16.0 255.255.255.0 201.0.16.242{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Cypryjska{\field\fldlock{\*\fldinst MERGEFIELD 
\lang1033\f0 
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_B99df3a2_6fcc_4716_953e_A4e4a7e0CFA0}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_BBB9F76C_07B9_4f8d_A567_D5772463993e}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+201.0.3.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Sie\lang1045\f3\u263 \'e6\lang1045\f3  udost\lang1045\f3\u281 \'ea\lang1045\f3 
pnia~a klientom 
+Izby za po\lang1045\f3\u347 \'9c\lang1045\f3 rednictwem sieci Exatel 
S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh27y
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 201.0.3.0 255.255.255.0 201.0.3.11{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD 
\lang1033\f0 
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_BBB9f76c_7b9_4f8d_A567_D5772463993e}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_1017804d_216c_4074_B461_668b2d44913d}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+201.0.6.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Sie\lang1045\f3\u263 \'e6\lang1045\f3  og\lang1045\f3\u243 \'f3\lang1045\f3 
lna Centrali 
+KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 201.0.6.0 255.255.255.0 201.0.6.11{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD 
\lang1033\f0 
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_1017804d_216c_4074_B461_668b2d44913d}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_349b5ca7_58e4_4ac5_B66e_ea8b76eb9f9}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+ca 201.0.9.0/27{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Sie\lang1045\f3\u263 \'e6\lang1045\f3  wysoce chroniona; w sieci 
znajduj\lang1045\f3\u261 
+\'b9\lang1045\f3  si\lang1045\f3\u281 \'ea\lang1045\f3  tylko komputery 
urz\lang1045\f3\u281 \'ea\lang1045\f3 d\lang1045\f3\u243 \'f3\lang1045\f3 w 
certyfikacyjnych KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 201.0.9.0 255.255.255.224 201.0.9.30{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Cypryjska, o\lang1045\f3\u347 \'9c\lang1045\f3 
+rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_349b5ca7_58e4_4ac5_B66e_ea8b76eb9f9}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_D47641b5_A5d7_43da_9626_EB144f57febb}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+cpfcpf 201.0.100.124/30{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst
 MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend 
BKM_D47641b5_A5d7_43da_9626_EB144f57febb}}{\fldrslt}}\lang1045\f3\ulc0   
{\*\bkmkstart 
BKM_8629b55b_E004_472b_B1f1_C683250e6b6}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+DMZ 193.27.6.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Strefa zdemilitaryzowana po\lang1045\f3\u322 \'b3\u261 \'b9\lang1045\f3 czenia 
z Internetem 
+w KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = 
\lang1045\f3 193.27.6.0 255.255.255.240 <brak>{\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 
+.  {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 
Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Name}{\fldrslt}}\lang1045\f5  = \lang1045\f3 o\lang1045\f3\u347 
\'9c\lang1045\f3 rodek Cypryjska, o\lang1045\f3\u347 \'9c\lang1045\f3 
+rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
ElementTagVal.Value}{\fldrslt}}\lang1045\f5 .  {\field\fldlock{\*\fldinst 
MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend 
BKM_8629b55b_E004_472b_B1f1_C683250e6b6}\lang1045\f3\ulc0   {\*\bkmkstart 
BKM_9cf66f6c_07D5_46d4_B5E4_6785020AE1C6}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+flink 201.0.100.140/30{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst
 MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend 
BKM_9cf66f6c_07D5_46d4_B5E4_6785020AE1C6}}{\fldrslt}}\lang1045\f3\ulc0   
{\*\bkmkstart 
BKM_FD91271_8e42_4e74_9361_F87b02c663c3}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 
+Internet{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 
Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0
 Globalna sie\lang1045\f3\u263 \'e6\lang1045\f3  
Internet.{\field\fldlock{\*\fldinst 
+MERGEFIELD \lang1033\f0 Element.Notes{\*\bkmkend 
BKM_FD91271_8e42_4e74_9361_F87b02c663c3}}{\fldrslt}}  {\*\bkmkstart 
BKM_C1cc1d21_3f5_4062_9545_5a3bf082e743}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
 

... etc. - the rest is truncated

Reply via email to