<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.sachsen.schule/dwiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AKirmse%2FSurfkontrolle</id>
	<title>Benutzer:Kirmse/Surfkontrolle - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sachsen.schule/dwiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AKirmse%2FSurfkontrolle"/>
	<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;action=history"/>
	<updated>2026-05-07T04:38:49Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Delixs</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=9089&amp;oldid=prev</id>
		<title>Schoffer: kirmse</title>
		<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=9089&amp;oldid=prev"/>
		<updated>2012-03-16T15:49:35Z</updated>

		<summary type="html">&lt;p&gt;kirmse&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 16. März 2012, 17:49 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l590&quot;&gt;Zeile 590:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 590:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;div align=&quot;right&quot;&amp;gt;[[Benutzer:Kirmse]]&amp;lt;/div&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Schoffer</name></author>
	</entry>
	<entry>
		<id>https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=9075&amp;oldid=prev</id>
		<title>Schoffer: verschob „Kirmse/Surfkontrolle“ nach „Benutzer:Kirmse/Surfkontrolle“</title>
		<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=9075&amp;oldid=prev"/>
		<updated>2012-03-16T15:44:59Z</updated>

		<summary type="html">&lt;p&gt;verschob „&lt;a href=&quot;/dwiki/index.php/Kirmse/Surfkontrolle&quot; class=&quot;mw-redirect&quot; title=&quot;Kirmse/Surfkontrolle&quot;&gt;Kirmse/Surfkontrolle&lt;/a&gt;“ nach „&lt;a href=&quot;/dwiki/index.php/Benutzer:Kirmse/Surfkontrolle&quot; title=&quot;Benutzer:Kirmse/Surfkontrolle&quot;&gt;Benutzer:Kirmse/Surfkontrolle&lt;/a&gt;“&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 16. März 2012, 17:44 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Schoffer</name></author>
	</entry>
	<entry>
		<id>https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=5660&amp;oldid=prev</id>
		<title>Kirmse: Ergänzung der Funktionen dieses Scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=5660&amp;oldid=prev"/>
		<updated>2008-10-06T07:27:03Z</updated>

		<summary type="html">&lt;p&gt;Ergänzung der Funktionen dieses Scripts&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 6. Oktober 2008, 09:27 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Zeile 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Es soll den Lehrern nur die Links von seinen Schülern der aktuellen Unterrichtsstunde anzeigen.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Es soll den Lehrern nur die Links von seinen Schülern der aktuellen Unterrichtsstunde anzeigen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dazu wird ein Cronjob eingerichtet, der zu Beginn der Stunde die Anzahl der Zeilen des Logfiles speichert.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dazu wird ein Cronjob eingerichtet, der zu Beginn der Stunde die Anzahl der Zeilen des Logfiles speichert&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Ab dieser Zahl wertet das Script das Logfile aus.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Es kann konfiguriert werden, ob Lehreraccounts anonymisiert werden und wenn ja, mit welchen String. Um die Namen angezeigt zu bekommen, braucht nicht mehr konfiguriert werden, welcher Name zu der IP gehört. Diese Daten werden aus dem LDAP geholt. Voraussetzung für diese Funktion ist die Einrichtung fester IPs&lt;/ins&gt;.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Cronjob ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Cronjob ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kirmse</name></author>
	</entry>
	<entry>
		<id>https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=5658&amp;oldid=prev</id>
		<title>Kirmse: Screenshot eingefügt</title>
		<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=5658&amp;oldid=prev"/>
		<updated>2008-10-05T17:36:07Z</updated>

		<summary type="html">&lt;p&gt;Screenshot eingefügt&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 5. Oktober 2008, 19:36 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Bild:Surfcontrol2.jpg]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dieses Script ist eine Neuimplementation des Scripts &amp;lt;code&amp;gt;proxy.cgi&amp;lt;/code&amp;gt; von Joachim Deckers.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dieses Script ist eine Neuimplementation des Scripts &amp;lt;code&amp;gt;proxy.cgi&amp;lt;/code&amp;gt; von Joachim Deckers.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Es soll den Lehrern nur die Links von seinen Schülern der aktuellen Unterrichtsstunde anzeigen.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Es soll den Lehrern nur die Links von seinen Schülern der aktuellen Unterrichtsstunde anzeigen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kirmse</name></author>
	</entry>
	<entry>
		<id>https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=5649&amp;oldid=prev</id>
		<title>Kirmse: Quelltext von proxy.cgi</title>
		<link rel="alternate" type="text/html" href="https://wiki.sachsen.schule/dwiki/index.php?title=Benutzer:Kirmse/Surfkontrolle&amp;diff=5649&amp;oldid=prev"/>
		<updated>2008-10-04T19:28:11Z</updated>

		<summary type="html">&lt;p&gt;Quelltext von proxy.cgi&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Dieses Script ist eine Neuimplementation des Scripts &amp;lt;code&amp;gt;proxy.cgi&amp;lt;/code&amp;gt; von Joachim Deckers.&lt;br /&gt;
Es soll den Lehrern nur die Links von seinen Schülern der aktuellen Unterrichtsstunde anzeigen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird ein Cronjob eingerichtet, der zu Beginn der Stunde die Anzahl der Zeilen des Logfiles speichert.&lt;br /&gt;
&lt;br /&gt;
==== Cronjob ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use warnings;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my $datei  = &amp;#039;access.log&amp;#039;;&lt;br /&gt;
my $datei2 = &amp;#039;startwert&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my $zaehler = 0;&lt;br /&gt;
&lt;br /&gt;
# wir lesen die Datei access.log ein&lt;br /&gt;
open DATEI, &amp;#039;&amp;lt;&amp;#039;, $datei;&lt;br /&gt;
while (my $zeile = &amp;lt;DATEI&amp;gt;) {&lt;br /&gt;
  $zaehler++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# wir speichern den Zaehlerstand in der Datei &amp;#039;startwert&amp;#039;&lt;br /&gt;
open DATEI, &amp;#039;&amp;gt;&amp;#039;, $datei2;&lt;br /&gt;
print DATEI $zaehler;&lt;br /&gt;
close DATEI;&lt;br /&gt;
&lt;br /&gt;
__END__&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Das eigentliche Script ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use warnings;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
use CGI::Carp qw(fatalsToBrowser);&lt;br /&gt;
use Net::LDAP;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ========================== Konfigurationsbereich ========================&lt;br /&gt;
&lt;br /&gt;
my %config = (&lt;br /&gt;
# hier wird angegeben, ob die Aufrufe fuer Lehrer angezeigt werden sollen&lt;br /&gt;
# no: ausblenden, yes: anzeigen des Lehrerlogins&lt;br /&gt;
TEACHER          =&amp;gt; &amp;#039;yes&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
# hier koennen weitere Logins angegeben werden, die nicht angezeigt werden sollen&lt;br /&gt;
# Format: UNVISIBLE =&amp;gt; [ &amp;#039;ffeuerstein&amp;#039;, &amp;#039;hkirmse&amp;#039; ];&lt;br /&gt;
UNVISIBLE        =&amp;gt; [ ],&lt;br /&gt;
&lt;br /&gt;
# hier wird der String angegeben, mit dem Lehrerlogins ersetzt werden&lt;br /&gt;
UNVISIBLE_STRING =&amp;gt; &amp;#039;xxxxx&amp;#039;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# hier können sie das Format fuer das Datum und die Uhrzeit angeben. Die&lt;br /&gt;
# Platzhalter %%tag%%, %%monat%%, %%jahr%%, %%stunde%%, %%minute%%, %%sekunden%%&lt;br /&gt;
# werden durch aktuellen Werte ersetzt, wobei alle Werte der Zeit zweistellig sind&lt;br /&gt;
# durch das vorgegebene Format entsteht z.B. &amp;quot;1.1.2008 13:41:05&amp;quot;&lt;br /&gt;
my $format = &amp;#039;%%tag%%.%%monat%%.%%jahr%% %%stunde%%:%%minute%%:%%sekunden%%&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
# hier wird das Logfile angegeben&lt;br /&gt;
my $logfile = &amp;#039;access.log&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ========================== Fehlermeldungen in der Tabelle ===============&lt;br /&gt;
&lt;br /&gt;
my $fehler1 = &amp;#039;es liegen keine Einträge im Logfile vor&amp;#039;;&lt;br /&gt;
my $fehler2 = &amp;#039;es gibt keine Aufrufe aus diesem Raum&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ========================== HTML-Bereich =================================&lt;br /&gt;
&lt;br /&gt;
# Die generierte HTML-Seite wird zusammengesetzt aus dem Kopf, der (eigentlichen)&lt;br /&gt;
# Tabelle und dem Fuss. Hier wird die Variable $head als HERE-Dokument bereitgestellt.&lt;br /&gt;
# Ab der 2. Zeile, die mit: &amp;quot;&amp;lt;!doctype html ...&amp;quot; beginnt, ist alles reines HTML.&lt;br /&gt;
# Sie können damit ohne Perlkenntnisse das Aussehen der Seite beeinflussen.&lt;br /&gt;
# Beachten Sie, dass %%aufrufer%%, &amp;quot;%%rechner%%&amp;quot;, &amp;quot;%%raum%% und %%datum%%  durch&lt;br /&gt;
# das Script durch die aktuellen Werte ersetzt werden&lt;br /&gt;
my $head =&amp;lt;&amp;lt;&amp;#039;KOPF&amp;#039;;&lt;br /&gt;
&amp;lt;!doctype html public &amp;quot;-//W3C//DTD HTML 4.0 //EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Surfkontrolle&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Hans-Dietrich Kirmse&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
b.info     { color:#C0C0C0; }&lt;br /&gt;
td         { padding-left:5px; }&lt;br /&gt;
table,h1,p { margin-left:5px; }&lt;br /&gt;
/* die folgende Lösung stammt von Thorsten Strusch */&lt;br /&gt;
a {&lt;br /&gt;
        display: block;&lt;br /&gt;
        max-width: 25em;&lt;br /&gt;
        white-space: nowrap;&lt;br /&gt;
        overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.link {&lt;br /&gt;
        display: inline;&lt;br /&gt;
        max-width: 0;&lt;br /&gt;
        white-space: normal;&lt;br /&gt;
        overflow: visible;&lt;br /&gt;
}&lt;br /&gt;
//--&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body background=&amp;quot;/online/whttxtr2.jpg&amp;quot; text=&amp;quot;#000000&amp;quot; bgcolor=&amp;quot;#FFFFFF&amp;quot; link=&amp;quot;#0000FF&amp;quot; alink=&amp;quot;#0000C0&amp;quot; vlink=&amp;quot;#FF0000&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b class=&amp;quot;info&amp;quot;&amp;gt;%%aufrufer%% am PC &amp;quot;%%rechner%%&amp;quot; im Raum &amp;quot;%%raum%%&amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;b class=&amp;quot;info&amp;quot;&amp;gt;%%datum%%&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Es wurden folgende Web-Seiten aufgerufen:&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;90%&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;10%&amp;quot;&amp;gt;Zeit&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;20%&amp;quot;&amp;gt;Arbeitsplatz&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;20%&amp;quot;&amp;gt;Login&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;URL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
KOPF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# die Variable $foot sollte normalerweise nicht geändert werden, da nur Copyrightvermerk.&lt;br /&gt;
# Falls dieser an irgendeiner anderen Stelle erscheint, ist dagegen natürlich nichts einzuwenden.&lt;br /&gt;
my $foot =&amp;lt;&amp;lt;&amp;#039;FUSS&amp;#039;;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;copy; &amp;lt;a class=&amp;quot;link&amp;quot; href=&amp;quot;mailto:hd.kirmse@gmx.de&amp;quot;&amp;gt;HD. Kirmse&amp;lt;/a&amp;gt;, ERG Saalfeld/Thüringen, surfcontrol Version 0.1 - Oktober 2008&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
FUSS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# wenn keine Anmeldungen am Fileserver vorliegen, dann wird folgende Tabelle&lt;br /&gt;
# zurueckgegeben, der Platzhalter %%fehler%% wird dann ersetzt&lt;br /&gt;
my $error =&amp;lt;&amp;lt;&amp;#039;FEHLER&amp;#039;;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;%%fehler%%&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
FEHLER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
######## Ende des Konfigurationsbereiches #################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ========================== weitere globalen Variablen ===================&lt;br /&gt;
&lt;br /&gt;
my $ldap_base;                              # wird z.B. zu &amp;#039;dc=erg,c=de&amp;#039;&lt;br /&gt;
my $ip;                                     # IP des Lehrer-PCs&lt;br /&gt;
my $teacher;                                # Login des aufrufenden Lehrers&lt;br /&gt;
my @teacher;                                # die Logins der Lehrer&lt;br /&gt;
my $room;                                   # der Raum&lt;br /&gt;
my %pcs;                                    # die PCs in diesem Raum&lt;br /&gt;
my @daten;                                  # Daten vom Logfile&lt;br /&gt;
my $startwert;                              # die Zeile des Logfiles&lt;br /&gt;
my $date;                                   # Datum und Zeit des Aufrufs&lt;br /&gt;
my $table;                                  # die Tabelle der HTML-Seite&lt;br /&gt;
&lt;br /&gt;
my $datei = &amp;#039;startwert&amp;#039;;             # Datei mit Startwert fuer akt. Stunde&lt;br /&gt;
&lt;br /&gt;
# ========================== Hauptprogramm ================================&lt;br /&gt;
&lt;br /&gt;
# wir holen uns das Login des Lehrers, von dem das Script aufgerufen wurde&lt;br /&gt;
$teacher = $ENV{REMOTE_USER};&lt;br /&gt;
defined($teacher) or die &amp;quot;es liegt keine Anmeldung am Apache vor, $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# wir holen uns die IP des Rechners, von dem das Script aufgerufen wurde&lt;br /&gt;
$ip = $ENV{REMOTE_ADDR};&lt;br /&gt;
defined($ip) or die &amp;quot;ein unerwarteter Fehler ist aufgetreten, $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# wir holen uns die Lehrer aus dem LDAP&lt;br /&gt;
@teacher = &amp;amp;get_teacher;&lt;br /&gt;
&lt;br /&gt;
# wir holen uns den Raum und die Rechner fuer diesen Raum&lt;br /&gt;
($room, %pcs) = &amp;amp;get_pcs;     # %pcs: Key ist die IP, Value der Name&lt;br /&gt;
&lt;br /&gt;
# wir holen uns den Startwert (entspricht der Startzeit)&lt;br /&gt;
$startwert = &amp;amp;get_startwert($datei);&lt;br /&gt;
&lt;br /&gt;
# wir lesen das Logfile ein und erzeugen dabei gleich unsere Datenstruktur&lt;br /&gt;
# Diese haben folgende Struktur: $daten[x] = \($nr, $ip, $pc, $login, $zeit, $url);&lt;br /&gt;
@daten =  &amp;amp;get_data($logfile, $startwert);&lt;br /&gt;
&lt;br /&gt;
# falls ueberhaupt keine Aufrufe am Proxy vorliegen, brechen wir hier ab&lt;br /&gt;
if (scalar @daten == 0) {&lt;br /&gt;
  $error =~ s/%%fehler%%/$fehler1/;&lt;br /&gt;
  $table = $error;&lt;br /&gt;
  goto AUSGABE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# wir reduzieren jetzt (anhand der IP) die Daten auf die Anmeldungen im Raum&lt;br /&gt;
@daten = &amp;amp;filtern_nach_raum(\@daten, \%pcs);&lt;br /&gt;
&lt;br /&gt;
# falls keine Aufrufe am Proxy von diesem Raum vorliegen, brechen wir ab&lt;br /&gt;
if (scalar @daten == 0) {&lt;br /&gt;
  $error =~ s/%%fehler%%/$fehler2/;&lt;br /&gt;
  $table = $error;&lt;br /&gt;
  goto AUSGABE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# wir blenden die Lehrer aus&lt;br /&gt;
@daten = &amp;amp;lehrer_ausblenden(1, \@daten, \@teacher, \%config);&lt;br /&gt;
&lt;br /&gt;
# wir bauen jetzt die eigentliche Tabelle zusammen&lt;br /&gt;
# es wird hier nur das HTML herumgestrickt (incl. URLs)&lt;br /&gt;
$table = &amp;amp;get_table( \@daten, \%config, \%pcs );&lt;br /&gt;
&lt;br /&gt;
AUSGABE:&lt;br /&gt;
&lt;br /&gt;
# wir holen uns Datum und Uhrzeit (wird im Kopf der HTML-Seite angezeigt)&lt;br /&gt;
$date = &amp;amp;datum($format);&lt;br /&gt;
&lt;br /&gt;
# wir bearbeiten den Kopf&lt;br /&gt;
$head =~ s/%%aufrufer%%/$teacher/;&lt;br /&gt;
$head =~ s/%%datum%%/$date/;&lt;br /&gt;
$head =~ s/%%rechner%%/$pcs{$ip}/;&lt;br /&gt;
$head =~ s/%%raum%%/$room/;&lt;br /&gt;
&lt;br /&gt;
# wir schicken die Seite zum Apache&lt;br /&gt;
print &amp;quot;Content-type: text/html\n\n&amp;quot;;&lt;br /&gt;
print $head;&lt;br /&gt;
print $table;&lt;br /&gt;
print $foot;&lt;br /&gt;
&lt;br /&gt;
###################  Ende des Hauptprogramms  #############################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ========================== Funktionen ===================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub _get_ldapbase&lt;br /&gt;
{&lt;br /&gt;
  my $ldap_base = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  # wir durchsuchen die ldap.conf mit einer Regex&lt;br /&gt;
  open DATEI, &amp;#039;&amp;lt;&amp;#039;, &amp;#039;/etc/ldap.conf&amp;#039; or die &amp;quot;konnte ldap.conf nicht oeffnen, $!\n&amp;quot;;&lt;br /&gt;
  while (my $zeile = &amp;lt;DATEI&amp;gt;) {&lt;br /&gt;
    if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/) {&lt;br /&gt;
      $ldap_base = $1;&lt;br /&gt;
      last;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  close DATEI;&lt;br /&gt;
&lt;br /&gt;
  return $ldap_base;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub get_teacher&lt;br /&gt;
{&lt;br /&gt;
  my ($ldap_base, $ldap, $mesg, @teacher);&lt;br /&gt;
&lt;br /&gt;
  # wir verbinden uns mit den LDAP&lt;br /&gt;
  $ldap = Net::LDAP-&amp;gt;new(&amp;#039;127.0.0.1&amp;#039;,version =&amp;gt; 3) or die &amp;quot;$@&amp;quot;;&lt;br /&gt;
  $ldap-&amp;gt;bind or die &amp;quot;konnte mich nicht mit dem Server verbinden&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns die Suchbasis&lt;br /&gt;
  $ldap_base = &amp;amp;_get_ldapbase;&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns nun die Lehrer&lt;br /&gt;
  $mesg = $ldap-&amp;gt;search(&lt;br /&gt;
             base   =&amp;gt; &amp;quot;ou=LEHRER,o=SCHULE,$ldap_base&amp;quot;,&lt;br /&gt;
             filter =&amp;gt; &amp;quot;gidNumber=101&amp;quot;,&lt;br /&gt;
             attrs  =&amp;gt; [ &amp;#039;uid&amp;#039; ],&lt;br /&gt;
             scope  =&amp;gt; &amp;quot;sub&amp;quot;);&lt;br /&gt;
  mesg-&amp;gt;code and die $mesg-&amp;gt;error;&lt;br /&gt;
&lt;br /&gt;
  # wir trennen uns vom LDAP&lt;br /&gt;
  $ldap-&amp;gt;unbind;&lt;br /&gt;
&lt;br /&gt;
  # wir stecken die Daten aus den Entries in eine Liste&lt;br /&gt;
  @teacher = ();&lt;br /&gt;
  foreach my $entry ($mesg-&amp;gt;entries) {&lt;br /&gt;
    push @teacher, $entry-&amp;gt;get_value(&amp;#039;uid&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return @teacher;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub get_pcs&lt;br /&gt;
{&lt;br /&gt;
  my $ip = shift;&lt;br /&gt;
&lt;br /&gt;
  my ($ldap_base, $ldap, $mesg, $entry, $dn, $pc, $suchbasis, %rechner,&lt;br /&gt;
      $tmp, $raum);&lt;br /&gt;
&lt;br /&gt;
  # wir verbinden uns mit den LDAP&lt;br /&gt;
  $ldap = Net::LDAP-&amp;gt;new(&amp;#039;127.0.0.1&amp;#039;,version =&amp;gt; 3) or die &amp;quot;$@&amp;quot;;&lt;br /&gt;
  $ldap-&amp;gt;bind or die &amp;quot;konnte mich nicht mit dem Server verbinden&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns die Suchbasis&lt;br /&gt;
  $ldap_base = &amp;amp;_get_ldapbase;&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns den Raum zu der IP ($ip)&lt;br /&gt;
  $mesg = $ldap-&amp;gt;search(&lt;br /&gt;
             base   =&amp;gt; &amp;quot;cn=DHCP Service Config,o=DHCP,$ldap_base&amp;quot;,&lt;br /&gt;
             filter =&amp;gt; &amp;quot;dhcpStatements=fixed-address $ip&amp;quot;,&lt;br /&gt;
             attrs  =&amp;gt; [ &amp;#039;dhcpHost&amp;#039; ],&lt;br /&gt;
             scope  =&amp;gt; &amp;quot;base&amp;quot;);&lt;br /&gt;
  mesg-&amp;gt;code and die $mesg-&amp;gt;error;&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns den DN&lt;br /&gt;
  ($entry) = $mesg-&amp;gt;entries or die &amp;quot;konnte keinen dhcpHost finden&amp;quot;;&lt;br /&gt;
  $dn    = $entry-&amp;gt;dn;&lt;br /&gt;
&lt;br /&gt;
  # wir spalten vom DN den Rechnernamen ab, den Rest nehmen wir gleich als Suchbasis&lt;br /&gt;
  ($pc, $suchbasis) = $dn =~ /^cn=([^,]*),(.*)$/;&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns die Rechner (sind im DN) und IPs zu diesen Raum&lt;br /&gt;
  $mesg = $ldap-&amp;gt;search(&lt;br /&gt;
             base =&amp;gt; $suchbasis,&lt;br /&gt;
             filter =&amp;gt; &amp;quot;objectClass=dhcpHost&amp;quot;,&lt;br /&gt;
             attrs  =&amp;gt; [ &amp;#039;dhcpStatements&amp;#039; ]);&lt;br /&gt;
  $mesg-&amp;gt;code and die $mesg-&amp;gt;error;&lt;br /&gt;
&lt;br /&gt;
  # wir trennen uns vom LDAP&lt;br /&gt;
  $ldap-&amp;gt;unbind;&lt;br /&gt;
&lt;br /&gt;
  # wir stecken die Daten aus den Entries in einen &amp;quot;normalen&amp;quot; Hash&lt;br /&gt;
  %rechner = ();&lt;br /&gt;
  foreach my $entry ($mesg-&amp;gt;entries) {&lt;br /&gt;
    $dn   = $entry-&amp;gt;dn;&lt;br /&gt;
    ($pc) = $dn  =~ /^cn=([^,]*),/ ;   # die Klammer ist der Rechnername&lt;br /&gt;
    $tmp  = $entry-&amp;gt;get_value(&amp;#039;dhcpStatements&amp;#039;);&lt;br /&gt;
    ($ip) = $tmp =~ /fixed-address (.*)$/;&lt;br /&gt;
    $rechner{$ip} = $pc;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  # wir holen uns noch den Raum&lt;br /&gt;
  ($raum) = $suchbasis =~ /^cn=([^,]*),/ ; # die Klammer ist der Raum&lt;br /&gt;
&lt;br /&gt;
  return ($raum,%pc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub get_startwert&lt;br /&gt;
{&lt;br /&gt;
  my $datei = shift;&lt;br /&gt;
&lt;br /&gt;
  open DATEI, &amp;quot;&amp;lt;&amp;quot;, $datei;&lt;br /&gt;
  my $startwert = &amp;lt;DATEI&amp;gt;;    # es wird nur eine Zeile eingelesen&lt;br /&gt;
  chomp($startwert);          # eventuellen Zeilenumbruch entfernen&lt;br /&gt;
  close DATEI;&lt;br /&gt;
&lt;br /&gt;
  # wenn keine Zahl eingelsen wurde, dann setzen wir den Startwert auf 0&lt;br /&gt;
  unless ($startwert =~ /^\d*$/) {&lt;br /&gt;
    $startwert = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return $startwert;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub get_data&lt;br /&gt;
{&lt;br /&gt;
  my $logfile   = shift;&lt;br /&gt;
  my $startwert = shift;&lt;br /&gt;
&lt;br /&gt;
  my $zaehler = 1;     # entspricht Zeilennummer&lt;br /&gt;
&lt;br /&gt;
  my ($ip, $login, $dummy, $zeit, $dummy2, $addr, $url, $dummy3, $url_orig);&lt;br /&gt;
&lt;br /&gt;
  open DATEI, &amp;quot;&amp;lt;&amp;quot;, $logfile;&lt;br /&gt;
  while (my $zeile = &amp;lt;DATEI&amp;gt;) {&lt;br /&gt;
    # wir erhoehen den Zaehler&lt;br /&gt;
    $zaehler++;&lt;br /&gt;
&lt;br /&gt;
    if ($zaehler &amp;gt; $startwert) {&lt;br /&gt;
      # wir splitten die Zeile beim Leerzeichen&lt;br /&gt;
      ($ip, $login, $dummy, $zeit, $dummy2, $addr, $url, $dummy3) = split (/ /,$zeile,8);&lt;br /&gt;
      # bevor wir die URL bearbeiten, erzeugen wir eine Kopie&lt;br /&gt;
      $url_orig = $url;&lt;br /&gt;
      # wir vernichten zuerst alles was nach einem Doppelkreuz steht&lt;br /&gt;
      ($url) = $url =~ /^([^#]*)/;&lt;br /&gt;
      # wir vernichten alles was nach einem Fragezeichen steht&lt;br /&gt;
      ($url) = $url =~ /^([^?]*)/;&lt;br /&gt;
      # URL wird genommen, wenn am Ende steht:&lt;br /&gt;
      # .shtm | .shtml | .htm | .html | .cgi | .jsp | .php | .php3 | .php4 | .py | .pl&lt;br /&gt;
      if (($url =~ /\.(s?html?|cgi|jsp|php.?|py|pl)$/)&lt;br /&gt;
        # es sollen auch reine Domainangaben angezeigt werden z.B. www.heise.de&lt;br /&gt;
        or ($url =~ /^http.?:\/\/[.\w]*$/) )  {&lt;br /&gt;
        # wir holen uns noch die Zeit, das Datum wird verworfen&lt;br /&gt;
        ($zeit) = $zeit =~ /:(..:..:..)$/ ;&lt;br /&gt;
        my @values = ($ip, $login, $zeit, $url, $zaehler, $url_orig);  # wird anonyme Liste&lt;br /&gt;
        push @daten, \@values;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  close DATEI;&lt;br /&gt;
&lt;br /&gt;
  return @daten;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
# Funktion: es werden nur die Datensaetze aus diesem Raum zurueckgegeben&lt;br /&gt;
# Aufruf:   @daten    = &amp;amp;filtern_nach_raum(\@daten, \%pcs);&lt;br /&gt;
# Input:    $daten[x] = \($ip, $login, $zeit, $url, $zaehler, $url_orig);&lt;br /&gt;
#           $pcs{$ip} = $rechnername;&lt;br /&gt;
# Output:   $daten[x] = \($ip, $login, $zeit, $url, $zaehler, $url_orig);&lt;br /&gt;
# Update:   20.01.2008&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
sub filtern_nach_raum&lt;br /&gt;
{&lt;br /&gt;
  my $lref_daten = shift;&lt;br /&gt;
  my $href_pcs   = shift;&lt;br /&gt;
&lt;br /&gt;
  my @daten = @{$lref_daten};&lt;br /&gt;
  my %pcs   = %{$href_pcs};&lt;br /&gt;
&lt;br /&gt;
  my ($ip, @temp);&lt;br /&gt;
&lt;br /&gt;
  foreach my $nr (@daten) {&lt;br /&gt;
    my @liste = @{$nr};&lt;br /&gt;
&lt;br /&gt;
    # wir holen uns die IP&lt;br /&gt;
    $ip = $liste[0];&lt;br /&gt;
&lt;br /&gt;
    # nur wenn diese IP zu den Rechnern des Raumes gehoert&lt;br /&gt;
    if (defined($pcs{$ip})) {&lt;br /&gt;
      # dann wollen wir diesen Datensatz&lt;br /&gt;
      push @temp, \@liste;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return @temp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#  @daten = &amp;amp;lehrer_ausblenden( LOGIN, \@daten, \@teacher, \%config);&lt;br /&gt;
sub lehrer_ausblenden&lt;br /&gt;
{&lt;br /&gt;
  my $nummer         = shift;         # welches Listenelement das Login ist - hier &amp;quot;1&amp;quot;&lt;br /&gt;
  my $lref_daten     = shift;&lt;br /&gt;
  my $lref_teacher   = shift;&lt;br /&gt;
  my $href_config    = shift;&lt;br /&gt;
&lt;br /&gt;
  my @daten   = @{$lref_daten};&lt;br /&gt;
  my @teacher = @{$lref_teacher};&lt;br /&gt;
&lt;br /&gt;
  my %config          = %{$href_config};&lt;br /&gt;
  my @unvisible       = @{$config{UNVISIBLE}};&lt;br /&gt;
  my $unvisiblestring = $config{UNVISIBLE_STRING};&lt;br /&gt;
&lt;br /&gt;
  my %teacher = ();&lt;br /&gt;
&lt;br /&gt;
  foreach my $element (@teacher) {&lt;br /&gt;
    $teacher{$element} = 1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my ($login, $anz);&lt;br /&gt;
&lt;br /&gt;
  if ($config{TEACHER} eq &amp;#039;no&amp;#039;) {&lt;br /&gt;
&lt;br /&gt;
    foreach my $datum (@daten) {&lt;br /&gt;
      my @tmp = @{$datum};&lt;br /&gt;
&lt;br /&gt;
      # holen wir das Login&lt;br /&gt;
      $login = $tmp[$nummer];&lt;br /&gt;
      # wir ueberpruefen, ob es ein Lehrer ist&lt;br /&gt;
      if (exists($teacher{$login})) {&lt;br /&gt;
        $tmp[1] = $unvisiblestring;         # Login ersetzen&lt;br /&gt;
        $datum  = \@tmp;&lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
        $anz = grep /$login/, @unvisible;   # skalarer Kontext - grep gibt Anzahl zurueck&lt;br /&gt;
        if ($anz &amp;gt; 0) {&lt;br /&gt;
          $tmp[$nummer] = $unvisiblestring; # Login ersetzen&lt;br /&gt;
          $datum  = \@tmp;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return @daten;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
# Funktion: es wird die eigentliche Tabelle zusammengesetzt&lt;br /&gt;
# Aufruf:   $table = &amp;amp;get_table(\@daten, \%config, \%pcs);&lt;br /&gt;
# Input:    @daten = die bearbeiteten Daten&lt;br /&gt;
#           %config = die Konfiguration&lt;br /&gt;
# Output:   $tabelle    = die Tabelle als ein großer String&lt;br /&gt;
# Update:   20.01.2008&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
sub get_table         # $ip, $login, $zeit, $url, $zaehler, $url_orig&lt;br /&gt;
{&lt;br /&gt;
  my $lref_daten  = shift;&lt;br /&gt;
  my $href_config = shift;&lt;br /&gt;
  my $href_pcs    = shift;&lt;br /&gt;
&lt;br /&gt;
  my @daten  = @{$lref_daten};&lt;br /&gt;
  my %config = %{$href_config};&lt;br /&gt;
  my %pcs    = %{$href_pcs};&lt;br /&gt;
&lt;br /&gt;
  my $tabelle = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  my (@temp, $login, $farbe);&lt;br /&gt;
&lt;br /&gt;
  foreach my $datum (@daten) {&lt;br /&gt;
    @temp = @{$datum};&lt;br /&gt;
&lt;br /&gt;
    $tabelle .= &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;;  # Beginn der HTML-Zeile&lt;br /&gt;
&lt;br /&gt;
    # ---------- die 1. Spalte: &amp;quot;Zeit&amp;quot; ------------&lt;br /&gt;
    $tabelle .= &amp;#039;&amp;lt;td&amp;gt;&amp;#039;.$temp[2].&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    # -------- die 2. Spalte: &amp;quot;Arbeitsplatz&amp;quot; ------------&lt;br /&gt;
    $tabelle .= &amp;#039;&amp;lt;td&amp;gt;&amp;#039;.$pcs{$temp[0]}.&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;   # Rechnername&lt;br /&gt;
&lt;br /&gt;
    # -------- die 3. Spalte: &amp;quot;Login&amp;quot; ---------------&lt;br /&gt;
    $tabelle .= &amp;#039;&amp;lt;td&amp;gt;&amp;#039;.$temp[1].&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;     # Login&lt;br /&gt;
&lt;br /&gt;
    # -------- die 4. Spalte: &amp;quot;URL&amp;quot; ---------------&lt;br /&gt;
    $tabelle .= &amp;#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039;.$temp[5].&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$temp[3].&amp;#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    # -------------------------------------------------&lt;br /&gt;
    $tabelle .= &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;.&amp;quot;\n&amp;quot;;  # Ende der HTML-Zeile&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return $tabelle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
# Funktion: Hilfsfunktion zur zweistelligen Darstellung der Zeitdaten&lt;br /&gt;
# Aufruf:   $sek = &amp;amp;zweistellig($sek);&lt;br /&gt;
# Input:    $sek oder $min oder $std&lt;br /&gt;
# Output:   diese Werte, aber zweistellig&lt;br /&gt;
# Update:   1.01.2008&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
sub zweistellig&lt;br /&gt;
{&lt;br /&gt;
  my $datum = shift;&lt;br /&gt;
&lt;br /&gt;
  if ($datum &amp;lt; 10) { $datum = &amp;#039;0&amp;#039;.$datum }&lt;br /&gt;
  return $datum;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
# Funktion: liefert formatierten Datumsstring&lt;br /&gt;
# Aufruf:   $date = &amp;amp;datum($format);&lt;br /&gt;
# Input:    String fuer das Ausgabeformat&lt;br /&gt;
# Output:   String mit Datum und Uhrzeit&lt;br /&gt;
# Update:   1.01.2008&lt;br /&gt;
#--------------------------------------------------------------------&lt;br /&gt;
sub datum&lt;br /&gt;
{&lt;br /&gt;
  my $format = shift;&lt;br /&gt;
&lt;br /&gt;
  my @date  = localtime();&lt;br /&gt;
  my $sek   = $date[0];&lt;br /&gt;
  my $min   = $date[1];&lt;br /&gt;
  my $std   = $date[2];&lt;br /&gt;
  my $tag   = $date[3];&lt;br /&gt;
  my $monat = $date[4] + 1;&lt;br /&gt;
  my $jahr  = $date[5] + 1900;&lt;br /&gt;
&lt;br /&gt;
  $sek = &amp;amp;zweistellig($sek);&lt;br /&gt;
  $min = &amp;amp;zweistellig($min);&lt;br /&gt;
  $std = &amp;amp;zweistellig($std);&lt;br /&gt;
&lt;br /&gt;
  my $rueckgabe = $format;&lt;br /&gt;
  $rueckgabe =~ s/%%tag%%/$tag/;&lt;br /&gt;
  $rueckgabe =~ s/%%monat%%/$monat/;&lt;br /&gt;
  $rueckgabe =~ s/%%jahr%%/$jahr/;&lt;br /&gt;
  $rueckgabe =~ s/%%stunde%%/$std/;&lt;br /&gt;
  $rueckgabe =~ s/%%minute%%/$min/;&lt;br /&gt;
  $rueckgabe =~ s/%%sekunden%%/$sek/;&lt;br /&gt;
&lt;br /&gt;
  return $rueckgabe;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__END__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kirmse</name></author>
	</entry>
</feed>