blob: 19b475788349c94c042c82677d40c7efd93aa6e5 [file] [log] [blame]
#!/usr/bin/env python
import getopt
import getpass
import os
import subprocess
import sys
import tempfile
import platform
import paths
# login_duo-compatible wrapper to pam_duo
def usage():
print >>sys.stderr, 'Usage: %s [-d] [-c config] [-f user] [-h host]' % \
sys.argv[0]
sys.exit(1)
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], 'dc:f:h:')
except getopt.GetoptError:
usage()
opt_conf = '/etc/duo/pam_duo.conf'
opt_user = getpass.getuser()
opt_host = None
for o, a in opts:
if o == '-c':
opt_conf = a
elif o == '-f':
opt_user = a
elif o == '-h':
opt_host = a
args = [ paths.build + '/testpam', opt_user ]
if opt_host:
args.append(opt_host)
f = tempfile.NamedTemporaryFile()
#f = open('/tmp/pam.conf', 'w')
if sys.platform == 'sunos5':
f.write('testpam ')
f.write('auth required %s/pam_duo.so conf=%s debug' %
(paths.topbuilddir + '/pam_duo/.libs', opt_conf))
f.flush()
env = os.environ.copy()
env['PAM_CONF'] = f.name
if sys.platform == 'darwin':
env['DYLD_LIBRARY_PATH'] = paths.topbuilddir + '/lib/.libs'
env['DYLD_INSERT_LIBRARIES'] = paths.build + \
'/.libs/libtestpam_preload.dylib'
env['DYLD_FORCE_FLAT_NAMESPACE'] = '1'
elif sys.platform == 'sunos5':
architecture = {'32bit': '32', '64bit': '64'}[platform.architecture()[0]]
env['LD_PRELOAD_' + architecture] = paths.build + '/.libs/libtestpam_preload.so'
else:
env['LD_PRELOAD'] = paths.build + '/.libs/libtestpam_preload.so'
p = subprocess.Popen(args, env=env)
p.wait()
f.close()
sys.exit(p.returncode)
if __name__ == '__main__':
main()