2011-06-24 16:40:17 +02:00
#!/usr/bin/env python
2011-04-11 17:26:35 +02:00
2018-03-09 14:04:29 +00:00
from __future__ import print_function
2011-04-11 17:26:35 +02:00
import sys , os , subprocess
2012-11-27 12:08:33 +01:00
if len ( sys . argv ) != 3 :
2018-03-09 14:04:29 +00:00
print ( " Usage: test_wbinfo_sids2xids_int.py wbinfo net " )
2011-04-11 17:26:35 +02:00
sys . exit ( 1 )
wbinfo = sys . argv [ 1 ]
2012-11-27 12:08:33 +01:00
netcmd = sys . argv [ 2 ]
2017-06-28 14:58:41 +02:00
def flush_cache ( sids = [ ] , uids = [ ] , gids = [ ] ) :
for sid in sids :
os . system ( netcmd + ( " cache del IDMAP/SID2XID/ %s " % ( sid ) ) )
for uids in uids :
os . system ( netcmd + ( " cache del IDMAP/UID2SID/ %s " % ( uid ) ) )
for gids in gids :
os . system ( netcmd + ( " cache del IDMAP/GID2SID/ %s " % ( gid ) ) )
2014-11-25 16:52:53 +13:00
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 ( )
2012-11-27 12:08:33 +01:00
2011-04-11 17:26:35 +02:00
domain = subprocess . Popen ( [ wbinfo , " --own-domain " ] ,
stdout = subprocess . PIPE ) . communicate ( ) [ 0 ] . strip ( )
2014-03-31 20:47:18 +13:00
domsid = subprocess . Popen ( [ wbinfo , " -n " , domain + " / " ] ,
2011-04-11 17:26:35 +02:00
stdout = subprocess . PIPE ) . communicate ( ) [ 0 ]
domsid = domsid . split ( ' ' ) [ 0 ]
#print domain
#print domsid
2018-07-30 18:18:03 +12:00
sids = [ domsid + ' -512 ' , ' S-1-5-32-545 ' , domsid + ' -513 ' , ' S-1-1-0 ' , ' S-1-3-1 ' , ' S-1-5-1 ' ]
2011-04-11 17:26:35 +02:00
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids )
2012-11-27 12:08:33 +01:00
2018-07-30 18:17:44 +12:00
sids2xids = subprocess . Popen ( [ wbinfo , ' --sids-to-unix-ids= ' + ' , ' . join ( sids ) ] ,
2011-04-11 17:26:35 +02:00
stdout = subprocess . PIPE ) . communicate ( ) [ 0 ] . strip ( )
2018-07-30 18:18:03 +12:00
gids = [ ]
uids = [ ]
2014-11-25 16:52:53 +13:00
idtypes = [ ]
2011-04-11 17:26:35 +02:00
for line in sids2xids . split ( ' \n ' ) :
result = line . split ( ' ' ) [ 2 : ]
2014-11-25 16:52:53 +13:00
idtypes . append ( result [ 0 ] )
2011-04-11 17:26:35 +02:00
2014-11-25 16:52:53 +13:00
gid = None
uid = None
if result [ 0 ] == ' gid ' :
2011-04-11 17:26:35 +02:00
gid = result [ 1 ]
2014-11-25 16:52:53 +13:00
elif result [ 0 ] == ' uid ' :
uid = result [ 1 ]
elif result [ 0 ] == ' uid/gid ' :
gid = result [ 1 ]
uid = result [ 1 ]
2011-04-11 17:26:35 +02:00
if gid == ' -1 ' :
gid = ' '
gids . append ( gid )
2014-11-25 16:52:53 +13:00
if uid == ' -1 ' :
uid = ' '
uids . append ( uid )
2012-11-27 12:08:33 +01:00
# Check the list produced by the sids-to-xids call with the
2014-11-25 16:52:53 +13:00
# singular variant (sid-to-xid) for each sid in turn.
def check_singular ( sids , ids , idtype = ' gid ' ) :
i = 0
2012-11-27 12:08:33 +01:00
for sid in sids :
2014-11-25 16:52:53 +13:00
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 ] :
2018-03-09 14:04:29 +00:00
print ( " Expected %s , got %s \n " % ( outid , ids [ i ] ) )
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids , uids = uids , gids = gids )
2014-11-25 16:52:53 +13:00
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 ) :
2018-07-30 18:17:44 +12:00
sids2xids = subprocess . Popen ( [ wbinfo , ' --sids-to-unix-ids= ' + ' , ' . join ( sids ) ] ,
2014-11-25 16:52:53 +13:00
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 ] :
2018-03-09 14:04:29 +00:00
print ( " Expected %s , got %s \n " % ( idtypes [ i ] , result [ 0 ] ) )
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids , uids = uids , gids = gids )
2012-11-27 12:08:33 +01:00
sys . exit ( 1 )
2014-11-25 16:52:53 +13:00
i + = 1
2012-11-27 12:08:33 +01:00
2014-11-25 16:52:53 +13:00
# first round: with filled cache via sid-to-id
check_singular ( sids , gids , ' gid ' )
check_singular ( sids , uids , ' uid ' )
2011-04-11 17:26:35 +02:00
2012-11-27 12:08:33 +01:00
# second round: with empty cache
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids , gids = gids )
2014-11-25 16:52:53 +13:00
check_singular ( sids , gids , ' gid ' )
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids , uids = uids )
2014-11-25 16:52:53 +13:00
check_singular ( sids , uids , ' uid ' )
# third round: with filled cache via uid-to-sid
2017-06-28 14:58:41 +02:00
flush_cache ( sids = uids , uids = uids )
2014-11-25 16:52:53 +13:00
fill_cache ( uids , ' uid ' )
check_multiple ( sids , idtypes )
# fourth round: with filled cache via gid-to-sid
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids , gids = gids )
2014-11-25 16:52:53 +13:00
fill_cache ( gids , ' gid ' )
check_multiple ( sids , idtypes )
# flush the cache so any incorrect mappings don't break other tests
2017-06-28 14:58:41 +02:00
flush_cache ( sids = sids , uids = uids , gids = gids )
2011-04-11 17:26:35 +02:00
sys . exit ( 0 )