try:
info = pwd.getpwuid(uid)
except KeyError:
+ logging.info('getting pin for uid %d: user not in password file'%uid)
return None
if info.pw_dir == None: return False
pinfile = os.path.join(info.pw_dir, '.pin')
try:
s = os.stat(pinfile)
except OSError:
+ logging.info('getting pin for uid %d: .pin not found in home directory'%uid)
return None
if s.st_mode & 077:
+ logging.info('getting pin for uid %d: .pin has wrong permissions'%uid)
return None
try:
f = file(pinfile)
except IOError:
+ logging.info('getting pin for uid %d: I cannot read pin file'%uid)
return None
pinstr = f.readline()
f.close()
if not re.search('^'+'[0-9]'*PIN_LENGTH+'$', pinstr):
+ logging.info('getting pin for uid %d: %s not a good pin'%(uid,repr(pinstr)))
return None
return int(pinstr)
def verify_user_pin(uid, pin):
if get_pin(uid) == pin:
info = pwd.getpwuid(uid)
+ logging.info('accepted pin for uid %d (%s)'%(uid,info.pw_name))
return info.pw_name
else:
+ logging.info('refused pin for uid %d'%(uid))
return None
def door_open_mode(v):
if len(cur_user) == 5:
uid = int(cur_user)
if not has_good_pin(uid):
+ logging.info('user '+cur_user+' has a bad PIN')
#mk.set_messages(
#[(center('INVALID'), False, 0.7),
#(center('PIN'), False, 0.7),
continue
cur_pin = ''
mk.set_message('PIN: ')
+ logging.info('need pin for user %s'%cur_user)
continue
elif len(cur_pin) < PIN_LENGTH:
if key == 11:
# XXX this should move somewhere else:
if cur_selection == '55':
mk.set_message('OPENSESAME')
+ logging.info('dispensing a door for %s'%username)
if geteuid() == 0:
ret = os.system('su - "%s" -c "dispense door"'%username)
else:
ret = os.system('dispense door')
if ret == 0:
+ logging.info('door opened')
mk.set_message(center('DOOR OPEN'))
else:
+ logging.warning('user %s tried to dispense a bad door'%username)
mk.set_message(center('BAD DOOR'))
sleep(1)
elif cur_selection == '91':
def connect_to_vend(options, cf):
# Open vending machine via LAT?
if options.use_lat:
+ logging.info('Connecting to vending machine using LAT')
latclient = LATClient(service = cf.ServiceName, password = cf.ServicePassword, server_name = cf.ServerName, connect_password = cf.ConnectPassword, priv_password = cf.PrivPassword)
rfh, wfh = latclient.get_fh()
else:
#(rfh, wfh) = popen2('../../virtualvend/vvend.py')
+ logging.info('Connecting to virtual vending machine on %s:%d'%(options.host,options.port))
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.connect((options.host, options.port))