Visit Our UNIX and Linux User Community


password changing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting password changing
# 1  
Old 05-16-2012
password changing

Hi all
Im trying to learn the basics of bash and am struggling with some file manipulation. I am trying to run a script that once you have logged in allows you to change your password which is held (along with the corresponding username) in a different file called usernames. When i try to run my code the logon part runs fine, but the change of password is not storedSmilie. Any advice would be greatly appreciated.

Thanks

Code:
#!/bin/bash

# script to change a password
username ()

{
while :
do
echo "please enter a username"
read user
grep -iq "$user" usernames
a=$?
echo "please enter pin"
read pin
grep -i "^$user" usernames | grep -q "$pin$"
b=$?

if [ $a -eq 0 -a $b -eq 0 ]
then
echo "Welcome"
change1
break
else
echo "Please try again"
fi
done
}


change1 ()
{
echo "please enter a new password"
read npass

sed 's/$pin/$npass/' usernames
echo "here are your logon details"
sed -n '/^$user/p' usernames
return
}

username

The file I am using looks like this:

Code:
#!/bin/bash

Username        Password

John    123
Dan     345
Matt    678

---------- Post updated at 02:21 PM ---------- Previous update was at 01:29 PM ----------

Ok, is there anyway of using a sed command to change the contents of a file, as I have found that whilst my sed command changes the value on the command screen but not in the file. Is it possible to alter the value in the file?
# 2  
Old 05-16-2012
First off, i think you are reinventing the wheel. Have a look at the passwd command, which does what you want already in a much better way than you could ever dream of in some shell script.

Quote:
Originally Posted by somersetdan
Code:
sed 's/$pin/$npass/' usernames

This will never work, because inside single quotes variables are not becoming expanded. You are searching for a literal "$pin" instead of the contents of the variable "pin".

To write sed output to a file just redirect its output to it. If you want to overwrite your old file move the output over the input afterwards (reasons explained):

Code:
sed '<some operations>' /path/to/input > /path/to/output
mv /path/to/output /path/to/input

I hope this helps.

bakunin
# 3  
Old 05-16-2012
Here are a couple of thoughts:

This is very insecure and shouldn't be used to protect anything.

Use read -s npass to avoid echo of entered password, prompt twice and compare two values.

Don't seearch and replace on password in case two users have the same password.

If you have openssl installed you might want to encrypt the password after entry so it's a little safer from casual observation in your password file:
Code:
$ openssl passwd -salt Xx -crypt 1234
Xx7LFoJpR7vp.

Store the encrypted value and reencrypt any entered password to compare.

---------- Post updated at 08:54 AM ---------- Previous update was at 07:35 AM ----------

Something like this?

Code:
#!/bin/bash
# script to change a password
username() {
while :
do
   read -p "please enter a username: " user
   ln=$(grep "^$user" usernames)
   pass=${ln#* }
   salt=${pass:0:2}
   if [ "$(openssl passwd -salt ${salt:-XX} | sed 's/\r//')" = "$pass" ]
   then
      echo "Welcome $user"
      break
   else
      echo "Password incorrect - please retry"
      echo
   fi
done
}
change1 () {
    new=$(while ! openssl passwd ; do echo "try again
">&2; done)
    sed -i "s:^${user} .*:${user} ${new}:" usernames
}
username
change1


Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Changing root password

I want to change the root password on an AIX box. What is the best method to do this so i do not get myself locked out. When I do i search the results come up for resetting the password if you are locked out. Thanks (5 Replies)
Discussion started by: fierfek
5 Replies

2. UNIX for Advanced & Expert Users

Changing the password prompt

Is there any way I can change the prompt which asks for the password on a UNIX system? e.g. When I login using Telnet instead of "Password" I should get "Correct Password". Thanks, Vineet (3 Replies)
Discussion started by: vineetd
3 Replies

3. Solaris

Solaris user changing password

i created 1 user . Now its passwd time period get expired. Now how can I set password for that user. Also how can I set a condition such a way that after every 3 months user must change his passwd. (5 Replies)
Discussion started by: ajitkraj
5 Replies

4. Linux

Problem changing user password

Hi all, I'm having an issue resetting an Linux user password. As root, I type 'passwd <username>, enter the new password, but the user is still Access Denied. Can someone assist me in figuring this one out? The box is running "Linux trm62 2.4.21-15.ELsmp #1 SMP Thu Apr 22 00:18:24 EDT 2004... (6 Replies)
Discussion started by: bbbngowc
6 Replies

5. Solaris

Changing Password in NIS

Friends I want to know whether i can change the password of a user logged in thru NIS from a client machine after stopping the YP services in NIS server. Note - The Slave server is up and running. I tried doing this. But i got the reply "Permission Denied". I stopped the YP services in... (7 Replies)
Discussion started by: efunds
7 Replies

6. HP-UX

Changing root password

I have two unix system A and B with same configuration. I can use remsh from A system login to B system as root, but when I want to change the root password of B system, it ask me the old password, but i forgot it. However, is it possible to change the B system root password? :( Thanks a lot (3 Replies)
Discussion started by: zetadhell
3 Replies

7. AIX

changing user password

I have 02 servers: - Linux RHEL AS 3 (server1) - AIX 5.2 (server2) Running the command rsh server2 passwd derje from the server1 to change derje user password on server2, give me this error: 3004-709 Error while changing the password for "derje" Can somebody help me ? (0 Replies)
Discussion started by: mayge
0 Replies

8. UNIX for Dummies Questions & Answers

Changing password is to short ?

Hello im trying to change the user password with passwd but when I enter the password it gives me this msg: passwd: Password too short - must be at least 6 characters. BUT the thing is that the initial password was 4 letters why now it asking for 6 ? tnx (2 Replies)
Discussion started by: umen
2 Replies

9. Solaris

changing password

Hi Someone logged on the system with a Normal user and changed the password , for this user , how can i know ? who changed the password from which terminal ? regards Georges (5 Replies)
Discussion started by: itsgeorge
5 Replies

10. UNIX for Dummies Questions & Answers

Password Changing With NIS

SCO OpenServer 5.05 Has anyone ever received this error when attempting to change/assign a user password? #ypasswd ======================================= yppasswd: (host name) is not running yppasswd daemon Password request denied. Reason: Remote password change request denied.... (2 Replies)
Discussion started by: gseyforth
2 Replies

Featured Tech Videos