+#! /bin/sh
+# chkconfig: - 91 35
+# description: This package is an implementation of "AFP over TCP"
+# and provides printer, file sharing, and routing
+# services via legacy AppleTalk networking protocol.
+#
+# Netatalk daemons.
+# If you use AppleTalk, Make sure not to start atalkd in the background:
+# its data structures must have time to stablize before running the
+# other processes.
+
+ATALK_BIN=:BINDIR:
+ATALK_CONF_DIR=:ETCDIR:
+ATALK_SBIN=:SBINDIR:
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Source networking configuration.
+. /etc/sysconfig/network
+
+# default
+ATALK_NAME=`echo ${HOSTNAME}|cut -d. -f1`
+ATALK_UNIX_CHARSET='LOCALE'
+ATALK_MAC_CHARSET='MAC_ROMAN'
+
+CNID_METAD_RUN=yes
+AFPD_RUN=yes
+AFPD_MAX_CLIENTS=20
+AFPD_UAMLIST="-U uams_dhx.so,uams_dhx2.so"
+AFPD_GUEST=nobody
+CNID_CONFIG="-l log_note"
+
+ATALKD_RUN=no
+PAPD_RUN=no
+TIMELORD_RUN=no
+A2BOOT_RUN=no
+ATALK_ZONE=
+ATALK_BGROUND=no
+
+# read in netatalk configuration
+if [ -f ${ATALK_CONF_DIR}/netatalk.conf ]; then
+ . ${ATALK_CONF_DIR}/netatalk.conf
+fi
+
+# initialize return values
+RETVAL=1
+RETVAL_ATALKD=0
+RETVAL_PAPD=0
+RETVAL_CNID_METAD=0
+RETVAL_AFPD=0
+
+# startup code for everything
+atalk_startup() {
+ # Check that networking is up.
+ if [ ${NETWORKING} = "no" ]; then
+ echo "[Network isn't started]";
+ exit 1;
+ fi
+
+ if [ ! -f ${ATALK_CONF_DIR}/netatalk.conf ]; then
+ echo "[${ATALK_CONF_DIR}/netatalk.conf not found]";
+ exit 6;
+ fi
+
+ if [ x"${ATALKD_RUN}" != x"no" -a -x ${ATALK_SBIN}/atalkd ]; then
+ # Quickly probe for appletalk and warn if we can't find it
+ #/sbin/modprobe appletalk || echo "[could not load appletalk module]"
+ # Check for IP Encapsulation support
+ #/sbin/modprobe ipddp || echo "[could not load IP encapsulation]"
+ echo -n " Starting atalkd:"
+ daemon ${ATALK_SBIN}/atalkd
+ RETVAL_ATALKD=$?
+ echo
+
+ if [ -x ${ATALK_BIN}/nbprgstr ]; then
+ action " Registering ${ATALK_NAME}:Workstation${ATALK_ZONE}:" ${ATALK_BIN}/nbprgstr -p 4 \"${ATALK_NAME}:Workstation${ATALK_ZONE}\"
+ action " Registering ${ATALK_NAME}:netatalk${ATALK_ZONE}:" ${ATALK_BIN}/nbprgstr -p 4 \"${ATALK_NAME}:netatalk${ATALK_ZONE}\"
+ fi
+
+ if [ x"${PAPD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/papd ]; then
+ echo -n " Starting papd:"
+ daemon ${ATALK_SBIN}/papd
+ RETVAL_PAPD=$?
+ echo
+ fi
+
+ # check for timelord in bin directory
+ if [ x"${TIMELORD_RUN}" = x"yes" -a -x ${ATALK_BIN}/timelord ]; then
+ echo -n " Starting timelord"
+ daemon ${ATALK_BIN}/timelord
+ echo
+ fi
+
+ # check for timelord in sbin directory
+ if [ x"${TIMELORD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/timelord ]; then
+ echo -n " Starting timelord"
+ daemon ${ATALK_SBIN}/timelord
+ echo
+ fi
+
+ # check for a2boot in bin directory
+ if [ x"${A2BOOT_RUN}" = x"yes" -a -x ${ATALK_BIN}/a2boot ]; then
+ echo -n " Starting a2boot"
+ daemon ${ATALK_BIN}/a2boot
+ echo
+ fi
+
+ # check for a2boot in sbin directory
+ if [ x"${A2BOOT_RUN}" = x"yes" -a -x ${ATALK_SBIN}/a2boot ]; then
+ echo -n " Starting a2boot"
+ daemon ${ATALK_SBIN}/a2boot
+ echo
+ fi
+
+ fi
+
+ if [ x"${CNID_METAD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/cnid_metad ] ; then
+ echo -n " Starting cnid_metad:"
+ daemon ${ATALK_SBIN}/cnid_metad $CNID_CONFIG
+ RETVAL_CNID_METAD=$?
+ echo
+ fi
+
+ if [ x"${AFPD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/afpd ] ; then
+ echo -n " Starting afpd:"
+ daemon ${ATALK_SBIN}/afpd ${AFPD_UAMLIST} -g ${AFPD_GUEST} \
+ -c ${AFPD_MAX_CLIENTS} -n \"${ATALK_NAME}${ATALK_ZONE}\"
+ RETVAL_AFPD=$?
+ echo
+ fi
+
+ if [ $RETVAL_ATALKD -eq 0 -a $RETVAL_PAPD -eq 0 -a $RETVAL_CNID_METAD -eq 0 -a $RETVAL_AFPD -eq 0 ]; then
+ RETVAL=0
+ touch /var/lock/subsys/atalk || RETVAL=1
+ fi
+}
+
+case "$1" in
+'start')
+ echo -n 'Starting Netatalk services: '
+ if [ x"${ATALK_BGROUND}" = x"yes" -a x"${ATALKD_RUN}" != x"no" ]; then
+ echo -n "(backgrounded)"
+ atalk_startup >& /dev/null &
+ else
+ echo
+ atalk_startup
+ fi
+ echo
+ ;;
+'stop')
+ echo 'Shutting down Netatalk services: '
+ if [ x"${ATALKD_RUN}" != x"no" ]; then
+ if [ x"${PAPD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/papd ]; then
+ echo -n " Stopping papd:"
+ killproc papd
+ RETVAL_PAPD=$?
+ echo
+ fi
+
+ # checking for timelord in bin directory
+ if [ x"${TIMELORD_RUN}" = x"yes" -a -x ${ATALK_BIN}/timelord ]; then
+ echo -n " Stopping timelord:"
+ killproc timelord
+ echo
+ fi
+
+ # checking for timelord in sbin directory
+ if [ x"${TIMELORD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/timelord ]; then
+ echo -n " Stopping timelord:"
+ killproc timelord
+ echo
+ fi
+
+ # checking for a2boot in bin directory
+ if [ x"${A2BOOT_RUN}" = x"yes" -a -x ${ATALK_BIN}/a2boot ]; then
+ echo -n " Stopping a2boot:"
+ killproc a2boot
+ echo
+ fi
+
+ # checking for a2boot in sbin directory
+ if [ x"${A2BOOT_RUN}" = x"yes" -a -x ${ATALK_SBIN}/a2boot ]; then
+ echo -n " Stopping a2boot:"
+ killproc a2boot
+ echo
+ fi
+
+ action " Unregistering ${ATALK_NAME}:Workstation${ATALK_ZONE}:" ${ATALK_BIN}/nbpunrgstr \"${ATALK_NAME}:Workstation${ATALK_ZONE}\"
+ action " Unregistering ${ATALK_NAME}:netatalk${ATALK_ZONE}:" ${ATALK_BIN}/nbpunrgstr \"${ATALK_NAME}:netatalk${ATALK_ZONE}\"
+
+ # kill atalkd last, since without it the plumbing goes away.
+ if [ -x ${ATALK_SBIN}/atalkd ]; then
+ echo -n " Stopping atalk:"
+ killproc atalkd
+ RETVAL_ATALKD=$?
+ echo
+ fi
+ fi
+
+ # kill this separately as we also do AFP/tcp
+ if [ x"${AFPD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/afpd ]; then
+ echo -n " Stopping afpd:"
+ killproc afpd
+ RETVAL_AFPD=$?
+ echo
+ fi
+
+ if [ x"${CNID_METAD_RUN}" = x"yes" -a -x ${ATALK_SBIN}/cnid_metad ]; then
+ echo -n " Stopping cnid_metad:"
+ killproc cnid_metad
+ RETVAL_CNID_METAD=$?
+ echo
+ fi
+
+ if [ $RETVAL_ATALKD -eq 0 -a $RETVAL_PAPD -eq 0 -a $RETVAL_AFPD -eq 0 ] ; then
+ RETVAL=0
+ rm -f /var/lock/subsys/atalk || RETVAL=1
+ fi
+ echo ""
+ ;;
+ 'restart'|'reload')
+ $0 stop
+ $0 start
+ RETVAL=$?
+ ;;
+ 'status')
+ status atalkd
+ status papd
+ status timelord
+ status a2boot
+ status cnid_metad
+ status afpd
+ RETVAL=$?
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload|status}"
+ exit 2
+esac
+
+exit $RETVAL