327
323
self.checker_command = config[u"checker"]
328
324
self.current_checker_command = None
329
325
self.last_connect = None
326
self.approvals_pending = 0
330
327
self._approved = None
331
328
self.approved_by_default = config.get(u"approved_by_default",
333
self.approvals_pending = 0
334
self.approval_delay = string_to_delta(
335
config[u"approval_delay"])
336
self.approval_duration = string_to_delta(
337
config[u"approval_duration"])
330
self.approved_delay = string_to_delta(
331
config[u"approved_delay"])
332
self.approved_duration = string_to_delta(
333
config[u"approved_duration"])
338
334
self.changedstate = multiprocessing_manager.Condition(multiprocessing_manager.Lock())
340
336
def send_changedstate(self):
341
337
self.changedstate.acquire()
342
338
self.changedstate.notify_all()
716
711
+ self.name.replace(u".", u"_")))
717
712
DBusObjectWithProperties.__init__(self, self.bus,
718
713
self.dbus_object_path)
720
def _get_approvals_pending(self):
721
return self._approvals_pending
722
def _set_approvals_pending(self, value):
723
old_value = self._approvals_pending
724
self._approvals_pending = value
726
if (hasattr(self, "dbus_object_path")
727
and bval is not bool(old_value)):
728
dbus_bool = dbus.Boolean(bval, variant_level=1)
729
self.PropertyChanged(dbus.String(u"ApprovalPending"),
732
approvals_pending = property(_get_approvals_pending,
733
_set_approvals_pending)
734
del _get_approvals_pending, _set_approvals_pending
737
716
def _datetime_to_dbus(dt, variant_level=0):
865
844
# GotSecret - signal
866
845
@dbus.service.signal(_interface)
867
846
def GotSecret(self):
869
Is sent after a successful transfer of secret from the Mandos
870
server to mandos-client
848
if self.approved_pending():
849
self.PropertyChanged(dbus.String(u"checker_running"),
850
dbus.Boolean(False, variant_level=1))
874
852
# Rejected - signal
875
853
@dbus.service.signal(_interface, signature=u"s")
876
854
def Rejected(self, reason):
856
if self.approved_pending():
857
self.PropertyChanged(dbus.String(u"checker_running"),
858
dbus.Boolean(False, variant_level=1))
880
860
# NeedApproval - signal
881
@dbus.service.signal(_interface, signature=u"tb")
861
@dbus.service.signal(_interface, signature=u"db")
882
862
def NeedApproval(self, timeout, default):
864
if not self.approved_pending():
865
self.PropertyChanged(dbus.String(u"approved_pending"),
866
dbus.Boolean(True, variant_level=1))
923
# ApprovalPending - property
905
# approved_pending - property
924
906
@dbus_service_property(_interface, signature=u"b", access=u"read")
925
def ApprovalPending_dbus_property(self):
926
return dbus.Boolean(bool(self.approvals_pending))
907
def approved_pending_dbus_property(self):
908
return dbus.Boolean(self.approved_pending())
928
# ApprovedByDefault - property
910
# approved_by_default - property
929
911
@dbus_service_property(_interface, signature=u"b",
930
912
access=u"readwrite")
931
def ApprovedByDefault_dbus_property(self, value=None):
932
if value is None: # get
933
return dbus.Boolean(self.approved_by_default)
934
self.approved_by_default = bool(value)
936
self.PropertyChanged(dbus.String(u"ApprovedByDefault"),
937
dbus.Boolean(value, variant_level=1))
939
# ApprovalDelay - property
940
@dbus_service_property(_interface, signature=u"t",
942
def ApprovalDelay_dbus_property(self, value=None):
943
if value is None: # get
944
return dbus.UInt64(self.approval_delay_milliseconds())
945
self.approval_delay = datetime.timedelta(0, 0, 0, value)
947
self.PropertyChanged(dbus.String(u"ApprovalDelay"),
948
dbus.UInt64(value, variant_level=1))
950
# ApprovalDuration - property
951
@dbus_service_property(_interface, signature=u"t",
953
def ApprovalDuration_dbus_property(self, value=None):
954
if value is None: # get
955
return dbus.UInt64(self._timedelta_to_milliseconds(
956
self.approval_duration))
957
self.approval_duration = datetime.timedelta(0, 0, 0, value)
959
self.PropertyChanged(dbus.String(u"ApprovalDuration"),
960
dbus.UInt64(value, variant_level=1))
913
def approved_by_default_dbus_property(self):
914
return dbus.Boolean(self.approved_by_default)
916
# approved_delay - property
917
@dbus_service_property(_interface, signature=u"t",
919
def approved_delay_dbus_property(self):
920
return dbus.UInt64(self.approved_delay_milliseconds())
922
# approved_duration - property
923
@dbus_service_property(_interface, signature=u"t",
925
def approved_duration_dbus_property(self):
926
return dbus.UInt64(self._timedelta_to_milliseconds(
927
self.approved_duration))
963
930
@dbus_service_property(_interface, signature=u"s", access=u"read")
964
def Name_dbus_property(self):
931
def name_dbus_property(self):
965
932
return dbus.String(self.name)
967
# Fingerprint - property
934
# fingerprint - property
968
935
@dbus_service_property(_interface, signature=u"s", access=u"read")
969
def Fingerprint_dbus_property(self):
936
def fingerprint_dbus_property(self):
970
937
return dbus.String(self.fingerprint)
973
940
@dbus_service_property(_interface, signature=u"s",
974
941
access=u"readwrite")
975
def Host_dbus_property(self, value=None):
942
def host_dbus_property(self, value=None):
976
943
if value is None: # get
977
944
return dbus.String(self.host)
978
945
self.host = value
979
946
# Emit D-Bus signal
980
self.PropertyChanged(dbus.String(u"Host"),
947
self.PropertyChanged(dbus.String(u"host"),
981
948
dbus.String(value, variant_level=1))
984
951
@dbus_service_property(_interface, signature=u"s", access=u"read")
985
def Created_dbus_property(self):
952
def created_dbus_property(self):
986
953
return dbus.String(self._datetime_to_dbus(self.created))
988
# LastEnabled - property
955
# last_enabled - property
989
956
@dbus_service_property(_interface, signature=u"s", access=u"read")
990
def LastEnabled_dbus_property(self):
957
def last_enabled_dbus_property(self):
991
958
if self.last_enabled is None:
992
959
return dbus.String(u"")
993
960
return dbus.String(self._datetime_to_dbus(self.last_enabled))
996
963
@dbus_service_property(_interface, signature=u"b",
997
964
access=u"readwrite")
998
def Enabled_dbus_property(self, value=None):
965
def enabled_dbus_property(self, value=None):
999
966
if value is None: # get
1000
967
return dbus.Boolean(self.enabled)
1015
982
return dbus.String(self._datetime_to_dbus(self
1016
983
.last_checked_ok))
1018
# Timeout - property
1019
986
@dbus_service_property(_interface, signature=u"t",
1020
987
access=u"readwrite")
1021
def Timeout_dbus_property(self, value=None):
988
def timeout_dbus_property(self, value=None):
1022
989
if value is None: # get
1023
990
return dbus.UInt64(self.timeout_milliseconds())
1024
991
self.timeout = datetime.timedelta(0, 0, 0, value)
1025
992
# Emit D-Bus signal
1026
self.PropertyChanged(dbus.String(u"Timeout"),
993
self.PropertyChanged(dbus.String(u"timeout"),
1027
994
dbus.UInt64(value, variant_level=1))
1028
995
if getattr(self, u"disable_initiator_tag", None) is None:
1043
1010
self.disable_initiator_tag = (gobject.timeout_add
1044
1011
(time_to_die, self.disable))
1046
# Interval - property
1013
# interval - property
1047
1014
@dbus_service_property(_interface, signature=u"t",
1048
1015
access=u"readwrite")
1049
def Interval_dbus_property(self, value=None):
1016
def interval_dbus_property(self, value=None):
1050
1017
if value is None: # get
1051
1018
return dbus.UInt64(self.interval_milliseconds())
1052
1019
self.interval = datetime.timedelta(0, 0, 0, value)
1053
1020
# Emit D-Bus signal
1054
self.PropertyChanged(dbus.String(u"Interval"),
1021
self.PropertyChanged(dbus.String(u"interval"),
1055
1022
dbus.UInt64(value, variant_level=1))
1056
1023
if getattr(self, u"checker_initiator_tag", None) is None:
1061
1028
(value, self.start_checker))
1062
1029
self.start_checker() # Start one now, too
1064
# Checker - property
1031
# checker - property
1065
1032
@dbus_service_property(_interface, signature=u"s",
1066
1033
access=u"readwrite")
1067
def Checker_dbus_property(self, value=None):
1034
def checker_dbus_property(self, value=None):
1068
1035
if value is None: # get
1069
1036
return dbus.String(self.checker_command)
1070
1037
self.checker_command = value
1071
1038
# Emit D-Bus signal
1072
self.PropertyChanged(dbus.String(u"Checker"),
1039
self.PropertyChanged(dbus.String(u"checker"),
1073
1040
dbus.String(self.checker_command,
1074
1041
variant_level=1))
1076
# CheckerRunning - property
1043
# checker_running - property
1077
1044
@dbus_service_property(_interface, signature=u"b",
1078
1045
access=u"readwrite")
1079
def CheckerRunning_dbus_property(self, value=None):
1046
def checker_running_dbus_property(self, value=None):
1080
1047
if value is None: # get
1081
1048
return dbus.Boolean(self.checker is not None)
1210
1177
client.Rejected("Disabled")
1213
if client._approved or not client.approval_delay:
1180
if client._approved or not client.approved_delay:
1214
1181
#We are approved or approval is disabled
1216
1183
elif client._approved is None:
1217
logger.info(u"Client %s needs approval",
1184
logger.info(u"Client %s need approval",
1219
1186
if self.server.use_dbus:
1220
1187
# Emit D-Bus signal
1221
1188
client.NeedApproval(
1222
client.approval_delay_milliseconds(),
1189
client.approved_delay_milliseconds(),
1223
1190
client.approved_by_default)
1225
1192
logger.warning(u"Client %s was not approved",
1227
1194
if self.server.use_dbus:
1228
1195
# Emit D-Bus signal
1229
client.Rejected("Denied")
1196
client.Rejected("Disapproved")
1232
1199
#wait until timeout or approved