<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=Using_ExternalAuth_to_authenticate_against_POP3</id>
	<title>Using ExternalAuth to authenticate against POP3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=Using_ExternalAuth_to_authenticate_against_POP3"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=Using_ExternalAuth_to_authenticate_against_POP3&amp;action=history"/>
	<updated>2026-08-21T23:28:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=Using_ExternalAuth_to_authenticate_against_POP3&amp;diff=4132&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=Using_ExternalAuth_to_authenticate_against_POP3&amp;diff=4132&amp;oldid=prev"/>
		<updated>2016-04-06T20:39:40Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;I have a need to tie RT to email authentication so that users can authenticate regardless of what the email platform is.  Here is a patch I wrote against RT::Authen::ExternalAuth that may help someone:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 diff -ruN /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/etc/RT_SiteConfig.pm RT-Authen-ExternalAuth/etc/RT_SiteConfig.pm&lt;br /&gt;
 --- /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/etc/RT_SiteConfig.pm    2011-04-25 07:57:20.000000000 -0800&lt;br /&gt;
 +++ RT-Authen-ExternalAuth/etc/RT_SiteConfig.pm    2012-01-11 10:44:45.000000000 -0900&lt;br /&gt;
 @@ -38,6 +38,16 @@&lt;br /&gt;
  #   Set(ExternalAuthPriority,[&amp;#039;My_LDAP&amp;#039;,&amp;#039;My_MySQL&amp;#039;,&amp;#039;My_Oracle&amp;#039;,&amp;#039;SecondaryLDAP&amp;#039;,&amp;#039;Other-DB&amp;#039;]);&lt;br /&gt;
  #&lt;br /&gt;
  Set($ExternalSettings,      {   # AN EXAMPLE DB SERVICE&lt;br /&gt;
 +                                &amp;#039;POP3&amp;#039;        =&amp;gt; {&lt;br /&gt;
 +                            # pop3 type&lt;br /&gt;
 +                                                        &amp;#039;type&amp;#039; =&amp;gt; &amp;#039;pop3&amp;#039;,&lt;br /&gt;
 +                            # pop3 server&lt;br /&gt;
 +                                                        &amp;#039;host&amp;#039; =&amp;gt; &amp;#039;mail.domain.com&amp;#039;,&lt;br /&gt;
 +                            # if you want to use SSL or not&lt;br /&gt;
 +                                                        &amp;#039;ssl&amp;#039; =&amp;gt; 1,&lt;br /&gt;
 +                            # auth mode passed to Mail::POP3Client (&amp;#039;BEST&amp;#039;, &amp;#039;PASS&amp;#039;, &amp;#039;APOP&amp;#039; and &amp;#039;CRAM-MD5&amp;#039;)&lt;br /&gt;
 +                                                        &amp;#039;authmode&amp;#039; =&amp;gt; &amp;#039;PASS&amp;#039;&lt;br /&gt;
 +                                                 },&lt;br /&gt;
                                  &amp;#039;My_MySQL&amp;#039;   =&amp;gt;  {      ## GENERIC SECTION&lt;br /&gt;
                                                          # The type of service (db/ldap/cookie)&lt;br /&gt;
                                                          &amp;#039;type&amp;#039;                      =&amp;gt;  &amp;#039;db&amp;#039;,&lt;br /&gt;
 diff -ruN /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/POP3.pm RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/POP3.pm&lt;br /&gt;
 --- /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/POP3.pm    1969-12-31 14:00:00.000000000 -1000&lt;br /&gt;
 +++ RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/POP3.pm    2012-01-11 10:37:54.000000000 -0900&lt;br /&gt;
 @@ -0,0 +1,74 @@&lt;br /&gt;
 +package RT::Authen::ExternalAuth::POP3;&lt;br /&gt;
 +&lt;br /&gt;
 +use Mail::POP3Client;&lt;br /&gt;
 +&lt;br /&gt;
 +use strict;&lt;br /&gt;
 +&lt;br /&gt;
 +sub GetAuth {&lt;br /&gt;
 +&lt;br /&gt;
 +    my ($service, $username, $password) = @_;&lt;br /&gt;
 +   &lt;br /&gt;
 +    my $config = $RT::ExternalSettings-&amp;gt;{$service};&lt;br /&gt;
 +    $RT::Logger-&amp;gt;debug( &amp;quot;Trying external auth service:&amp;quot;,$service);&lt;br /&gt;
 +&lt;br /&gt;
 +    my $host    = $config-&amp;gt;{&amp;#039;host&amp;#039;};&lt;br /&gt;
 +    my $ssl     = $config-&amp;gt;{&amp;#039;ssl&amp;#039;};&lt;br /&gt;
 +    my $mode    = $config-&amp;gt;{&amp;#039;authmode&amp;#039;};&lt;br /&gt;
 +&lt;br /&gt;
 +    if( $ssl ){&lt;br /&gt;
 +      $ssl = 1;&lt;br /&gt;
 +    } else {&lt;br /&gt;
 +      $ssl = 0;&lt;br /&gt;
 +    }&lt;br /&gt;
 +&lt;br /&gt;
 +    my $pop = new Mail::POP3Client( USER      =&amp;gt; $username,&lt;br /&gt;
 +                                    PASSWORD  =&amp;gt; $password,&lt;br /&gt;
 +                                    HOST      =&amp;gt; $host,&lt;br /&gt;
 +                                    USESSL    =&amp;gt; $ssl,&lt;br /&gt;
 +                                    AUTH_MODE =&amp;gt; $mode,&lt;br /&gt;
 +    );&lt;br /&gt;
 +&lt;br /&gt;
 +    $RT::Logger-&amp;gt;debug( &amp;quot;POP3 Autentication as&amp;quot;,  $username, &amp;quot;@&amp;quot;, $host );&lt;br /&gt;
 +&lt;br /&gt;
 +    if( $pop-&amp;gt;State eq &amp;#039;TRANSACTION&amp;#039; ){&lt;br /&gt;
 +      $RT::Logger-&amp;gt;info( &amp;quot;External Auth OK (&amp;quot;, $service, &amp;quot;):&amp;quot;, $username);&lt;br /&gt;
 +      return 1;&lt;br /&gt;
 +    } else {&lt;br /&gt;
 +      $RT::Logger-&amp;gt;info( &amp;quot;External Auth FAILED (&amp;quot;, $service, &amp;quot;):&amp;quot;, $username);&lt;br /&gt;
 +      return 0;&lt;br /&gt;
 +    }&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +&lt;br /&gt;
 +sub CanonicalizeUserInfo {&lt;br /&gt;
 +   &lt;br /&gt;
 +    my ($service, $key, $value) = @_;&lt;br /&gt;
 +&lt;br /&gt;
 +    my $found = 1;&lt;br /&gt;
 +    my %params = (Name         =&amp;gt; undef,&lt;br /&gt;
 +                  EmailAddress =&amp;gt; undef,&lt;br /&gt;
 +                  RealName     =&amp;gt; undef);&lt;br /&gt;
 +&lt;br /&gt;
 +    return ($found, %params);&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +sub UserExists {&lt;br /&gt;
 +    my ($username,$service) = @_;&lt;br /&gt;
 +   $RT::Logger-&amp;gt;debug(&amp;quot;UserExists params:\nusername: $username , service: $service&amp;quot;);&lt;br /&gt;
 +    my $config              = $RT::ExternalSettings-&amp;gt;{$service};&lt;br /&gt;
 +   &lt;br /&gt;
 +    my $base                = $config-&amp;gt;{&amp;#039;base&amp;#039;};&lt;br /&gt;
 +    my $filter              = $config-&amp;gt;{&amp;#039;filter&amp;#039;};&lt;br /&gt;
 +&lt;br /&gt;
 +    return 1; &lt;br /&gt;
 +&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +sub UserDisabled {&lt;br /&gt;
 +&lt;br /&gt;
 +    my ($username,$service) = @_;&lt;br /&gt;
 +&lt;br /&gt;
 +    return 0;&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +1;&lt;br /&gt;
 diff -ruN /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm&lt;br /&gt;
 --- /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm    2011-05-06 13:07:37.000000000 -0800&lt;br /&gt;
 +++ RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm    2012-01-11 09:04:33.000000000 -0900&lt;br /&gt;
 @@ -25,6 +25,7 @@&lt;br /&gt;
  &lt;br /&gt;
  use RT::Authen::ExternalAuth::LDAP;&lt;br /&gt;
  use RT::Authen::ExternalAuth::DBI;&lt;br /&gt;
 +use RT::Authen::ExternalAuth::POP3;&lt;br /&gt;
  &lt;br /&gt;
  use strict;&lt;br /&gt;
  &lt;br /&gt;
 @@ -320,6 +321,8 @@&lt;br /&gt;
      my ($service,$username,$password) = @_;&lt;br /&gt;
     &lt;br /&gt;
      my $success = 0;&lt;br /&gt;
 +&lt;br /&gt;
 +`echo $service,$username,$password &amp;gt; /tmp/test`;&lt;br /&gt;
     &lt;br /&gt;
      # Get the full configuration for that service as a hashref&lt;br /&gt;
      my $config = $RT::ExternalSettings-&amp;gt;{$service};&lt;br /&gt;
 @@ -332,6 +335,9 @@&lt;br /&gt;
      } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;ldap&amp;#039;) {&lt;br /&gt;
          $success = RT::Authen::ExternalAuth::LDAP::GetAuth($service,$username,$password);&lt;br /&gt;
      $RT::Logger-&amp;gt;debug(&amp;quot;LDAP password validation result:&amp;quot;,$success);&lt;br /&gt;
 +    } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;pop3&amp;#039;) {&lt;br /&gt;
 +        $success = RT::Authen::ExternalAuth::POP3::GetAuth($service,$username,$password);&lt;br /&gt;
 +        $RT::Logger-&amp;gt;debug(&amp;quot;POP3 password validation result:&amp;quot;,$success);&lt;br /&gt;
      } else {&lt;br /&gt;
          $RT::Logger-&amp;gt;error(&amp;quot;Invalid service type for GetAuth:&amp;quot;,$service);&lt;br /&gt;
      }&lt;br /&gt;
 @@ -357,6 +363,8 @@&lt;br /&gt;
          $success = RT::Authen::ExternalAuth::DBI::UserExists($username,$service);&lt;br /&gt;
      } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;ldap&amp;#039;) {&lt;br /&gt;
          $success = RT::Authen::ExternalAuth::LDAP::UserExists($username,$service);&lt;br /&gt;
 +    } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;pop3&amp;#039;) {&lt;br /&gt;
 +        $success = RT::Authen::ExternalAuth::POP3::UserExists($username,$service);&lt;br /&gt;
      } else {&lt;br /&gt;
          $RT::Logger-&amp;gt;debug(&amp;quot;Invalid service type for UserExists:&amp;quot;,$service);&lt;br /&gt;
      }&lt;br /&gt;
 @@ -413,7 +421,19 @@&lt;br /&gt;
                  next;&lt;br /&gt;
              }&lt;br /&gt;
              $user_disabled = RT::Authen::ExternalAuth::LDAP::UserDisabled($username,$service);&lt;br /&gt;
 -                   &lt;br /&gt;
 +&lt;br /&gt;
 +        } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;pop3&amp;#039;) {&lt;br /&gt;
 +&lt;br /&gt;
 +            unless(RT::Authen::ExternalAuth::POP3::UserExists($username,$service)) {&lt;br /&gt;
 +                $RT::Logger-&amp;gt;debug(&amp;quot;User (&amp;quot;,&lt;br /&gt;
 +                                    $username,&lt;br /&gt;
 +                                    &amp;quot;) doesn&amp;#039;t exist in service (&amp;quot;,&lt;br /&gt;
 +                                    $service,&lt;br /&gt;
 +                                    &amp;quot;) - Cannot update information - Skipping...&amp;quot;);&lt;br /&gt;
 +                next;&lt;br /&gt;
 +            }&lt;br /&gt;
 +            $user_disabled = RT::Authen::ExternalAuth::POP3::UserDisabled($username,$service);&lt;br /&gt;
 +&lt;br /&gt;
          } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;cookie&amp;#039;) {&lt;br /&gt;
              RT::Logger-&amp;gt;error(&amp;quot;You cannot use SSO Cookies as an information service.&amp;quot;);&lt;br /&gt;
              next;&lt;br /&gt;
 @@ -507,6 +527,8 @@&lt;br /&gt;
                  ($found, %params) = RT::Authen::ExternalAuth::LDAP::CanonicalizeUserInfo($service,$key,$value);&lt;br /&gt;
              } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;db&amp;#039;) {&lt;br /&gt;
                  ($found, %params) = RT::Authen::ExternalAuth::DBI::CanonicalizeUserInfo($service,$key,$value);&lt;br /&gt;
 +            } elsif ($config-&amp;gt;{&amp;#039;type&amp;#039;} eq &amp;#039;pop3&amp;#039;) {&lt;br /&gt;
 +                ($found, %params) = RT::Authen::ExternalAuth::POP3::CanonicalizeUserInfo($service,$key,$value);&lt;br /&gt;
              } else {&lt;br /&gt;
                  $RT::Logger-&amp;gt;debug( (caller(0))[3],&lt;br /&gt;
                                      &amp;quot;does not consider&amp;quot;,&lt;br /&gt;
 diff -ruN /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/lib/perllocal.pod RT-Authen-ExternalAuth/lib/perllocal.pod&lt;br /&gt;
 --- /usr/local/rt4/local/plugins/RT-Authen-ExternalAuth/lib/perllocal.pod    2012-01-11 10:38:38.000000000 -0900&lt;br /&gt;
 +++ RT-Authen-ExternalAuth/lib/perllocal.pod    2012-01-06 00:47:41.000000000 -0900&lt;br /&gt;
 @@ -1,4 +1,4 @@&lt;br /&gt;
 -=head2 Wed Jan 11 10:38:38 2012: C&amp;lt;Module&amp;gt; L&amp;lt;RT::Authen::ExternalAuth|RT::Authen::ExternalAuth&amp;gt;&lt;br /&gt;
 +=head2 Fri Jan  6 00:47:41 2012: C&amp;lt;Module&amp;gt; L&amp;lt;RT::Authen::ExternalAuth|RT::Authen::ExternalAuth&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  =over 4&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>