<def-group>
  <definition class="compliance" id="service_timesyncd_enabled" version="1">
    <metadata>
        <title>Enable systemd_timesyncd Service</title>
        
    <affected family="unix">
    <platform>Ubuntu 22.04</platform>
    </affected>
        <description>The systemd-timesyncd service should be enabled if possible.</description>
    </metadata>
    <criteria operator="OR" comment="package systemd-timesyncd installed and service systemd-timesyncd is configured to start or not needed">
      <criteria comment="service systemd-timesyncd is not needed" operator="AND">
        <criterion comment="variable var_timesync_service is set to systemd-timesyncd"
        test_ref="service_timesyncd_enabled_test_variable_var_timesync_service" negate="true"/>
      </criteria>
      <criteria comment="package systemd-timesyncd installed and service systemd-timesyncd is configured to start" operator="AND">
      <criterion comment="variable var_timesync_service is set to systemd-timesyncd"
      test_ref="service_timesyncd_enabled_test_variable_var_timesync_service" />
      <criterion comment="systemd-timesyncd installed" test_ref="test_service_systemd-timesyncd_package_systemd-timesyncd_installed" />
        <criteria comment="service systemd-timesyncd is configured to start and is running" operator="AND">
          <criterion comment="systemd-timesyncd is running" test_ref="test_service_running_systemd-timesyncd" />
          <criteria operator="OR" comment="service systemd-timesyncd is configured to start">
            <criterion comment="multi-user.target wants systemd-timesyncd" test_ref="test_multi_user_wants_systemd-timesyncd" />
            <criterion comment="multi-user.target wants systemd-timesyncd socket" test_ref="test_multi_user_wants_systemd-timesyncd_socket" />
          </criteria>
        </criteria>
      </criteria>
    </criteria>
  </definition>

  <linux:systemdunitdependency_test check="all" check_existence="any_exist" comment="systemd test" id="test_multi_user_wants_systemd-timesyncd" version="1">
    <linux:object object_ref="object_multi_user_target_for_systemd-timesyncd_enabled" />
    <linux:state state_ref="state_systemd_systemd-timesyncd_on"/>
  </linux:systemdunitdependency_test>
  <linux:systemdunitdependency_object id="object_multi_user_target_for_systemd-timesyncd_enabled" comment="list of dependencies of multi-user.target" version="1">
    <linux:unit>multi-user.target</linux:unit>
  </linux:systemdunitdependency_object>
  <linux:systemdunitdependency_state id="state_systemd_systemd-timesyncd_on" comment="systemd-timesyncd listed at least once in the dependencies" version="1">
    <linux:dependency entity_check="at least one">systemd-timesyncd.service</linux:dependency>
  </linux:systemdunitdependency_state>

  <linux:systemdunitdependency_test check="all" check_existence="any_exist" comment="systemd test" id="test_multi_user_wants_systemd-timesyncd_socket" version="1">
    <linux:object object_ref="object_multi_user_target_for_systemd-timesyncd_socket_enabled" />
    <linux:state state_ref="state_systemd_systemd-timesyncd_socket_on"/>
  </linux:systemdunitdependency_test>
  <linux:systemdunitdependency_object id="object_multi_user_target_for_systemd-timesyncd_socket_enabled" comment="list of dependencies of multi-user.target" version="1">
    <linux:unit>multi-user.target</linux:unit>
  </linux:systemdunitdependency_object>
  <linux:systemdunitdependency_state id="state_systemd_systemd-timesyncd_socket_on" comment="systemd-timesyncd listed at least once in the dependencies" version="1">
    <linux:dependency entity_check="at least one">systemd-timesyncd.socket</linux:dependency>
  </linux:systemdunitdependency_state>

  <linux:systemdunitproperty_test id="test_service_running_systemd-timesyncd" check="at least one" check_existence="at_least_one_exists" comment="Test that the systemd-timesyncd service is running" version="1">
    <linux:object object_ref="obj_service_running_systemd-timesyncd"/>
    <linux:state state_ref="state_service_running_systemd-timesyncd"/>
  </linux:systemdunitproperty_test>
  <linux:systemdunitproperty_object id="obj_service_running_systemd-timesyncd" comment="Retrieve the ActiveState property of systemd-timesyncd" version="1">
    <linux:unit operation="pattern match">^systemd-timesyncd\.(socket|service)$</linux:unit>
    <linux:property>ActiveState</linux:property>
  </linux:systemdunitproperty_object>
  <linux:systemdunitproperty_state id="state_service_running_systemd-timesyncd" version="1" comment="systemd-timesyncd is running">
      <linux:value>active</linux:value>
  </linux:systemdunitproperty_state>
<ind:variable_test id="service_timesyncd_enabled_test_variable_var_timesync_service"
  comment="Check external var_timesync_service is set to systemd-timesyncd" check="all" version="1">
    <ind:object object_ref="obj_service_timesyncd_enabled_test_variable_var_timesync_service"/>
    <ind:state state_ref="ste_service_timesyncd_enabled_test_variable_var_timesync_service" />
  </ind:variable_test>

  <ind:variable_object id="obj_service_timesyncd_enabled_test_variable_var_timesync_service" version="1">
    <ind:var_ref>var_timesync_service</ind:var_ref>
  </ind:variable_object>
  <ind:variable_state id="ste_service_timesyncd_enabled_test_variable_var_timesync_service" version="1">
    <ind:value operation="equals" datatype="string">systemd-timesyncd</ind:value>
  </ind:variable_state>

  <external_variable comment="External variable var_timesync_service" datatype="string" id="var_timesync_service" version="1" />

  <linux:dpkginfo_test check="all" check_existence="all_exist"
  id="test_service_systemd-timesyncd_package_systemd-timesyncd_installed" version="1"
  comment="package systemd-timesyncd is installed">
    <linux:object object_ref="obj_test_service_systemd-timesyncd_package_systemd-timesyncd_installed" />
    
  </linux:dpkginfo_test>
  <linux:dpkginfo_object id="obj_test_service_systemd-timesyncd_package_systemd-timesyncd_installed" version="1">
    <linux:name>systemd-timesyncd</linux:name>
  </linux:dpkginfo_object>
  

</def-group>