/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/
/* * Originally written @ Covalent by Jim Jagielski
*/
/* * mod_dumpio.c: * Think of this as a filter sniffer for Apache 2.x. It logs * all filter data right before and after it goes out on the * wire (BUT right before SSL encoded or after SSL decoded). * It can produce a *huge* amount of data.
*/
typedefstruct dumpio_conf_t { int enable_input; int enable_output;
} dumpio_conf_t;
/* consider up to 80 additional characters, and factor the longest * line length of all \xNN sequences; log_error cannot record more * than MAX_STRING_LEN characters.
*/ #define dumpio_MAX_STRING_LEN (MAX_STRING_LEN / 4 - 80)
/* * Workhorse function: simply log to the current error_log * info about the data in the bucket as well as the data itself
*/ staticvoid dumpit(ap_filter_t *f, apr_bucket *b, dumpio_conf_t *ptr)
{
conn_rec *c = f->c;
if (rv == APR_SUCCESS)
{ while (nbytes)
{
apr_size_t logbytes = nbytes; if (logbytes > dumpio_MAX_STRING_LEN)
logbytes = dumpio_MAX_STRING_LEN;
nbytes -= logbytes;
#if APR_CHARSET_EBCDIC
memcpy(xlatebuf, buf, logbytes);
ap_xlate_proto_from_ascii(xlatebuf, logbytes);
xlatebuf[logbytes] = '\0';
ap_log_cerror(APLOG_MARK, APLOG_TRACE7, 0, c, "mod_dumpio: %s (%s-%s): %s", f->frec->name,
(APR_BUCKET_IS_METADATA(b)) ? "metadata" : "data",
b->type->name, xlatebuf); #else /* XXX: Seriously flawed; we do not pay attention to embedded * \0's in the request body, these should be escaped; however, * the logging function already performs a significant amount * of escaping, and so any escaping would be double-escaped. * The coding solution is to throw away the current logic * within ap_log_error, and introduce new vformatter %-escapes * for escaping text, and for binary text (fixed len strings).
*/
ap_log_cerror(APLOG_MARK, APLOG_TRACE7, 0, c, "mod_dumpio: %s (%s-%s): %.*s", f->frec->name,
(APR_BUCKET_IS_METADATA(b)) ? "metadata" : "data",
b->type->name, (int)logbytes, buf); #endif
buf += logbytes;
}
} else {
ap_log_cerror(APLOG_MARK, APLOG_TRACE7, rv, c, "mod_dumpio: %s (%s-%s): %s", f->frec->name,
(APR_BUCKET_IS_METADATA(b)) ? "metadata" : "data",
b->type->name, "error reading data");
}
}
}
for (b = APR_BRIGADE_FIRST(bb); b != APR_BRIGADE_SENTINEL(bb); b = APR_BUCKET_NEXT(b)) { /* * If we ever see an EOS, make sure to FLUSH.
*/ if (APR_BUCKET_IS_EOS(b)) {
apr_bucket *flush = apr_bucket_flush_create(f->c->bucket_alloc);
APR_BUCKET_INSERT_BEFORE(b, flush);
}
dumpit(f, b, ptr);
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.7Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.