#!/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
from optparse import OptionParser
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
def OOoOoo000O00 ( uid , gid ) :
 os . setgid ( gid )
 os . setuid ( uid )
 if 55 - 55: o0Oo - ii1I1iII1I1I . i1I1IiIIiIi1 % oo0O000ooO * iIIiiIIiii1
def iIi1ii1I1iI11 ( uid , display , message ) :
 if 55 - 55: I11II1Ii % iIi
 ii = pwd . getpwuid ( uid ) . pw_name
 iiI = prefix . get_other_tl_session_dir ( ii , display )
 i1Ii1i = None
 if 93 - 93: oOooo0OOO % i1I1IiIIiIi1 - Ii * Oo * Ii
 try :
  with open ( "%s/xstartup.env" % iiI ) as Ooo :
   IIiI = Ooo . read ( )
   if 60 - 60: i1I1IiIIiIi1 . I11II1Ii
  for i1iiiiIIIiIi in IIiI . split ( "\x00" ) :
   if not "=" in i1iiiiIIIiIi :
    continue
   II , OO0000 = i1iiiiIIIiIi . split ( "=" , 1 )
   if II == "DBUS_SESSION_BUS_ADDRESS" :
    i1Ii1i = OO0000
    break
 except OSError as oOoo0 :
  print ( "error: notify '%s' on display %d failed (%s)" % ( ii , display , oOoo0 ) , file = sys . stderr )
  return
  if 95 - 95: i1iiIII111 . Ii . oo0O000ooO % iIIiiIIiii1 % I1Ii1I1
 if i1Ii1i is None :
  print ( "error: notify '%s' on display %d failed (No DBUS_SESSION_BUS_ADDRESS found in %s/xstartup.env)" % ( ii , display , iiI ) , file = sys . stderr )
  return
  if 8 - 8: I1Ii1I1 . oOooo0OOO . i1 . Oo - iIi
  if 32 - 32: Ii % i1i1i1111I % iIi - iIIiiIIiii1 % i1iiIII111
 IIiI = { }
 IIiI [ "DISPLAY" ] = ":%d.0" % display
 IIiI [ "DBUS_SESSION_BUS_ADDRESS" ] = i1Ii1i
 if 34 - 34: i1iiIII111 * i1
 if 34 - 34: oOo0O00 / i1iiIII111 - Iii1i . i1I1IiIIiIi1
 if 80 - 80: i1i1i1111I . I1I % ooOOO % IiIIii11Ii / i1i1i1111I
 IIiI [ "PATH" ] = os . environ . get ( "PATH" )
 if 32 - 32: I1Ii1I1 + I11II1Ii - oOo0O00
 IiiIii11iII1 = pwd . getpwuid ( uid ) . pw_gid
 I11I1 = lambda : OOoOoo000O00 ( uid , IiiIii11iII1 )
 try :
  OoOo = subprocess . Popen ( [ "notify-send" , "--expire-time" , "0" ,
 "Administrator message" , message ] ,
 preexec_fn = I11I1 , env = IIiI )
 except FileNotFoundError as oOoo0 :
  print ( "error: cannot find the tool 'notify-send'" , file = sys . stderr )
  sys . exit ( 1 )
  if 43 - 43: ooOOO * I1Ii1I1
 return OoOo
 if 95 - 95: ii1I1iII1I1I % Iii1i % i1i1i1111I . OooOoo
def I1iIiiIIiIi ( ) :
 locale . setlocale ( locale . LC_ALL , "" )
 if 88 - 88: Oo * IiIIii11Ii
 oooOo = OptionParser ( "usage: %prog [options] message" )
 oooOo . add_option ( "-u" , "--user" ,
 dest = "user" , default = "all" ,
 help = "user to send message to (default=all)" )
 if 23 - 23: ii1I1iII1I1I + i1 * I1Ii1I1 + Oo * Ii - oo0O000ooO
 ( iIIiii1iI , OOO ) = oooOo . parse_args ( )
 if 83 - 83: I11II1Ii - Iii1i + ooOOO . iIi / ooOOO
 if len ( OOO ) < 1 :
  oooOo . error ( "no message specified" )
  if 5 - 5: oOooo0OOO
 OOO00oO0oOo0O = " " . join ( OOO )
 if 1 - 1: I1I % ii1I1iII1I1I + i1iiIII111 . i1iiIII111 % Oo
 if 93 - 93: oOo0O00 % ii1I1iII1I1I * i1iiIII111
 if 52 - 52: I11II1Ii + I1I / o0Oo - I1Ii1I1 * iIi % oOo0O00
 os . chdir ( "/" )
 if 52 - 52: oOo0O00 . I1I + iIi - i1iiIII111 % i1I1IiIIiIi1
 Oo0O0o0oO000 = 0
 o0Ooo = None
 if ( iIIiii1iI . user != "all" ) :
  try :
   o0Ooo = pwd . getpwnam ( iIIiii1iI . user ) . pw_uid
  except KeyError :
   print ( "error: user '%s' not found" % iIIiii1iI . user , file = sys . stderr )
   sys . exit ( 1 )
   if 19 - 19: Ii
 IiII11i11II = [ ]
 if 52 - 52: Iii1i / Oo
 if 100 - 100: I1Ii1I1 / iIIiiIIiii1 * Ii - I11II1Ii
 iiI1111II = get_tl_xvnc_processes ( )
 for O0OO in iiI1111II . keys ( ) :
  ( oO0O0oOOo0Oo , O0ooooO , iII ) = iiI1111II [ O0OO ]
  if 43 - 43: ii1I1iII1I1I - I1I . o0Oo - Iii1i % iIi
  if 49 - 49: IiIIii11Ii . o0Oo + I11II1Ii - I11II1Ii
  if ( o0Ooo is not None and oO0O0oOOo0Oo != o0Ooo ) :
   continue
   if 78 - 78: i1 - ooOOO
   if 56 - 56: o0Oo . o0Oo + I1Ii1I1 * i1I1IiIIiIi1
  i111ii1I = iIi1ii1I1iI11 ( oO0O0oOOo0Oo , O0ooooO , OOO00oO0oOo0O )
  if i111ii1I != None :
   IiII11i11II . append ( i111ii1I )
  Oo0O0o0oO000 = Oo0O0o0oO000 + 1
  if 18 - 18: Ii / o0Oo + I1I + i1I1IiIIiIi1
 for OoOo in IiII11i11II :
  OoOo . wait ( )
  if 42 - 42: ooOOO - ooOOO - i1i1i1111I
 if ( o0Ooo is not None and Oo0O0o0oO000 == 0 ) :
  print ( "user '%s' has no sessions on this agent." % iIIiii1iI . user , file = sys . stderr )
 elif ( o0Ooo is None and Oo0O0o0oO000 == 0 ) :
  print ( "No sessions available on this agent." , file = sys . stderr )
  if 61 - 61: I11II1Ii
if __name__ == "__main__" :
 I1iIiiIIiIi ( )
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
