import sys, getpass, crypt, spwd
def login():
current_pw = getpass.getpass("Pls input current password:")
crypted_pw = spwd.getspnam(username)[1]
check_curr_pw = (crypt.crypt(current_pw, crypted_pw)==crypted_pw)
if check_curr_pw:
return (True, crypted_pw)
else:
print "The current password is wrong, pls try again."
sys.exit()
def update_pw():
times = 0
while times < 3:
new_pw_1 = getpass.getpass("Pls input new passwrod:")
new_pw_2 = getpass.getpass("Retype new password:")
times += 1
if new_pw_1 == new_pw_2:
new_pw = new_pw_1
break
else:
print "Have exhausted maximum number of retries for service"
sys.exit()
new_crypted_pw = crypt.crypt(new_pw, "tmp_random")
src_file = open('/tmp/shadow', 'r+w')
src_list = src_file.readlines()
for line in src_list:
src_file.write(line.replace(old_crypted_pw,new_crypted_pw))
src_file.close()
if len(sys.argv)<2:
print "Usage: Python %s username" %(sys.argv[0])
else:
username = sys.argv[1]
(logged, old_crypted_pw) = login()
if logged:
update_pw()
def login():
current_pw = getpass.getpass("Pls input current password:")
crypted_pw = spwd.getspnam(username)[1]
check_curr_pw = (crypt.crypt(current_pw, crypted_pw)==crypted_pw)
if check_curr_pw:
return (True, crypted_pw)
else:
print "The current password is wrong, pls try again."
sys.exit()
def update_pw():
times = 0
while times < 3:
new_pw_1 = getpass.getpass("Pls input new passwrod:")
new_pw_2 = getpass.getpass("Retype new password:")
times += 1
if new_pw_1 == new_pw_2:
new_pw = new_pw_1
break
else:
print "Have exhausted maximum number of retries for service"
sys.exit()
new_crypted_pw = crypt.crypt(new_pw, "tmp_random")
src_file = open('/tmp/shadow', 'r+w')
src_list = src_file.readlines()
for line in src_list:
src_file.write(line.replace(old_crypted_pw,new_crypted_pw))
src_file.close()
if len(sys.argv)<2:
print "Usage: Python %s username" %(sys.argv[0])
else:
username = sys.argv[1]
(logged, old_crypted_pw) = login()
if logged:
update_pw()