Thanks for the detailed information! I'm a beginner and appreciate everyone's help.
I tried a number of the suggestions in this and other responses to my post. This test: if ($password ne $in{password}) is still not working. I'd appreciate any suggestions.Here is the code: open(FILE,"pwdata.txt") || die "Can't find database\n"; #store database contents in an array and close file @indata = <FILE>; close(FILE); #remove hard return character from each record chomp($i); foreach $i (@indata) { #split fields on pipe character #assign a variable name to each of the fields ($username, $password) = split(/\ | /,$i); if ($password ne $in{password}) Here is my complete revised code: #!/usr/local/bin/perl require "cgi-lib.pl"; #process incoming form data &ReadParse; #open the database in read-only mode open(FILE,"pwdata.txt") || die "Can't find database\n"; #store database contents in an array and close file @indata = <FILE>; close(FILE); #remove hard return character from each record chomp($i); foreach $i (@indata) { #split fields on pipe character #assign a variable name to each of the fields ($username, $password) = split(/\ | /,$i); if ($password ne $in{password}) { #invalid password--create error message and exit print &PrintHeader; print <<"PrintTag"; <HTML> <HEAD> <TITLE>Error!</TITLE> </HEAD> <BODY BGCOLOR="white" TEXT="black"> <H1>Authorization Required</H1> <BLOCKQUOTE> You do not have authorization to enter this website. Please click <a href="http://www.worldwidewebstrategies.com">here</a> to return to the WWWS web site. </BLOCKQUOTE> <BLOCKQUOTE> If you feel you have received this message in error, please return to the login screen and try to enter your username and password again. </BLOCKQUOTE> </BODY> </HTML> PrintTag exit(0); } #check for blank form fields if ($in{'username'}eq"" || $in{'password'}eq"") { #invalid password--create error message and exit print &PrintHeader; print <<"PrintTag"; <HTML> <HEAD> <TITLE>Error!</TITLE> </HEAD> <BODY BGCOLOR="white" TEXT="black"> <H1>Authorization Required</H1> <BLOCKQUOTE> You do not have authorization to enter this website. Please click <a href="http://www.worldwidewebstrategies.com">here</a> to return to the WWWS web site. </BLOCKQUOTE> <BLOCKQUOTE> If you feel you have received this message in error, please return to the login screen and try to enter your username and password again. </BLOCKQUOTE> </BODY> </HTML> PrintTag exit(0); } #everything is okay. Create lock file. open(LOCK_FILE, ">lock.fil"); #open, append record, and close database open(FILE,">>pwdata.txt") || die "Can't find database\n"; print FILE "$in{'username'}|$in{'password'}\n"; close(FILE); #close lock file close(LOCK_FILE); #delete lock file unlink("lock.fil"); print "Location:http://www.worldwidewebstrategies.com\n\n"; }; Peter Scott wrote: > > At 08:13 PM 1/22/02 -0500, maureen wrote: > > >Thanks to everyone in the group who has helped me recently. I appreciate > >all of your suggestions. > > > >I am working with a text file that contains pipe separators, like this: > > > >username | password > > > >I am trying to load the text file into an array and create two variables > >$username and $password, without the separator. I'd appreciate any > >suggestions on what I am doing wrong here. > > > >open(FILE,"pwdata.txt") || die "Can't find database\n"; > >@indata = <FILE>; > >close(FILE); > >foreach $i (@indata) > >{ > >#remove hard return character from each record > >chomp($i); > >($username,$password) = split(/\|/,$i); > > You're not doing anything wrong there: > > $ cat > pwdata.txt > username|password > $ perl -e 'open FILE,"pwdata.txt";@a=<FILE>;for $i (@a) { chomp > $i; ($u, $p) = split/\|/,$i ; print "Username = $u, Password = $p\n"}' > ^D > Username = username, Password = password > > Your following test (below) though is wrong: > > if ($password = $i{password}) > > I have no idea what that's trying to do. I don't see a hash %i in your > code. And you're doing an assignment in a conditional instead of a > test. I think you may have meant > > if ($password ne $in{password}) > > However, I have several problems with your approach to an application that > appears to be authenticating people for a web application: > > 1. Passwords stored in plain text. They should be stored as a one-way > encryption, with, e.g., Digest::MD5. > 2. Password file accessed without locking. It might be being updated at > the same time. > 3. Using cgi-lib.pl instead of CGI.pm. > 4. Not using strict. > 5. Not using -w during development. > 6. Successful authentication simply redirects user to another page, whose > URL could be discovered by someone who might just go straight there. If > it's worth protecting then that page should be protected also. Using > HTTP-Basic authentication may be a better approach. > 7. Duplication of error message rather than reference the same > one. Although it looks as though they ought to be two different error > messages anyway. > > >Thanks! Maureen > > > > > >The entire code follows: > > > >#!/usr/local/bin/perl > >require "cgi-lib.pl"; > >#process incoming form data > >&ReadParse; > >#open the database in read-only mode > >open(FILE,"pwdata.txt") || die "Can't find database\n"; > >#store database contents in an array and close file > >@indata = <FILE>; > >close(FILE); > >foreach $i (@indata) > >{ > >#remove hard return character from each record > >chomp($i); > >#split fields on pipe character > >#assign a variable name to each of the fields > >($username,$password) = split(/\|/,$i); > >if ($password = $i{password}) > >{ > >#invalid password--create error message and exit > >print &PrintHeader; > >print <<"PrintTag"; > > > > > >Authorization Required > > > > > >You do not have authorization to enter this website. Please click > ><http://www.worldwidewebstrategies.com>here to return to the WWWS web site. > > > >If you feel you have received this message in error, please return to the > >login screen and try to enter your username and password again. > > > > > >PrintTag > >exit(0); > >} > >#check for blank form fields > >if ($in{'username'}eq"" || $in{'password'}eq"") > >{ #invalid password--create error message and exit > >print &PrintHeader; > >print <<"PrintTag"; > > > > > >Authorization Required > > > > > >You do not have authorization to enter this website. Please click > ><http://www.worldwidewebstrategies.com>here to return to the WWWS web site. > > > >If you feel you have received this message in error, please return to the > >login screen and try to enter your username and password again. > > > > > >PrintTag > >exit(0); > >} > >print "Location:http://www.worldwidewebstrategies.com\n\n"; > >}; > >Thanks > > -- > Peter Scott > Pacific Systems Design Technologies > http://www.perldebugged.com -- Be the change you want to see in the World - Mahatma Ghandi -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]