#!/opt/thinlinc/libexec/python3
# -*-mode: python; coding: utf-8 -*-
#
# Copyright 2002-2014 Cendio AB.
# For more information, see http://www.cendio.com
#
# tl-umount-localdrives: Unmounts all local drives
#
if 82 - 82: Iii1i
import sys
import os
import subprocess
import getopt
import glob
import locale
import pwd
if 87 - 87: Ii % i1i1i1111I . Oo / OooOoo * I1Ii1I1 - I1I
from os import readlink
from os . path import islink , exists
if 81 - 81: i1 + ooOOO / oOo0O00 * i1iiIII111 * IiIIii11Ii
from thinlinc . tl_umount_common import get_mounted_filesystems
from thinlinc import prefix
if 84 - 84: ooo000 - Ooo0Ooo + iI1iII1I1I1i . IIiIIiIi11I1
def iI111iiIi11i ( symlink ) :
 if islink ( symlink ) :
  if 77 - 77: iIiii1i - ooo0O0oO00 . o00o0OO00O
  os . unlink ( symlink )
 elif exists ( symlink ) :
  print ( "Cannot remove %s:" % symlink , file = sys . stderr )
  print ( "Not a symbolic link." , file = sys . stderr )
  if 57 - 57: iiIi1 - i1 % i1 % i1i1i1111I . Ii
  if 30 - 30: Ii
def ooO0Oo0o00 ( mysessdir , symlink ) :
 if 74 - 74: IIiIIiIi11I1 / I1I - Oo . Ooo0Ooo
 if 46 - 46: iI1iII1I1I1i - Ii * Oo * Ii
 if 52 - 52: Oo + I1I / ooo0O0oO00 / OooOoo - I1Ii1I1 - ooOOO
 if 60 - 60: iI1iII1I1I1i . ooo0O0oO00
 if 13 - 13: ooo0O0oO00
 if not islink ( symlink ) :
  return
  if 2 - 2: i1
  if 22 - 22: IIiIIiIi11I1 - ooo000 / I1Ii1I1 . ooo000
 try :
  IIII11 = readlink ( symlink )
 except OSError as oOoo0 :
  print ( "Unable to read %s:" % symlink , file = sys . stderr )
  print ( oOoo0 , file = sys . stderr )
  IIII11 = ""
  if 95 - 95: i1iiIII111 . Ii . IIiIIiIi11I1 % iIiii1i % I1Ii1I1
 if IIII11 != os . path . join ( mysessdir , "drives" ) :
  return
  if 8 - 8: I1Ii1I1 . iiIi1 . i1 . Oo - o00o0OO00O
 iiI1111IIi1 , oOo00O = os . path . split ( mysessdir )
 OoO = [ x for x in os . listdir ( iiI1111IIi1 ) if x . isdigit ( ) ]
 try :
  ii1IiIiiII = os . path . getmtime ( os . path . join ( mysessdir , "sessionkey" ) )
 except OSError :
  OoO = [ ]
 I1I111i11I = 0
 iii11i = None
 for Oo0Oo00O0OO in OoO :
  Oo0Oo00O0OO = os . path . join ( iiI1111IIi1 , Oo0Oo00O0OO )
  try :
   iIIiiIi1Ii1I = os . path . getmtime ( os . path . join ( Oo0Oo00O0OO , "sessionkey" ) )
  except OSError :
   continue
  if iIIiiIi1Ii1I > I1I111i11I and iIIiiIi1Ii1I < ii1IiIiiII :
   if 71 - 71: ooo0O0oO00 - Oo . OooOoo . Ii % o00o0OO00O + ooo0O0oO00
   if not IiII ( "nfs" , Oo0Oo00O0OO ) :
    continue
   I1I111i11I = iIIiiIi1Ii1I
   iii11i = Oo0Oo00O0OO
   if 6 - 6: i1 / Oo * IiIIii11Ii
 if iii11i :
  oooOo = os . path . join ( iii11i , "drives" )
  if 23 - 23: Ooo0Ooo + i1 * I1Ii1I1 + Oo * Ii - IIiIIiIi11I1
  if islink ( symlink ) :
   os . unlink ( symlink )
  try :
   os . symlink ( oooOo , symlink )
  except FileExistsError :
   if 29 - 29: IiIIii11Ii - oOo0O00
   if 30 - 30: I1I . ooo000
   pass
 else :
  iI111iiIi11i ( symlink )
  if 43 - 43: ooOOO . iIiii1i + ooo000
def IiII ( fstype , mountroot ) :
 oOo = get_mounted_filesystems ( fstype )
 if 75 - 75: Oo . Ooo0Ooo % IiIIii11Ii
 return [ x for x in oOo if x . startswith ( mountroot ) ]
 if 94 - 94: iiIi1 - Oo % ooo000
 if 74 - 74: Ii + Ooo0Ooo
def iIi1I1I ( ) :
 print ( "Usage:" , sys . argv [ 0 ] , "[-h] [-v] [-a] [-s]" , file = sys . stderr )
 print ( """
    -h    Display this help
    -v    Verbose mode
    -a    Unmount all mounted local drives for all users (root required)
    -s    Unmount all mounted local drives for all sessions
    -l    Do not modify the thindrives symbolic link
""" , file = sys . stderr )
 sys . exit ( 1 )
 if 85 - 85: oOo0O00
 if 65 - 65: Ooo0Ooo * ooo000 + oOo0O00
def i1I11i11 ( cmd ) :
 with subprocess . Popen ( cmd , universal_newlines = True ,
 # ooo0O0oO00 - oOo0O00 . oOo0O00
 stdin = subprocess . PIPE ,
 stdout = subprocess . PIPE ,
 stderr = subprocess . STDOUT ) as I11IIII1i1I :
  I11IIII1i1I . stdin . close ( )
  I11IIII1i1I . wait ( )
  i1111I = I11IIII1i1I . stdout . read ( )
  if 12 - 12: oOo0O00 * i1
 if i1111I :
  print ( i1111I , file = sys . stderr )
 return not I11IIII1i1I . returncode
 if 26 - 26: Ii . i1
 if 61 - 61: iI1iII1I1I1i . o00o0OO00O - ooo000 / ooo000 - i1
def iIi ( umountcmd , mountpoint , verbose ) :
 if 23 - 23: iI1iII1I1I1i % ooo0O0oO00 . Oo / OooOoo - iIiii1i - ooo0O0oO00
 if verbose :
  if 77 - 77: iiIi1 - iIiii1i * Ooo0Ooo
  print ( "Unmounting" , mountpoint , file = sys . stderr )
 oOOOo0O0O0oOO = i1I11i11 ( umountcmd + [ mountpoint ] )
 if not oOOOo0O0O0oOO :
  print ( "Using forced and lazy umount" , file = sys . stderr )
  oOOOo0O0O0oOO = i1I11i11 ( umountcmd + [ "-f" , "-l" , mountpoint ] )
 return oOOOo0O0O0oOO
 if 10 - 10: i1 + i1iiIII111 + ooo0O0oO00 + OooOoo . i1 / ooo000
 if 89 - 89: I1I * i1i1i1111I
def O0OOooO ( path ) :
 try :
  if 50 - 50: Iii1i * ooo000 % Iii1i - oOo0O00 + ooo000
  if 54 - 54: ooo0O0oO00 * i1 % i1 - Ooo0Ooo + IIiIIiIi11I1
  os . rmdir ( path )
 except OSError as oOoo0 :
  print ( "Removal of directory %s failed" % path , file = sys . stderr )
  print ( oOoo0 , file = sys . stderr )
  if 4 - 4: ooo000 + I1Ii1I1 * OooOoo - iiIi1
  if 69 - 69: ooo000
def iIiIiiIIIiII ( ) :
 locale . setlocale ( locale . LC_ALL , "" )
 if 44 - 44: Ooo0Ooo + i1i1i1111I + Iii1i - ooo0O0oO00
 I1i1i = prefix . get_tl_prefix ( )
 if 97 - 97: i1
 if 26 - 26: iiIi1
 iI1i = False
 IIIi1111iiIi1 = False
 I1II1ii111i = False
 I1i1iI1I1Ii1 = False
 try :
  oOoOO0O0 , I111 = getopt . getopt ( sys . argv [ 1 : ] , "hvasl" )
 except getopt . GetoptError :
  if 35 - 35: IIiIIiIi11I1 % Ooo0Ooo - o00o0OO00O * i1iiIII111 + i1
  iIi1I1I ( )
 for IiI111IIi , OOoO in oOoOO0O0 :
  if IiI111IIi == "-a" :
   IIIi1111iiIi1 = True
   I1i1iI1I1Ii1 = True
  if IiI111IIi == "-s" :
   I1II1ii111i = True
  if IiI111IIi == "-h" :
   iIi1I1I ( )
  if IiI111IIi == "-v" :
   iI1i = True
  if IiI111IIi == "-l" :
   I1i1iI1I1Ii1 = True
 if I111 :
  iIi1I1I ( )
  if 34 - 34: iiIi1 + ooOOO * ooo0O0oO00
 if IIIi1111iiIi1 :
  ii1 = prefix . get_tl_sessions_root ( )
 else :
  if "USER" in os . environ :
   if 53 - 53: i1 % IIiIIiIi11I1 * IIiIIiIi11I1 * iI1iII1I1I1i
   iiI1iI = os . environ [ "USER" ]
  else :
   iiI1iI = pwd . getpwuid ( os . getuid ( ) ) . pw_name
   if 85 - 85: IIiIIiIi11I1 + iIiii1i % Ooo0Ooo + ooo0O0oO00 * i1iiIII111
  if I1II1ii111i :
   ii1 = prefix . get_tl_user_dir ( iiI1iI )
  else :
   prefix . assert_in_session ( )
   ii1 = prefix . get_tl_session_dir ( )
   if 46 - 46: ooOOO - ooOOO + Oo / I1I * Oo + ooo0O0oO00
   if 98 - 98: I1I / IIiIIiIi11I1 / o00o0OO00O + iiIi1 % Oo + I1I
 if not I1i1iI1I1Ii1 :
  ooOo00o = os . path . join ( os . path . expanduser ( "~" ) , "thindrives" )
  if I1II1ii111i :
   iI111iiIi11i ( ooOo00o )
  else :
   ooO0Oo0o00 ( ii1 , ooOo00o )
   if 36 - 36: Ii
   if 71 - 71: OooOoo * IIiIIiIi11I1 * Oo
 if IIIi1111iiIi1 :
  IIIIiiIIi = [ "umount" , "-n" ]
 else :
  IIIIiiIIi = [ os . path . join ( I1i1i , "libexec" , "tl-umount-personal" ) ]
  if 9 - 9: i1i1i1111I - Ii % OooOoo / o00o0OO00O
  if 39 - 39: i1
 I11i1IIII1I = False
 for o0oo0oO0ooo in IiII ( "nfs" , ii1 ) :
  if not iIi ( IIIIiiIIi , o0oo0oO0ooo , iI1i ) :
   I11i1IIII1I = True
 if I11i1IIII1I :
  print ( "One or more mounts couldn't be unmounted. Not trying to remove mountpoints." ,
 file = sys . stderr )
  sys . exit ( 1 )
  if 23 - 23: I1Ii1I1 . Ooo0Ooo . iiIi1 - oOo0O00 - Ii
  if 30 - 30: oOo0O00 * iI1iII1I1I1i * i1i1i1111I
 I11iIi1i1iIi = ii1
 if I1II1ii111i or IIIi1111iiIi1 :
  I11iIi1i1iIi = os . path . join ( I11iIi1i1iIi , "*" )
 if IIIi1111iiIi1 :
  I11iIi1i1iIi = os . path . join ( I11iIi1i1iIi , "*" )
 I11iIi1i1iIi = os . path . join ( I11iIi1i1iIi , "drives" , "*" )
 if 10 - 10: I1Ii1I1
 for OoO0O0OO0 in glob . glob ( I11iIi1i1iIi ) :
  if os . path . isdir ( OoO0O0OO0 ) :
   if iI1i :
    print ( "Removing directory" , OoO0O0OO0 , file = sys . stderr )
   O0OOooO ( OoO0O0OO0 )
   if 70 - 70: i1i1i1111I - Ii % i1iiIII111 - iiIi1
   if 33 - 33: i1i1i1111I
if __name__ == "__main__" :
 iIiIiiIIIiII ( )
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
