Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Re: perl tutorial clarification

by onemadjock (Initiate)
on Nov 11, 2003 at 21:36 UTC ( [id://306382]=note: print w/replies, xml ) Need Help??


in reply to Re: perl tutorial clarification
in thread perl tutorial clarification

I'm not being funny but seeing as i just registered for this site, i thought you lot would take it easy with me.

Anyway, in the tutorial I looked at, the idea was to have a file for each user and the password in that file. I simpflied it a bit and ignored the need for encryption and cookies.

The link to the tutorial is here. The script executes without errors but doesn't recognise the user from the form on the previous page. Here's a snippet of the code:

... use constant USER_DATA => '../data/users/'; my $username = param( 'login' ) || ''; my $password = param( 'password' ) || ''; my $userfile = USER_DATA.$username; my $message = 'Bad password'; open USER, "< $userfile" or display_page( "Your username and password +information did not match. Check to see that you do not have Caps Lock on, hit the back button, and try again." ), exit; my $real_password = <USER>; close USER; if ( $password eq $real_password ) { $message = "Hello, $username. You gave me a good password"; } ...

Thanks, onemadjock

Replies are listed 'Best First'.
Re: perl tutorial clarification
by jonadab (Parson) on Nov 11, 2003 at 22:14 UTC
    i thought you lot would take it easy with me

    castaway wasn't trying to be harsh with you; it's just that geeks like us can't read your mind, because we think differently. (I personally tend to think in Perl, when I'm thinking about programming stuff. So thinking about it the way normal people do is hard. castaway may have a similar problem.) Now that you've posted a snippet and an explanation, we are better able to figure out what you need...

    From your description, it seems you're always getting that "your username and password did not match" page, right? For testing purposes, why not add some debugging information to that page, so you can have a better idea what's going wrong?

    open USER, "<$userfile" or display_page( "Your username ($username) and password ($password) information did not match, or I was unable to verify them. (Technical error code: $!) Check to see that you do not have Caps Lock on, hit the back button, and try again." ), exit;

    Try that, and see what it tells you. This should help you isolate the problem, by telling you whether your $username and $password variables are getting set correctly and/or why you can't open the file. (Two chances out of three it's a permissions problem, but the value of $! will tell you that for sure.)


    $;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}} split//,".rekcah lreP rehtona tsuJ";$\=$ ;->();print$/

      Thank you for that - it now says that no such file or directory exists. The sample user is root and the password is password. I have got a file called root and root.txt.

      Is the problem due to the file name and/or type?

      Thanks for clearing up the misunderstanding as these sites can be quite intimidating for the novice user. We all have to start somewhere!

      Thanks again - oh and the text box in the form is called login not username.

        it now says that no such file or directory exists

        Okay, there's more going on than just a permissions issue, then. The file your code is trying to open doesn't exist, which may mean that it's got the wrong path or filename. I tested the following code:

        use constant USER_DATA => '../data/users/'; my $username = "root"; my $userfile = USER_DATA.$username;

        This sets $userfile to "../data/users/root", which is probably what you intended. (The $username variable did get set to "root", yes? That should be printed in parentheses in the error page, using the code I posted.)

        However, it's a relative path, which leads me to wonder whether the current directory is different from what you thought it was. I believe that when Apache calls a CGI script it sets the current directory to the directory containing the script. So, if your script is /var/www/cgi-bin/something.cgi, the file you're trying to open is /var/www/data/users/root (This is a *nix system, not Win32, right?)

        You're sure that file exists?


        $;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}} split//,".rekcah lreP rehtona tsuJ";$\=$ ;->();print$/
        Thats much more like it..

        Are you sure thats the same path your other form is using to save the files to? Try outputting $userfile as well, to see what that contains? You can check if a file exists using '-e', so you could try if(-e $userfile) { display_page("Can't find $userfile") } or something similar..

        C.

Re: Re: Re: perl tutorial clarification
by shockme (Chaplain) on Nov 11, 2003 at 22:10 UTC
    What does your HTML page look like? The tutorial uses:
    my $tainted_username = param( 'username' ) || '';
    but your code reads:
    my $username = param( 'login' ) || '';
    Does the HTML form set the variable username or the variable login? Those must match.

    If things get any worse, I'll have to ask you to stop helping me.

Re: Re: Re: perl tutorial clarification
by rdfield (Priest) on Nov 12, 2003 at 10:52 UTC
    You will probably need to chomp $real_password; after the line read <USER>.

    rdfield

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://306382]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2024-04-18 00:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found