Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
89e0b9fa53 |
|
@ -1,34 +1,10 @@
|
||||||
#!/bin/sh
|
#!/usr/bin/env python
|
||||||
'''':
|
|
||||||
for pyint in /usr/libexec/platform-python python3 python python2; do
|
|
||||||
command -v $pyint >/dev/null 2>&1 && exec $pyint "$0" "$@"
|
|
||||||
done
|
|
||||||
echo "$0: No python could be found" >&2
|
|
||||||
exit 1
|
|
||||||
# '''
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shlex
|
import shlex
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import syslog
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('--verbose', '-v', action='count', default=0)
|
|
||||||
parser.add_argument('--silent', action='store_true', default=False)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if args.silent:
|
|
||||||
args.verbose = -1
|
|
||||||
|
|
||||||
if args.verbose >= 0:
|
|
||||||
syslog.openlog(
|
|
||||||
ident=sys.argv[0],
|
|
||||||
logoption=syslog.LOG_PID,
|
|
||||||
facility=syslog.LOG_LOCAL3 | syslog.LOG_ERR
|
|
||||||
)
|
|
||||||
|
|
||||||
allowed = [
|
allowed = [
|
||||||
##### System informations
|
##### System informations
|
||||||
|
@ -57,37 +33,22 @@ allowed = [
|
||||||
|
|
||||||
cmdline = os.getenv('SSH_ORIGINAL_COMMAND')
|
cmdline = os.getenv('SSH_ORIGINAL_COMMAND')
|
||||||
if not cmdline:
|
if not cmdline:
|
||||||
print('This is just a wrapper, no command specified!')
|
print 'This is just a wrapper, no command specified!'
|
||||||
if args.verbose >= 0:
|
|
||||||
syslog.syslog('Called without SSH_ORIGINAL_COMMAND')
|
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
|
||||||
for maybe in allowed:
|
for maybe in allowed:
|
||||||
if re.match(maybe, cmdline):
|
if re.match(maybe, cmdline):
|
||||||
if args.verbose >= 2:
|
cmdline = shlex.split(cmdline)
|
||||||
syslog.syslog(syslog.LOG_INFO, 'Found command line >%s< with regexp >%s<' % ( cmdline, maybe ) )
|
|
||||||
cmdlinelist = shlex.split(cmdline)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cmd = subprocess.Popen(cmdlinelist, stdout=subprocess.PIPE)
|
cmd = subprocess.Popen(cmdline, stdout=subprocess.PIPE)
|
||||||
except Exception as exc:
|
except Exception, exc:
|
||||||
print('Could not execute plugin: %s' % exc)
|
print 'Could not execute plugin ("%s"): %s' % (' '.join(cmdline), exc)
|
||||||
if args.verbose >= 0:
|
|
||||||
syslog.syslog('Could not execute plugin >%s<' % cmdline)
|
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
else:
|
else:
|
||||||
(out, outerr) = cmd.communicate()
|
print cmd.communicate()[0].rstrip()
|
||||||
out = out.rstrip().decode('utf-8')
|
|
||||||
outerr = (outerr or b'').rstrip().decode('utf-8')
|
|
||||||
print(out)
|
|
||||||
if args.verbose >= 1:
|
|
||||||
syslog.syslog('Executed command line >%s<' % cmdline)
|
|
||||||
if args.verbose >= 3:
|
|
||||||
syslog.syslog('Output >%s<, Error >%s<' % (out, outerr))
|
|
||||||
sys.exit(cmd.returncode)
|
sys.exit(cmd.returncode)
|
||||||
|
|
||||||
print('%s: No allowed command found!' % sys.argv[0])
|
print '%s: No allowed command found!' % sys.argv[0]
|
||||||
if args.verbose >= 0:
|
|
||||||
syslog.syslog('No allowed command found for >%s<' % cmdline)
|
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue