#!/opt/thinlinc/libexec/python3
# -*- mode: python; coding: utf-8; indent-tabs-mode: nil; indent-offset: 4 -*-
#
# Copyright 2010-2014 Pierre Ossman for Cendio AB
# For more information, see http://www.cendio.com
if 82 - 82: Iii1i
import sys
import os
import pwd
import locale
import subprocess
if 87 - 87: Ii % i1i1i1111I . Oo / OooOoo * I1Ii1I1 - I1I
from thinlinc import prefix
from thinlinc . sessioninfo import get_tl_xvnc_processes
if 81 - 81: i1 + ooOOO / oOo0O00 * i1iiIII111 * IiIIii11Ii
from thinlinc . optionparse import OptionParser
from thinlinc . optcomplete import CompletionResult
from thinlinc . version import TL_VERSION
if 84 - 84: ooo000 - Ooo0Ooo + iI1iII1I1I1i . IIiIIiIi11I1
def iI111iiIi11i ( uid , gid ) :
 os . setgid ( gid )
 os . setuid ( uid )
 if 77 - 77: iIiii1i - ooo0O0oO00 . o00o0OO00O
def Ooo ( uid , display , message ) :
 if 9 - 9: ii . Ii * i1
 ii1iI1I = pwd . getpwuid ( uid ) . pw_name
 i11IiIIiii1II = prefix . get_other_tl_session_dir ( ii1iI1I , display )
 O0o000ooO = None
 if 94 - 94: i1 . I1I / ooo0O0oO00
 try :
  with open ( "%s/xstartup.env" % i11IiIIiii1II ) as ooOOooO0 :
   i1iiiiIIIiIi = ooOOooO0 . read ( )
   if 22 - 22: ooo000 . iI1iII1I1I1i + Ooo0Ooo + ooo0O0oO00
  for oOoo0 in i1iiiiIIIiIi . split ( "\x00" ) :
   if not "=" in oOoo0 :
    continue
   Iio0 , i1i = oOoo0 . split ( "=" , 1 )
   if Iio0 == "DBUS_SESSION_BUS_ADDRESS" :
    O0o000ooO = i1i
    break
 except OSError as I1i :
  print ( "Error: Notify '%s' on display %d failed (%s)" % ( ii1iI1I , display , I1i ) , file = sys . stderr )
  return
  if 75 - 75: ii . Ooo0Ooo . o00o0OO00O * iIiii1i % i1iiIII111
 if O0o000ooO is None :
  print ( "Error: Notify '%s' on display %d failed (No DBUS_SESSION_BUS_ADDRESS found in %s/xstartup.env)" % ( ii1iI1I , display , i11IiIIiii1II ) , file = sys . stderr )
  return
  if 34 - 34: i1iiIII111 * i1
  if 34 - 34: oOo0O00 / i1iiIII111 - Iii1i . iI1iII1I1I1i
 i1iiiiIIIiIi = { }
 i1iiiiIIIiIi [ "DISPLAY" ] = ":%d.0" % display
 i1iiiiIIIiIi [ "DBUS_SESSION_BUS_ADDRESS" ] = O0o000ooO
 if 80 - 80: i1i1i1111I . I1I % ooOOO % IiIIii11Ii / i1i1i1111I
 if 32 - 32: I1Ii1I1 + ooo0O0oO00 - oOo0O00
 if 79 - 79: Iii1i % ooo0O0oO00 * Oo + ooOOO / Oo . ooo0O0oO00
 i1iiiiIIIiIi [ "PATH" ] = os . environ . get ( "PATH" )
 if 20 - 20: ii + i1iiIII111 / I1I
 Ooo0OO = pwd . getpwuid ( uid ) . pw_gid
 ii1Ii1I = lambda : iI111iiIi11i ( uid , Ooo0OO )
 try :
  oo0 = subprocess . Popen ( [ "notify-send" , "--expire-time" , "0" ,
 "Administrator message" , message ] ,
 preexec_fn = ii1Ii1I , env = i1iiiiIIIiIi )
 except FileNotFoundError as I1i :
  print ( "Error: Cannot find the tool 'notify-send'" , file = sys . stderr )
  sys . exit ( 1 )
  if 20 - 20: IiIIii11Ii . ooo0O0oO00 % Ooo0Ooo / Ii / oOo0O00
 return oo0
 if 47 - 47: IiIIii11Ii
def iiI1I11iiiiI ( * args ) :
 iII11iIi1iIiI = [ ]
 if 29 - 29: IiIIii11Ii - oOo0O00
 i1IIiII11 = get_tl_xvnc_processes ( )
 if 52 - 52: i1iiIII111 % Oo . I1Ii1I1 + ooOOO % Oo . ii
 if 56 - 56: i1iiIII111 * ii - iIiii1i
 IiIi1Ii1111 = { i1IIiII11 [ pid ] [ 0 ] for pid in i1IIiII11 }
 for Ii1I1I1i in IiIi1Ii1111 :
  try :
   iII11iIi1iIiI . append ( pwd . getpwuid ( Ii1I1I1i ) . pw_name )
  except KeyError :
   pass
 return CompletionResult ( completions = iII11iIi1iIiI , nospace = False )
 if 93 - 93: oOo0O00 % Ooo0Ooo * i1iiIII111
def OooO0O00o0 ( ) :
 if 73 - 73: ooo0O0oO00 - oOo0O00 . oOo0O00
 I11IIII1i1I = OptionParser ( version = TL_VERSION ,
 usage = "%prog [options] <message>" ,
 description = "Send message to user(s)." )
 if 95 - 95: i1i1i1111I * oOo0O00
 I11IIII1i1I . add_option ( "-u" , "--user" ,
 dest = "user" , default = "all" ,
 help = "user to send message to. The default is \"all\"" ,
 completer = iiI1I11iiiiI )
 if 66 - 66: ii * i1i1i1111I + oOo0O00 / I1I / Iii1i / Ii
 I11IIII1i1I . set_argument_completer ( lambda * IiII11i11II : CompletionResult ( completions = [ ] , nospace = False ) )
 if 52 - 52: Iii1i / Oo
 return I11IIII1i1I
 if 100 - 100: I1Ii1I1 / iIiii1i * Ii - ooo0O0oO00
def iiI1111II ( ) :
 locale . setlocale ( locale . LC_ALL , "" )
 if 79 - 79: Ooo0Ooo % iI1iII1I1I1i % IIiIIiIi11I1 / ooOOO - ooOOO / iIiii1i
 I11IIII1i1I = OooO0O00o0 ( )
 if 63 - 63: ooOOO / i1i1i1111I - oOo0O00 * ooOOO / i1iiIII111 + ooo0O0oO00
 ( iiI1 , IiII11i11II ) = I11IIII1i1I . parse_args ( )
 if 20 - 20: i1i1i1111I / Ooo0Ooo - ooo0O0oO00 + Ooo0Ooo - I1I . Ooo0Ooo
 if len ( IiII11i11II ) < 1 :
  I11IIII1i1I . error ( "no message specified" )
  if 50 - 50: Iii1i * ooo000 % Iii1i - oOo0O00 + ooo000
 ooOOOoOO0 = " " . join ( IiII11i11II )
 if 87 - 87: I1Ii1I1 * OooOoo - ooo0O0oO00 % Iii1i
 if 51 - 51: Iii1i % Ooo0Ooo . iI1iII1I1I1i / Ii / ooOOO
 if 49 - 49: iI1iII1I1I1i / i1iiIII111 + ooo000
 os . chdir ( "/" )
 if 36 - 36: i1i1i1111I + Iii1i - ooo0O0oO00 * Ii
 oo0ooooo0ooo = 0
 Ii1I1I1i = None
 if ( iiI1 . user != "all" ) :
  try :
   Ii1I1I1i = pwd . getpwnam ( iiI1 . user ) . pw_uid
  except KeyError :
   print ( "Error: User '%s' not found" % iiI1 . user , file = sys . stderr )
   sys . exit ( 1 )
   if 61 - 61: o00o0OO00O . iI1iII1I1I1i / ooOOO * I1Ii1I1 + ii % Oo
 I1iO0oo000o = [ ]
 if 14 - 14: ii + o00o0OO00O . IiIIii11Ii . Ooo0Ooo % IiIIii11Ii * i1i1i1111I
 if 65 - 65: Iii1i + IIiIIiIi11I1 - Ooo0Ooo . iI1iII1I1I1i + OooOoo * Ooo0Ooo
 i1IIiII11 = get_tl_xvnc_processes ( )
 for I1III11IIii in i1IIiII11 . keys ( ) :
  ( OO000 , OO , ooOOOO00O ) = i1IIiII11 [ I1III11IIii ]
  if 72 - 72: iIiii1i
  if 25 - 25: i1
  if ( Ii1I1I1i is not None and OO000 != Ii1I1I1i ) :
   continue
   if 93 - 93: ooo0O0oO00 - IIiIIiIi11I1 / IIiIIiIi11I1 * iI1iII1I1I1i
   if 3 - 3: oOo0O00
  IiI11II11II11 = Ooo ( OO000 , OO , ooOOOoOO0 )
  if IiI11II11II11 != None :
   I1iO0oo000o . append ( IiI11II11II11 )
  oo0ooooo0ooo = oo0ooooo0ooo + 1
  if 43 - 43: iI1iII1I1I1i * oOo0O00 + ooOOO
 for oo0 in I1iO0oo000o :
  oo0 . wait ( )
  if 30 - 30: I1I
 if ( Ii1I1I1i is not None and oo0ooooo0ooo == 0 ) :
  print ( "User '%s' has no sessions on this agent." % iiI1 . user , file = sys . stderr )
 elif ( Ii1I1I1i is None and oo0ooooo0ooo == 0 ) :
  print ( "No sessions available on this agent." , file = sys . stderr )
  if 41 - 41: ooo0O0oO00
if __name__ == "__main__" :
 iiI1111II ( )
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
