[Date Prev][Date Next] [Chronological] [Thread] [Top]

perl backend... Failure during bind



I'm using OpenLDAP v2.3.18, patched per suggestions cited here yesterday so
that the perl backend actually works, and I'm having an issue with my bind()
method.


    package MSGStore;

    use POSIX;

    $debug = 3;
                     
    sub bind
    {
        print "\n>>>>>>>>>>>>>>>>>>>>>>>>BIND<<<<<<<<<<<<<<<<<<<\n\n" if( $debug > 2);
        my $this    = shift;
        my $dn      = shift;
        my $pass    = shift;
        my $retval  = 0;
    # First attribute in dn assumed to be principle name
        my $rest    = (split('=',$dn,2))[1];
        my ($uid, $ou)  = (split(',',$rest,2));

        $uid = lc $uid;
        $tmp_filename = "/pmdf/tmp/krb5_$uid";
        $prince = "$uid\@dce.psu.edu";
        $tmp_filename = "/dev/null";

    # Reach out to kinit and the remote KDC to authenticate...
        $cmd = "/usr/local/bin/kinit $prince >$tmp_filename 2>&1";
        print "\n>>>>> $cmd <<<<<<\n\n" if( $debug > 2);
        $cmd = "echo $pass | ".$cmd;
        system($cmd);
        $hold = $?;
        $exit_value = $?>>8;
        $signal_num = $? & 127;
        $dumped_core = $? & 128;
        chmod 740, $tmp_filename;
        print "\n>>>>> status=$hold <<<<<<\n\n" if( $debug > 2);
        $exit_str = "";
        $exit_str .= ($exit_value>0)?"Exit=$exit_value":"";
        $exit_str .= ($signal_num>0)?(($exit_str ne ""?", ":"")."Sig=$signal_num"):"";
        $exit_str .= ($dumped_core>0)?(($exit_str ne ""?", ":"")."DumpedCore!"):"";
        print "\n>>>>> $exit_str <<<<<<\n\n" if( $debug > 2);
        system("cat $tmp_filename") if( $debug > 2);

    # Return 0 for success, 1 for failure.
        $retval = 1 if $exit_value;
        print "\n>>>>>>>>>>>>>>>>>>>>>>>>BIND<<<<<<<<<<<<<<<<<<<done\n\n" if( $debug > 2);
        print "\n>>>>> retval = $retval <<<<<<\n\n" if( $debug > 2);
        return $retval;
    }

When I invoke this method from a simple perl script, it works just fine, either
succeeding (0) or failing (1) on the system() call based on whether the
uid/pass pair was vaild in my KDC.

When I use exactly the same file in my slapd-perl server, it almost every time
(90%+) returns a value of -1 for the system() call.  Once every so often, the
return from system() will be zero when the uid/pass pair was valid, or 256
(>>8=1) if the pair was not vaild.

Am I running up against some kind of restriction in what the perl backend is
allowed to do?

+----"Never Underestimate the bandwidth of a station wagon full of mag tapes"--+
| J.Lance Wilkinson ("Lance")		InterNet:  Lance.Wilkinson@psu.edu 
| Systems Design Specialist - Lead	AT&T:      (814) 865-1818
| Digital Library Technologies		FAX:       (814) 863-3560
| 3 Paterno Library				"I'd rather be dancing..." 
| Penn State University		    A host is a host from coast to coast,
| University Park, PA 16802	    And no one will talk to a host that's close
| <postmaster@psulias.psu.edu>	    Unless the host that isn't close
| EMail Professional since 1978	    Is busy, hung or dead.
+---------"He's dead, Jim. I'll get his tricorder. You take his wallet."-------+
                [apologies to DeForest Kelley, 1920-1999]
<A Href="http://perdita.lcs.psu.edu";>home page</a> 
<a Href="http://perdita.lcs.psu.edu/junkdec.htm";>junk mail declaration</a>
--	/"\
	\ /	ASCII RIBBON CAMPAIGN
	X	AGAINST HTML MAIL
	/ \