Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Accessing a file from the perl

by abcdefg (Acolyte)
on Jan 11, 2012 at 22:53 UTC ( #947449=note: print w/replies, xml ) Need Help??


in reply to Accessing a file from the perl

I have a client and server application.MY client is sending the username(which it gets through getlogin()) to server.I want server to save all the registered username in a file called username.On receiving the request from client,it checks the username of client in the file and if it founds it ,its gives him permission to go ahead otherwise rejects it. here is what i did:

$user = <$client_socket>; chop($user); #remove the \n print "$prefix USER = $user\n"; unless (open (USERNAME, "username")) { print "ERROR:Cannot open username file.\n"; exit(1); # ERROR } while(<USERNAME>) { my @newusername = <USERNAME>; foreach $name (@newusername) { if($name ne $user) { print $client_socket "ERR\n"; print "$prefix ERROR: user $user not permitted to use this mode +. Exiting.\n"; close(USERNAME); exit(1); } } } #else, continue print $client_socket "ACK\n"; # approve the user. Limit this in + the future. close(USERNAME);

this isnt working as even when the file username has client name it is giving "user $user not allowed".

Replies are listed 'Best First'.
Re^2: Accessing a file from the perl
by Eliya (Vicar) on Jan 11, 2012 at 23:24 UTC

    Your main problem is that you're checking ne

    if($name ne $user) {

    so, unless every entry in the USERNAME file holds the name in question, this will match and quit with ERR.

    Also, your way of reading the file

    while(<USERNAME>) # reads first entry { my @newusername = <USERNAME>; # reads remaining entries foreach $name (@newusername) ...

    skips the first entry for the comparison...

    Try something like this:

    ... my $found; while (my $name = <USERNAME>) { if ($name eq $user) { $found = 1; last; } } unless ($found) { print $client_socket "ERR\n"; ... exit; } print $client_socket "ACK\n";

    And either chomp both $user and $name, or none.  As you have it, $name has a trailing \n, while $user hasn't.

      $user = <$client_socket>; chomp($user); #remove the \n print "$prefix USER = $user\n"; unless (open (USERNAME, "username")) { print "ERROR:Cannot open username file.\n"; exit(1); # ERROR } my $found; while(my $newusername = <USERNAME>) { chomp($newusername); if($newusername eq $user) { $found = 1; last; } unless ($found) { print $client_socket "ERR\n"; print "$prefix ERROR: user $user not allowed Exiting. +\n"; close(USERNAME); exit(1); } } #else, continue print $client_socket "ACK\n"; # approve the user. #print "user $user is allowed."; close(USERNAME);

      I tried what you said as above but still it got same problem..still its not goin on else part where user is approved.

        The unless ($found) check needs to be after the while loop, not within  (before having run through the entire file, you cannot tell whether a matching entry was found...)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2023-03-30 13:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Which type of climate do you prefer to live in?






    Results (74 votes). Check out past polls.

    Notices?