From 6931093e46d84fb42160c92dbb349d564b8846e8 Mon Sep 17 00:00:00 2001 From: Pekka Helenius Date: Fri, 22 May 2020 08:11:02 +0300 Subject: [PATCH] Agent: support chained commands in agent XML element --- tools/pamusb-agent | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tools/pamusb-agent b/tools/pamusb-agent index 9cac72c..0de5041 100755 --- a/tools/pamusb-agent +++ b/tools/pamusb-agent @@ -185,10 +185,10 @@ def userDeviceThread(user): for hotplug in user.findall('agent'): henvs = {} + hcmds = [] - if len(hotplug.findall('cmd')) != 1: - logger.error('One command for an agent must be determined in user "%s" configuration.' % userName) - return 1 + for hcmd in hotplug.findall('cmd'): + hcmds.append(hcmd.text) for henv in hotplug.findall('env'): henv_var = re.sub(r'^(.*?)=.*$', '\\1', henv.text) @@ -198,7 +198,7 @@ def userDeviceThread(user): events[hotplug.get('event')].append( { 'env': henvs, - 'cmd': hotplug.find('cmd').text + 'cmd': hcmds } ) @@ -220,10 +220,10 @@ def userDeviceThread(user): 'locking down user "%s"...' % (deviceName, userName)) for l in events['lock']: - cmd = l['cmd'] + for cmd in l['cmd']: - logger.info('Running "%s"' % cmd) - subprocess.run(cmd.split(), env=l['env'], preexec_fn=runAs(uid, gid)) + logger.info('Running "%s"' % cmd) + subprocess.run(cmd.split(), env=l['env'], preexec_fn=runAs(uid, gid)) logger.info('Locked.') return @@ -238,12 +238,13 @@ def userDeviceThread(user): 'Unlocking user "%s"...' % userName) for l in events['unlock']: - cmd = l['cmd'] + for cmd in l['cmd']: - logger.info('Running "%s"' % cmd) - subprocess.run(cmd.split(), env=l['env'], preexec_fn=runAs(uid, gid)) + logger.info('Running "%s"' % cmd) + subprocess.run(cmd.split(), env=l['env'], preexec_fn=runAs(uid, gid)) logger.info('Unlocked.') + return else: logger.info('Authentication failed for device %s. ' \