vcl/unx/generic/printer/cupsmgr.cxx | 39 +++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-)
New commits: commit 931b63db1ce15b309eb6f879f1da992986bf974d Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sat Aug 17 21:14:58 2019 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sun Aug 18 22:04:17 2019 +0200 Related: tdf#53029 escape backslash in username for 'domain\username' Change-Id: I645623886396b55ccea273bfd697cf319b53f506 Reviewed-on: https://gerrit.libreoffice.org/77651 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx index 7d107de5724d..8d0c6528dbcd 100644 --- a/vcl/unx/generic/printer/cupsmgr.cxx +++ b/vcl/unx/generic/printer/cupsmgr.cxx @@ -745,6 +745,35 @@ namespace } } +namespace +{ + OString EscapeCupsOption(const OString& rIn) + { + OStringBuffer sRet; + sal_Int32 nLen = rIn.getLength(); + for (sal_Int32 i = 0; i < nLen; ++i) + { + switch(rIn[i]) + { + case '\\': + case '\'': + case '\"': + case ',': + case ' ': + case '\f': + case '\n': + case '\r': + case '\t': + case '\v': + sRet.append('\\'); + break; + } + sRet.append(rIn[i]); + } + return sRet.makeStringAndClear(); + } +} + bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTitle, FILE* pFile, const JobData& rDocumentJobData, bool bBanner, const OUString& rFaxNumber ) { SAL_INFO( "vcl.unx.print", "endSpool: " << rPrintername << "," << rJobTitle << " copy count = " << rDocumentJobData.m_nCopies ); @@ -804,18 +833,18 @@ bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTi { OString sAuth; if (bDomain) - sAuth = aDialog.getDomain().replaceAll(",", "\\,"); + sAuth = EscapeCupsOption(aDialog.getDomain()); if (bUser) { - if (!sAuth.isEmpty()) + if (bDomain) sAuth += ","; - sAuth += aDialog.getUserName().replaceAll(",", "\\,"); + sAuth += EscapeCupsOption(aDialog.getUserName()); } if (bPass) { - if (!sAuth.isEmpty()) + if (bUser || bDomain) sAuth += ","; - sAuth += aDialog.getPassword().replaceAll(",", "\\,"); + sAuth += EscapeCupsOption(aDialog.getPassword()); } nNumOptions = cupsAddOption("auth-info", sAuth.getStr(), nNumOptions, &pOptions); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits