import sys
import os
import subprocess
+from samba.compat import PY3
if len(sys.argv) != 3:
netcmd = sys.argv[2]
+def run(cmd):
+ """
+ Run a cmd, return bytes str for py2 and unicode str for py3.
+
+ NOTE: subprocess api always return bytes, in both py2 and py3.
+ """
+ output = subprocess.check_output(cmd).strip()
+ return output.decode('utf-8') if PY3 else output
+
+
def flush_cache(sids=[], uids=[], gids=[]):
for sid in sids:
os.system(netcmd + (" cache del IDMAP/SID2XID/%s" % (sid)))
for inid in inids:
if inid is None:
continue
- subprocess.Popen([wbinfo, '--%s-to-sid=%s' % (idtype, inid)],
- stdout=subprocess.PIPE).communicate()
+ run([wbinfo, '--%s-to-sid=%s' % (idtype, inid)])
-domain = subprocess.Popen([wbinfo, "--own-domain"],
- stdout=subprocess.PIPE).communicate()[0].strip()
-domsid = subprocess.Popen([wbinfo, "-n", domain + "/"],
- stdout=subprocess.PIPE).communicate()[0]
+domain = run([wbinfo, "--own-domain"])
+domsid = run([wbinfo, "-n", domain + "/"])
domsid = domsid.split(' ')[0]
# print domain
flush_cache(sids=sids)
-sids2xids = subprocess.Popen([wbinfo, '--sids-to-unix-ids=' + ','.join(sids)],
- stdout=subprocess.PIPE).communicate()[0].strip()
+sids2xids = run([wbinfo, '--sids-to-unix-ids=' + ','.join(sids)])
gids = []
uids = []
if ids[i] is None:
continue
- outid = subprocess.Popen([wbinfo, '--sid-to-%s' % idtype, sid],
- stdout=subprocess.PIPE).communicate()[0].strip()
+ outid = run([wbinfo, '--sid-to-%s' % idtype, sid])
if outid != ids[i]:
print("Expected %s, got %s\n" % (outid, ids[i]))
flush_cache(sids=sids, uids=uids, gids=gids)
def check_multiple(sids, idtypes):
- sids2xids = subprocess.Popen([wbinfo, '--sids-to-unix-ids=' + ','.join(sids)],
- stdout=subprocess.PIPE).communicate()[0].strip()
+ sids2xids = run([wbinfo, '--sids-to-unix-ids=' + ','.join(sids)])
# print sids2xids
i = 0
for line in sids2xids.split('\n'):