diff options
author | Didier Raboud <odyx@debian.org> | 2018-12-05 22:39:35 +0100 |
---|---|---|
committer | Didier Raboud <odyx@debian.org> | 2018-12-05 22:39:54 +0100 |
commit | 4a0cfa1c7722383aeaea92a83a20f0a30a7c2479 (patch) | |
tree | b744f8edd2c161d2e4e8b2dcd0974dcc145063f9 | |
parent | f95c0c80ec771b3eea174f0fff396624dd587b3d (diff) | |
parent | 8fb32a37b3aec835801696e90d4557e1a023ebbe (diff) |
merge patched-debian/master into debian/master
-rw-r--r-- | debian/.git-dpm | 4 | ||||
-rw-r--r-- | debian/patches/0040-Fix-E-option-Issue-5440.patch | 40 | ||||
-rw-r--r-- | debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch | 192 | ||||
-rw-r--r-- | debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch | 77 | ||||
-rw-r--r-- | debian/patches/series | 3 | ||||
-rw-r--r-- | systemv/lpadmin.c | 58 | ||||
-rw-r--r-- | test/5.1-lpadmin.sh | 4 | ||||
-rwxr-xr-x | test/run-stp-tests.sh | 37 |
8 files changed, 87 insertions, 328 deletions
diff --git a/debian/.git-dpm b/debian/.git-dpm index ff70f1017..d00155af9 100644 --- a/debian/.git-dpm +++ b/debian/.git-dpm @@ -1,6 +1,6 @@ # see git-dpm(1) from git-dpm package -4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4 -4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4 +8fb32a37b3aec835801696e90d4557e1a023ebbe +8fb32a37b3aec835801696e90d4557e1a023ebbe 8b4e44a9626844bc5ee50279ead7b312fb263a12 8b4e44a9626844bc5ee50279ead7b312fb263a12 cups_2.2.9.orig.tar.gz diff --git a/debian/patches/0040-Fix-E-option-Issue-5440.patch b/debian/patches/0040-Fix-E-option-Issue-5440.patch new file mode 100644 index 000000000..3a5897d3e --- /dev/null +++ b/debian/patches/0040-Fix-E-option-Issue-5440.patch @@ -0,0 +1,40 @@ +From 8fb32a37b3aec835801696e90d4557e1a023ebbe Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sweet@gmail.com> +Date: Wed, 5 Dec 2018 13:02:09 -0500 +Subject: Fix -E option (Issue #5440) + +--- + systemv/lpadmin.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c +index 6828f8a1d..ee2438c1d 100644 +--- a/systemv/lpadmin.c ++++ b/systemv/lpadmin.c +@@ -1387,12 +1387,6 @@ set_printer_options( + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); + +- if (enable) +- { +- ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE); +- ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); +- } +- + /* + * Add the options... + */ +@@ -1425,6 +1419,13 @@ set_printer_options( + ppdfile = NULL; + + cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); ++ ++ if (enable) ++ { ++ ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE); ++ ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); ++ } ++ + cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER); + + if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL) diff --git a/debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch b/debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch deleted file mode 100644 index 2e388ca22..000000000 --- a/debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch +++ /dev/null @@ -1,192 +0,0 @@ -From 8d088ceb015d4dbf74232dcd47a9d15b4af8024b Mon Sep 17 00:00:00 2001 -From: Didier Raboud <odyx@debian.org> -Date: Mon, 19 Nov 2018 21:51:44 +0100 -Subject: Revert "Fix regression in lpadmin fix (Issue #5305)" - -This reverts commit a83658fac59537cf1caf99791fa7edb0deb95c6f. ---- - systemv/lpadmin.c | 19 +++++-------------- - test/5.1-lpadmin.sh | 4 ++-- - test/run-stp-tests.sh | 37 +++++++++++++++++++++++++++++-------- - 3 files changed, 36 insertions(+), 24 deletions(-) - -diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c -index 6828f8a1d..8ea9f3f7b 100644 ---- a/systemv/lpadmin.c -+++ b/systemv/lpadmin.c -@@ -38,7 +38,7 @@ static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri, - size_t urisize); - static int set_printer_options(http_t *http, char *printer, - int num_options, cups_option_t *options, -- char *file, int enable); -+ char *file); - static int validate_name(const char *name); - - -@@ -56,7 +56,6 @@ main(int argc, /* I - Number of command-line arguments */ - *pclass, /* Printer class name */ - *opt, /* Option pointer */ - *val; /* Pointer to allow/deny value */ -- int enable = 0; /* Enable/resume printer? */ - int num_options; /* Number of options */ - cups_option_t *options; /* Options */ - char *file, /* New PPD file */ -@@ -266,7 +265,8 @@ main(int argc, /* I - Number of command-line arguments */ - } - } - -- enable = 1; -+ if (enable_printer(http, printer)) -+ return (1); - break; - - case 'm' : /* Use the specified standard script/PPD file */ -@@ -649,11 +649,9 @@ main(int argc, /* I - Number of command-line arguments */ - } - } - -- if (set_printer_options(http, printer, num_options, options, file, enable)) -+ if (set_printer_options(http, printer, num_options, options, file)) - return (1); - } -- else if (enable && enable_printer(http, printer)) -- return (1); - - if (evefile[0]) - unlink(evefile); -@@ -1340,8 +1338,7 @@ set_printer_options( - char *printer, /* I - Printer */ - int num_options, /* I - Number of options */ - cups_option_t *options, /* I - Options */ -- char *file, /* I - PPD file */ -- int enable) /* I - Enable printer? */ -+ char *file) /* I - PPD file/interface script */ - { - ipp_t *request; /* IPP Request */ - const char *ppdfile; /* PPD filename */ -@@ -1387,12 +1384,6 @@ set_printer_options( - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); - -- if (enable) -- { -- ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE); -- ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); -- } -- - /* - * Add the options... - */ -diff --git a/test/5.1-lpadmin.sh b/test/5.1-lpadmin.sh -index 08b8c508f..efcfce482 100644 ---- a/test/5.1-lpadmin.sh -+++ b/test/5.1-lpadmin.sh -@@ -52,8 +52,8 @@ echo "" - - echo "Add Shared Printer Test" - echo "" --echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere" --$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere 2>&1 -+echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw" -+$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw 2>&1 - if test $? != 0; then - echo " FAILED" - exit 1 -diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh -index 1176ded56..e704a4eed 100755 ---- a/test/run-stp-tests.sh -+++ b/test/run-stp-tests.sh -@@ -94,35 +94,40 @@ echo "" - case "$testtype" in - 0) - echo "Running in test mode (0)" -- nprinters=0 -+ nprinters1=0 -+ nprinters2=0 - pjobs=0 - pprinters=0 - loglevel="debug2" - ;; - 2) - echo "Running the medium tests (2)" -- nprinters=20 -+ nprinters1=10 -+ nprinters2=20 - pjobs=20 - pprinters=10 - loglevel="debug" - ;; - 3) - echo "Running the extreme tests (3)" -- nprinters=1000 -+ nprinters1=500 -+ nprinters2=1000 - pjobs=100 - pprinters=50 - loglevel="debug" - ;; - 4) - echo "Running the torture tests (4)" -- nprinters=20000 -+ nprinters1=10000 -+ nprinters2=20000 - pjobs=200 - pprinters=100 - loglevel="debug" - ;; - *) - echo "Running the timid tests (1)" -- nprinters=0 -+ nprinters1=0 -+ nprinters2=0 - pjobs=10 - pprinters=0 - loglevel="debug2" -@@ -534,13 +539,13 @@ if test $ssltype != 0 -a `uname` = Darwin; then - fi - - # --# Setup lots of test queues with PPD files... -+# Setup lots of test queues - half with PPD files, half without... - # - - echo "Creating printers.conf for test..." - - i=1 --while test $i -le $nprinters; do -+while test $i -le $nprinters1; do - cat >>$BASE/printers.conf <<EOF - <Printer test-$i> - Accepting Yes -@@ -558,6 +563,22 @@ EOF - i=`expr $i + 1` - done - -+while test $i -le $nprinters2; do -+ cat >>$BASE/printers.conf <<EOF -+<Printer test-$i> -+Accepting Yes -+DeviceURI file:/dev/null -+Info Test raw printer $i -+JobSheets none none -+Location CUPS test suite -+State Idle -+StateMessage Printer $1 is idle. -+</Printer> -+EOF -+ -+ i=`expr $i + 1` -+done -+ - if test -f $BASE/printers.conf; then - cp $BASE/printers.conf $BASE/printers.conf.orig - else -@@ -901,7 +922,7 @@ fi - - # Requests logged - count=`wc -l $BASE/log/access_log | awk '{print $1}'` --expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4` -+expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4` - if test $count != $expected; then - echo "FAIL: $count requests logged, expected $expected." - echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile diff --git a/debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch b/debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch deleted file mode 100644 index ee195744b..000000000 --- a/debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4 Mon Sep 17 00:00:00 2001 -From: Didier Raboud <odyx@debian.org> -Date: Mon, 19 Nov 2018 21:52:11 +0100 -Subject: Revert "Use Enable-Printer and Resume-Printer operations so we don't - create a bogus printer (Issue #5305)" - -This reverts commit 2b4e4ed7d80b47f9aaf6b98aaa85cf2c0e9273a9. ---- - systemv/lpadmin.c | 38 +++++++++++++++++++------------------- - 1 file changed, 19 insertions(+), 19 deletions(-) - -diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c -index 8ea9f3f7b..5b78eb57b 100644 ---- a/systemv/lpadmin.c -+++ b/systemv/lpadmin.c -@@ -1127,33 +1127,33 @@ enable_printer(http_t *http, /* I - Server connection */ - DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer)); - - /* -- * Send IPP_OP_ENABLE_PRINTER and IPP_OP_RESUME_PRINTER requests, which -+ * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which - * require the following attributes: - * - * attributes-charset - * attributes-natural-language - * printer-uri - * requesting-user-name -+ * printer-state -+ * printer-is-accepting-jobs - */ - -- request = ippNewRequest(IPP_OP_ENABLE_PRINTER); -- -- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); -- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); -- -- ippDelete(cupsDoRequest(http, request, "/admin/")); -- -- if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) -- { -- _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); -- -- return (1); -- } -+ if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS) -+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); -+ else -+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER); - -- request = ippNewRequest(IPP_OP_RESUME_PRINTER); -+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, -+ "printer-uri", NULL, uri); -+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, -+ "requesting-user-name", NULL, cupsUser()); -+ ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", -+ IPP_PSTATE_IDLE); -+ ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); - -- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); -- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); -+ /* -+ * Do the request and get back a response... -+ */ - - ippDelete(cupsDoRequest(http, request, "/admin/")); - -@@ -1163,8 +1163,8 @@ enable_printer(http_t *http, /* I - Server connection */ - - return (1); - } -- -- return (0); -+ else -+ return (0); - } - - diff --git a/debian/patches/series b/debian/patches/series index 42f0cff6b..36f10502d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -37,5 +37,4 @@ debianize_cups-config.patch 0037-Build-mantohtml-with-the-build-architecture-compiler.patch 0038-The-lp-and-lpr-commands-now-provide-better-error-mes.patch manpage-translations.patch -0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch -0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch +0040-Fix-E-option-Issue-5440.patch diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c index 5b78eb57b..ee2438c1d 100644 --- a/systemv/lpadmin.c +++ b/systemv/lpadmin.c @@ -38,7 +38,7 @@ static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri, size_t urisize); static int set_printer_options(http_t *http, char *printer, int num_options, cups_option_t *options, - char *file); + char *file, int enable); static int validate_name(const char *name); @@ -56,6 +56,7 @@ main(int argc, /* I - Number of command-line arguments */ *pclass, /* Printer class name */ *opt, /* Option pointer */ *val; /* Pointer to allow/deny value */ + int enable = 0; /* Enable/resume printer? */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ char *file, /* New PPD file */ @@ -265,8 +266,7 @@ main(int argc, /* I - Number of command-line arguments */ } } - if (enable_printer(http, printer)) - return (1); + enable = 1; break; case 'm' : /* Use the specified standard script/PPD file */ @@ -649,9 +649,11 @@ main(int argc, /* I - Number of command-line arguments */ } } - if (set_printer_options(http, printer, num_options, options, file)) + if (set_printer_options(http, printer, num_options, options, file, enable)) return (1); } + else if (enable && enable_printer(http, printer)) + return (1); if (evefile[0]) unlink(evefile); @@ -1127,33 +1129,33 @@ enable_printer(http_t *http, /* I - Server connection */ DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer)); /* - * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which + * Send IPP_OP_ENABLE_PRINTER and IPP_OP_RESUME_PRINTER requests, which * require the following attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name - * printer-state - * printer-is-accepting-jobs */ - if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS) - request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); - else - request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER); + request = ippNewRequest(IPP_OP_ENABLE_PRINTER); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, - "printer-uri", NULL, uri); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, - "requesting-user-name", NULL, cupsUser()); - ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", - IPP_PSTATE_IDLE); - ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); - /* - * Do the request and get back a response... - */ + ippDelete(cupsDoRequest(http, request, "/admin/")); + + if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) + { + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); + + return (1); + } + + request = ippNewRequest(IPP_OP_RESUME_PRINTER); + + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippDelete(cupsDoRequest(http, request, "/admin/")); @@ -1163,8 +1165,8 @@ enable_printer(http_t *http, /* I - Server connection */ return (1); } - else - return (0); + + return (0); } @@ -1338,7 +1340,8 @@ set_printer_options( char *printer, /* I - Printer */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ - char *file) /* I - PPD file/interface script */ + char *file, /* I - PPD file */ + int enable) /* I - Enable printer? */ { ipp_t *request; /* IPP Request */ const char *ppdfile; /* PPD filename */ @@ -1416,6 +1419,13 @@ set_printer_options( ppdfile = NULL; cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); + + if (enable) + { + ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE); + ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); + } + cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER); if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL) diff --git a/test/5.1-lpadmin.sh b/test/5.1-lpadmin.sh index efcfce482..08b8c508f 100644 --- a/test/5.1-lpadmin.sh +++ b/test/5.1-lpadmin.sh @@ -52,8 +52,8 @@ echo "" echo "Add Shared Printer Test" echo "" -echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw" -$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw 2>&1 +echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere" +$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere 2>&1 if test $? != 0; then echo " FAILED" exit 1 diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh index e704a4eed..1176ded56 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh @@ -94,40 +94,35 @@ echo "" case "$testtype" in 0) echo "Running in test mode (0)" - nprinters1=0 - nprinters2=0 + nprinters=0 pjobs=0 pprinters=0 loglevel="debug2" ;; 2) echo "Running the medium tests (2)" - nprinters1=10 - nprinters2=20 + nprinters=20 pjobs=20 pprinters=10 loglevel="debug" ;; 3) echo "Running the extreme tests (3)" - nprinters1=500 - nprinters2=1000 + nprinters=1000 pjobs=100 pprinters=50 loglevel="debug" ;; 4) echo "Running the torture tests (4)" - nprinters1=10000 - nprinters2=20000 + nprinters=20000 pjobs=200 pprinters=100 loglevel="debug" ;; *) echo "Running the timid tests (1)" - nprinters1=0 - nprinters2=0 + nprinters=0 pjobs=10 pprinters=0 loglevel="debug2" @@ -539,13 +534,13 @@ if test $ssltype != 0 -a `uname` = Darwin; then fi # -# Setup lots of test queues - half with PPD files, half without... +# Setup lots of test queues with PPD files... # echo "Creating printers.conf for test..." i=1 -while test $i -le $nprinters1; do +while test $i -le $nprinters; do cat >>$BASE/printers.conf <<EOF <Printer test-$i> Accepting Yes @@ -563,22 +558,6 @@ EOF i=`expr $i + 1` done -while test $i -le $nprinters2; do - cat >>$BASE/printers.conf <<EOF -<Printer test-$i> -Accepting Yes -DeviceURI file:/dev/null -Info Test raw printer $i -JobSheets none none -Location CUPS test suite -State Idle -StateMessage Printer $1 is idle. -</Printer> -EOF - - i=`expr $i + 1` -done - if test -f $BASE/printers.conf; then cp $BASE/printers.conf $BASE/printers.conf.orig else @@ -922,7 +901,7 @@ fi # Requests logged count=`wc -l $BASE/log/access_log | awk '{print $1}'` -expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4` +expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4` if test $count != $expected; then echo "FAIL: $count requests logged, expected $expected." echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile |