[format] add OpenAM log formats

pull/111/head
Timothy Stack 10 years ago
parent b205a3ec82
commit d557002724

@ -7,6 +7,7 @@ lnav v0.7.1:
can be a way to use SQL query results in lnav commands.
* Added a 'jget' SQLite function that can extract fields from a JSON-
encoded value.
* Added log formats for the OpenAM identity provider.
lnav v0.7.0:
Features:

@ -90,7 +90,7 @@ fields:
regexes.
:kind: The type of data that was captured **string**, **integer**,
**float**.
**float**, **json**, **quoted**.
:collate: The collation function for this value.
:identifier: A boolean that indicates whether or not this field represents
an identifier and should be syntax colored.

@ -33,6 +33,7 @@ TIME_FORMATS = \
"%d/%b/%Y:%H:%M:%S %z" \
"%b %d %H:%M:%S" \
"%m/%d/%y %H:%M:%S" \
"%m/%d/%Y %I:%M:%S:%L %p %Z" \
"%N/%e/%Y %l:%M:%S %p" \
"%m%d %H:%M:%S" \
"%M:%S"

@ -367,6 +367,7 @@ TIME_FORMATS = \
"%d/%b/%Y:%H:%M:%S %z" \
"%b %d %H:%M:%S" \
"%m/%d/%y %H:%M:%S" \
"%m/%d/%Y %I:%M:%S:%L %p %Z" \
"%N/%e/%Y %l:%M:%S %p" \
"%m%d %H:%M:%S" \
"%M:%S"

@ -218,6 +218,93 @@
}
]
},
"openam_log": {
"title" : "OpenAM Log",
"description" : "The OpenAM identity provider.",
"url" : "http://openam.forgerock.org",
"level-field" : "level",
"level" : {
"error" : "ERROR",
"warning" : "WARNING",
"info" : "INFO",
"critical" : "SEVERE",
"trace" : "FINE|FINEST"
},
"regex" : {
"std" : {
"pattern" : "^\"(?<timestamp>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\"\\s+(?<data>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<loginid>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<contextid>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<ipaddr>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<level>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<domain>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<loggedby>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<messageid>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<modulename>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<nameid>[^ \"]+|\"(?:[^\"]|\"\")+\")\\s+(?<hostname>[^ \"]+|\"(?:[^\"]|\"\")+\")"
}
},
"value" : {
"data" : {
"kind" : "quoted"
},
"loginid" : {
"kind" : "quoted",
"identifier" : true
},
"contextid" : {
"kind" : "quoted",
"identifier" : true
},
"ipaddr" : {
"kind" : "quoted",
"identifier" : true,
"collate" : "ipaddress"
},
"domain" : {
"kind" : "quoted",
"identifier" : true
},
"loggedby" : {
"kind" : "quoted",
"identifier" : true
},
"messageid" : {
"kind" : "quoted",
"identifier" : true
},
"modulename" : {
"kind" : "quoted",
"identifier" : true
},
"nameid" : {
"kind" : "quoted",
"identifier" : true
},
"hostname" : {
"kind" : "quoted",
"identifier" : true,
"collate" : "ipaddress"
}
},
"sample" : [
{
"line" : "\"2014-06-14 17:08:39\" \"http://localhost:8086|/|<samlp:AuthnRequest ID=\"\"139a40bba4d340108d91022750c2a3a8\"\" Version=\"\"2.0\"\" IssueInstant=\"\"2014-06-14T17:09:04Z\"\" ProtocolBinding=\"\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\"\" AssertionConsumerServiceURL=\"\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"\">\\n<saml:Issuer>http://localhost:8086</saml:Issuer>\\n<samlp:NameIDPolicy Format=\"\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"\" AllowCreate=\"\"true\"\"></samlp:NameIDPolicy>\\n<samlp:RequestedAuthnContext Comparison=\"\"exact\"\"><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext>\\n</samlp:AuthnRequest>\" \"cn=dsameuser,ou=DSAME Users,dc=openam\" 8fc43a8f6a8c14101 \"Not Available\" INFO dc=openam \"cn=dsameuser,ou=DSAME Users,dc=openam\" SAML2-36 SAML2.access \"Not Available\" 127.0.1.1"
},
{
"line" : "\"2014-06-09 14:49:56\" /etc/openam/openam/log/ \"cn=dsameuser,ou=DSAME Users,dc=openam\" 3d956febb91fed31 \"Not Available\" INFO dc=openam \"cn=dsameuser,ou=DSAME Users,dc=openam\" LOG-1 amPolicy.access \"Not Available\" 127.0.1.1"
}
]
},
"openamdb_log": {
"title" : "OpenAM Debug Log",
"description" : "Debug logs for the OpenAM identity provider.",
"url" : "http://openam.forgerock.org",
"regex" : {
"std" : {
"pattern" : "^(?<module>[\\w]+):(?<timestamp>\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}:\\d{2}:\\d{3} [AP]M \\w+): Thread\\[(?<thread>[^,]+,\\d+,[^,]+)\\]\\n?(?:\\*+|(?<body>.*))$"
}
},
"sample" : [
{
"line" : "amMonitoring:06/09/2014 02:49:59:447 PM UTC: Thread[http-80-1,5,main]\n**********************************************"
},
{
"line" : "amLog:06/09/2014 04:08:22:515 PM UTC: Thread[http-80-8,5,main]\nERROR: LogMessageProviderBase.createLogRecord: unable to locate message ID object for ATTEMPT_GET_METAALIAS"
}
]
},
"page_log" : {
"title" : "CUPS Page Log",
"description" : "The CUPS server log of printed pages.",

@ -204,6 +204,9 @@ void grep_proc::child_loop(void)
fprintf(stdout, "[%d:%d]\n", m->c_begin, m->c_end);
for (pc_iter = pc.begin(); pc_iter != pc.end();
pc_iter++) {
if (!pc_iter->is_valid()) {
continue;
}
fprintf(stdout,
"(%d:%d)",
pc_iter->c_begin,
@ -359,7 +362,7 @@ void grep_proc::check_fd_set(fd_set &ready_fds)
while ((loop_count < MAX_LOOPS) &&
(this->gp_line_buffer.read_line(this->gp_pipe_offset, lv))) {
lv.lv_start[lv.lv_len] = '\0';
lv.terminate();
this->dispatch_line(lv.lv_start);
loop_count += 1;
}

@ -2666,8 +2666,9 @@ static void rl_search_internal(void *dummy, readline_curses *rc, bool complete =
textview_curses *tc = lnav_data.ld_view_stack.top();
lnav_view_t index = (lnav_view_t)(tc - lnav_data.ld_views);
if (!complete)
if (!complete) {
tc->set_top(lnav_data.ld_search_start_line);
}
execute_search(index, rc->get_value());
}

@ -95,7 +95,7 @@ static string com_adjust_log_time(string cmdline, vector<string> &args)
content_line_t top_content;
date_time_scanner dts;
vis_line_t top_line;
struct tm tm;
struct exttm tm;
logfile *lf;
top_line = lnav_data.ld_views[LNV_LOG].get_top();
@ -212,7 +212,7 @@ static string com_goto(string cmdline, vector<string> &args)
int line_number, consumed;
date_time_scanner dts;
struct timeval tv;
struct tm tm;
struct exttm tm;
float value;
if (dts.scan(args[1].c_str(), NULL, &tm, tv) != NULL) {

@ -40,7 +40,6 @@
#include <sqlite3.h>
#include "auto_fd.hh"
#include "ptimec.hh"
#include "lnav_util.hh"
std::string hash_string(const std::string &str)
@ -55,6 +54,24 @@ std::string hash_string(const std::string &str)
return hash.to_string();
}
size_t unquote(char *dst, const char *str, size_t len)
{
char quote_char = str[0];
size_t index = 0;
require(str[0] == '\'' || str[0] == '"');
for (int lpc = 1; lpc < (len - 1); lpc++, index++) {
dst[index] = str[lpc];
if (str[lpc] == quote_char) {
lpc += 1;
}
}
dst[index] = '\0';
return index;
}
std::string time_ago(time_t last_time)
{
time_t delta, current_time = time(NULL);
@ -256,7 +273,7 @@ const char *std_time_fmt[] = {
const char *date_time_scanner::scan(const char *time_dest,
const char *time_fmt[],
struct tm *tm_out,
struct exttm *tm_out,
struct timeval &tv_out)
{
int curr_time_fmt = -1;
@ -279,12 +296,12 @@ const char *date_time_scanner::scan(const char *time_dest,
time_t gmt = gmt_int;
if (this->dts_local_time) {
localtime_r(&gmt, tm_out);
localtime_r(&gmt, &tm_out->et_tm);
#ifdef HAVE_STRUCT_TM_TM_ZONE
tm_out->tm_zone = NULL;
tm_out->et_tm.tm_zone = NULL;
#endif
tm_out->tm_isdst = 0;
gmt = tm2sec(tm_out);
tm_out->et_tm.tm_isdst = 0;
gmt = tm2sec(&tm_out->et_tm);
}
tv_out.tv_sec = gmt;
tv_out.tv_usec = 0;
@ -301,25 +318,25 @@ const char *date_time_scanner::scan(const char *time_dest,
off_t off = 0;
#ifdef HAVE_STRUCT_TM_TM_ZONE
tm_out->tm_zone = NULL;
tm_out->et_tm.tm_zone = NULL;
#endif
if (func(tm_out, time_dest, off, strlen(time_dest))) {
retval = &time_dest[off];
if (tm_out->tm_year < 70) {
tm_out->tm_year = 80;
if (tm_out->et_tm.tm_year < 70) {
tm_out->et_tm.tm_year = 80;
}
if (this->dts_local_time) {
time_t gmt = tm2sec(tm_out);
time_t gmt = tm2sec(&tm_out->et_tm);
localtime_r(&gmt, tm_out);
localtime_r(&gmt, &tm_out->et_tm);
#ifdef HAVE_STRUCT_TM_TM_ZONE
tm_out->tm_zone = NULL;
tm_out->et_tm.tm_zone = NULL;
#endif
tm_out->tm_isdst = 0;
tm_out->et_tm.tm_isdst = 0;
}
tv_out.tv_sec = tm2sec(tm_out);
tv_out.tv_usec = 0;
tv_out.tv_sec = tm2sec(&tm_out->et_tm);
tv_out.tv_usec = tm_out->et_nsec / 1000;
this->dts_fmt_lock = curr_time_fmt;
this->dts_fmt_len = retval - time_dest;
@ -330,7 +347,7 @@ const char *date_time_scanner::scan(const char *time_dest,
}
else if ((retval = strptime(time_dest,
time_fmt[curr_time_fmt],
tm_out)) != NULL) {
&tm_out->et_tm)) != NULL) {
if (time_fmt[curr_time_fmt] == time_fmt_with_zone) {
int lpc;
@ -338,7 +355,7 @@ const char *date_time_scanner::scan(const char *time_dest,
}
if (retval[lpc] == ' ' &&
sscanf(&retval[lpc], "%d", &tm_out->tm_year) == 1) {
sscanf(&retval[lpc], "%d", &tm_out->et_tm.tm_year) == 1) {
lpc += 1;
for (; retval[lpc] && isdigit(retval[lpc]); lpc++) {
@ -347,21 +364,21 @@ const char *date_time_scanner::scan(const char *time_dest,
}
}
if (tm_out->tm_year < 70) {
tm_out->tm_year = 80;
if (tm_out->et_tm.tm_year < 70) {
tm_out->et_tm.tm_year = 80;
}
if (this->dts_local_time) {
time_t gmt = tm2sec(tm_out);
time_t gmt = tm2sec(&tm_out->et_tm);
localtime_r(&gmt, tm_out);
localtime_r(&gmt, &tm_out->et_tm);
#ifdef HAVE_STRUCT_TM_TM_ZONE
tm_out->tm_zone = NULL;
tm_out->et_tm.tm_zone = NULL;
#endif
tm_out->tm_isdst = 0;
tm_out->et_tm.tm_isdst = 0;
}
tv_out.tv_sec = tm2sec(tm_out);
tv_out.tv_usec = 0;
tv_out.tv_sec = tm2sec(&tm_out->et_tm);
tv_out.tv_usec = tm_out->et_nsec / 1000;
this->dts_fmt_lock = curr_time_fmt;
this->dts_fmt_len = retval - time_dest;

@ -41,6 +41,7 @@
#include <string>
#include "ptimec.hh"
#include "byte_array.hh"
inline std::string trim(const std::string &str)
@ -53,6 +54,8 @@ inline std::string trim(const std::string &str)
return str.substr(start, end - start);
}
size_t unquote(char *dst, const char *str, size_t len);
#undef rounddown
/**
@ -191,18 +194,18 @@ struct date_time_scanner {
void set_base_time(time_t base_time) {
this->dts_base_time = base_time;
localtime_r(&base_time, &this->dts_base_tm);
localtime_r(&base_time, &this->dts_base_tm.et_tm);
};
bool dts_local_time;
time_t dts_base_time;
struct tm dts_base_tm;
struct exttm dts_base_tm;
int dts_fmt_lock;
int dts_fmt_len;
const char *scan(const char *time_src,
const char *time_fmt[],
struct tm *tm_out,
struct exttm *tm_out,
struct timeval &tv_out);
};

@ -39,6 +39,7 @@
#include "sql_util.hh"
#include "log_format.hh"
#include "log_vtab_impl.hh"
#include "ptimec.hh"
using namespace std;
@ -124,6 +125,9 @@ logline::level_t logline::string2level(const char *levelstr, size_t len, bool ex
else if (cmpfunc(levelstr, "CRITICAL", len) == 0) {
retval = logline::LEVEL_CRITICAL;
}
else if (cmpfunc(levelstr, "SEVERE", len) == 0) {
retval = logline::LEVEL_CRITICAL;
}
else if (cmpfunc(levelstr, "FATAL", len) == 0) {
retval = logline::LEVEL_FATAL;
}
@ -192,6 +196,9 @@ logline_value::kind_t logline_value::string2kind(const char *kindstr)
else if (strcmp(kindstr, "json") == 0) {
return VALUE_JSON;
}
else if (strcmp(kindstr, "quoted") == 0) {
return VALUE_QUOTED;
}
return VALUE_UNKNOWN;
}
@ -230,7 +237,7 @@ const char *log_format::log_scanf(const char *line,
int expected_matches,
const char *time_fmt[],
char *time_dest,
struct tm *tm_out,
struct exttm *tm_out,
struct timeval &tv_out,
...)
{
@ -586,7 +593,7 @@ bool external_log_format::scan(std::vector<logline> &dst,
pcre_context::capture_t *level_cap = pc[this->elf_level_field_index];
const char *ts_str = pi.get_substr_start(ts);
const char *last;
struct tm log_time_tm;
struct exttm log_time_tm;
struct timeval log_tv;
logline::level_t level = logline::LEVEL_INFO;
@ -712,7 +719,7 @@ static int read_json_field(yajlpp_parse_context *ypc, const unsigned char *str,
vector<external_log_format::json_format_element> &line_format =
jlu->jlu_format->jlf_line_format;
string field_name = ypc->get_path_fragment(0);
struct tm tm_out;
struct exttm tm_out;
struct timeval tv_out;
if (field_name == jlu->jlu_format->lf_timestamp_field) {
@ -1067,7 +1074,7 @@ void external_log_format::build(std::vector<std::string> &errors)
pc[this->lf_timestamp_field]);
date_time_scanner dts;
struct timeval tv;
struct tm tm;
struct exttm tm;
found = true;
if (dts.scan(ts, NULL, &tm, tv) == NULL) {
@ -1077,7 +1084,16 @@ void external_log_format::build(std::vector<std::string> &errors)
iter->s_line);
errors.push_back("error:" +
this->elf_name +
":unrecognized timestamp format");
":unrecognized timestamp format -- " + ts);
for (int lpc = 0; PTIMEC_FORMATS[lpc].pf_fmt != NULL; lpc++) {
off_t off = 0;
PTIMEC_FORMATS[lpc].pf_func(&tm, ts, off,
pc[this->lf_timestamp_field]->length());
errors.push_back(" format: " + string(PTIMEC_FORMATS[lpc].pf_fmt) +
"; matched: " + string(ts, off));
}
}
}
}
@ -1142,6 +1158,7 @@ public:
case logline_value::VALUE_NULL:
case logline_value::VALUE_TEXT:
case logline_value::VALUE_JSON:
case logline_value::VALUE_QUOTED:
type = SQLITE3_TEXT;
break;
case logline_value::VALUE_FLOAT:

@ -344,6 +344,7 @@ public:
VALUE_FLOAT,
VALUE_BOOLEAN,
VALUE_JSON,
VALUE_QUOTED,
VALUE__MAX
};
@ -381,6 +382,7 @@ public:
switch (kind) {
case VALUE_JSON:
case VALUE_TEXT:
case VALUE_QUOTED:
this->lv_sbr = sbr;
break;
@ -435,6 +437,25 @@ public:
case VALUE_TEXT:
return std::string(this->lv_sbr.get_data(), this->lv_sbr.length());
case VALUE_QUOTED:
if (this->lv_sbr.length() == 0) {
return "";
} else {
switch (this->lv_sbr.get_data()[0]) {
case '\'':
case '"': {
char unquoted_str[this->lv_sbr.length()];
size_t unquoted_len;
unquoted_len = unquote(unquoted_str, this->lv_sbr.get_data(),
this->lv_sbr.length());
return std::string(unquoted_str, unquoted_len);
}
default:
return std::string(this->lv_sbr.get_data(), this->lv_sbr.length());
}
}
case VALUE_INTEGER:
snprintf(buffer, sizeof(buffer), "%" PRId64, this->lv_number.i);
break;
@ -622,7 +643,7 @@ protected:
int expected_matches,
const char *time_fmt[],
char *time_dest,
struct tm *tm_out,
struct exttm *tm_out,
struct timeval &tv_out,
...);
};

@ -105,7 +105,7 @@ class strace_log_format : public log_format {
};
bool retval = false;
struct tm log_time;
struct exttm log_time;
char timestr[64];
struct timeval log_tv;
int usecs;
@ -285,7 +285,7 @@ class generic_log_format : public log_format {
int len)
{
bool retval = false;
struct tm log_time;
struct exttm log_time;
char timestr[64 + 32];
struct timeval log_tv;
char level[64];

@ -391,6 +391,36 @@ static int vt_column(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int col)
SQLITE_TRANSIENT);
break;
}
case logline_value::VALUE_QUOTED:
if (lv_iter->lv_sbr.length() == 0) {
sqlite3_result_text(ctx, "", 0, SQLITE_STATIC);
}
else {
const char *text_value = lv_iter->lv_sbr.get_data();
size_t text_len = lv_iter->lv_sbr.length();
switch (text_value[0]) {
case '\'':
case '"': {
char *val = (char *)sqlite3_malloc(text_len);
if (val == NULL) {
sqlite3_result_error_nomem(ctx);
}
else {
size_t unquoted_len = unquote(val, text_value, text_len);
sqlite3_result_text(ctx, val, unquoted_len, sqlite3_free);
}
break;
}
default: {
sqlite3_result_text(ctx, text_value,
lv_iter->lv_sbr.length(), SQLITE_TRANSIENT);
break;
}
}
}
break;
case logline_value::VALUE_BOOLEAN:
case logline_value::VALUE_INTEGER:
@ -476,7 +506,7 @@ static int vt_filter(sqlite3_vtab_cursor *p_vtc,
const unsigned char *datestr = sqlite3_value_text(argv[lpc]);
date_time_scanner dts;
struct timeval tv;
struct tm mytm;
struct exttm mytm;
vis_line_t vl;
dts.scan((const char *)datestr, NULL, &mytm, tv);

@ -62,15 +62,20 @@ int main(int argc, char *argv[])
const char *arg = argv[lpc];
fputs(PRELUDE, stdout);
printf("bool ptime_f%d(struct tm *dst, const char *str, off_t &off, size_t len) {\n",
printf("bool ptime_f%d(struct exttm *dst, const char *str, off_t &off, size_t len) {\n",
lpc);
for (int index = 0; arg[index]; arg++) {
if (arg[index] == '%') {
switch (arg[index + 1]) {
case 'a':
case 'Z':
printf(" if (!ptime_upto('%s', str, off, len)) return false;\n",
escape_char(arg[index + 2]));
if (arg[index + 2]) {
printf(" if (!ptime_upto('%s', str, off, len)) return false;\n",
escape_char(arg[index + 2]));
}
else {
printf(" if (!ptime_upto_end(str, off, len)) return false;\n");
}
arg += 1;
break;
default:

@ -39,6 +39,11 @@
#include <time.h>
#include <sys/types.h>
struct exttm {
struct tm et_tm;
int32_t et_nsec;
};
#define PTIME_CONSUME(amount, block) \
if (off_inout + amount > len) { \
return false; \
@ -63,9 +68,17 @@ bool ptime_upto(char ch, const char *str, off_t &off_inout, size_t len)
return false;
}
bool ptime_b_slow(struct tm *dst, const char *str, off_t &off_inout, size_t len);
inline
bool ptime_upto_end(const char *str, off_t &off_inout, size_t len)
{
off_inout = len;
return true;
}
bool ptime_b_slow(struct exttm *dst, const char *str, off_t &off_inout, size_t len);
inline bool ptime_b(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_b(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
if (off_inout + 3 < len) {
int *iptr = (int *)(&str[off_inout]);
@ -114,7 +127,7 @@ inline bool ptime_b(struct tm *dst, const char *str, off_t &off_inout, size_t le
}
if (val >= 0) {
off_inout += 3;
dst->tm_mon = val;
dst->et_tm.tm_mon = val;
return true;
}
}
@ -122,155 +135,186 @@ inline bool ptime_b(struct tm *dst, const char *str, off_t &off_inout, size_t le
return ptime_b_slow(dst, str, off_inout, len);
}
inline bool ptime_S(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_S(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
if (str[off_inout + 1] > '9') {
return false;
}
dst->et_tm.tm_sec = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
});
return (dst->et_tm.tm_sec >= 0 && dst->et_tm.tm_sec <= 59);
}
inline bool ptime_L(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
int ms = 0;
PTIME_CONSUME(3, {
if (str[off_inout + 1] > '9') {
return false;
}
ms = ((str[off_inout] - '0') * 100 + (str[off_inout + 1] - '0') * 10 +
(str[off_inout + 2] - '0'));
});
if ((ms >= 0 && ms <= 999)) {
dst->et_nsec = ms * 1000000;
return true;
}
return false;
}
inline bool ptime_M(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
if (str[off_inout + 1] > '9') {
return false;
}
dst->tm_sec = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
dst->et_tm.tm_min = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
});
return (dst->tm_sec >= 0 && dst->tm_sec <= 59);
return (dst->et_tm.tm_min >= 0 && dst->et_tm.tm_min <= 59);
}
inline bool ptime_M(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_H(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
if (str[off_inout + 1] > '9') {
return false;
}
dst->tm_min = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
dst->et_tm.tm_hour = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
});
return (dst->tm_min >= 0 && dst->tm_min <= 59);
return (dst->et_tm.tm_hour >= 0 && dst->et_tm.tm_hour <= 23);
}
inline bool ptime_H(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_I(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
if (str[off_inout + 1] > '9') {
return false;
}
dst->tm_hour = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
dst->et_tm.tm_hour = (str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0');
});
return (dst->tm_hour >= 0 && dst->tm_hour <= 23);
return (dst->et_tm.tm_hour >= 1 && dst->et_tm.tm_hour <= 12);
}
inline bool ptime_d(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_d(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
if (str[off_inout] == ' ') {
dst->tm_mday = 0;
dst->et_tm.tm_mday = 0;
}
else {
dst->tm_mday = (str[off_inout] - '0') * 10;
dst->et_tm.tm_mday = (str[off_inout] - '0') * 10;
}
if (str[off_inout + 1] > '9') {
return false;
}
dst->tm_mday += (str[off_inout + 1] - '0');
dst->et_tm.tm_mday += (str[off_inout + 1] - '0');
});
return (dst->tm_mday >= 1 && dst->tm_mday <= 31);
return (dst->et_tm.tm_mday >= 1 && dst->et_tm.tm_mday <= 31);
}
inline bool ptime_e(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_e(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
dst->tm_mday = 0;
dst->et_tm.tm_mday = 0;
PTIME_CONSUME(1, {
if (str[off_inout] < '1' || str[off_inout] > '9') {
return false;
}
dst->tm_mday = str[off_inout] - '0';
dst->et_tm.tm_mday = str[off_inout] - '0';
});
if (off_inout + 1 < len) {
if (str[off_inout] >= '0' && str[off_inout] <= '9') {
dst->tm_mday *= 10;
dst->tm_mday += str[off_inout] - '0';
dst->et_tm.tm_mday *= 10;
dst->et_tm.tm_mday += str[off_inout] - '0';
off_inout += 1;
}
}
return (dst->tm_mday >= 1 && dst->tm_mday <= 31);
return (dst->et_tm.tm_mday >= 1 && dst->et_tm.tm_mday <= 31);
}
inline bool ptime_N(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_N(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
dst->tm_mon = 0;
dst->et_tm.tm_mon = 0;
PTIME_CONSUME(1, {
if (str[off_inout] < '1' || str[off_inout] > '9') {
return false;
}
dst->tm_mon = str[off_inout] - '0';
dst->et_tm.tm_mon = str[off_inout] - '0';
});
if (off_inout + 1 < len) {
if (str[off_inout] >= '0' && str[off_inout] <= '9') {
dst->tm_mon *= 10;
dst->tm_mon += str[off_inout] - '0';
dst->et_tm.tm_mon *= 10;
dst->et_tm.tm_mon += str[off_inout] - '0';
off_inout += 1;
}
}
dst->tm_mon -= 1;
dst->et_tm.tm_mon -= 1;
return (dst->tm_mon >= 0 && dst->tm_mon <= 11);
return (dst->et_tm.tm_mon >= 0 && dst->et_tm.tm_mon <= 11);
}
inline bool ptime_k(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_k(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
dst->tm_hour = 0;
dst->et_tm.tm_hour = 0;
PTIME_CONSUME(1, {
if (str[off_inout] < '0' || str[off_inout] > '9') {
return false;
}
dst->tm_hour = str[off_inout] - '0';
dst->et_tm.tm_hour = str[off_inout] - '0';
});
if (off_inout + 1 < len) {
if (str[off_inout] >= '0' && str[off_inout] <= '9') {
dst->tm_hour *= 10;
dst->tm_hour += str[off_inout] - '0';
dst->et_tm.tm_hour *= 10;
dst->et_tm.tm_hour += str[off_inout] - '0';
off_inout += 1;
}
}
return (dst->tm_hour >= 0 && dst->tm_hour <= 23);
return (dst->et_tm.tm_hour >= 0 && dst->et_tm.tm_hour <= 23);
}
inline bool ptime_l(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_l(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
dst->tm_hour = 0;
dst->et_tm.tm_hour = 0;
PTIME_CONSUME(1, {
if (str[off_inout] < '1' || str[off_inout] > '9') {
return false;
}
dst->tm_hour = str[off_inout] - '0';
dst->et_tm.tm_hour = str[off_inout] - '0';
});
if (off_inout + 1 < len) {
if (str[off_inout] >= '0' && str[off_inout] <= '9') {
dst->tm_hour *= 10;
dst->tm_hour += str[off_inout] - '0';
dst->et_tm.tm_hour *= 10;
dst->et_tm.tm_hour += str[off_inout] - '0';
off_inout += 1;
}
}
return (dst->tm_hour >= 1 && dst->tm_hour <= 12);
return (dst->et_tm.tm_hour >= 1 && dst->et_tm.tm_hour <= 12);
}
inline bool ptime_m(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_m(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
if (str[off_inout + 1] > '9') {
return false;
}
dst->tm_mon = ((str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0')) - 1;
dst->et_tm.tm_mon = ((str[off_inout] - '0') * 10 + (str[off_inout + 1] - '0')) - 1;
});
return (0 <= dst->tm_mon && dst->tm_mon <= 11);
return (0 <= dst->et_tm.tm_mon && dst->et_tm.tm_mon <= 11);
}
inline bool ptime_p(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_p(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
char lead = str[off_inout];
@ -281,7 +325,7 @@ inline bool ptime_p(struct tm *dst, const char *str, off_t &off_inout, size_t le
else if ((lead & 0xdf) == 'A') {
}
else if ((lead & 0xdf) == 'P') {
dst->tm_hour += 12;
dst->et_tm.tm_hour += 12;
}
else {
return false;
@ -291,10 +335,10 @@ inline bool ptime_p(struct tm *dst, const char *str, off_t &off_inout, size_t le
return true;
}
inline bool ptime_Y(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_Y(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(4, {
dst->tm_year = (
dst->et_tm.tm_year = (
(str[off_inout + 0] - '0') * 1000 +
(str[off_inout + 1] - '0') * 100 +
(str[off_inout + 2] - '0') * 10 +
@ -304,16 +348,16 @@ inline bool ptime_Y(struct tm *dst, const char *str, off_t &off_inout, size_t le
return true;
}
inline bool ptime_y(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_y(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
PTIME_CONSUME(2, {
dst->tm_year = (
dst->et_tm.tm_year = (
(str[off_inout + 0] - '0') * 10 +
(str[off_inout + 1] - '0') * 1);
if (dst->tm_year >= 0 && dst->tm_year < 100) {
if (dst->tm_year < 69) {
dst->tm_year += 100;
if (dst->et_tm.tm_year >= 0 && dst->et_tm.tm_year < 100) {
if (dst->et_tm.tm_year < 69) {
dst->et_tm.tm_year += 100;
}
return true;
}
@ -322,7 +366,7 @@ inline bool ptime_y(struct tm *dst, const char *str, off_t &off_inout, size_t le
return true;
}
inline bool ptime_z(struct tm *dst, const char *str, off_t &off_inout, size_t len)
inline bool ptime_z(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
#ifdef HAVE_STRUCT_TM_TM_ZONE
PTIME_CONSUME(5, {
@ -346,7 +390,7 @@ inline bool ptime_z(struct tm *dst, const char *str, off_t &off_inout, size_t le
mins = (
(str[off_inout + 2] - '0') * 10 +
(str[off_inout + 3] - '0') * 1) * 60;
dst->tm_gmtoff = hours + mins;
dst->et_tm.tm_gmtoff = hours + mins;
});
#endif
@ -364,7 +408,7 @@ inline bool ptime_char(char val, const char *str, off_t &off_inout, size_t len)
return true;
}
typedef bool (*ptime_func)(struct tm *dst, const char *str, off_t &off, size_t len);
typedef bool (*ptime_func)(struct exttm *dst, const char *str, off_t &off, size_t len);
struct ptime_fmt {
const char *pf_fmt;

@ -37,11 +37,11 @@
#include "ptimec.hh"
bool ptime_b_slow(struct tm *dst, const char *str, off_t &off_inout, size_t len)
bool ptime_b_slow(struct exttm *dst, const char *str, off_t &off_inout, size_t len)
{
const char *end_of_date;
if ((end_of_date = strptime(&str[off_inout], "%b", dst)) != NULL) {
if ((end_of_date = strptime(&str[off_inout], "%b", &dst->et_tm)) != NULL) {
off_inout = end_of_date - str;
return true;
}

@ -592,7 +592,12 @@ void readline_curses::line_ready(const char *line)
char msg[1024];
int rc;
rc = history_expand(rl_line_buffer, expanded.out());
if (rl_line_buffer[0] == '^') {
rc = -1;
}
else {
rc = history_expand(rl_line_buffer, expanded.out());
}
switch (rc) {
#if 0
/* TODO: fix clash between history and pcre metacharacters */

@ -445,7 +445,7 @@ static void load_time_bookmarks(void)
const char *part_name = (const char *)sqlite3_column_text(stmt.in(), 4);
int64_t mark_time = sqlite3_column_int64(stmt.in(), 3);
struct timeval log_tv;
struct tm log_tm;
struct exttm log_tm;
if (last_mark_time == -1) {
last_mark_time = mark_time;
@ -603,7 +603,7 @@ static void load_time_bookmarks(void)
const char *log_hash = (const char *)sqlite3_column_text(stmt.in(), 2);
int64_t mark_time = sqlite3_column_int64(stmt.in(), 3);
struct timeval log_tv;
struct tm log_tm;
struct exttm log_tm;
if (last_mark_time == -1) {
last_mark_time = mark_time;

@ -158,7 +158,7 @@ void view_curses::mvwattrline(WINDOW *window,
if (attr_range.lr_end != -1) {
tab_iter = tab_list.lower_bound(attr_range.lr_end);
if (tab_iter != tab_list.end()) {
if (attr_range.lr_end > tab_iter->first) {
if (attr_range.lr_end >= tab_iter->first) {
attr_range.lr_end += (
tab_iter->second - tab_iter->first) - 1;
}

@ -0,0 +1,2 @@
"2014-06-15 01:04:52" "http://localhost:8086|/|<samlp:Response xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol"" ID=""s2daac0735bf476f4560aab81104b623bedfb0cbc0"" InResponseTo=""84cbf2be33f6410bbe55877545a93f02"" Version=""2.0"" IssueInstant=""2014-06-15T01:04:52Z"" Destination=""http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume""><saml:Issuer xmlns:saml=""urn:oasis:names:tc:SAML:2.0:assertion"">http://openam.vagrant.dev/openam</saml:Issuer><samlp:Status xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol"">\\n<samlp:StatusCode xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol""\\nValue=""urn:oasis:names:tc:SAML:2.0:status:Success"">\\n</samlp:StatusCode>\\n</samlp:Status><saml:Assertion xmlns:saml=""urn:oasis:names:tc:SAML:2.0:assertion"" ID=""s2a0bee0da937e236167e99b209802056033816ac2"" IssueInstant=""2014-06-15T01:04:52Z"" Version=""2.0"">\\n<saml:Issuer>http://openam.vagrant.dev/openam</saml:Issuer><ds:Signature xmlns:ds=""http://www.w3.org/2000/09/xmldsig#"">\\n<ds:SignedInfo>\\n<ds:CanonicalizationMethod Algorithm=""http://www.w3.org/2001/10/xml-exc-c14n#""/>\\n<ds:SignatureMethod Algorithm=""http://www.w3.org/2000/09/xmldsig#rsa-sha1""/>\\n<ds:Reference URI=""#s2a0bee0da937e236167e99b209802056033816ac2"">\\n<ds:Transforms>\\n<ds:Transform Algorithm=""http://www.w3.org/2000/09/xmldsig#enveloped-signature""/>\\n<ds:Transform Algorithm=""http://www.w3.org/2001/10/xml-exc-c14n#""/>\\n</ds:Transforms>\\n<ds:DigestMethod Algorithm=""http://www.w3.org/2000/09/xmldsig#sha1""/>\\n<ds:DigestValue>4uSmVzjovUdQd3px/RcnoxQBsqE=</ds:DigestValue>\\n</ds:Reference>\\n</ds:SignedInfo>\\n<ds:SignatureValue>\\nhm/grge36uA6j1OWif2bTcvVTwESjmuJa27NxepW0AiV5YlcsHDl7RAIk6k/CjsSero3bxGbm56m\\nYncOEi9F1Tu7dS0bfx+vhm/kKTPgwZctf4GWn4qQwP+KeoZywbNj9ShsYJ+zPKzXwN4xBSuPjMxP\\nNf5szzjEWpOndQO/uDs=\\n</ds:SignatureValue>\\n<ds:KeyInfo>\\n<ds:X509Data>\\n<ds:X509Certificate>\\nMIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh\\nbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w\\nZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw\\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK\\nBgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B\\nAQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of+\\nRkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY\\nJs0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U\\nQzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA\\ncGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC\\n/FfwWigmrW0Y0Q==\\n</ds:X509Certificate>\\n</ds:X509Data>\\n</ds:KeyInfo>\\n</ds:Signature><saml:Subject>\\n<saml:NameID Format=""urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"" NameQualifier=""http://openam.vagrant.dev/openam"">user@example.com</saml:NameID><saml:SubjectConfirmation Method=""urn:oasis:names:tc:SAML:2.0:cm:bearer"">\\n<saml:SubjectConfirmationData InResponseTo=""84cbf2be33f6410bbe55877545a93f02"" NotOnOrAfter=""2014-06-15T01:14:52Z"" Recipient=""http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume""/></saml:SubjectConfirmation>\\n</saml:Subject><saml:Conditions NotBefore=""2014-06-15T00:54:52Z"" NotOnOrAfter=""2014-06-15T01:14:52Z"">\\n<saml:AudienceRestriction>\\n<saml:Audience>http://localhost:8086</saml:Audience>\\n</saml:AudienceRestriction>\\n</saml:Conditions>\\n<saml:AuthnStatement AuthnInstant=""2014-06-15T01:00:25Z"" SessionIndex=""s2f9b4d4b453d12b40ef3905cc959cdb40579c2301""><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement></saml:Assertion></samlp:Response>" id=openamuser,ou=user,dc=openam 82e87195d704585501 "Not Available" INFO dc=openam "cn=dsameuser,ou=DSAME Users,dc=openam" SAML2-37 SAML2.access user@example.com 192.168.33.1
"2014-06-15 01:04:52" vagrant|/ "cn=dsameuser,ou=DSAME Users,dc=openam" ec5708a7f199678a01 "Not Available" FINE dc=openam "cn=dsameuser,ou=DSAME Users,dc=openam" COT-22 COT.access "Not Available" 127.0.1.1

@ -54,7 +54,7 @@ int main(int argc, char *argv[])
for (int lpc = 0; BAD_TIMES[lpc]; lpc++) {
date_time_scanner dts;
struct timeval tv;
struct tm tm;
struct exttm tm;
assert(dts.scan(BAD_TIMES[lpc], NULL, &tm, tv) == NULL);
}
@ -63,7 +63,7 @@ int main(int argc, char *argv[])
const char *en_date = "Jan 1 12:00:00";
const char *bg_date = "Ene 1 12:00:00";
struct timeval en_tv, es_tv;
struct tm en_tm, es_tm;
struct exttm en_tm, es_tm;
date_time_scanner dts;
if (setlocale(LC_TIME, "es_ES.utf8") != NULL) {

@ -315,3 +315,50 @@ log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,c_ip,cs_method,cs_r
1,p.0,2009-07-20 22:59:29.000,3000,error,0,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkboot.gz,gPXE/0.9.7,-,HTTP/1.0,46210,404
2,p.0,2009-07-20 22:59:29.000,0,info,0,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkernel.gz,gPXE/0.9.7,-,HTTP/1.0,78929,200
EOF
run_test ${lnav_test} -n \
-c ";SELECT * FROM openam_log" \
-c ":write-json-to -" \
${test_dir}/logfile_openam.0
check_output "" <<EOF
[
{
"log_line": 0,
"log_part": "p.0",
"log_time": "2014-06-15 01:04:52.000",
"log_idle_msecs": 0,
"log_level": "info",
"log_mark": 0,
"contextid": "82e87195d704585501",
"data": "http://localhost:8086|/|<samlp:Response xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"s2daac0735bf476f4560aab81104b623bedfb0cbc0\" InResponseTo=\"84cbf2be33f6410bbe55877545a93f02\" Version=\"2.0\" IssueInstant=\"2014-06-15T01:04:52Z\" Destination=\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"><saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">http://openam.vagrant.dev/openam</saml:Issuer><samlp:Status xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">\\\\\\\\n<samlp:StatusCode xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"\\\\\\\\nValue=\"urn:oasis:names:tc:SAML:2.0:status:Success\">\\\\\\\\n</samlp:StatusCode>\\\\\\\\n</samlp:Status><saml:Assertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"s2a0bee0da937e236167e99b209802056033816ac2\" IssueInstant=\"2014-06-15T01:04:52Z\" Version=\"2.0\">\\\\\\\\n<saml:Issuer>http://openam.vagrant.dev/openam</saml:Issuer><ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\\\\\\\\n<ds:SignedInfo>\\\\\\\\n<ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\\\\\\\\n<ds:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>\\\\\\\\n<ds:Reference URI=\"#s2a0bee0da937e236167e99b209802056033816ac2\">\\\\\\\\n<ds:Transforms>\\\\\\\\n<ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>\\\\\\\\n<ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\\\\\\\\n</ds:Transforms>\\\\\\\\n<ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>\\\\\\\\n<ds:DigestValue>4uSmVzjovUdQd3px/RcnoxQBsqE=</ds:DigestValue>\\\\\\\\n</ds:Reference>\\\\\\\\n</ds:SignedInfo>\\\\\\\\n<ds:SignatureValue>\\\\\\\\nhm/grge36uA6j1OWif2bTcvVTwESjmuJa27NxepW0AiV5YlcsHDl7RAIk6k/CjsSero3bxGbm56m\\\\\\\\nYncOEi9F1Tu7dS0bfx+vhm/kKTPgwZctf4GWn4qQwP+KeoZywbNj9ShsYJ+zPKzXwN4xBSuPjMxP\\\\\\\\nNf5szzjEWpOndQO/uDs=\\\\\\\\n</ds:SignatureValue>\\\\\\\\n<ds:KeyInfo>\\\\\\\\n<ds:X509Data>\\\\\\\\n<ds:X509Certificate>\\\\\\\\nMIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh\\\\\\\\nbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w\\\\\\\\nZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw\\\\\\\\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK\\\\\\\\nBgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B\\\\\\\\nAQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of+\\\\\\\\nRkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY\\\\\\\\nJs0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U\\\\\\\\nQzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA\\\\\\\\ncGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC\\\\\\\\n/FfwWigmrW0Y0Q==\\\\\\\\n</ds:X509Certificate>\\\\\\\\n</ds:X509Data>\\\\\\\\n</ds:KeyInfo>\\\\\\\\n</ds:Signature><saml:Subject>\\\\\\\\n<saml:NameID Format=\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\" NameQualifier=\"http://openam.vagrant.dev/openam\">user@example.com</saml:NameID><saml:SubjectConfirmation Method=\"urn:oasis:names:tc:SAML:2.0:cm:bearer\">\\\\\\\\n<saml:SubjectConfirmationData InResponseTo=\"84cbf2be33f6410bbe55877545a93f02\" NotOnOrAfter=\"2014-06-15T01:14:52Z\" Recipient=\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"/></saml:SubjectConfirmation>\\\\\\\\n</saml:Subject><saml:Conditions NotBefore=\"2014-06-15T00:54:52Z\" NotOnOrAfter=\"2014-06-15T01:14:52Z\">\\\\\\\\n<saml:AudienceRestriction>\\\\\\\\n<saml:Audience>http://localhost:8086</saml:Audience>\\\\\\\\n</saml:AudienceRestriction>\\\\\\\\n</saml:Conditions>\\\\\\\\n<saml:AuthnStatement AuthnInstant=\"2014-06-15T01:00:25Z\" SessionIndex=\"s2f9b4d4b453d12b40ef3905cc959cdb40579c2301\"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement></saml:Assertion></samlp:Response>",
"domain": "dc=openam",
"hostname": "192.168.33.1\t",
"ipaddr": "Not Available",
"loggedby": "cn=dsameuser,ou=DSAME Users,dc=openam",
"loginid": "id=openamuser,ou=user,dc=openam",
"messageid": "SAML2-37",
"modulename": "SAML2.access",
"nameid": "user@example.com"
},
{
"log_line": 1,
"log_part": "p.0",
"log_time": "2014-06-15 01:04:52.000",
"log_idle_msecs": 0,
"log_level": "trace",
"log_mark": 0,
"contextid": "ec5708a7f199678a01",
"data": "vagrant|/",
"domain": "dc=openam",
"hostname": "127.0.1.1\t",
"ipaddr": "Not Available",
"loggedby": "cn=dsameuser,ou=DSAME Users,dc=openam",
"loginid": "cn=dsameuser,ou=DSAME Users,dc=openam",
"messageid": "COT-22",
"modulename": "COT.access",
"nameid": "Not Available"
}
]
EOF

Loading…
Cancel
Save