@ -33,28 +33,74 @@ class ResourceRemounter:
Object contains one method for handle 'Resuming' dbus signal.
'handle_resuming' method checks and remounts user remote resources.
Also the object refreshes NSS-cache.
"""
def __init__(self,dv):
self.dv = dv
self.dv.defaultModule = 'client'
self.client = Client()
self.client.clVars = dv
self.check_server(True)
def check_server(self,refresh_nscd=False):
"""
Check the available of domain server and refresh nscd cache
"""
if self.client.checkDomainServer(
self.dv.Get('cl_remote_host'),
self.dv.Get('os_net_domain')):
try:
if refresh_nscd and path.exists(self.nscd_refresh):
os.system(self.nscd_refresh)
except:
pass
return True
return False
nscd_refresh = "/usr/sbin/nscd-refresh"
def remount_remote(self):
"""
Remount remote resource of the domain
"""
try:
self.client.mountRemoteRes(self.dv.Get('cl_remote_pw'),
self.dv.Get('cl_client_remote_path'),
self.dv.Get('cl_remote_host'))
except:
pass
def remount_user_resources(self):
"""
Remount user resource of the domain
"""
try:
self.client.mountUserDomainRes(self.dv.Get('ur_login'),
self.dv.Get('desktop.ur_password'),
int(self.dv.Get('ur_uid')),
int(self.dv.Get('ur_gid')),
"unix","share","homes","ftp")
except:
pass
def handle_resuming(self,statename):
print("Restoring remote mounts for user %s"%self.dv.Get('ur_login'))
# waiting for the domain
for wait in [1,2,5,10]:
if self.client.checkDomainServer(
self.dv.Get('cl_remote_host'),
self.dv.Get('os_net_domain')):
break
if self.check_server(True):
break
sleep(wait)
# check and remount remote resources
self.client.mountUserDomainRes(self.dv.Get('ur_login'),
self.dv.Get('desktop.ur_password'),
int(self.dv.Get('ur_uid')),
int(self.dv.Get('ur_gid')),
"unix","share","homes","ftp")
self.remount_remote()
self.remount_user_resources()
def unlock_screensaver(status):
"""
Handle screensaver unlock
"""
if status == 0:
self.check_server(True)
def main(argv):
# processing the user argument
@ -65,6 +111,7 @@ def main(argv):
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
sessionbus = dbus.SessionBus()
# initialization calculate datavars and quitting on an error
try:
dv = DataVars()
@ -81,6 +128,8 @@ def main(argv):
rm = ResourceRemounter(dv)
bus.add_signal_receiver(rm.handle_resuming,dbus_interface="org.freedesktop.UPower",
signal_name = "NotifyResume")
sessionbus.add_signal_receiver(rm.unlock_screensaver,dbus_interface="org.gnome.ScreenSaver",
signal_name = "ActiveChanged")
loop = gobject.MainLoop()
context = loop.get_context()
while True: