#
# log_packet_header = yes
+
+ #
+ # There are many, many, issues with dates being printed as
+ # humanly-readable strings. The server tries hard to both
+ # print and parse dates correctly, however this is not always
+ # possible.
+ #
+ # The detail files may be generated on one machine, and read
+ # on another. The two systems may have different languages,
+ # so the names of the month may not be parseable. The two
+ # systems may have different time zones. Time zone parsing
+ # is pretty much impossible, as there are multiple time zones
+ # with the same name!
+ #
+ # In some cases, the local libraries may not be able to
+ # correctly parse the time zone it printed! i.e. the system
+ # documentation for the C library time functions sometimes
+ # even says that the time zones are ignored, and the dates
+ # are parsed as UTC.
+ #
+ # All of these issues can be avoided by printing the dates as
+ # integer. In nearly all cases, the integer printed is
+ # exactly what was received in the packet.
+ #
+ # This may resolve some issues, but it's not perfect. The
+ # dates received by FreeRADIUS are sent by the NAS, and
+ # created on the NAS. So if the time on the NAS is wrong,
+ # the dates printed by FreeRADIUS will also be wrong. The
+ # only solution is to make sure that the NAS is using the
+ # correct time.
+ #
+# dates_as_integer = yes
+
#
# Certain attributes such as User-Password may be
# "sensitive", so they should not be printed in the
bool escape; //!< do filename escaping, yes / no
+ bool dates_as_integer;
+
xlat_escape_t escape_func; //!< escape function
exfile_t *ef; //!< Log file handler
{ "permissions", FR_CONF_OFFSET(PW_TYPE_INTEGER, rlm_detail_t, perm), "0600" },
{ "group", FR_CONF_OFFSET(PW_TYPE_STRING, rlm_detail_t, group), NULL },
{ "locking", FR_CONF_OFFSET(PW_TYPE_BOOLEAN, rlm_detail_t, locking), "no" },
+ { "dates_as_integer", FR_CONF_OFFSET(PW_TYPE_BOOLEAN, rlm_detail_t, dates_as_integer), "no" },
{ "escape_filenames", FR_CONF_OFFSET(PW_TYPE_BOOLEAN, rlm_detail_t, escape), "no" },
{ "log_packet_header", FR_CONF_OFFSET(PW_TYPE_BOOLEAN, rlm_detail_t, log_srcdst), "no" },
CONF_PARSER_TERMINATOR
*/
op = vp->op;
vp->op = T_OP_EQ;
- vp_print(out, vp);
+
+ if ((vp->da->type == PW_TYPE_DATE) && inst->dates_as_integer) {
+ WRITE("\t%s = %u\n", vp->da->name, vp->vp_date);
+ } else {
+ vp_print(out, vp);
+ }
vp->op = op;
}
}
}
#endif
}
- WRITE("\tTimestamp = %ld\n", (unsigned long) request->timestamp);
+ WRITE("\tTimestamp = %lu\n", (unsigned long) request->timestamp);
WRITE("\n");