import and use subprocess.py from python 2.6.

This should hopefully let us run even on python 2.3 on really old servers.
This commit is contained in:
Avery Pennarun 2010-10-01 12:06:56 -07:00
parent 7d3028dee2
commit da774f3f46
7 changed files with 1319 additions and 18 deletions

View File

@ -1,4 +1,5 @@
import struct, socket, select, subprocess, errno, re import struct, socket, select, errno, re
import compat.ssubprocess as ssubprocess
import helpers, ssnet, ssh import helpers, ssnet, ssh
from ssnet import SockWrapper, Handler, Proxy, Mux, MuxWrapper from ssnet import SockWrapper, Handler, Proxy, Mux, MuxWrapper
from helpers import * from helpers import *
@ -45,7 +46,7 @@ class FirewallClient:
e = None e = None
for argv in argv_tries: for argv in argv_tries:
try: try:
self.p = subprocess.Popen(argv, stdout=s1, preexec_fn=setup) self.p = ssubprocess.Popen(argv, stdout=s1, preexec_fn=setup)
e = None e = None
break break
except OSError, e: except OSError, e:

0
compat/__init__.py Normal file
View File

1294
compat/ssubprocess.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,12 @@
import subprocess, re, errno import re, errno
import compat.ssubprocess as ssubprocess
import helpers import helpers
from helpers import * from helpers import *
def ipt_chain_exists(name): def ipt_chain_exists(name):
argv = ['iptables', '-t', 'nat', '-nL'] argv = ['iptables', '-t', 'nat', '-nL']
p = subprocess.Popen(argv, stdout = subprocess.PIPE) p = ssubprocess.Popen(argv, stdout = ssubprocess.PIPE)
for line in p.stdout: for line in p.stdout:
if line.startswith('Chain %s ' % name): if line.startswith('Chain %s ' % name):
return True return True
@ -17,7 +18,7 @@ def ipt_chain_exists(name):
def ipt(*args): def ipt(*args):
argv = ['iptables', '-t', 'nat'] + list(args) argv = ['iptables', '-t', 'nat'] + list(args)
debug1('>> %s\n' % ' '.join(argv)) debug1('>> %s\n' % ' '.join(argv))
rv = subprocess.call(argv) rv = ssubprocess.call(argv)
if rv: if rv:
raise Fatal('%r returned %d' % (argv, rv)) raise Fatal('%r returned %d' % (argv, rv))
@ -64,7 +65,7 @@ def do_iptables(port, subnets):
def ipfw_rule_exists(n): def ipfw_rule_exists(n):
argv = ['ipfw', 'list'] argv = ['ipfw', 'list']
p = subprocess.Popen(argv, stdout = subprocess.PIPE) p = ssubprocess.Popen(argv, stdout = ssubprocess.PIPE)
found = False found = False
for line in p.stdout: for line in p.stdout:
if line.startswith('%05d ' % n): if line.startswith('%05d ' % n):
@ -82,7 +83,7 @@ def ipfw_rule_exists(n):
def sysctl_get(name): def sysctl_get(name):
argv = ['sysctl', '-n', name] argv = ['sysctl', '-n', name]
p = subprocess.Popen(argv, stdout = subprocess.PIPE) p = ssubprocess.Popen(argv, stdout = ssubprocess.PIPE)
line = p.stdout.readline() line = p.stdout.readline()
rv = p.wait() rv = p.wait()
if rv: if rv:
@ -96,7 +97,7 @@ def sysctl_get(name):
def _sysctl_set(name, val): def _sysctl_set(name, val):
argv = ['sysctl', '-w', '%s=%s' % (name, val)] argv = ['sysctl', '-w', '%s=%s' % (name, val)]
debug1('>> %s\n' % ' '.join(argv)) debug1('>> %s\n' % ' '.join(argv))
rv = subprocess.call(argv, stdout = open('/dev/null', 'w')) rv = ssubprocess.call(argv, stdout = open('/dev/null', 'w'))
_oldctls = [] _oldctls = []
@ -110,7 +111,7 @@ def sysctl_set(name, val):
def ipfw(*args): def ipfw(*args):
argv = ['ipfw', '-q'] + list(args) argv = ['ipfw', '-q'] + list(args)
debug1('>> %s\n' % ' '.join(argv)) debug1('>> %s\n' % ' '.join(argv))
rv = subprocess.call(argv) rv = ssubprocess.call(argv)
if rv: if rv:
raise Fatal('%r returned %d' % (argv, rv)) raise Fatal('%r returned %d' % (argv, rv))

View File

@ -1,5 +1,6 @@
import subprocess, time, socket, re, select, errno import time, socket, re, select, errno
if not globals().get('skip_imports'): if not globals().get('skip_imports'):
import compat.ssubprocess as ssubprocess
import helpers import helpers
from helpers import * from helpers import *
@ -108,7 +109,7 @@ def _check_netstat():
debug2(' > netstat\n') debug2(' > netstat\n')
argv = ['netstat', '-n'] argv = ['netstat', '-n']
try: try:
p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=null) p = ssubprocess.Popen(argv, stdout=ssubprocess.PIPE, stderr=null)
content = p.stdout.read() content = p.stdout.read()
p.wait() p.wait()
except OSError, e: except OSError, e:
@ -128,7 +129,7 @@ def _check_smb(hostname):
argv = ['smbclient', '-U', '%', '-L', hostname] argv = ['smbclient', '-U', '%', '-L', hostname]
debug2(' > smb: %s\n' % hostname) debug2(' > smb: %s\n' % hostname)
try: try:
p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=null) p = ssubprocess.Popen(argv, stdout=ssubprocess.PIPE, stderr=null)
lines = p.stdout.readlines() lines = p.stdout.readlines()
p.wait() p.wait()
except OSError, e: except OSError, e:
@ -185,7 +186,7 @@ def _check_nmb(hostname, is_workgroup, is_master):
argv = ['nmblookup'] + ['-M']*is_master + ['--', hostname] argv = ['nmblookup'] + ['-M']*is_master + ['--', hostname]
debug2(' > n%d%d: %s\n' % (is_workgroup, is_master, hostname)) debug2(' > n%d%d: %s\n' % (is_workgroup, is_master, hostname))
try: try:
p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=null) p = ssubprocess.Popen(argv, stdout=ssubprocess.PIPE, stderr=null)
lines = p.stdout.readlines() lines = p.stdout.readlines()
rv = p.wait() rv = p.wait()
except OSError, e: except OSError, e:

View File

@ -1,6 +1,7 @@
import re, struct, socket, select, subprocess, traceback import re, struct, socket, select, traceback
if not globals().get('skip_imports'): if not globals().get('skip_imports'):
import ssnet, helpers, hostwatch import ssnet, helpers, hostwatch
import compat.ssubprocess as ssubprocess
from ssnet import SockWrapper, Handler, Proxy, Mux, MuxWrapper from ssnet import SockWrapper, Handler, Proxy, Mux, MuxWrapper
from helpers import * from helpers import *
@ -43,7 +44,7 @@ def _maskbits(netmask):
def _list_routes(): def _list_routes():
argv = ['netstat', '-rn'] argv = ['netstat', '-rn']
p = subprocess.Popen(argv, stdout=subprocess.PIPE) p = ssubprocess.Popen(argv, stdout=ssubprocess.PIPE)
routes = [] routes = []
for line in p.stdout: for line in p.stdout:
cols = re.split(r'\s+', line) cols = re.split(r'\s+', line)

9
ssh.py
View File

@ -1,4 +1,5 @@
import sys, os, re, subprocess, socket, zlib import sys, os, re, socket, zlib
import compat.ssubprocess as ssubprocess
import helpers import helpers
from helpers import * from helpers import *
@ -14,9 +15,10 @@ def readfile(name):
def empackage(z, filename): def empackage(z, filename):
(path,basename) = os.path.split(filename)
content = z.compress(readfile(filename)) content = z.compress(readfile(filename))
content += z.flush(zlib.Z_SYNC_FLUSH) content += z.flush(zlib.Z_SYNC_FLUSH)
return '%s\n%d\n%s' % (filename,len(content), content) return '%s\n%d\n%s' % (basename,len(content), content)
def connect(rhostport, python): def connect(rhostport, python):
@ -33,6 +35,7 @@ def connect(rhostport, python):
z = zlib.compressobj(1) z = zlib.compressobj(1)
content = readfile('assembler.py') content = readfile('assembler.py')
content2 = (empackage(z, 'helpers.py') + content2 = (empackage(z, 'helpers.py') +
empackage(z, 'compat/ssubprocess.py') +
empackage(z, 'ssnet.py') + empackage(z, 'ssnet.py') +
empackage(z, 'hostwatch.py') + empackage(z, 'hostwatch.py') +
empackage(z, 'server.py') + empackage(z, 'server.py') +
@ -58,7 +61,7 @@ def connect(rhostport, python):
s1a,s1b = os.dup(s1.fileno()), os.dup(s1.fileno()) s1a,s1b = os.dup(s1.fileno()), os.dup(s1.fileno())
s1.close() s1.close()
debug2('executing: %r\n' % argv) debug2('executing: %r\n' % argv)
p = subprocess.Popen(argv, stdin=s1a, stdout=s1b, preexec_fn=setup, p = ssubprocess.Popen(argv, stdin=s1a, stdout=s1b, preexec_fn=setup,
close_fds=True) close_fds=True)
os.close(s1a) os.close(s1a)
os.close(s1b) os.close(s1b)