Avahi: Don't start the avahi-daemon if dot local domain is there

More info is at the following link
https://web.archive.org/web/20150228130344/http://avahi.org/wiki/AvahiAndUnicastDotLocal

This commit creates the avahi user and avahi group,as there may be cases
where one of them don't exist due to code update.

for example a BMC image that has additional user accounts
(and therefore a bigger /etc/group file) is installed on the BMC,
the /etc/group or /etc/passwd file would not be updated because is part of the
persistent files, so the old /etc/group or /etc/passwd file would remain.

Tested: 1) System which doesn't have avahi group,With this fix creates the
            group and start the avahi daemon.
        2) Verified on the system where there is a zone
           .local is being used by the DNS server,avahi-daemon was not started.

Resolves openbmc/openbmc#2788

Change-Id: I23b7a6cdd21bcefbea3d854fec8faa21c70378e9
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/common/recipes-connectivity/avahi/avahi/avahi.conf b/common/recipes-connectivity/avahi/avahi/avahi.conf
new file mode 100644
index 0000000..946e267
--- /dev/null
+++ b/common/recipes-connectivity/avahi/avahi/avahi.conf
@@ -0,0 +1,2 @@
+[Unit]
+ConditionPathExists=/tmp/avahi
diff --git a/common/recipes-connectivity/avahi/avahi/check-avahi-pre-cond.service b/common/recipes-connectivity/avahi/avahi/check-avahi-pre-cond.service
new file mode 100644
index 0000000..f4548a7
--- /dev/null
+++ b/common/recipes-connectivity/avahi/avahi/check-avahi-pre-cond.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Check the precondition before starting avahi
+Before=avahi-daemon.service
+
+[Service]
+RemainAfterExit=no
+Type=oneshot
+ExecStart=/usr/sbin/check-local-domain
+ExecStart=/usr/sbin/create-user
+ExecStart=/bin/touch /tmp/avahi
+
+[Install]
+WantedBy=obmc-standby.target
diff --git a/common/recipes-connectivity/avahi/avahi/check-local-domain b/common/recipes-connectivity/avahi/avahi/check-local-domain
new file mode 100644
index 0000000..978b8b6
--- /dev/null
+++ b/common/recipes-connectivity/avahi/avahi/check-local-domain
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if !(host -t SOA local. > /dev/null 2> /dev/null); then
+    # Return 1 to tell that local domain is present
+    exit 1
+else
+    # Return 0 to tell local domain is not being used
+    exit 0
+fi
diff --git a/common/recipes-connectivity/avahi/avahi/create-user b/common/recipes-connectivity/avahi/avahi/create-user
new file mode 100644
index 0000000..322f1cd
--- /dev/null
+++ b/common/recipes-connectivity/avahi/avahi/create-user
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Create avahi group and user
+deluser avahi ; addgroup --system avahi ; adduser --system --no-create-home --ingroup avahi avahi
+
+exit $?
diff --git a/common/recipes-connectivity/avahi/avahi_%.bbappend b/common/recipes-connectivity/avahi/avahi_%.bbappend
new file mode 100644
index 0000000..0458b82
--- /dev/null
+++ b/common/recipes-connectivity/avahi/avahi_%.bbappend
@@ -0,0 +1,31 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://avahi.conf"
+SRC_URI += "file://check-avahi-pre-cond.service"
+SRC_URI += "file://create-user"
+SRC_URI += "file://check-local-domain"
+
+RRECOMMENDS_${PN}-daemon += "bind-utils"
+
+AVAHI_SVC = "avahi-daemon.service"
+
+AVAHI_DROPIN_DIR = "${AVAHI_SVC}.d"
+
+FILES_${PN}-daemon_append += "${systemd_system_unitdir}/${AVAHI_DROPIN_DIR}/avahi.conf"
+
+PACKAGE_BEFORE_PN += "${PN}-daemon-preconditions"
+
+FILES_${PN}-daemon-preconditions += "${systemd_system_unitdir}/check-avahi-pre-cond.service"
+FILES_${PN}-daemon-preconditions += "${sbindir}/create-user"
+FILES_${PN}-daemon-preconditions += "${sbindir}/check-local-domain"
+
+RRECOMMENDS_${PN}-daemon += "${PN}-daemon-preconditions"
+
+do_install_append() {
+
+    mkdir -p ${D}/${systemd_system_unitdir}/${AVAHI_DROPIN_DIR}
+    install -m 0755 ${WORKDIR}/avahi.conf ${D}/${systemd_system_unitdir}/${AVAHI_DROPIN_DIR}/avahi.conf
+    install -m 0755 ${WORKDIR}/check-avahi-pre-cond.service ${D}/${systemd_system_unitdir}/check-avahi-pre-cond.service
+    install -m 0755 ${WORKDIR}/check-local-domain ${D}/${sbindir}/check-local-domain
+    install -m 0755 ${WORKDIR}/create-user ${D}/${sbindir}/create-user
+}