externer Authenticator in perl funktioniert nicht

Alles, was den Apache betrifft, kann hier besprochen werden.

externer Authenticator in perl funktioniert nicht

Postby kodak » 07. February 2014 00:34

Hi!

Ich versuche gerade in perl mit mod_auth_external einen Authenticator zu schreiben.
Mein Ziel ist es ein Script auszuführen wenn der Benutzer sich über Basic Auth anmeldet.

Es scheint zwar alles zu funktionieren aber einloggen kann ich mich leider trotzdem nicht.
Mir scheint es fast als ob die PAM Funktion nicht funktioniert wenn diese vom Apache aufgerufen wird.

Hier das Perl Script:
Code: Select all
#!/usr/bin/perl

  use Authen::PAM;
  use POSIX qw(ttyname);

  $service = "login";
  $username = <STDIN>;
  chomp $username;
  $password = <STDIN>;
  chomp $password;
  $tty_name = ttyname(fileno(STDIN));

  sub my_conv_func {
    my @res;
    while ( @_ ) {
        my $code = shift;
        my $msg = shift;
        my $ans = "";

        $ans = $username if ($code == PAM_PROMPT_ECHO_ON() );
        $ans = $password if ($code == PAM_PROMPT_ECHO_OFF() );

        push @res, (PAM_SUCCESS(),$ans);
    }
    push @res, PAM_SUCCESS();
    return @res;
  }

  ref($pamh = new Authen::PAM($service, $username, \&my_conv_func)) ||
         die "Error code $pamh during PAM init!";

  $res = $pamh->pam_set_item(PAM_TTY(), $tty_name);
  $res = $pamh->pam_authenticate;
  #print $pamh->pam_strerror($res),"\n" unless $res == PAM_SUCCESS();
  if( $res == 0){
    exit 0;
  }else {
    exit 1;
  }


und meine Apache Virtual Host conf:

Code: Select all
<VirtualHost *:80>

DefineExternalAuth myauth pipe /home/user/perlAuth.pl

   <Directory /var/www/>
      Options Indexes FollowSymLinks MultiViews +ExecCGI
      AllowOverride None
      Order allow,deny
      allow from all
      AddHandler cgi-script .pl

                AuthType Basic
                AuthName "mein Auth Test"
                AuthBasicProvider external
                AuthExternal myauth
                Require valid-user

   </Directory>
</VirtualHost>


In der Apache error log steht folgendes:
Code: Select all
[Fri Feb 07 00:16:14 2014] [error] [client 127.0.0.1] AuthExtern myauth [/home/user/perlAuth.pl]: Failed (1) for user user1
[Fri Feb 07 00:16:14 2014] [error] [client 127.0.0.1] user user1: authentication failure for "/": Password Mismatch


Es würde wahrscheinlich besser funktionieren wenn das Prog in C geschrieben wäre aber dafür reichen meine C Kenntnisse nicht aus.
Getestet habe ich das Script mit:
./perlAuth.pl; echo $?

Wenn ich einen validen User und Pass eingebe bekomme ich eine 0 zurück, ansonsten eine 1.
Wenn ich "exit 0" an den anfang des Scripts schreibe klappt auch die Authentifizierung.
Also muss es wohl am PAM liegen.

Wäre super wenn noch jemand eine Idee hätte... andere Lösungsvorschläge werden auch gerne entgegen genommen.

Grüße,
Kodak
kodak
 
Posts: 2
Joined: 26. July 2013 01:01
Operating System: OSX

Return to Apache

Who is online

Users browsing this forum: No registered users and 8 guests