#!/usr/bin/env python              

from getpass import getpass
import os
import subprocess
import PAM
import sys

user=os.getenv("user", os.getenv("DIVE_USER", "root"));
sys.stderr.write(user+"'s ");

def pam_conv(auth, query_list, userData):
    resp = []
    for i in range(len(query_list)):
        query, type = query_list[i]
        if type == PAM.PAM_PROMPT_ECHO_ON:
            val = raw_input(query)
            resp.append((val, 0))
        elif type == PAM.PAM_PROMPT_ECHO_OFF:
            val = getpass(query)
            resp.append((val, 0))
        elif type == PAM.PAM_PROMPT_ERROR_MSG or type == PAM.PAM_PROMPT_TEXT_INFO:
            print query
            resp.append(('', 0))
        else:
            return None
    return resp

service='passwd'

auth = PAM.pam()
auth.start(service)
auth.set_item(PAM.PAM_USER, user)
auth.set_item(PAM.PAM_CONV, pam_conv)
try:
    auth.authenticate()
    auth.acct_mgmt()
except PAM.error, resp:
    print 'Go away! (%s)' % resp
    sys.exit(1)
except:
    print 'Internal error'
    sys.exit(2)
else:
    sys.exit(0)

