#!/usr/bin/ensim-python

import sys
import getpass
import crypt
import string
import whrandom
import ensimglobals
import ensimapplpath
import cmdlnpopen

passwdfile = ensimglobals.PASSWD_PATH

_cryptsalt = './abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + string.digits

def crypt_passwd(password):
    # Generate an 8-character salt
    salt = "%s%s%s%s%s%s%s%s" % (whrandom.choice(_cryptsalt), whrandom.choice(_cryptsalt),
                                 whrandom.choice(_cryptsalt), whrandom.choice(_cryptsalt),
                                 whrandom.choice(_cryptsalt), whrandom.choice(_cryptsalt),
                                 whrandom.choice(_cryptsalt), whrandom.choice(_cryptsalt))
    return crypt.crypt(password, '$1$%s' % salt)

if __name__=='__main__':
    if len(sys.argv) != 2:
        sys.stderr.write('usage:\n')
        sys.stderr.write('%s appliance_admin_name\n' % \
                         sys.argv[0])
        sys.exit(1)

    username = sys.argv[1]
    cpassword = crypt_passwd(getpass.getpass())
    output = ['%s:%s' % (username,
                         crypt_passwd(getpass.getpass()))]

    try:
        open(passwdfile,'w').writelines(output)
        print "password for %s successfully updated in %s file." % \
              (username, passwdfile)

        out,err,ret = cmdlnpopen.cmd3("/usr/sbin/usermod -p '%s' %s" % \
                                      (cpassword, 'vhbackup'))
        out,err,ret = cmdlnpopen.cmd3("/usr/sbin/usermod -p '%s' %s" % \
                                      (cpassword, 'extendauth'))
        sys.exit(0)
    except IOError:
        sys.stderr.write('could not open %s for writing.\n' % passwdfile)
        sys.exit(1)
