Ignore:
Timestamp:
Jul 13, 2017, 9:41:54 AM (4 years ago)
Author:
Juanma
Message:

Initial release

File:
1 edited

Legend:

Unmodified
Added
Removed
  • squid-ssl/trunk/fuentes/tools/cachemgr.cc

    r5499 r5502  
    1212#include "html_quote.h"
    1313#include "ip/Address.h"
     14#include "MemBuf.h"
    1415#include "rfc1123.h"
    1516#include "rfc1738.h"
     
    424425}
    425426
    426 static const char *
    427 munge_menu_line(const char *buf, cachemgr_request * req)
     427static void
     428munge_menu_line(MemBuf &out, const char *buf, cachemgr_request * req)
    428429{
    429430    char *x;
     
    433434    char *a_url;
    434435    char *buf_copy;
    435     static char html[2 * 1024];
    436 
    437     if (strlen(buf) < 1)
    438         return buf;
    439 
    440     if (*buf != ' ')
    441         return buf;
    442 
    443     buf_copy = x = xstrdup(buf);
     436
     437    const char bufLen = strlen(buf);
     438    if (bufLen < 1 || *buf != ' ') {
     439        out.append(buf, bufLen);
     440        return;
     441    }
     442
     443    buf_copy = x = xstrndup(buf, bufLen);
    444444
    445445    a = xstrtok(&x, '\t');
     
    453453    /* no reason to give a url for a disabled action */
    454454    if (!strcmp(p, "disabled"))
    455         snprintf(html, sizeof(html), "<LI type=\"circle\">%s (disabled)<A HREF=\"%s\">.</A>\n", d, a_url);
     455        out.Printf("<LI type=\"circle\">%s (disabled)<A HREF=\"%s\">.</A>\n", d, a_url);
    456456    else
    457457        /* disable a hidden action (requires a password, but password is not in squid.conf) */
    458458        if (!strcmp(p, "hidden"))
    459             snprintf(html, sizeof(html), "<LI type=\"circle\">%s (hidden)<A HREF=\"%s\">.</A>\n", d, a_url);
     459            out.Printf("<LI type=\"circle\">%s (hidden)<A HREF=\"%s\">.</A>\n", d, a_url);
    460460        else
    461461            /* disable link if authentication is required and we have no password */
    462462            if (!strcmp(p, "protected") && !req->passwd)
    463                 snprintf(html, sizeof(html), "<LI type=\"circle\">%s (requires <a href=\"%s\">authentication</a>)<A HREF=\"%s\">.</A>\n",
    464                          d, menu_url(req, "authenticate"), a_url);
     463                out.Printf("<LI type=\"circle\">%s (requires <a href=\"%s\">authentication</a>)<A HREF=\"%s\">.</A>\n",
     464                            d, menu_url(req, "authenticate"), a_url);
    465465            else
    466466                /* highlight protected but probably available entries */
    467467                if (!strcmp(p, "protected"))
    468                     snprintf(html, sizeof(html), "<LI type=\"square\"><A HREF=\"%s\"><font color=\"#FF0000\">%s</font></A>\n",
    469                              a_url, d);
     468                    out.Printf("<LI type=\"square\"><A HREF=\"%s\"><font color=\"#FF0000\">%s</font></A>\n",
     469                                a_url, d);
    470470
    471471    /* public entry or unknown type of protection */
    472472                else
    473                     snprintf(html, sizeof(html), "<LI type=\"disk\"><A HREF=\"%s\">%s</A>\n", a_url, d);
     473                    out.Printf("<LI type=\"disk\"><A HREF=\"%s\">%s</A>\n", a_url, d);
    474474
    475475    xfree(a_url);
    476476
    477477    xfree(buf_copy);
    478 
    479     return html;
    480 }
    481 
    482 static const char *
    483 munge_other_line(const char *buf, cachemgr_request * req)
     478}
     479
     480static void
     481munge_other_line(MemBuf &out, const char *buf, cachemgr_request *)
    484482{
    485483    static const char *ttags[] = {"td", "th"};
    486484
    487     static char html[4096];
    488485    static int table_line_num = 0;
    489486    static int next_is_header = 0;
     
    492489    char *buf_copy;
    493490    char *x, *p;
    494     int l = 0;
    495491    /* does it look like a table? */
    496492
    497493    if (!strchr(buf, '\t') || *buf == '\t') {
    498494        /* nope, just text */
    499         snprintf(html, sizeof(html), "%s%s",
    500                  table_line_num ? "</table>\n<pre>" : "", html_quote(buf));
     495        if (table_line_num)
     496            out.append("</table>\n<pre>", 14);
     497        out.Printf("%s", html_quote(buf));
    501498        table_line_num = 0;
    502         return html;
     499        return;
    503500    }
    504501
    505502    /* start html table */
    506503    if (!table_line_num) {
    507         l += snprintf(html + l, sizeof(html) - l, "</pre><table cellpadding=\"2\" cellspacing=\"1\">\n");
     504        out.append("</pre><table cellpadding=\"2\" cellspacing=\"1\">\n", 46);
    508505        next_is_header = 0;
    509506    }
     
    515512
    516513    /* record starts */
    517     l += snprintf(html + l, sizeof(html) - l, "<tr>");
     514    out.append("<tr>", 4);
    518515
    519516    /* substitute '\t' */
     
    532529        }
    533530
    534         l += snprintf(html + l, sizeof(html) - l, "<%s colspan=\"%d\" align=\"%s\">%s</%s>",
    535                       ttag, column_span,
    536                       is_header ? "center" : is_number(cell) ? "right" : "left",
    537                       html_quote(cell), ttag);
     531        out.Printf("<%s colspan=\"%d\" align=\"%s\">%s</%s>",
     532                    ttag, column_span,
     533                    is_header ? "center" : is_number(cell) ? "right" : "left",
     534                    html_quote(cell), ttag);
    538535    }
    539536
    540537    xfree(buf_copy);
    541538    /* record ends */
    542     snprintf(html + l, sizeof(html) - l, "</tr>\n");
     539    out.append("</tr>\n", 6);
    543540    next_is_header = is_header && strstr(buf, "\t\t");
    544541    ++table_line_num;
    545     return html;
    546542}
    547543
     
    700696
    701697        case isBody:
     698        {
    702699            /* interpret [and reformat] cache response */
    703 
     700            MemBuf out;
     701            out.init();
    704702            if (parse_menu)
    705                 fputs(munge_menu_line(buf, req), stdout);
     703                munge_menu_line(out, buf, req);
    706704            else
    707                 fputs(munge_other_line(buf, req), stdout);
    708 
    709             break;
     705                munge_other_line(out, buf, req);
     706
     707            fputs(out.buf, stdout);
     708        }
     709        break;
    710710
    711711        case isForward:
Note: See TracChangeset for help on using the changeset viewer.