Inhaltsverzeichnis
openQRM - Tabellen für weitere IP-Gruppen
Wenn diese Dateien ins System übernommen wurden, dann müssen die erforderlichen Anpassungen in der DNS-Konfiguration: openQRM - DNS noch vorgenommen werden, damit die DNS-Einträge für die zusätzlichen IP's auch automatisch beim anlegen der Appliance vorgenommen werden.
Die Dateien
einpacken
# tar cvf /var/lib/dokuwiki/data/media/openqrm_zimmer.tar /opt/bin/netzcfg.sh /opt/etc/zimmer_ip.cfg /usr/lib/cgi-bin/zimmer_ip-machen.cgi /usr/lib/cgi-bin/zimmer_netzcfg.cgi /var/www/zimmer_ipgroup_loeschen.php /var/www/zimmer_ipgroup-machen.php /usr/lib/cgi-bin/zimmer_iptable-aendern.cgi /opt/bin/ziptables_zeigen.sh /opt/bin/in_zipgroups_eintragen.sh /opt/bin/aus_zipgroups_austragen.sh /opt/bin/zipgroups_managen.sh /opt/bin/zipgroups_zeigen_html.sh /usr/share/openqrm/web/base/server/appliance/appliance-index.php /usr/share/openqrm/web/base/server/appliance/appliance-new.php /var/www/zimmer_ipgroup-machen.php
Liste der verpackten Dateien
-rwxr-xr-x 1 root root 297 2010-08-06 14:19 /opt/bin/aus_zipgroups_austragen.sh -rwxr-xr-x 1 root root 1512 2010-08-06 14:20 /opt/bin/in_zipgroups_eintragen.sh -rwxr-xr-x 1 root root 2945 2010-10-15 18:40 /opt/bin/netzcfg.sh -rwxr-xr-x 1 root root 2377 2010-08-06 17:53 /opt/bin/zipgroups_managen.sh -rwxr-xr-x 1 root root 2127 2010-08-05 12:53 /opt/bin/zipgroups_zeigen_html.sh -rwxr-xr-x 1 root root 312 2010-08-06 13:41 /opt/bin/ziptables_zeigen.sh -rw-r--r-- 1 root root 1046 2010-08-03 14:51 /opt/etc/zimmer_ip.cfg -rwxr-xr-x 1 root root 15724 2010-10-19 11:42 /usr/lib/cgi-bin/zimmer_ip-machen.cgi -rwxr-xr-x 1 root root 9076 2010-08-05 14:56 /usr/lib/cgi-bin/zimmer_iptable-aendern.cgi -rwxr-xr-x 1 root root 623 2010-10-15 18:31 /usr/lib/cgi-bin/zimmer_netzcfg.cgi -rw-r--r-- 1 root root 12562 2010-08-06 13:36 /usr/share/openqrm/web/base/server/appliance/appliance-index.php -rw-r--r-- 1 root root 15234 2010-08-06 10:35 /usr/share/openqrm/web/base/server/appliance/appliance-new.php -rw-r--r-- 1 root root 916 2010-10-15 17:03 /var/www/zimmer_ipgroup_loeschen.php -rw-r--r-- 1 root root 3627 2010-10-15 16:25 /var/www/zimmer_ipgroup-machen.php
Dateien installieren
Die Datenbank-Tabellen werden automatisch angelegt, hier ist also keine Handarbeit nötig.
auspacken
# tar xvf /var/lib/dokuwiki/data/media/openqrm_zimmer.tar -C / # cp /opt/bin/netzcfg.sh /usr/share/openqrm/web/boot-service/netzcfg.sh
damit die IP-Vergabe geloggt werden kann
# touch /var/log/zipgroups_managen.log # chown www-data:www-data /var/log/zipgroups_managen.log
/opt/etc/openqrm_sudo
www-data ALL=(ALL) NOPASSWD: /etc/init.d/nagios3 www-data ALL=(ALL) NOPASSWD: /etc/init.d/bind9 www-data ALL=(ALL) NOPASSWD: /opt/bin/in_zipgroups_eintragen.sh www-data ALL=(ALL) NOPASSWD: /opt/bin/aus_zipgroups_austragen.sh
Wichtig ist hierbei, dass sudo in diesem Verzeichnis keine symbolischen Link's akzeptiert!
# cp /opt/etc/openqrm_sudo /etc/sudoers.d/ # chmod 0440 /etc/sudoers.d/openqrm_sudo
Sollte dort ein symbolischen Link liegen, dann bekommt man solchen Output:
sudo: /etc/sudoers.d/openqrm_sudo is not a regular file >>> /etc/sudoers.d/README: /etc/sudoers.d/openqrm_sudo near line 18 <<< sudo: parse error in /etc/sudoers.d/README near line 18 sudo: no valid sudoers sources found, quitting *** glibc detected *** sudo: double free or corruption (!prev): 0x0000000001328910 *** ======= Backtrace: ========= /lib/libc.so.6(+0x775b6)[0x7f523eab85b6] /lib/libc.so.6(cfree+0x73)[0x7f523eabee83] /lib/libc.so.6(fclose+0x14d)[0x7f523eaa8abd] sudo[0x41112b] sudo[0x4120c6] sudo[0x40fd24] sudo[0x4139ce] /lib/libc.so.6(__libc_start_main+0xfd)[0x7f523ea5fc4d] sudo[0x403739] ======= Memory map: ======== 00400000-00422000 r-xp 00000000 08:01 8438 /usr/bin/sudo 00621000-00622000 r--p 00021000 08:01 8438 /usr/bin/sudo 00622000-00624000 rw-p 00022000 08:01 8438 /usr/bin/sudo 00624000-00627000 rw-p 00000000 00:00 0 01324000-01345000 rw-p 00000000 00:00 0 [heap] 7f5238000000-7f5238021000 rw-p 00000000 00:00 0 7f5238021000-7f523c000000 ---p 00000000 00:00 0 7f523ddb6000-7f523ddcc000 r-xp 00000000 08:01 94384 /lib/libgcc_s.so.1 7f523ddcc000-7f523dfcb000 ---p 00016000 08:01 94384 /lib/libgcc_s.so.1 7f523dfcb000-7f523dfcc000 r--p 00015000 08:01 94384 /lib/libgcc_s.so.1 7f523dfcc000-7f523dfcd000 rw-p 00016000 08:01 94384 /lib/libgcc_s.so.1 7f523dfcd000-7f523dfd9000 r-xp 00000000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523dfd9000-7f523e1d8000 ---p 0000c000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523e1d8000-7f523e1d9000 r--p 0000b000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523e1d9000-7f523e1da000 rw-p 0000c000 08:01 8798 /lib/libnss_files-2.11.1.so 7f523e1da000-7f523e1e4000 r-xp 00000000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e1e4000-7f523e3e3000 ---p 0000a000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e3e3000-7f523e3e4000 r--p 00009000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e3e4000-7f523e3e5000 rw-p 0000a000 08:01 8788 /lib/libnss_nis-2.11.1.so 7f523e3e5000-7f523e3fc000 r-xp 00000000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e3fc000-7f523e5fb000 ---p 00017000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e5fb000-7f523e5fc000 r--p 00016000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e5fc000-7f523e5fd000 rw-p 00017000 08:01 8215 /lib/libnsl-2.11.1.so 7f523e5fd000-7f523e5ff000 rw-p 00000000 00:00 0 7f523e5ff000-7f523e607000 r-xp 00000000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e607000-7f523e806000 ---p 00008000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e806000-7f523e807000 r--p 00007000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e807000-7f523e808000 rw-p 00008000 08:01 8787 /lib/libnss_compat-2.11.1.so 7f523e808000-7f523e811000 r-xp 00000000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523e811000-7f523ea11000 ---p 00009000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523ea11000-7f523ea12000 r--p 00009000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523ea12000-7f523ea13000 rw-p 0000a000 08:01 8217 /lib/libcrypt-2.11.1.so 7f523ea13000-7f523ea41000 rw-p 00000000 00:00 0 7f523ea41000-7f523ebbb000 r-xp 00000000 08:01 8795 /lib/libc-2.11.1.so 7f523ebbb000-7f523edba000 ---p 0017a000 08:01 8795 /lib/libc-2.11.1.so 7f523edba000-7f523edbe000 r--p 00179000 08:01 8795 /lib/libc-2.11.1.so 7f523edbe000-7f523edbf000 rw-p 0017d000 08:01 8795 /lib/libc-2.11.1.so 7f523edbf000-7f523edc4000 rw-p 00000000 00:00 0 7f523edc4000-7f523edc6000 r-xp 00000000 08:01 8799 /lib/libdl-2.11.1.so 7f523edc6000-7f523efc6000 ---p 00002000 08:01 8799 /lib/libdl-2.11.1.so 7f523efc6000-7f523efc7000 r--p 00002000 08:01 8799 /lib/libdl-2.11.1.so 7f523efc7000-7f523efc8000 rw-p 00003000 08:01 8799 /lib/libdl-2.11.1.so 7f523efc8000-7f523efd4000 r-xp 00000000 08:01 241987 /lib/libpam.so.0.82.2 7f523efd4000-7f523f1d3000 ---p 0000c000 08:01 241987 /lib/libpam.so.0.82.2 7f523f1d3000-7f523f1d4000 r--p 0000b000 08:01 241987 /lib/libpam.so.0.82.2 7f523f1d4000-7f523f1d5000 rw-p 0000c000 08:01 241987 /lib/libpam.so.0.82.2 7f523f1d5000-7f523f1f5000 r-xp 00000000 08:01 8216 /lib/ld-2.11.1.so 7f523f3e6000-7f523f3ea000 rw-p 00000000 00:00 0 7f523f3f2000-7f523f3f4000 rw-p 00000000 00:00 0 7f523f3f4000-7f523f3f5000 r--p 0001f000 08:01 8216 /lib/ld-2.11.1.so 7f523f3f5000-7f523f3f6000 rw-p 00020000 08:01 8216 /lib/ld-2.11.1.so 7f523f3f6000-7f523f3f7000 rw-p 00000000 00:00 0 7fffe4b96000-7fffe4bab000 rw-p 00000000 00:00 0 [stack] 7fffe4bff000-7fffe4c00000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted
/opt/etc/zimmer_ip.cfg
Hier werden die Tabellennamen für die Gruppentabelle und für die IP-Tabelle sowie die Sortierreihenfolge der Anzeigen festgelegt.
. /usr/share/openqrm/etc/openqrm-server.conf
ZIPGROUPS="zimmer_ipgroups"
ZIPTABLES="zimmer_iptables"
ZIPGORDER="ig_id"
#ZIPGORDER="ig_name"
ZIPTORDER="INET_ATON(ip_address)"
DATABASENET='10.4.'
EXTERNNET='10.7.'
### Tabellen anlegen, wenn nicht schon vorhanden!
echo "
CREATE DATABASE IF NOT EXISTS ${OPENQRM_DATABASE_NAME};
USE ${OPENQRM_DATABASE_NAME};
CREATE TABLE IF NOT EXISTS ${ZIPGROUPS} (
ig_id int(5) NOT NULL,
ig_name varchar(50) NOT NULL,
ig_domain varchar(50) default NULL,
PRIMARY KEY (ig_id),
KEY (ig_name)
) TYPE=MyISAM;
CREATE TABLE IF NOT EXISTS ${ZIPTABLES} (
ip_ig_id int(5) NOT NULL,
ip_eth varchar(8) default 'eth1',
ip_hostname varchar(50),
ip_domain varchar(50) NOT NULL,
ip_address varchar(15) NOT NULL,
ip_subnet varchar(15),
ip_gateway varchar(15),
ip_dns1 varchar(15),
ip_dns2 varchar(15),
PRIMARY KEY (ip_address)
) TYPE=MyISAM;
" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
/opt/bin/netzcfg.sh
Dieses Script wird vom Clienten ausgeführt, um die zusätzliche Netzwerkkonfiguration durchzuführen.
#!/bin/bash
aptitude -y install links ethtool
LINKS="$(which links)"
if [ -n "${LINKS}" ] ; then
. /var/openqrm/openqrm-resource.conf
IFS="|"
${LINKS} -dump http://${resource_openqrmserver}/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=$(hostname) | egrep -v '[\+\|]---------' | while read ANFANG ip_eth ip_hostname ip_domain ip_address ip_subnet ip_gateway ip_dns1 ip_dns2 ENDE
do
ip_eth="$(echo "${ip_eth}" | awk '{print $1}')"
ip_hostname="$(echo "${ip_hostname}" | awk '{print $1}')"
ip_domain="$(echo "${ip_domain}" | awk '{print $1}')"
ip_address="$(echo "${ip_address}" | awk '{print $1}')"
ip_subnet="$(echo "${ip_subnet}" | sed 's/%22//g' | awk '{print $1}')"
ip_gateway="$(echo "${ip_gateway}" | sed 's/%22//g' | awk '{print $1}')"
ip_dns1="$(echo "${ip_dns1}" | sed 's/%22//g' | awk '{print $1}')"
ip_dns2="$(echo "${ip_dns2}" | sed 's/%22//g' | awk '{print $1}')"
if [ -z "${1}" ] ; then
if [ -n "${ip_address}" -a -n "${ip_eth}" -a "${ip_address}" != "NULL" -a "${ip_eth}" != "NULL" ] ; then
echo "ip addr add ${ip_address}/${ip_subnet} dev ${ip_eth}"
ip addr add ${ip_address}/${ip_subnet} dev ${ip_eth}
echo "ip link set ${ip_eth} up"
ip link set ${ip_eth} up
fi
if [ -n "${ip_gateway}" -a -n "${ip_eth}" -a "${ip_gateway}" != "NULL" -a "${ip_eth}" != "NULL" ] ; then
if $(ip route | egrep ^default > /dev/null) ; then
echo "ip route add ${ip_gateway} dev ${ip_eth}"
ip route add ${ip_gateway} dev ${ip_eth}
else
echo "ip route add default via ${ip_gateway} dev ${ip_eth}"
ip route add default via ${ip_gateway} dev ${ip_eth}
fi
fi
if [ -n "${ip_domain}" -o -n "${ip_dns1}" -o -n "${ip_dns2}" -a "${ip_domain}" != "NULL" -a "${ip_dns1}" != "NULL" -a "${ip_dns2}" != "NULL" ] ; then
echo "search idstein.alphatel.de victorvox.net med.alphatel.de alphatel.de database extern" \
# | tee /etc/resolv.conf
fi
if [ -n "${ip_domain}" -a "${ip_domain}" != "NULL" ] ; then
echo "domain ${ip_domain}" \
# | tee -a /etc/resolv.conf
fi
if [ -n "${ip_dns1}" -a "${ip_dns1}" != "NULL" ] ; then
echo "nameserver ${ip_dns1}" \
# | tee -a /etc/resolv.conf
fi
if [ -n "${ip_dns2}" -a "${ip_dns2}" != "NULL" ] ; then
echo "nameserver ${ip_dns2}" \
# | tee -a /etc/resolv.conf
fi
else
echo "
ANFANG='${ANFANG}'
ip_eth='${ip_eth}'
ip_hostname='${ip_hostname}'
ip_domain='${ip_domain}'
ip_address='${ip_address}'
ip_subnet='${ip_subnet}'
ip_gateway='${ip_gateway}'
ip_dns1='${ip_dns1}'
ip_dns2='${ip_dns2}'
ENDE='${ENDE}'
"
fi
done
else
echo "links konnte nicht installiert werden"
fi
/usr/lib/cgi-bin/zimmer_netzcfg.cgi
#!/bin/sh
. /opt/etc/zimmer_ip.cfg
### GET
AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')"
WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}' | awk -F'&' '{print $1}')"
if [ "${AKTION}" = "ip_hostname" ] ; then
echo 'Content-type: text/html
'
echo "
SELECT ip_eth,ip_hostname,ip_domain,ip_address,ip_subnet,ip_gateway,ip_dns1,ip_dns2
FROM ${ZIPTABLES}
WHERE ip_hostname='${WERT}'
ORDER BY ip_eth DESC
;
" | mysql -H -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
fi
chmod 0755 /usr/lib/cgi-bin/zimmer_netzcfg.cgi
/usr/share/openqrm/web/base/top.php
Hier ist die Zeile mit /cgi-bin/zimmer_ip-machen.cgi eingefühgt worden:
....
<div class="top">
<a id="Event_box" href="server/event/event-overview.php?currenttab=tab1" target="MainFrame">Error(s) <span id="events_critical"></span></a>
<a id="Support_box" href="http://www.openqrm-enterprise.com" target="_BLANK">Support</a>
<a id="Docu_box" href="server/zz_documentation/introduction.php" target="MainFrame">Documentation</a>
<a id="Docu_box" href="/cgi-bin/remconstab_aendern.cgi" target="MainFrame">Remote-Consolen-IP's</a>
<a id="Docu_box" href="/store.php" target="MainFrame">QRM-Info</a>
<a id="Docu_box" href="/cgi-bin/zimmer_ip-machen.cgi" target="MainFrame">Zimmer-IP-Gruppen</a>
<a id="Docu_box" href="http://10.10.2.222/wiki/doku.php" target="MainFrame">Wiki</a>
<a id="Login_box" href="server/user/user.php" target="MainFrame"><?php echo OPENQRM_USER_NAME; ?></a>
<div id="Watch">
<span id="timecontainer"></span>
<script type="text/javascript">
new showLocalTime("timecontainer", "server-php", 0, "xx")
</script>
</div>
<div class="floatbreaker"> </div>
</div>
....
/usr/lib/cgi-bin/zimmer_ip-machen.cgi
Dieses Script ist das Herzstück, hier werden alle wichtigen Aktionen mit realisiert.
#!/bin/sh
DATENDATEI="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)"
### POST-Daten werden in eine Datei geschrieben
echo "$(dd bs=1 count=${CONTENT_LENGTH} 2> /dev/null | tr -s '&' '\n')" | tr -d '"' > ${DATENDATEI} 2>&1
. ${DATENDATEI}
. /opt/etc/zimmer_ip.cfg
### GET
AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')"
WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}')"
### Achtung!
# "action" englisch und klein geschrieben, ist die Variable aus dem POST-Datenstrom;
# "AKTION" deutsch und groß geschrieben, ist aus der GET-Zeile
if [ -n "${1}" -a -z "${AKTION}" ] ; then
AKTION="$(echo "${1}" | awk -F'=' '{print $1}')"
WERT="$(echo "${1}" | awk -F'=' '{print $2}')"
fi
### mit dem richtigen "action"-Eintrag wird eine neue Gruppe erstelt
if [ "${action}" = "angelegt" ] ; then
#------------------------------------------------------------------------------#
### den neuen Wert für ig_id bestimmen
ZAHLEN1="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)"
ZAHLEN2="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)"
igidmax="$(echo "SELECT ig_id FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} DESC LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
echo "$(seq 1 ${igidmax})" > ${ZAHLEN1}
echo "
SELECT ig_id FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} ASC;
"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | egrep -v '^$' > ${ZAHLEN2}
ig_id="$(sdiff ${ZAHLEN1} ${ZAHLEN2} | fgrep '<' | awk '{print $1}' | head -n1)"
if [ -z "${ig_id}" -o "${ig_id}" = "0" ] ; then
ig_id="$((${igidmax}+1))"
fi
rm -f ${ZAHLEN1} ${ZAHLEN2}
### der "action"-Eintrag wird entfernt
sed -i -e 's/action=angelegt//' -e 's/ip_adressen=.*//' -e 's/ig_name=.*//' ${DATENDATEI}
### die neue Gruppe wird erstelt
(echo "INSERT INTO ${ZIPGROUPS} (ig_id,ig_name,ig_domain) VALUES ('${ig_id}','${ig_name}','${ip_domain}');" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
### IPs in die Tabelle eintragen
echo "${ip_adressen}" | sed -e 's#%0D%0A#\n#g' | egrep -v '^$' | while read ADRESSE
do
echo "INSERT INTO ${ZIPTABLES} (ip_ig_id,ip_address,$(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $1}'|tr -s '\n' ','|sed 's/,$//')) VALUES ('${ig_id}','${ADRESSE}',$(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $2}'|sed "s/.*/'&'/"|tr -s '\n' ','|sed "s/',$/'/"));"
done) | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
### und noch ein schöner Gruß
/usr/lib/cgi-bin/zimmer_ip-machen.cgi
elif [ "${action}" = "aendern" ] ; then
sed -i -e 's/action=aendern//' ${DATENDATEI}
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Eintrag</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
'
IGID="$(echo "SELECT ip_ig_id FROM ${ZIPTABLES} WHERE ip_address='${ip_address}' LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
echo "
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?aendern=${IGID}">alle Zimmer IP's der Gruppe '${IGID}' anzeigen</a></b>
"
echo "UPDATE ${ZIPTABLES} SET $(cat ${DATENDATEI} | fgrep -v ip_address | sed -e "s#=#='#" -e "s#.*#&'#" -e "s#^'##" | tr -s '\n' ',' | sed -e 's#,$##') WHERE ip_address='${ip_address}'; SELECT * FROM ${ZIPTABLES} WHERE ip_address='${ip_address}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| tr -s '\n' ' ' \
| sed -e 's#> <#><#g' -e 's#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_ip-machen.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
#echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?loeschen=${ZELLENWERT}>löschen</a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>ändern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
elif [ "${AKTION}" = "liste" ] ; then
AKTION=""
#------------------------------------------------------------------------------#
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IPs</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/zimmer_ipgroup-machen.php?action=angelegt">neue Zimmer IP-Gruppe anlegen</a></b>
<br>
<br>
'
echo "SELECT * FROM ${ZIPTABLES} ORDER BY ${ZIPTORDER}
;
" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| tr -s '\n' ' ' \
| sed -e 's#> <#><#g' -e 's#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_ip-machen.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "4" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
#echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?loeschen=${ZELLENWERT}>löschen</a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>ändern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
elif [ "${AKTION}" = "loeschen" ] ; then
AKTION=""
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">verbliebene Zimmer IP-Gruppen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
'
echo "
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?aendern=${WERT}">alle Zimmer IP's der Gruppe '${WERT}' anzeigen (zur Überprüfung)</a></b>
"
echo "DELETE FROM ${ZIPTABLES} WHERE ip_ig_id='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
echo "DELETE FROM ${ZIPGROUPS} WHERE ig_id='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
elif [ "${AKTION}" = "aendern" ] ; then
#------------------------------------------------------------------------------#
if [ -z "${1}" ] ; then
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Gruppe</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">Zimmer IP-Gruppen</a></b>
'
fi
#------------------------------------------------------------------------------#
echo "
SELECT *
FROM ${ZIPTABLES}
WHERE ip_ig_id=${WERT}
ORDER BY ${ZIPTORDER} ASC
;
" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| tr -s '\n' ' ' \
| sed -e 's#> <#><#g' -e 's#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "4" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/zimmer_ip_loeschen.php?loeschen=${ZELLENWERT}>löschen</a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>ändern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
echo "<BR>"
echo "<BR>"
#------------------------------------------------------------------------------#
else
#------------------------------------------------------------------------------#
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Gruppen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/zimmer_ipgroup-machen.php?action=angelegt">neue Zimmer IP-Gruppe anlegen</a></b>
<br>
<br>
'
echo "
SELECT *
FROM ${ZIPGROUPS}
ORDER BY ${ZIPGORDER} ASC
;
" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| tr -s '\n' ' ' \
| sed -e 's#<TR><TD>[0-9]*#<TR><TD><a href=/zimmer_ipgroup_loeschen.php?loeschen=&>l\öschen</a> <a href=/cgi-bin/zimmer_ip-machen.cgi?aendern=&><B>auflisten</B></a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?hinzufuegen=&>hinzuf\ügen</a>Liste &</B>#g' -e 's#=<TR><TD>#=#g' -e 's#>Liste <TR><TD>#><B>#g' -e 's#</TD></TR></TD></TR>#</TD></TR>#g' -e 's#></#> </#g' -e 's#><#>\n<#g'
fi
rm -f ${DATENDATEI} ${ZAHLEN1} ${ZAHLEN2}
echo "<br>
<BR>
</div>
"
echo '
</body>
</html>
'
chmod 0755 /usr/lib/cgi-bin/zimmer_ip-machen.cgi
/var/www/zimmer_ipgroup_loeschen.php
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Liste</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<H1>
Sind Sie wirklich sicher, dass Sie die Zimmer-IP-Gruppe
<?php
echo $_GET["loeschen"];
?>
löschen wollen?
</H1>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?loeschen=
<?php
echo $_GET["loeschen"];
?>
">Zimmer IP-Gruppe
<?php
echo $_GET["loeschen"];
?>
löschen</a></b>
<br>
<br>
/var/www/zimmer_ipgroup-machen.php
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = "block";
document.getElementById("tab_" + id).className = "current";
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">neue Zimmer IP-Gruppe erstellen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src="/cloudipgroups.png">neue Zimmer IP-Gruppe erstellen</h1>
<br>
<br>
<form action=/cgi-bin/zimmer_ip-machen.cgi method=post>
<div class="htmlobject_box input" id="htmlobject_box_ig_name">
<div class="left"><label>Markenname</label></div>
<div class="right"><input title="GruppenName" maxlength="20" name="ig_name" value="GruppenName" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ig_network">
<div class="left"><label>Domain (ohne "www" davor!)</label></div>
<div class="right"><input title="Domain" maxlength="20" name="ip_domain" value="domain.de" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ig_subnet">
<div class="left"><label>Netzwerk-Schnittstelle</label></div>
<div class="right"><input title="Netzwerk-Schnittstelle" maxlength="20" name="ip_eth" value="eth2" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_subnet">
<div class="left"><label>Netzwerkmaske</label></div>
<div class="right"><input title="Netzwerkmaske" maxlength="20" name="ip_subnet" value="255.255.255.0" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ig_gateway">
<div class="left"><label>Gateway</label></div>
<div class="right"><input title="Gateway" maxlength="20" name="ip_gateway" value="192.168.1.1" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_dns1">
<div class="left"><label>1. DNS</label></div>
<div class="right"><input title="1. DNS" maxlength="20" name="ip_dns1" value="192.168.1.254" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_dns2">
<div class="left"><label>2. DNS</label></div>
<div class="right"><input title="2. DNS" maxlength="20" name="ip_dns2" value="192.168.1.253" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_adressen">
<div class="left"><label>ip_adressen</label></div>
<div class="right"><textarea name="ip_adressen" cols="15" rows="17">192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
</textarea></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<input type=hidden name="action" value="angelegt">
<br>
<input type=submit value="erstellen">
<br>
</form>
<div style="line-height:0px;clear:both;"> </div>
</div>
/usr/lib/cgi-bin/zimmer_iptable-aendern.cgi
#!/bin/sh
DATENDATEI="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)"
### POST-Daten werden in eine Datei geschrieben
echo "$(dd bs=1 count=${CONTENT_LENGTH} 2> /dev/null | tr -s '&' '\n')" | sed -e 's/=+/=/g' -e 's/+$//g' | tr -d '"' > ${DATENDATEI} 2>&1
. ${DATENDATEI}
. /opt/etc/zimmer_ip.cfg
### GET
AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')"
WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}' | awk -F'&' '{print $1}')"
if [ -n "${1}" -a -z "${AKTION}" ] ; then
AKTION="$(echo "${1}" | awk -F'=' '{print $1}')"
WERT="$(echo "${1}" | awk -F'=' '{print $2}')"
fi
#------------------------------------------------------------------------------#
echo "Content-type: text/html
<link rel='stylesheet' type='text/css' href='/openqrm/base/css/htmlobject.css' />
<link rel='stylesheet' type='text/css' href='/cloud.css' />
<script type='text/javascript'>
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
"
#------------------------------------------------------------------------------#
if [ "${AKTION}" = "aendern" ] ; then
echo "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>neue Zimmer IP-Gruppe erstellen</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>Datensatz zur Zimmer-IP '${WERT}' ändern</h1>
<br>
<form action=/cgi-bin/zimmer_ip-machen.cgi method=post>
"
echo "
SELECT *
FROM ${ZIPTABLES}
WHERE ip_address='${WERT}'
;
" | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| egrep -v '[\+\|]---------' | tr -s '\t' ' ' | sed -e 's#| |#| "" |#g' -e 's#| |#| "" |#g' | nl | while read LFDNR ZEILE
do
if [ "${LFDNR}" = "1" ] ; then
KOPF="$(echo "${ZEILE}" | sed 's#|#\n#g' | egrep -v '^$' | awk '{print $1}')"
else
DATEN="$(echo "${ZEILE}" | sed 's#|#\n#g' | egrep -v '^$' | awk '{print $1}')"
echo "${KOPF}" | nl | fgrep -v ip_ig_id | while read SPALTENNR SPALTENNAME
do
SPALTENWERT="$(echo "${DATEN}" | head -n${SPALTENNR} | tail -n1 | tr -d '"')"
if [ "${SPALTENNAME}" = "ip_address" ] ; then
echo "<input type=\"hidden\" name=\"${SPALTENNAME}\" value=\"${SPALTENWERT}\">"
else
echo "
<div class=\"htmlobject_box input\" id=\"htmlobject_box_${SPALTENNAME}\">
<div class=\"left\"><label for=\"p4c443ec95a81b\">${SPALTENNAME}</label></div>
<div class=\"right\"><input title=\"Name\" id=\"p4c443ec95a81b\" maxlength=\"20\" name=\"${SPALTENNAME}\" value=\"${SPALTENWERT}\" type=\"text\"></div>
<div style=\"line-height:0px;height:0px;clear:both;\" class=\"floatbreaker\"> </div>
</div>
"
fi
done
fi
done
#------------------------------------------------------------------------------#
echo '
<input type=hidden name="action" value="aendern">
<br>
<input type=submit value="ändern">
<br>
</form>
<div style="line-height:0px;clear:both;"> </div>
</div>
'
#------------------------------------------------------------------------------#
elif [ "${AKTION}" = "loeschen" ] ; then
IGID="$(echo "SELECT ip_ig_id FROM ${ZIPTABLES} WHERE ip_address='${WERT}' LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
echo "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>Zimmer IP gelöscht</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>Zimmer-IP '${WERT}' aus der IP-Gruppe '${IGID}' gelöscht</h1>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?aendern=${IGID}">alle Zimmer IP's der Gruppe '${IGID}' anzeigen</a></b>
<br>
<br>
"
echo "
DELETE
FROM ${ZIPTABLES}
WHERE ip_address='${WERT}'
;" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
elif [ "${AKTION}" = "hinzufuegen" ] ; then
echo "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>zur Zimmer IP-Gruppe '${WERT}' weitere IP's hinzufügen</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>zur Zimmer IP-Gruppe '${WERT}' weitere IP's hinzufügen</h1>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen</a></b>
<br>
<br>
<form action=/cgi-bin/zimmer_iptable-aendern.cgi method=post>
"
IPGRUPPE="$(echo "
SELECT *
FROM ${ZIPTABLES}
WHERE ip_ig_id='${WERT}'
LIMIT 1
;" | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| egrep -v '[\+\|]---------' | tr -s '\t' ' ' | sed -e 's#| |#| "" |#g' -e 's#| |#| "" |#g')"
KOPF="$(echo "${IPGRUPPE}" | head -n1 | sed -e 's/ //g' -e 's/|/\n/g' | egrep -v '^$')"
DATEN="$(echo "${IPGRUPPE}" | tail -n1 | sed -e 's/ //g' -e 's/|/\n/g' | egrep -v '^$')"
echo "${KOPF}" | nl | while read SPALTENNUMMER SPALTENNAME
do
if [ "${SPALTENNAME}" = "ip_address" ] ; then
SPALTENWERT=""
SPALTENBEZ="<B>${SPALTENNAME}</B>"
else
SPALTENWERT="$(echo "${DATEN}" | head -n${SPALTENNUMMER} | tail -n1)"
SPALTENBEZ="${SPALTENNAME}"
fi
echo "
<div class='htmlobject_box input' id='htmlobject_box_${SPALTENNAME}'>
<div class='left'><label>${SPALTENBEZ}:</label></div>
<div class='right'><input title='${SPALTENNAME}' maxlength='20' name='${SPALTENNAME}' value='${SPALTENWERT}' type='text'></div>
<div style='line-height:0px;height:0px;clear:both;' class='floatbreaker'> </div>
</div>
"
done
echo "
<input type=hidden name='action' value='hinzugefuegt'>
<br>
<input type=submit value='hinzufügen'>
<br>
</form>
<div style='line-height:0px;clear:both;'> </div>
</div>
"
elif [ "${action}" = "hinzugefuegt" ] ; then
echo "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>'${ip_address}' wurde zur Zimmer IP-Gruppe '${ip_ig_id}' hinzugefügt</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>'${ip_address}' wurde zur Zimmer IP-Gruppe '${ip_ig_id}' hinzugefügt</h1>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen</a></b>
<br>
<br>
"
### der "action"-Eintrag wird entfernt
sed -i -e 's/action=hinzugefuegt//' ${DATENDATEI}
### IP in die Tabelle eintragen
echo "INSERT INTO ${ZIPTABLES} ($(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $1}'|tr -s '\n' ','|sed 's/,$//')) VALUES ($(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $2}'|sed "s/.*/'&'/"|tr -s '\n' ','|sed "s/',$/'/"));" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
/usr/lib/cgi-bin/zimmer_ip-machen.cgi aendern=${ip_ig_id}
fi
rm -f ${DATENDATEI}
/opt/bin/ziptables_zeigen.sh
#!/bin/sh
. /opt/etc/zimmer_ip.cfg
#SELECT ip_eth,ip_hostname,ip_domain,ip_address,ip_subnet,ip_gateway,ip_dns1,ip_dns2
echo "
SELECT *
FROM ${ZIPTABLES}
ORDER BY ${ZIPTORDER} ASC
;
" | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
/opt/bin/in_zipgroups_eintragen.sh
#!/bin/sh
ZID="${1}"
ZNETIF="${2}"
ZHOSTNAME="${3}"
if [ -n "${3}" ] ; then
. /opt/etc/zimmer_ip.cfg
ZIPADRESSE="$(echo "
SELECT ip_address
FROM ${ZIPTABLES}
WHERE ip_ig_id='${ZID}' AND (ip_hostname IS NULL OR ip_hostname = 'NULL' OR ip_hostname = '')
ORDER BY ${ZIPTORDER} ASC
LIMIT 1 ;" \
| mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
KONFLIKT="$(echo "
SELECT ip_hostname
FROM ${ZIPTABLES}
WHERE ip_ig_id='${ZID}' AND ip_hostname='${ZHOSTNAME}'
ORDER BY ${ZIPTORDER} ASC
LIMIT 1 ;" \
| mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
ZDOMAIN="$(echo "
SELECT ip_domain
FROM ${ZIPTABLES}
WHERE ip_ig_id='${ZID}'
ORDER BY ${ZIPTORDER} ASC
LIMIT 1 ;" \
| mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
if [ -z "${KONFLIKT}" ] ; then
if [ -n "${ZIPADRESSE}" ] ; then
echo "UPDATE ${ZIPTABLES}
SET ip_eth='${ZNETIF}',ip_hostname='${ZHOSTNAME}'
WHERE ip_address='${ZIPADRESSE}';" \
| mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
if [ -n "$(echo "${ZIPADRESSE}"|fgrep "${DATABASENET}")" ] ; then
DNSDATEI="/usr/share/openqrm/plugins/dns/etc/bind/zones/database.db"
elif [ -n "$(echo "${ZIPADRESSE}"|fgrep "${EXTERNNET}")" ] ; then
DNSDATEI="/usr/share/openqrm/plugins/dns/etc/bind/zones/extern.db"
else
echo "${ZHOSTNAME}: NIC ${ZNETIF} wurde nicht gesetzt, ABBRUCH"
exit 1
fi
awk '/; serial$/ {sub(";"," ");print $1,$1+1}' ${DNSDATEI} | while read ASERIAL NSERIAL
do
### neuer DNS-Eintrag rein
echo "${ZHOSTNAME} IN A ${ZIPADRESSE}" >> ${DNSDATEI}
sed -i -e "s/${ASERIAL}/${NSERIAL}/" -e '/^$/d' ${DNSDATEI}
fgrep -i serial ${DNSDATEI}
done
else
echo "Es gibt in der Gruppe '${ZID}'/'${ZDOMAIN}' keine freie IP mehr!"
fi
else
echo "Es gibt in der Gruppe '${ZID}'/'${ZDOMAIN}' schon den Hostnamen '${KONFLIKT}'!"
fi
sudo /etc/init.d/bind9 reload
else
echo "${0} [ig_id] [net_if] [hostname]"
fi
/opt/bin/aus_zipgroups_austragen.sh
#!/bin/sh
HOSTNAME="${1}"
if [ -n "${1}" ] ; then
. /opt/etc/zimmer_ip.cfg
echo "UPDATE ${ZIPTABLES}
SET ip_hostname=''
WHERE ip_hostname='${HOSTNAME}';" \
| mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
### eth1 und eth2
ls /usr/share/openqrm/plugins/dns/etc/bind/zones/database.db /usr/share/openqrm/plugins/dns/etc/bind/zones/extern.db | awk -F':' '{print $1}' | sort | uniq | while read DNSDATEI
do
awk '/; serial$/ {sub(";"," ");print $1,$1+1}' ${DNSDATEI} | while read ASERIAL NSERIAL
do
### alten DNS-Eintrag raus
sed -i -e "s/${ASERIAL}/${NSERIAL}/" -e "s/${HOSTNAME}[ ]*IN[ ]*A[ ]*.*//" -e '/^$/d' ${DNSDATEI}
fgrep -i serial ${DNSDATEI}
done
done
sudo /etc/init.d/bind9 reload
else
echo "${0} [hostname]"
fi
/opt/bin/zipgroups_managen.sh
#!/bin/sh
# TEMP-Datei erzeugen
DATENDATEI="$(mktemp /tmp/zipgroups.XXXXXXXXXXXX)"
# TEMP-Datei füllen
echo "
${1}
${2}
${3}
${4}
" > ${DATENDATEI}
# TEMP-Datei in die Umgebung einlesen
. ${DATENDATEI}
# TEMP-Datei löschen
rm -f ${DATENDATEI}
#------------------------------------------------------------------------------#
### GET-Daten zum eintragen
# step_2=1
# appliance_name=vm-hellomobil02
# appliance_zipgeth1=1
# appliance_zipgeth2=2
### eintragen
# /opt/bin/in_zipgroups_eintragen.sh [ig_id] [net_if] [hostname]
#------------------------------------------------------------------------------#
### austragen
# /opt/bin/aus_zipgroups_austragen.sh [hostname]
### remove
# action=remove
# identifier=4,5,6,9,
#------------------------------------------------------------------------------#
# nur wenn es die richtige Seite war
(
if [ "${step_2}" = "1" ] ; then
date +'%F %T'
# nur wenn der Hostname gesetzt wurde
if [ -n "${appliance_name}" ] ; then
# Eintrag für eth1
if [ -n "${appliance_zipgeth1}" ] ; then
echo "sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth1} eth1 ${appliance_name}"
sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth1} eth1 ${appliance_name}
fi
# Eintrag für eth2
if [ -n "${appliance_zipgeth2}" ] ; then
echo "sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth2} eth2 ${appliance_name}"
sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth2} eth2 ${appliance_name}
fi
fi
elif [ "${action}" = "remove" ] ; then
date +'%F %T'
. /opt/etc/zimmer_ip.cfg
for IDENTIFIER in $(echo "${identifier}" | sed 's/,/ /g')
do
for HOSTNAME in $(echo "SELECT appliance_name
FROM appliance_info
WHERE appliance_id='${IDENTIFIER}'
;" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})
do
# hier werden die ZIMMER-IP's wieder frei gegeben
echo "/opt/bin/aus_zipgroups_austragen.sh ${HOSTNAME}"
/opt/bin/aus_zipgroups_austragen.sh ${HOSTNAME}
# hier wird die Nagios-Konfiguration gelöscht
rm -vf /etc/nagios3/conf.d/${HOSTNAME}*.cfg
done
/etc/init.d/nagios3 reload
done
fi
) 2>&1 | logger
/opt/bin/zipgroups_zeigen_html.sh
#!/bin/sh
HTMLCODE="$(cat | tr -s "'" '"')"
NA='<h1>New Appliance</h1>'
RE='<h3>Requirements</h3>'
if [ "$(echo "${HTMLCODE}" | fgrep "${NA}" > /dev/null ; echo "$?")" = "0" -a "$(echo "${HTMLCODE}" | fgrep "${RE}" > /dev/null ; echo "$?")" = "0" ] ; then
#------------------------------------------------------------------------------#
### es ist genau die richtige Seite
ETHPULLDOWN="$(
. /opt/etc/zimmer_ip.cfg
IFS="|"
echo "
eth1
eth2
" | egrep -v '^$' | while read NETZWERKKARTE
do
echo "
<div class='htmlobject_box select' id='htmlobject_box_appliance_zipg${NETZWERKKARTE}'>
<div class='left'><label> ${NETZWERKKARTE}</label></div>
<div class='right'>
<select title='${NETZWERKKARTE}' name='appliance_zipg${NETZWERKKARTE}'>
<option value='0'></option>
"
echo "
SELECT ig_id,ig_name,ig_domain
FROM ${ZIPGROUPS}
ORDER BY ${ZIPGORDER} ASC
;" \
| mysql -N -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| egrep -v '[\+\|]---------' | egrep -v '^$' | while read ANFANG ig_id ig_name ig_domain ENDE
do
ig_id="$(echo "${ig_id}" | awk '{print $1}')"
ig_name="$(echo "${ig_name}" | awk '{print $1}')"
ig_domain="$(echo "${ig_domain}" | awk '{print $1}')"
echo "<option value='${ig_id}'>${ig_name} | ${ig_domain}</option>"
done
echo '
</select>
</div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
'
done | tr -s '"' "'")"
#------------------------------------------------------------------------------#
echo "${HTMLCODE}" | while read ZEILE
do
POSITION="$(echo "${ZEILE}" | egrep '<div style="text-align:right;"><input title="save" id=.*name="action" value="save" type="submit"></div>')"
if [ -n "${POSITION}" ] ; then
echo "${ETHPULLDOWN}"
fi
echo "${ZEILE}"
done
#------------------------------------------------------------------------------#
else
#------------------------------------------------------------------------------#
### es ist eine andere Seite
echo "${HTMLCODE}"
#------------------------------------------------------------------------------#
fi
/usr/share/openqrm/web/base/server/appliance/appliance-new.php
Ganz oben kommen zwei Zeilen rein ($KOMMANDO), die die Auswertung der GET-Daten vornehmen, in die PHP-Datei.
Diese Zeilen gibt es schon:
$thisfile = basename($_SERVER['PHP_SELF']);
$RootDir = $_SERVER["DOCUMENT_ROOT"].'/openqrm/base/';
require_once "$RootDir/include/user.inc.php";
require_once "$RootDir/class/image.class.php";
require_once "$RootDir/class/resource.class.php";
require_once "$RootDir/class/appliance.class.php";
require_once "$RootDir/class/kernel.class.php";
require_once "$RootDir/class/virtualization.class.php";
require_once "$RootDir/class/openqrm_server.class.php";
require_once "$RootDir/include/htmlobject.inc.php";
if(strtolower(OPENQRM_USER_ROLE_NAME) != 'administrator') {
echo 'Access denied';
exit;
}
Wir setzen unsere beiden Zeilen direkt dhinter:
$KOMMANDO = "/opt/bin/zipgroups_managen.sh"." step_2=".$_GET["step_2"]." appliance_name=".$_GET["appliance_name"]." appliance_zipgeth1=".$_GET["appliance_zipgeth1"]." appliance_zipgeth2=".$_GET["appliance_zipgeth2"];
echo shell_exec("$KOMMANDO;");
Ganz unten wird der durch PHP generierte HTML-Code ausgegeben. Hier wird die Originalzeile "echo htmlobject_tabmenu($output);" deaktiviert und dafür drei neue Zeilen eingefühgt.
An dieser Stelle muss unser Filterscript (/opt/bin/zipgroups_zeigen_html.sh) zwischen geschaltet werden, damit die zwei Pull-Down-Menüs für die Zuweisung zu den Z-IP-Gruppen je "eth" erscheinen.
So sieht das Ende im Original aus:
<?php echo htmlobject_tabmenu($output); ?>
Wir ändern das so ab:
<?php
//echo htmlobject_tabmenu($output);
$test = htmlobject_tabmenu($output);
$KOMMANDO="echo"." '".$test."' | /opt/bin/zipgroups_zeigen_html.sh";
echo shell_exec("$KOMMANDO;");
?>
/usr/share/openqrm/web/base/server/appliance/appliance-index.php
Damit die Einträge zu einer Appliance beim löschen auch aus der Z-IP-Tabelle entfernt werden, müssen wir hier noch einen Eintrag vornehmen.
Diese Funktion gibt es schon:
function redirect($strMsg, $currenttab = 'tab0', $url = '') {
global $thisfile;
if($url == '') {
$url = $thisfile.'?strMsg='.urlencode($strMsg).'¤ttab='.$currenttab;
}
// using meta refresh here because the appliance and resourc class pre-sending header output
echo "<meta http-equiv=\"refresh\" content=\"0; URL=$url\">";
}
Unseren Eintrag setzen wir direkt dahinter:
foreach ($_GET["identifier"] as $key => $value) {
$ids .= $value.",";
};
$KOMMANDO = "/opt/bin/zipgroups_managen.sh"." action=".$_GET["action"]." identifier=".$ids;
echo shell_exec("$KOMMANDO;");
Integration
in den openQRM-Client
Als erstes muss das openQRM-Client-Archiv an einem sicheren Ort ausgepackt werden:
# mkdir /var/tmp/openqrm-client # cd /var/tmp/openqrm-client # tar xzf /usr/share/openqrm/web/boot-service/openqrm-client.tgz
# vi usr/share/openqrm/etc/init.d/openqrm-client
Wir werden hier die Funktione "openqrm_client_start" um zwei Zeilen ergänzen.
Wichtig ist, das wir nur innerhalb dieser "if"-Abfrage etwas tun!
if [ ! -f /etc/initrd-devices.conf ]; then
# upate package manager, the boot-services may want to install additional os-deps
openqrm_update_package_manager
# start boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service start
done
fi
...
}
function openqrm_client_stop() {
echo "Stopping openQRM-client"
if [ ! -f /linuxrc ]; then
# stop boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service stop
done
fi
...
Nach unseren Änderungen sieht es so aus:
if [ ! -f /etc/initrd-devices.conf ]; then
rm -fr /usr/share/openqrm/plugins/*
# upate package manager, the boot-services may want to install additional os-deps
openqrm_update_package_manager
# start boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service start
done
fi
...
}
function openqrm_client_stop() {
echo "Stopping openQRM-client"
if [ ! -f /linuxrc ]; then
# stop boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service stop
done
rm -fr /usr/share/openqrm/plugins/*
fi
...
Am besten, soll es erst nach der "for"-Schleife gestartet werden, denn dann kommt die Nargios-Konfiguration nicht mit den zusätzlichen IP's durcheinander.
Zum Schluss muss das Archiv wieder zusammen gepackt und aufgeräumt werden:
# tar czf /usr/share/openqrm/web/boot-service/openqrm-client.tgz * # cd # rm -fr /var/tmp/openqrm-client
In diesem Beispiel habe ich das Archiv "/usr/share/openqrm/web/boot-service/openqrm-client.tgz" verwendet, es ist in der Praxis aber im Dateinamen noch eine Ergänzung mit anzuführen.
In dem Script "/usr/share/openqrm/etc/templates/openqrm-linuxrc" kann man sehen, dass das openQRM-Client-Archiv mit den Variabelen "OPENQRM_SHORT_DISTRI_NAME" und "OPENQRM_CLIENT_ARCH" ergänzt wird:
- "/usr/share/openqrm/web/boot-service/openqrm-client.x86_64.tgz"
- "/usr/share/openqrm/web/boot-service/openqrm-client.ubuntu.x86_64.tgz"
in den openqrm-client_start.sh
# vi /usr/share/openqrm/web/boot-service/openqrm-client_start.sh
#exit
if [ -x /usr/sbin/update-rc.d ] ; then
echo '#!/bin/bash
if [ -n "$(egrep "^auto[ /t]*bond0" /etc/network/interfaces)" ] ; then
while [ ! -s /sys/class/net/bond0/address ]
do
. /var/openqrm/openqrm-resource.conf
sleep 1
ip addr > /tmp/netz 2>&1
ping -c1 ${resource_openqrmserver} > /tmp/ping 2>&1
done
fi
. /var/openqrm/openqrm-resource.conf
ping -c30 ${resource_openqrmserver}
rm -f /root/hardwareinfos_zum_server_schicken.sh /root/netzcfg.sh
wget -q -t 10 -nc -O /root/hardwareinfos_zum_server_schicken.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/hardwareinfos_zum_server_schicken.sh"
/bin/bash /root/hardwareinfos_zum_server_schicken.sh
# hier werden die zweite und dritte Netzwerkkarte konfiguriert
wget -q -t 10 -nc -O /root/netzcfg.sh $openqrm_web_protocol://$resource_openqrmserver/openqrm/boot-service/netzcfg.sh
/bin/bash /root/netzcfg.sh
if [ "$(/etc/init.d/openqrm-client status)" = "openQRM-client service is not running" ] ; then
aptitude update
aptitude -y safe-upgrade
aptitude -y install screen links nmap bmon mc ethtool
/etc/init.d/openqrm-client restart
fi
' > /etc/rc.local
/usr/sbin/update-rc.d -f rc.local remove
/usr/sbin/update-rc.d rc.local defaults 99 11
fi
Script ins Webverzeichnis legen
Damit der openQRM-Client das Script auch saugen kann, muss es noch in das entsprechende Verzeichnis kopiert werden:
# cp /opt/bin/netzcfg.sh /usr/share/openqrm/web/boot-service/
