1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

wbinfo: create a more comprehensive test for sids2xids

In particular, this tests that ID_TYPE_BOTH is cached correctly.

Change-Id: I2475f22d3f4506c93b15d82b0d337d3729bbbd4c
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>

Autobuild-User(master): Garming Sam <garming@samba.org>
Autobuild-Date(master): Thu Nov 27 05:16:53 CET 2014 on sn-devel-104
This commit is contained in:
Garming Sam 2014-11-25 16:52:53 +13:00 committed by Garming Sam
parent 5adc171ffe
commit 9cef81db97
2 changed files with 76 additions and 18 deletions

View File

@ -230,6 +230,8 @@
^samba3.rpc.spoolss.printer.addprinterex.driver_info_winreg # knownfail or flapping?
^samba3.rpc.spoolss.printer.*.publish_toggle\(.*\)$ # needs spoolss AD member env
^samba3.rpc.spoolss.printserver.*.add_processor\(.*\)$
^samba.wbinfo_sids2xids.\(plugin_s4_dc:local\)
^samba.wbinfo_sids2xids.\(s4member:local\)
#
# The following tests fail against plugin_s4_dc (aka s3fs) currently.
# These need to be examined and either fixed or correctly categorised.

View File

@ -11,7 +11,14 @@ wbinfo = sys.argv[1]
netcmd = sys.argv[2]
def flush_cache():
os.system(netcmd + "cache flush")
os.system(netcmd + " cache flush")
def fill_cache(inids, idtype='gid'):
for inid in inids:
if inid is None:
continue
subprocess.Popen([wbinfo, '--%s-to-sid=%s' % (idtype, inid)],
stdout=subprocess.PIPE).communicate()
domain = subprocess.Popen([wbinfo, "--own-domain"],
stdout=subprocess.PIPE).communicate()[0].strip()
@ -30,35 +37,84 @@ sids2xids = subprocess.Popen([wbinfo, '--sids-to-unix-ids=' + ','.join(sids)],
stdout=subprocess.PIPE).communicate()[0].strip()
gids=[]
uids=[]
idtypes = []
for line in sids2xids.split('\n'):
result = line.split(' ')[2:]
idtypes.append(result[0])
if result[0] == 'gid' or result[0] == 'uid/gid':
gid = None
uid = None
if result[0] == 'gid':
gid = result[1]
else:
gid = ''
elif result[0] == 'uid':
uid = result[1]
elif result[0] == 'uid/gid':
gid = result[1]
uid = result[1]
if gid == '-1':
gid = ''
gids.append(gid)
# Check the list produced by the sids-to-xids call with the
# singular variant (sid-to-gid) for each sid in turn.
def check_singular(sids, gids):
i=0
for sid in sids:
gid = subprocess.Popen([wbinfo, '--sid-to-gid', sid],
stdout=subprocess.PIPE).communicate()[0].strip()
if gid != gids[i]:
print "Expected %s, got %s\n", gid, gids[i]
sys.exit(1)
i+=1
if uid == '-1':
uid = ''
uids.append(uid)
# first round: with filled cache
check_singular(sids, gids)
# Check the list produced by the sids-to-xids call with the
# singular variant (sid-to-xid) for each sid in turn.
def check_singular(sids, ids, idtype='gid'):
i = 0
for sid in sids:
if ids[i] is None:
continue
outid = subprocess.Popen([wbinfo, '--sid-to-%s' % idtype, sid],
stdout=subprocess.PIPE).communicate()[0].strip()
if outid != ids[i]:
print "Expected %s, got %s\n" % (outid, ids[i])
flush_cache()
sys.exit(1)
i += 1
# Check the list produced by the sids-to-xids call with the
# multiple variant (sid-to-xid) for each sid in turn.
def check_multiple(sids, idtypes):
sids2xids = subprocess.Popen([wbinfo, '--sids-to-unix-ids=' + ','.join(sids)],
stdout=subprocess.PIPE).communicate()[0].strip()
# print sids2xids
i = 0
for line in sids2xids.split('\n'):
result = line.split(' ')[2:]
if result[0] != idtypes[i]:
print "Expected %s, got %s\n" % (idtypes[i], result[0])
flush_cache()
sys.exit(1)
i += 1
# first round: with filled cache via sid-to-id
check_singular(sids, gids, 'gid')
check_singular(sids, uids, 'uid')
# second round: with empty cache
flush_cache()
check_singular(sids, gids)
check_singular(sids, gids, 'gid')
flush_cache()
check_singular(sids, uids, 'uid')
# third round: with filled cache via uid-to-sid
flush_cache()
fill_cache(uids, 'uid')
check_multiple(sids, idtypes)
# fourth round: with filled cache via gid-to-sid
flush_cache()
fill_cache(gids, 'gid')
check_multiple(sids, idtypes)
# flush the cache so any incorrect mappings don't break other tests
flush_cache()
sys.exit(0)