Index: /module/Configure/install.rdf
===================================================================
--- /module/Configure/install.rdf (revision 1)
+++ /module/Configure/install.rdf (revision 1)
@@ -0,0 +1,32 @@
+
+
+
+ Install
+ LADVD
+ 0.9.2-1
+ ladvd LLDP responder
+ Andreas Thienemann
+
+ http://blog.vodkamelone.de/
+
+ No
+
+ Admin
+ Thecus
+
+
+ Thecus
+ n5200
+ N5200
+ 2.00.00
+
+
+ Thecus
+ n7700
+ N7700
+ 2.00.00
+
+
+
Index: /module/Configure/license.txt
===================================================================
--- /module/Configure/license.txt (revision 1)
+++ /module/Configure/license.txt (revision 1)
@@ -0,0 +1,16 @@
+
+Copyright (c) 2008, 2009, 2010
+ Sten Spans
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
Index: /module/system/configtool
===================================================================
--- /module/system/configtool (revision 1)
+++ /module/system/configtool (revision 1)
@@ -0,0 +1,142 @@
+#!/bin/sh
+#########################################################################################
+##
+## configtool
+##
+## Commands:
+##
+## backup
+## restore
+## getconfig
+## putconfig
+##
+## 2007-01-16 Andreas Vogel (omega)
+##
+#########################################################################################
+
+PreBackup () {
+ if [ -x $modDir/system/configprepare ] ; then
+ $modDir/system/configprepare backup $modName
+ ret=$?
+ else
+ ret=0
+ fi
+
+ return $ret
+}
+
+PostRestore () {
+ if [ -x $modDir/system/configprepare ] ; then
+ $modDir/system/configprepare restore $modName
+ ret=$?
+ else
+ ret=0
+ fi
+
+ return $ret
+}
+
+#########################################################################################
+##
+## Main
+##
+#########################################################################################
+
+cmd=$1
+modName=$2
+filename=$3
+warn=${4:-warn}
+
+##
+## Use standard backup file if command is "backup" or "restore"
+##
+if [ "$cmd" == backup -o "$cmd" == restore ] ; then
+ filename="/raid/data/module/backup/$modName/backup-$modName.tar.gz"
+
+ if [ "$cmd" == backup ] ; then
+ cmd=getconfig
+ elif [ "$cmd" == restore ] ; then
+ cmd=putconfig
+ warn=nowarn
+ fi
+fi
+
+if [ -z "$filename" -o -z "$modName" ] ; then
+ echo "ERROR: illegal commandline: $0 $*"
+ exit 1
+fi
+
+MAGIC="CONFIG-$modName"
+modDir=/raid/data/module/$modName
+modVersion=$(awk '{print $2}' < "$modDir/VERSION")
+
+case "$cmd" in
+ getconfig|get)
+ dstFile=$filename
+
+ if ! PreBackup ; then
+ echo "ERROR: PreBackup script failed!"
+ exit 1
+ fi
+
+ echo "$MAGIC $modVersion $(date '+%Y-%m-%d_%H:%M:%S')" > "$modDir/system/etc/MAGIC"
+ tar czpf "$dstFile" -C "$modDir/system" etc
+ status=$?
+ rm "$modDir/system/etc/MAGIC"
+ exit $status
+ ;;
+
+ putconfig|put)
+ srcFile=$filename
+ tmpdir=/tmp/tmp.configtool
+
+ if [ ! -r "$srcFile" ] ; then
+ if [ "$warn" != nowarn ] ; then
+ echo "ERROR: source file '$sourceFile' not readable!"
+ exit 1
+ else
+ exit 0
+ fi
+ fi
+
+ rm -rf "$tmpdir"
+ mkdir -p "$tmpdir"
+ if ! tar xzf "$srcFile" -C "$tmpdir" ; then
+ echo "ERROR: cannot unpack tar file!"
+ rm -rf "$tmpdir"
+ exit 1
+ fi
+
+ cfgMagic=$(awk '{print $1;exit}' < "$tmpdir/etc/MAGIC")
+ cfgVersion=$(awk '{print $2;exit}' < "$tmpdir/etc/MAGIC")
+ cfgDate=$(awk '{print $3;exit}' < "$tmpdir/etc/MAGIC")
+
+ if [ "$cfgMagic" != "$MAGIC" ] ; then
+ echo "ERROR: wrong magic '$cfgMagic' - expected '$MAGIC'!"
+ rm -rf "$tmpdir"
+ exit 1
+ fi
+ rm "$tmpdir/etc/MAGIC"
+
+ if ! tar cpf - -C "$tmpdir" etc | (cd "$modDir/system" ; tar xpf -) ; then
+ echo "ERROR: cannot copy from '$tmpdir' to '$modDir/system'!"
+ rm -rf "$tmpdir"
+ exit 1
+ fi
+
+ rm -rf "$tmpdir"
+
+ if ! PostRestore ; then
+ echo "ERROR: PostRestore script failed!"
+ exit 1
+ fi
+ ;;
+
+ *)
+ echo "ERROR: invalid command '$cmd'!"
+ echo "Usage: $0 {backup|restore|getconfig|putconfig} "
+ exit 1
+ ;;
+esac
+
+exit 0
Index: /module/system/.htaccess
===================================================================
--- /module/system/.htaccess (revision 1)
+++ /module/system/.htaccess (revision 1)
@@ -0,0 +1,2 @@
+Order Deny,Allow
+Deny from all
Index: /module/Shell/enable.sh
===================================================================
--- /module/Shell/enable.sh (revision 1)
+++ /module/Shell/enable.sh (revision 1)
@@ -0,0 +1,65 @@
+#!/bin/sh
+###############################################################################
+##
+## Module enable/disable script
+##
+###############################################################################
+
+modName=$1
+modEnable=$2
+
+###############################################################################
+##
+## Include module library
+##
+###############################################################################
+modLibDir=/raid/data/module/$modName/Shell
+{ [ -r "$modLibDir/module.lib" ] && source "$modLibDir/module.lib"; } || { echo error; exit 1; }
+
+###############################################################################
+##
+## Enable
+##
+###############################################################################
+enable() {
+ $modRC start
+
+ return $?
+}
+
+###############################################################################
+##
+## Disable
+##
+###############################################################################
+disable() {
+ $modRC stop
+
+ return $?
+}
+
+###############################################################################
+##
+## Main
+##
+###############################################################################
+
+result=fail
+
+case "$modEnable" in
+ No|no)
+ enable && result=pass
+ ;;
+
+ Yes|yes)
+ disable && result=pass
+ ;;
+
+ *)
+ ;;
+esac
+
+echo $result
+
+exit 0
+
Index: /module/Shell/install.sh
===================================================================
--- /module/Shell/install.sh (revision 1)
+++ /module/Shell/install.sh (revision 1)
@@ -0,0 +1,39 @@
+#!/bin/sh
+###############################################################################
+##
+## Module install script
+##
+###############################################################################
+
+modName=LADVD
+
+###############################################################################
+##
+## Include module library
+##
+###############################################################################
+shellDir="/raid/data/module/$modName/Shell"
+[ ! -d "$shellDir" -o ! -r "$shellDir/module.lib" ] && shellDir=/raid/data/tmp/module/Shell
+{ [ -r "$shellDir/module.lib" ] && source "$shellDir/module.lib"; } || { echo fail; exit 1; }
+
+###############################################################################
+##
+## Start the module installation
+##
+###############################################################################
+ModuleInstallStart
+
+###############################################################################
+##
+## Module specific installation stuff
+##
+###############################################################################
+
+
+###############################################################################
+##
+## Finish module installation indicating success
+##
+###############################################################################
+ModuleInstallEnd 0
+
Index: /module/Shell/uninstall.sh
===================================================================
--- /module/Shell/uninstall.sh (revision 1)
+++ /module/Shell/uninstall.sh (revision 1)
@@ -0,0 +1,38 @@
+#!/bin/sh
+###############################################################################
+##
+## Module uninstall script
+##
+###############################################################################
+
+modName=LADVD
+
+###############################################################################
+##
+## Include module library
+##
+###############################################################################
+shellDir=/raid/data/module/$modName/Shell
+{ [ -r "$shellDir/module.lib" ] && source "$shellDir/module.lib"; } || { echo fail; exit 1; }
+
+###############################################################################
+##
+## Start module uninstall
+##
+###############################################################################
+ModuleUninstallStart
+
+###############################################################################
+##
+## Module specific uninstallation stuff
+##
+###############################################################################
+
+
+###############################################################################
+##
+## Finish module uninstall indicating success
+##
+###############################################################################
+ModuleUninstallEnd 0
+
Index: /module/Shell/module.rc
===================================================================
--- /module/Shell/module.rc (revision 1)
+++ /module/Shell/module.rc (revision 1)
@@ -0,0 +1,142 @@
+#!/bin/sh
+###############################################################################
+##
+## Startup script for Module
+##
+###############################################################################
+
+modName=LADVD
+
+cmd=$1
+
+###############################################################################
+##
+## Include module library
+##
+###############################################################################
+modLibDir=/raid/data/module/$modName/Shell
+{ [ -r "$modLibDir/module.lib" ] && source "$modLibDir/module.lib"; } || { echo error; exit 1; }
+
+###############################################################################
+##
+## Start
+##
+###############################################################################
+start () {
+
+ ProcsRunning "ladvd" && $0 stop
+
+ # Set interface to bind to
+ intf=$(echo $(grep '^[ ]*eth[0-9]*:' /proc/net/dev | cut -d : -f 1))
+ args="-r"
+ IF_MODE=$(/opt/bin/sqlite /app/cfg/conf.db "SELECT v FROM conf WHERE k = 'nic1_mode_8023ad';")
+ if [ "$IF_MODE" != "none" ]; then
+ # Bonding
+ mgmt_ip=$(ip address show dev bond0 | awk '/inet/ { split($2, ip, "/"); print ip[1] }')
+ $modDir/system/sbin/ladvd $args -m $mgmt_ip $intf
+ else
+ # Normal mode
+ $modDir/system/sbin/ladvd $intf
+ fi
+
+ if ! ProcsRunning "ladvd" &>/dev/null ; then
+ return 1
+ fi
+
+ return 0
+}
+
+###############################################################################
+##
+## Stop
+##
+###############################################################################
+stop () {
+
+ ProcKillall "ladvd" 15
+ return $?
+}
+
+###############################################################################
+##
+## Boot
+##
+###############################################################################
+boot () {
+ $0 start
+ return $?
+}
+
+###############################################################################
+##
+## Status
+##
+###############################################################################
+status () {
+
+ if nProcs=$(ProcsRunning "ladvd") ; then
+ echo "$modName running($nProcs)"
+ else
+ echo "$modName stopped!"
+ fi
+
+
+}
+
+###############################################################################
+##
+## Main
+##
+###############################################################################
+
+case "$cmd" in
+ start)
+ echo "Starting $modName..."
+ if start ; then
+ echo "Started $modName!"
+ else
+ echo "Failed to start $modName!"
+ exit 1
+ fi
+ ;;
+
+ stop)
+ echo "Stopping $modName..."
+ if stop ; then
+ echo "Stopped $modName!"
+ else
+ echo "Failed to stop $modName!"
+ exit 1
+ fi
+ ;;
+
+ boot)
+ echo "Booting $modName..."
+ if boot ; then
+ echo "Booted $modName!"
+ else
+ echo "Failed to boot $modName!"
+ exit 1
+ fi
+ ;;
+
+ status)
+ status
+ ;;
+
+ restart)
+ echo "Restarting $modName..."
+ if stop && start ; then
+ echo "Restarted $modName!"
+ else
+ echo "Failed to restart $modName!"
+ exit 1
+ fi
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart|boot|status}"
+ exit 1
+esac
+
+exit 0
Index: /module/Shell/module.lib
===================================================================
--- /module/Shell/module.lib (revision 1)
+++ /module/Shell/module.lib (revision 1)
@@ -0,0 +1,452 @@
+###############################################################################
+##
+## Module library
+##
+## 2007-01-16 Andreas Vogel (omega)
+##
+###############################################################################
+
+modInstDir=/raid/data/tmp/module # temporary module directory during install
+modBaseDir=/raid/data/module # root of the module tree
+modCfgDir=$modBaseDir/cfg # config directory for all modules
+modBinDir=$modBaseDir/bin # directory for all module executables
+modShlibDir=$modBaseDir/shlib # directory for all module shared libraries
+modBackupDir=$modBaseDir/backup/$modName # directory holding backup data for each module
+modDir=$modBaseDir/$modName # home directory for this module
+
+modRC=$modCfgDir/module.rc/$modName.rc # system start/stop script for this module
+modDB=$modCfgDir/module.db # system module database
+
+modLogDir=$modBaseDir/log # directory for log files
+modLog=$modLogDir/$modName.log # install/uninstall/update log file for module
+
+###############################################################################
+##
+## Include E-Mail library
+##
+###############################################################################
+shellDir="/raid/data/module/$modName/Shell"
+[ ! -d "$shellDir" -o ! -r "$shellDir/email.lib" ] && shellDir=/raid/data/tmp/module/Shell
+{ [ -r "$shellDir/email.lib" ] && source "$shellDir/email.lib"; } || { echo fail; exit 1; }
+
+###############################################################################
+##
+## Now
+##
+###############################################################################
+Now () {
+ echo $(date '+%Y-%m-%d %H:%M:%S')
+}
+
+###############################################################################
+##
+## ModVersion
+##
+###############################################################################
+ModVersion () {
+ local version=$(awk '{print $2}' < "$modDir/VERSION")
+
+ if [ -z $version ] ; then
+ version="0.00.00"
+ fi
+ echo $version
+}
+
+###############################################################################
+##
+## ModuleInit
+##
+###############################################################################
+ModuleInit () {
+ [ -d $modBaseDir -a ! -d $modLogDir ] && mkdir $modLogDir &>/dev/null
+ [ ! -d $modLogDir ] && modLog=/raid/data/$modName.log
+ > $modLog
+}
+
+###############################################################################
+##
+## ModuleStart
+##
+###############################################################################
+ModuleStart () {
+ mode=$1
+
+ ModuleInit
+
+ echo "START module $mode: $modName ($(Now))" >>$modLog
+ echo "------------------------------------------------------------------------------" >>$modLog
+}
+
+###############################################################################
+##
+## ModuleInstallStart
+##
+###############################################################################
+ModuleInstallStart () {
+ ModuleStart install
+
+ allDirs="$modCfgDir $modCfgDir/module.rc \
+ $modBaseDir/backup $modBackupDir \
+ $modShlibDir $modBinDir \
+ $modDir $modDir/Shell $modDir/system $modDir/system/etc $modDir/www"
+
+ for dir in $allDirs ; do
+ echo "Create standard directory: $dir" >>$modLog
+ [ ! -d $dir ] && mkdir $dir >>$modLog 2>&1
+ FileAttr root root 755 $dir >>$modLog 2>&1
+ done
+ ln -sf Shell $modDir/shell
+ echo >>$modLog
+
+ for dir in Shell system www ; do
+ echo "Copy standard directory: $modInstDir/$dir -> $modDir/$dir" >>$modLog
+ for file in $modInstDir/$dir/* ; do
+ [ -e "$file" ] && cp -r $file $modDir/$dir/ >>$modLog 2>&1
+ done
+ done
+ echo >>$modLog
+
+ echo "Copy license file: $modInstDir/Configure/license.txt -> $modDir/COPY" >>$modLog
+ rm -f $modDir/COPY >>$modLog 2>&1
+ cp $modInstDir/Configure/license.txt $modDir/COPY >>$modLog 2>&1
+ FileAttr root root 644 $modDir/COPY >>$modLog 2>&1
+
+ echo "Create module.rc link: $modRC -> $modDir/Shell/module.rc" >>$modLog
+ rm -f $modRC >>$modLog 2>&1
+ ln -s $modDir/Shell/module.rc $modRC >>$modLog 2>&1
+
+ modVersion="$(grep '.*' $modInstDir/Configure/install.rdf | tr '<' ' ' | tr '>' ' ' | awk '{print $2;exit}')"
+ echo "$modName $modVersion $(Now)" > $modDir/VERSION
+ FileAttr root root 644 $modDir/VERSION >>$modLog 2>&1
+
+ ##
+ ## TODO: Patch the apache config file in order to allow .htaccess files in the module directory
+ ##
+ apacheCfg=/etc/httpd/conf/httpd.conf
+ echo "Apache config: Saving apache config file $apacheCfg -> $apacheCfg.ORIG" >>$modLog
+ [ ! -e "$apacheCfg.ORIG" ] && cp -p "$apacheCfg" "$apacheCfg.ORIG" >>$modLog 2>&1
+
+ grepLine='LoadModule access_module modules/mod_access.so'
+ if grep "$grepLine" "$apacheCfg" &>/dev/null ; then
+ echo "Apache config: add module_access to apache config file: $apacheCfg" >>$modLog
+ echo "$grepLine" > $tmpfile
+ cat "$apacheCfg" >> $tmpfile
+ mv $tmpfile "$apacheCfg"
+ fi
+
+ grepLine='AllowOverride AuthConfig'
+ if grep "$grepLine" "$apacheCfg" &>/dev/null ; then
+ echo "Apache config: add 'AllowOverride Limit' apache config file: $apacheCfg" >>$modLog
+ sed -i -e "s/$grepLine/ AllowOverride Limit AuthConfig/g" "$apacheCfg" >>$modLog 2>&1
+ fi
+
+ ##
+ ## TODO: Augment PATH variable and add LD_LIBRARY_PATH variable to /etc/profile
+ ##
+ profile=/etc/profile
+ tmpfile=/tmp/profile.tmp
+
+ echo "Backup SHELL profile settings: $profile -> $profile.ORIG" >>$modLog
+ [ ! -e "$profile.ORIG" ] && cp -p "$profile" "$profile.ORIG" >>$modLog 2>&1
+
+ grepLine1='true && export PATH='
+ grepLine2='true && export LD_LIBRARY_PATH='
+
+ cat $profile | grep -v "$grepLine1" | grep -v "$grepLine2" > $tmpfile
+ echo 'true && export PATH="/raid/data/module/bin:$PATH"' >> $tmpfile
+ echo 'true && export LD_LIBRARY_PATH="/raid/data/module/lib:/opt/apache/lib:$LD_LIBRARY_PATH"' >> $tmpfile
+ mv $tmpfile $profile
+
+ ##
+ ## TODO: This patching code can be removed after Thecus fixed their software
+ ##
+ rclocal=/app/cfg/rc.local
+ if grep '/img/bin/rc/rc.module >/dev/null 2>&1 &' $rclocal &>/dev/null ; then
+ echo "Patch $rclocal..."
+ if [ ! -e $rclocal.ORIG ] ; then
+ echo "Backup rc.local: $rclocal -> $rclocal.ORIG" >>$modLog
+ cp $rclocal $rclocal.ORIG >>$modLog 2>&1
+ fi
+ sed -i -e 's#/img/bin/rc/rc.module >/dev/null 2>&1 /img/bin/rc/rc.module start >/dev/null 2>\&1 \' \
+ $rclocal >>$modLog 2>&1
+ fi
+
+ echo >>$modLog
+ echo "---- Start module specific log -----------------------------------------------" >>$modLog
+ echo >>$modLog
+}
+
+###############################################################################
+##
+## ModuleUpdateStart
+##
+###############################################################################
+ModuleUpdateStart () {
+ ModuleStart update
+
+ if [ -r "$modDir/VERSION" ] ; then
+ modVersion=$(awk '{print $2}' < "$modDir/VERSION")
+ else
+ modVersion="0.00.00"
+ fi
+
+ echo >>$modLog
+ echo "---- Start module specific log -----------------------------------------------" >>$modLog
+ echo >>$modLog
+}
+
+###############################################################################
+##
+## ModuleUninstallStart
+##
+###############################################################################
+ModuleUninstallStart () {
+ ModuleStart uninstall
+
+ echo "Stop module: $modRC stop" >>$modLog 2>&1
+ $modRC stop >>$modLog 2>&1
+
+ if [ -r "$modDir/VERSION" ] ; then
+ modVersion=$(awk '{print $2}' < "$modDir/VERSION")
+ else
+ modVersion="0.00.00"
+ fi
+
+ echo >>$modLog
+ echo "---- Start module specific log -----------------------------------------------" >>$modLog
+ echo >>$modLog
+}
+
+###############################################################################
+##
+## ModuleEnd
+##
+###############################################################################
+ModuleEnd () {
+ exitcode=$1 ; mode=$2
+
+ if [ "$exitcode" == "0" ] ; then
+ echo "FINISH module $mode: $modName ($(Now))" >>$modLog
+ exitMsg=pass
+ else
+ echo "ERROR($exitcode) module $mode: $modName ($(Now))" >>$modLog
+ exitMsg=fail
+ fi
+
+ ##
+ ## Append this log to the log file containing all logs.
+ ##
+ modLogAll=${modLog}-all
+ echo >>$modLogAll
+ echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >>$modLogAll
+ echo >>$modLogAll
+ cat $modLog >>$modLogAll
+
+ ##
+ ## Mail the result
+ ##
+ if [ -f $modLog -a -r $modLog ] ; then
+ case $mode in
+ install) modeNoun=Installation ; modeVerb=installed ;;
+ update) modeNoun=Update ; modeVerb=updated ;;
+ uninstall) modeNoun=Uninstallation ; modeVerb=uninstalled ;;
+ *) modeNoun=Unknown ; modeVerb=unknown ;;
+ esac
+ MailResult "$modName" "$modVersion" "$modLog" "$modeNoun" "$modeVerb"
+ fi
+
+ echo $exitMsg
+}
+
+###############################################################################
+##
+## ModuleInstallEnd
+##
+###############################################################################
+ModuleInstallEnd () {
+ exitcode=$1
+
+ echo >>$modLog
+ echo "---- End module specific log -------------------------------------------------" >>$modLog
+ echo >>$modLog
+
+ ##
+ ## Set file attributes for standard scripts
+ ##
+ for script in configtool ; do
+ echo "Setting file attribs for: $modDir/system/$script" >>$modLog
+ FileAttr root root 755 $modDir/system/$script >>$modLog 2>&1
+ done
+
+ ##
+ ## Restore saved config files if there are any
+ ##
+ echo "Restoring saved $modName configuration files (if any)" >>$modLog
+ $modDir/system/configtool restore $modName nowarn >>$modLog 2>&1
+
+ ModuleEnd $exitcode install
+}
+
+###############################################################################
+##
+## ModuleUpdateEnd
+##
+###############################################################################
+ModuleUpdateEnd () {
+ exitcode=$1
+
+ echo >>$modLog
+ echo "---- End module specific log -------------------------------------------------" >>$modLog
+ echo >>$modLog
+
+ ModuleEnd $exitcode update
+}
+
+###############################################################################
+##
+## ModuleUninstallEnd
+##
+###############################################################################
+ModuleUninstallEnd () {
+ exitcode=$1
+
+ echo >>$modLog
+ echo "---- End module specific log -------------------------------------------------" >>$modLog
+ echo >>$modLog
+
+ ##
+ ## Restore saved config files if there are any
+ ##
+ echo "Save $modName configuration files" >>$modLog
+ $modDir/system/configtool backup $modName >>$modLog 2>&1
+
+ ##
+ ## Delete module from config database
+ ##
+ echo "Delete module '$modName' from table 'module' in $modDB..." >>$modLog
+ /opt/bin/sqlite $modDB "delete from module where name = '$modName'" >>$modLog 2>&1
+
+ echo "Delete module '$modName' from table 'mod' in $modDB..." >>$modLog
+ /opt/bin/sqlite $modDB "delete from mod where module = '$modName'" >>$modLog 2>&1
+
+ echo "Remove start/stop script $modRC..." >>$modLog
+ rm -f $modRC >>$modLog 2>&1
+
+ echo "Remove module directory $modDir..." >>$modLog
+ rm -rf $modDir >>$modLog 2>&1
+
+ ModuleEnd $exitcode uninstall
+}
+
+###############################################################################
+##
+## ProcsRunning
+##
+###############################################################################
+ProcsRunning () {
+ searchPattern="$1"
+
+ procs=$(ps w | grep -v grep | grep -E "$searchPattern" 2>/dev/null | wc -l 2>/dev/null)
+ [ -z $procs ] && procs=0
+
+ echo $procs
+
+ return $(expr $procs == 0)
+}
+
+###############################################################################
+##
+## ProcKillall
+##
+###############################################################################
+ProcKillall () {
+ procPattern="$1" ; signal=${2:-9}
+
+ if [ -z "$procPattern" ] ; then
+ return 0
+ fi
+
+ loop=0
+ while true ; do
+ pidlist=$(ps -w | grep -v grep | grep -E "$procPattern" 2>/dev/null | awk '{print $1}')
+ for pid in $pidlist ; do
+ kill -$signal $pid &>/dev/null
+ done
+
+ if ! ProcsRunning "$procPattern" &>/dev/null || test $loop -gt 10 ; then
+ break
+ fi
+ sleep 1
+ let loop++
+ done
+
+ if ProcsRunning "$procPattern" &>/dev/null ; then
+ return 1
+ fi
+
+ return 0
+}
+
+###############################################################################
+##
+## MailResult
+##
+###############################################################################
+MailResult() {
+ modName=$1 ; modVers=$2 ; instLogFile=$3 ; modeNoun=${4:-Installation} ; modeVerb=${5:-installed}
+
+ tmpmsgfile=/tmp/tmp.TestMail.$$
+
+ cat > $tmpmsgfile <<-EOF
+ From: @mailEnvFrom@
+ To: @mailEnvTo@
+ Subject: $modeNoun finished for module $modName-$modVers
+
+ Hello @mailEnvTo@,
+
+ The module $modName-$modVers was $modeVerb on your Thecus N5200 device @hostname@.
+
+ Please check the log output below for errors ($instLogFile):
+ =======================================================================
+
+EOF
+
+ cat $instLogFile >> $tmpmsgfile
+
+ cat >> $tmpmsgfile <<-EOF
+
+ =======================================================================
+
+
+ -----------------------------------------------------------------------
+ This is a software generated mail message on @hostname@ at @now@.
+EOF
+
+ MailSend "" "" $tmpmsgfile
+ rm -f $tmpmsgfile
+}
+
+
+###############################################################################
+##
+## FileAttr
+##
+###############################################################################
+FileAttr () {
+ sOwner=$1 ; sGroup=$2 ; sMode=$3 ; shift ; shift ; shift
+
+ if [ $# -le 0 ] ; then
+ echo "FileAttr: WARNING: no files given"
+ return 1
+ fi
+
+ ret=0
+
+ for file in $* ; do
+ chown $sOwner.$sGroup "$file" || ret=1
+ chmod $sMode "$file" || ret=1
+ done
+
+ return $ret
+}
+
Index: /module/Shell/update.sh
===================================================================
--- /module/Shell/update.sh (revision 1)
+++ /module/Shell/update.sh (revision 1)
@@ -0,0 +1,41 @@
+#!/bin/sh
+###############################################################################
+##
+## Module update script
+##
+###############################################################################
+
+modName=$1
+modVersion=$2
+modEnable=$3
+modURL=$4
+
+###############################################################################
+##
+## Include module library
+##
+###############################################################################
+modLibDir=/raid/data/module/$modName/Shell
+{ [ -r "$modLibDir/module.lib" ] && source "$modLibDir/module.lib"; } || { echo error; exit 1; }
+
+###############################################################################
+##
+## Start the module update
+##
+###############################################################################
+ModuleUpdateStart
+
+###############################################################################
+##
+## Module specific update stuff
+##
+###############################################################################
+
+
+###############################################################################
+##
+## Finish module update indicating error
+##
+###############################################################################
+ModuleUpdateEnd 1
+
Index: /module/Shell/email.lib
===================================================================
--- /module/Shell/email.lib (revision 1)
+++ /module/Shell/email.lib (revision 1)
@@ -0,0 +1,195 @@
+#!/bin/sh
+###############################################################################
+##
+## This is a more general script library for sending
+## E-Mail on the Thecus N5200.
+##
+## The main function is MailSend().
+##
+## 2007-01-16 Andreas Vogel (omega)
+##
+## Changes:
+## 09.01.2007 0.1 initial version
+## 31.05.2007 0.2 change mail from for FW >= 1.00.10 (by Peter Futterknecht (peterfu))
+##
+###############################################################################
+
+msmtp=/opt/bin/msmtp
+sqlite=/opt/bin/sqlite
+confdb=/app/cfg/conf.db
+
+MailGetRecipients() {
+ if [ -z "$mailRecipients" ] ; then
+ sqlcmd="select v from conf where k like 'notif_addr%'"
+ mailRecipients=$($sqlite $confdb "$sqlcmd" | tr "\n" " ")
+ fi
+ echo $mailRecipients
+}
+
+MailGetAuthName() {
+ if [ -z "$mailAuthName" ] ; then
+ sqlcmd="select v from conf where k='notif_account'"
+ mailAuthName=$($sqlite $confdb "$sqlcmd")
+ fi
+ echo $mailAuthName
+}
+
+MailGetAuthPasswd() {
+ if [ -z "$mailAuthPasswd" ] ; then
+ sqlcmd="select v from conf where k='notif_password'"
+ mailAuthPasswd=$($sqlite $confdb "$sqlcmd")
+ fi
+ echo $mailAuthPasswd
+}
+
+MailGetAuthMethod() {
+ if [ -z "$mailAuthMethod" ] ; then
+ sqlcmd="select v from conf where k='notif_auth'"
+ mailAuthMethod=$($sqlite $confdb "$sqlcmd")
+ fi
+ echo $mailAuthMethod
+}
+
+MailGetServer() {
+ if [ -z "$mailServer" ] ; then
+ sqlcmd="select v from conf where k='notif_smtp'"
+ mailServer=$($sqlite $confdb "$sqlcmd")
+ fi
+ echo $mailServer
+}
+
+MailGetPort() {
+ if [ -z "$mailPort" ] ; then
+ sqlcmd="select v from conf where k='notif_smtport'"
+ mailPort=$($sqlite $confdb "$sqlcmd")
+ fi
+ echo $mailPort
+}
+
+MailGetNotify() {
+ if [ -z "$mailNotify" ] ; then
+ if [ -n "$1" ];then
+ field="notif_$1"
+ sqlcmd="select v from conf where k='$field'"
+ mailNotify=$($sqlite $confdb "$sqlcmd")
+ fi
+ fi
+ echo $mailNotify
+}
+
+MailGetFrom () {
+ if [ -z "$mailFrom" ] ; then
+ sqlcmd="select v from conf where k='notif_from'"
+ mailFrom=$($sqlite $confdb "$sqlcmd")
+ fi
+ if [ -z "$mailFrom" ] ; then
+ mailFrom="thecus@$(hostname)"
+ fi
+ echo $mailFrom
+}
+
+###############################################################################
+##
+##
+##
+###############################################################################
+MailSend () {
+ mailEnvFrom=$1
+ mailEnvToList=$2
+ msgOrFile=$3
+
+ if [ -z "$mailEnvFrom" ] ; then
+ mailEnvFrom=$(MailGetFrom)
+ fi
+ if [ -z "$mailEnvToList" ] ; then
+ mailEnvToList=$(MailGetRecipients)
+ fi
+ if [ -z "$(MailGetAuthName)" -o -z "$(MailGetAuthPasswd)" ] ; then
+ auth=$(MailGetAuthMethod)
+ else
+ auth=off
+ fi
+
+ wanAddr=$(/sbin/ifconfig eth0 | grep 'inet addr:' | tr ':' ' ' | awk '{print $3;exit}')
+ lanAddr=$(/sbin/ifconfig eth1 | grep 'inet addr:' | tr ':' ' ' | awk '{print $3;exit}')
+ now=$(date '+%Y-%m-%d %H:%M:%S')
+
+ tmpInFile=/tmp/tmp.MailSend.in.$$
+ tmpOutFile=/tmp/tmp.MailSend.out.$$
+
+ if [ -f "$msgOrFile" ] ; then
+ cp "$msgOrFile" $tmpInFile
+ else
+ echo "$msgOrFile" > $tmpInFile
+ fi
+
+ for mailEnvTo in $mailEnvToList ; do
+ sed \
+ -e "s/@mailEnvFrom@/$mailEnvFrom/g" \
+ -e "s/@mailEnvTo@/$mailEnvTo/g" \
+ -e "s/@mailRecipients@/$(MailGetRecipients)/g" \
+ -e "s/@mailAuthName@/$(MailGetAuthName)/g" \
+ -e "s/@mailAuthPasswd@/$(MailGetAuthPasswd)/g" \
+ -e "s/@mailAuthMethod@/$(MailGetAuthMethod)/g" \
+ -e "s/@mailServer@/$(MailGetServer)/g" \
+ -e "s/@mailPort@/$(MailGetPort)/g" \
+ -e "s/@mailNotify@/$(MailGetNotify)/g" \
+ -e "s/@wanAddr@/$wanAddr/g" \
+ -e "s/@lanAddr@/$lanAddr/g" \
+ -e "s/@hostname@/$(hostname)/g" \
+ -e "s/@now@/$now/g" \
+ < $tmpInFile > $tmpOutFile
+
+ $msmtp --host="$(MailGetServer)" --port="$(MailGetPort)" \
+ --auth="$auth" --user="$(MailGetAuthName)" --password="$(MailGetAuthPasswd)" \
+ --from="$mailEnvFrom" \
+ $mailEnvTo \
+ < $tmpOutFile
+ done
+
+ rm -f $tmpOutFile
+ rm -f $tmpInFile
+}
+
+
+###############################################################################
+##
+##
+##
+###############################################################################
+TestMail() {
+ tmpmsgfile=/tmp/tmp.TestMail.$$
+
+ cat > $tmpmsgfile <<-EOF
+ From: @mailEnvFrom@
+ To: @mailEnvTo@
+ Subject: Test E-Mail from Thecus N5200 (@hostname@)
+
+ Hello @mailEnvTo@
+
+ This is a test message.
+
+ mailEnvFrom: '@mailEnvFrom@'
+ mailEnvTo: '@mailEnvTo@'
+
+ mailRecipients: '@mailRecipients@'
+ mailAuthName: '@mailAuthName@'
+ mailAuthPasswd: '@mailAuthPasswd@'
+ mailAuthMethod: '@mailAuthMethod@'
+ mailServer: '@mailServer@'
+ mailPort: '@mailPort@'
+ mailNotify: '@mailNotify@'
+
+ wanAddr: '@wanAddr@'
+ lanAddr: '@lanAddr@'
+
+ hostname: '@hostname@'
+ now: '@now@'
+
+ =======================================================
+ This is a TEST mail message generated at @now@ on @hostname@.
+EOF
+
+ MailSend "" "" $tmpmsgfile
+ rm -f $tmpmsgfile
+}
Index: /module/.htaccess
===================================================================
--- /module/.htaccess (revision 1)
+++ /module/.htaccess (revision 1)
@@ -0,0 +1,3 @@
+Order Deny,Allow
+Deny from all
+
Index: /module/Thecus
===================================================================
--- /module/Thecus (revision 1)
+++ /module/Thecus (revision 1)
@@ -0,0 +1,2 @@
+
+¢£€[Û=û7wš
Index: /ladvd-mock-build.sh
===================================================================
--- /ladvd-mock-build.sh (revision 1)
+++ /ladvd-mock-build.sh (revision 1)
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+set -e -x
+
+mock_args="-r epel-4-i386 --uniqueext=ladvd_build"
+
+# Initialize the chroot
+mock ${mock_args} --init
+
+# Install some more dependencies
+mock ${mock_args} --install libevent-devel
+
+# Find out the homedir of the mockbuild user
+mock_home=$(mock ${mock_args} -q --shell "runuser - mockbuild -c pwd")
+build_dir="${mock_home}/ladvd"
+
+# Copy the sources into the mediatomb build dir
+mock ${mock_args} --copyin \
+ . \
+ ${build_dir}
+
+# Change ownership information
+mock ${mock_args} --chroot "chown -R mockbuild.mockbuild ${build_dir}"
+
+# Build the stuff
+mock ${mock_args} --chroot "runuser - mockbuild -c 'cd ${build_dir}; ./build.sh'"
+
+# Build the release itself
+mock ${mock_args} --chroot "runuser - mockbuild -c 'cd ${build_dir}; ./release.sh'"
+
+# Find the finished builds
+files=$(mock ${mock_args} -q --shell "runuser - mockbuild -c \"cd ${build_dir}; ls *.mod *-src.tar.gz\"")
+
+# Retrieve module and sources
+for file in $files; do
+mock ${mock_args} --copyout \
+ ${build_dir}/${file} \
+ .
+done
+
+exit 1
+
+# Clean out
+mock ${mock_args} --clean
Index: /build.sh
===================================================================
--- /build.sh (revision 1)
+++ /build.sh (revision 1)
@@ -0,0 +1,37 @@
+#!/bin/sh -e
+
+set -e
+
+D=${PWD}
+D_PREFIX="/raid0/data/module/LADVD/system"
+
+rm -rf tmp
+
+mkdir tmp
+mkdir tmp/build
+mkdir tmp/install
+mkdir tmp/install/sbin
+mkdir tmp/install/var
+mkdir tmp/install/var/run
+mkdir tmp/install/var/run/ladvd
+pushd tmp/build
+
+export CFLAGS="-O2 -g -march=i686 -mcpu=i686"
+
+# ladvd
+tar xvfz ${D}/sources/ladvd-0.9.2.tar.gz
+pushd ladvd-0.9.2
+./configure --prefix=${D_PREFIX}
+sed -i '
+ s/#define HAVE_DECL_GET_VLAN_REALDEV_NAME_CMD 0/#undef HAVE_DECL_GET_VLAN_REALDEV_NAME_CMD/;
+ s/#define HAVE_LINUX_ETHTOOL_H 1/#undef HAVE_LINUX_ETHTOOL_H/;
+ s/#define PACKAGE_USER "ladvd"/#define PACKAGE_USER "root"/;
+ s@#define PACKAGE_CHROOT_DIR "/var/run/" PACKAGE_NAME@#define PACKAGE_CHROOT_DIR "'${D_PREFIX}'/var/run/" PACKAGE_NAME@;
+ s@#define PACKAGE_PID_DIR "/var/run"@#define PACKAGE_PID_DIR "'${D_PREFIX}'/var/run"@' \
+ src/config.h
+sed -i '872d' \
+ src/netif.c
+make
+install -D -p -m 755 src/ladvd ${D}/tmp/install/sbin/ladvd
+ln -sf ${D}/tmp/install/sbin/ladvdc ladvd
+popd
Index: /release.sh
===================================================================
--- /release.sh (revision 1)
+++ /release.sh (revision 1)
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+set -ex
+
+D=${PWD}
+
+NAME=LADVD
+
+rm -rf tmp/${NAME}
+mkdir tmp/${NAME}
+
+cp -a ${D}/module/* ${D}/tmp/${NAME}/
+cp -a ${D}/tmp/install/* ${D}/tmp/${NAME}/system/
+
+
+# Binary file
+pushd ${D}/tmp/
+VERSION=$(cat ${D}/module/Configure/install.rdf | grep md:Version | cut -d '>' -f 2 | cut -d '<' -f 1)
+tar cfvz ${D}/N5200_${NAME}-${VERSION}.mod --owner 0 --group 0 ${NAME}/
+popd
+
+# Source file
+mkdir N5200_${NAME}-${VERSION}-src
+cp -a build.sh release.sh ladvd-mock-build.sh module sources N5200_${NAME}-${VERSION}-src
+tar cfvz ${D}/N5200_${NAME}-${VERSION}-src.tar.gz --owner 0 --group 0 N5200_${NAME}-${VERSION}-src
+rm -rf N5200_${NAME}-${VERSION}-src