USE_DB = 0
import ConfigParser
-import sys, os, string, re, pwd
+import sys, os, string, re, pwd, signal
+from traceback import print_tb
if USE_DB: import pg
from time import time, sleep
from popen2 import popen2
from random import random, seed
from Idler import TrainIdler,GrayIdler
import socket
-from traceback import print_tb
+from posix import geteuid
GREETING = 'UCC SNACKS'
PIN_LENGTH = 4
# XXX this should move somewhere else:
if cur_selection == '55':
mk.set_message('OPENSESAME')
- ret = os.system('su - "%s" -c "dispense door"'%username)
+ if geteuid() == 0:
+ ret = os.system('su - "%s" -c "dispense door"'%username)
+ else:
+ ret = os.system('dispense door')
if ret == 0:
mk.set_message(center('DOOR OPEN'))
else:
op.add_option('-v', '--virtualvend', action='store_false', default=True, dest='use_lat', help='use the virtual vending server instead of LAT')
op.add_option('-n', '--hostname', dest='host', default='localhost', help='the hostname to connect to for virtual vending machine mode (default: localhost)')
op.add_option('-p', '--port', dest='port', default=5150, type='int', help='the port number to connect to (default: 5150)')
+ op.add_option('-l', '--log-file', metavar='FILE', dest='log_file', default='', help='log output to the specified file')
+ op.add_option('-s', '--syslog', dest='syslog', action='store_true', default=False, help='log output to syslog')
+ op.add_option('-d', '--daemon', dest='daemon', action='store_true', default=False, help='run as a daemon')
options, args = op.parse_args()
if len(args) != 0:
options = parse_args()
config_opts = VendConfigFile(options.config_file, config_options)
+ if options.daemon:
+ dev_null = file('/dev/null')
+ fd = dev_null.fileno()
+ os.dup2(fd, 0)
+ os.dup2(fd, 1)
+ os.dup2(fd, 2)
+ if os.fork() != 0:
+ sys.exit(0)
+
while True:
try:
rfh, wfh = connect_to_vend(options, config_opts)
print
print "Connection died, trying again..."
-
if __name__ == '__main__':
+ def do_nothing(signum, stack): pass
+ def stop_server(signum, stack): raise KeyboardInterrupt
+ signal.signal(signal.SIGHUP, do_nothing)
+ signal.signal(signal.SIGTERM, stop_server)
+ signal.signal(signal.SIGINT, stop_server)
while True:
try:
do_vend_server()
except KeyboardInterrupt:
- print "Killed by SIGINT."
+ print "Killed by signal."
break
+ except SystemExit, e:
+ raise e
except:
(exc_type, exc_value, exc_traceback) = sys.exc_info()
print
print
print "This message should be considered a bug in the Vend Server."
print "Please report this to someone who can fix it."
+ sleep(10)
print
print "Trying again anyway (might not help, but hey...)"