jimdigriz / freeradius-oauth2-perl

FreeRADIUS OAuth2 (OpenID Connect) using rlm_perl
GNU Affero General Public License v3.0
129 stars 35 forks source link

Error parsing time at /usr/lib/x86_64-linux-gnu/perl/5.34/Time/Piece.pm line 598. #42

Open jimdigriz opened 1 year ago

jimdigriz commented 1 year ago

Probably something to fix whilst dealing with https://github.com/jimdigriz/freeradius-oauth2-perl/issues/13

On Mon, 18 Sep 2023, at 19:34, J R wrote:

I was setting up your code for authentication against Azure AD, but I received an error "Thread 2 terminated abnormally: Error parsing time at /usr/lib/x86_64-linux-gnu/perl/5.34/Time/Piece.pm line 598." when researching this. I found that changing from "Time::Piece" to "DateTime" solved the issue.

Here is the code change I made to successfully authenticate against azure.

File: main.pm

Added:

  • use DateTime;
  • use DateTime::Format::Strptime;

Commented out: if ($^V ge v5.28) { Time::Piece->use_locale(); } else { warn "old version of Perl (pre-5.28) detected, non-English locale users must run FreeRADIUS with LC_ALL=C"; } use constant RADTIME_FMT => '%b %e %Y %H:%M:%S %Z'; sub toradtime { my ($s) = @; return Time::Piece->strptime($s, '%Y-%m-%dT%H:%M:%SZ')->strftime(RADTIME_FMT); }

Replaced the commented out section with the following: if ($^V ge v5.28) {

No need for any specific action for DateTime

} else { warn "old version of Perl (pre-5.28) detected, non-English locale users must run FreeRADIUS with LC_ALL=C"; }

use constant RADTIME_FMT => '%b %e %Y %H:%M:%S %Z';

my $strp = DateTime::Format::Strptime->new( pattern => '%Y-%m-%dT%H:%M:%SZ', time_zone => 'UTC', );

sub toradtime { my ($s) = @; my $dt = $strp->parse_datetime($s); return $dt->strftime(RADTIME_FMT); }

and then everything worked. credit goes to OpenAI for the new code.

jimdigriz commented 1 year ago

Replied:

On Mon, 18 Sep 2023, at 19:34, J R wrote:

I was setting up your code for authentication against Azure AD, but I received an error "Thread 2 terminated abnormally: Error parsing time at /usr/lib/x86_64-linux-gnu/perl/5.34/Time/Piece.pm line 598." when researching this. I found that changing from "Time::Piece" to "DateTime" solved the issue.

Thanks for picking up on this. I dropped your email into an issue so it gets captured and not lost.