Fast genauso dumm wie der Rest…

ATI Remote Wonder und Debian Etch

November 29th, 2008 @ 0:05 by lookshe

Ein Krampf, mehr fällt mir zu dem ganzen nicht ein…
Verzweifelt habe ich mehrere Stunden versucht meine Remote Wonder unter Debian Etch zum Laufen zu bekommen mit LIRC. Viel wollte ich ja nicht, eigentlich nur ein paar Systemaufrufe absetzen um meinen MPD damit steuern zu können, zumindest vorerst in den Grundfunktionalitäten. Leider liessen sich die LIRC-Module mit 2.6.18 nicht kompilieren. Erkannt hat sie das System allerdings korrekt und auch ein Input-Device angelegt. Irgendwann bin ich zufällig auf das Tool evtest aus dem Paket dvb-utils gestossen. Damit konnte ich direkt auf das Event unter /dev connecten und die Keycodes auslesen. Somit wusste ich, dass die Fernbedienung unter dem System ordentlich funktioniert. Weitere Stunden des Rumprobierens mit LIRC vergingen, leider erfolglos.
Aber dann kam, nachdem ich eine Nacht drüber geschlafen habe, die zündende Idee. Evtest kann doch alles korrekt auslesen. Warum guck ich mir also nicht mal den Source davon an und bastel ggf. etwas eigenes um die eingelesenen Keycodes auszuwerten. Gesagt getan. Erst nur mit einem simplen switch-case-Block. Funktionierte wunderbar. Aber jedesmal den Code ändern, wenn sich das Event unter den Devices ändert oder ich neue Funktionen hinzufügen will, das wollte ich auch nicht. Also musste eine Konfigurationsdatei her. Dann stellte sich noch die Frage, wie ich die Keycodes und entsprechende Systembefehle sinnvoll speichere um auch einfach darauf zuzugreifen. Spontan viel mir da eine Hashmap ein, was unter C aber etwas problematisch ist. Also ein wenig gegooglet und eine mehr oder weniger passende Implementierung gefunden. Eine Zeit hatte ich noch mit Speicherleaks und verkorksten Pointern zu kämpfen, was sich aber einfach abschaffen liess, indem ich die Hashmap auf char* geändert habe und zum speichern der Datensätze strcpy verwendet habe.

Für diejenigen, die es interessiert, hier die Programmdateien:
evtest.c
hashmap.c
hashmap.h
config

verschlüsselte Platte mounten

April 15th, 2008 @ 18:52 by lookshe

So, nach langer Zeit komm ich mal wieder dazu was zu schreiben. Irgendwer hat mich auf die sinnlose Idee gebracht, doch mal einige meiner Shell-Skripte hochzuladen. Kann man ja gleich sinnvoll ‘nen Blogeintrag machen und die erklären, dacht ich mir. Da wolle wa mal anfange:

Meine externe Platte hat 3 Partitionen. Und da ich die mal hier mal dort anstöpsel, nervt es ein wenig, jedesmal das Mapping für die verschlüsselte Partition anzulegen. Linux-User sind ja von Natur aus faul, also hab ich mir da ein Skript für geschrieben, dass das alles übernimmt. Hier mal bröckchenweise mit Erklärungen:

1
2
3
4
5
6
7
8
9
#!/bin/bash            
 
#first get su
sudo ls > /dev/null
if [ $? -ne 0 ]
then
   echo "You need root-privileges to go on! So type your password correct!"
   exit 2
fi

Hier holen wir uns nur die benötigten Root-Rechte, da diese im weiteren Verlauf des Skriptes benötigt werden.

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#check if device is connected
cat /proc/partitions | grep 488386584 > /dev/null
if [ $? -ne 0 ]
then
   echo "Device not connected!"
   exit 1
fi   
 
printf "checking device: "
dev=$(cat /proc/partitions | grep 488386584 | awk '{print $4}')
for i in $dev
do
   if [ $(udevinfo --query=all --name=/dev/$i | grep "ID_SERIAL=" | awk -F= '{print $2}') = "WD_5000AAK_External_574341505734313138393536-0:0" ]
   then
      dev=$(echo /dev/$i)
   fi
done
partition=$(echo $(echo $dev)7)

Anhand der Blockanzahl wird geprüft ob die Festplatte angeschlossen ist. Dies ist natürlich nicht ideal, da es auch andere 500GB Modelle darauf zutreffen. Da ich dieses Skript aber nur bei angeschlossener Festplatte ausführe, reicht mir das. Anhand der Seriennummer wird dann geprüft, an welchem Device die Platte erkannt wurde. Speichern wir uns natürlich alles schön weg :)

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
luksMapper=""
mapName="externe"
mount1="/media/usb-1"
mount2="/media/usb-2"
mount3="/media/usb-3"   
 
printf "found at $dev\n"   
 
printf "checking mappings: "
#check for cryptmount
for mapper in $(ls /dev/mapper/)
do
   devFound="false"
   sudo cryptsetup status $mapper > /dev/null 2>&1
   if [ $? -eq 0 -a $devFound=false ]
   then
      actDev=$(sudo cryptsetup status $mapper | grep device | awk '{print $2}')
      if [ "$actDev" = "$partition" ]
      then
         devFound="true"
         luksMapper=$mapper
      fi
   fi
done

Oben sind eigentlich nur ein paar Variablen, die später gebraucht werden, z.B. wohin die 3 Partitionen gemountet werden und wie das Mapping benannt wird. Nach diesen Definitionen wird geprüft, ob die Platte schon auf ein Mapping gehangen wurde. Da die Mappings in /dev/mapper sind, wird einfach alles dort drin mit “cryptsetup status $mapper” geprüft, ob das Mapping auf meine Partition passt. Das wird dann, wenn gefunden, gespeichert.

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#get all mounts to unmount
mountDev=""  
 
if [ "$luksMapper" = "" ]
then
   printf "no mapping found\n"
else
   mountDev=$(echo $mountDev $(mount | grep /dev/mapper/$luksMapper | awk '{print $3}'))
   printf "found at /dev/mapper/$luksMapper\n"
fi  
 
printf "checking mounts: "
for mounts in $(mount | grep $dev | awk '{print $3}')
do
   mountDev=$(echo $mountDev $mounts)
done  
 
if [ "$mountDev" = "" ]
then
   printf "nothing found\n"
else
   printf "found at $mountDev\n"
   printf "unmounting: "
   for mounts in $mountDev
   do
      sudo umount $mounts
   done
   printf "done\n"
fi  
 
if [ "$luksMapper" = "" ]
then
   echo > /dev/null
else
   printf "closing mapping: "
   sudo cryptsetup luksClose $luksMapper
   printf "done\n"
fi

Langes Stückchen, kurzer Text. Es werden alle Mountpunkte der Platte gesucht und unmountet. Zusätzlich auch eventuell geöffnete Mappings.
Bis zu diesem Punkt kann man das Skript auch wunderbar nehmen um die Platte korrekt zu unmounten usw. um sie gefahrlos abzustöpseln.

94
95
96
97
98
99
100
101
102
103
printf "opening mapping at /dev/mapper/$mapName: \n"
sudo cryptsetup luksOpen $partition $mapName > /dev/null 2>&1
if [ $? -ne 0 ]
then
   printf "\n\n"
   echo "error while opening the mapping!"
   exit 2
else
   echo "mapping opened successfully"
fi

Das vorher definierte Mapping wird geöffnet. Das ist auch der Punkt, wo dann vom User das Passwort abgefragt wird.

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
echo "checking for mount directories: "  
 
printf "checking $mount1: "
if [ ! -d "$mount1" ]
then
   printf "creating\n"
   sudo mkdir "$mount1"
else
   printf "ok\n"
fi
printf "checking $mount2: "
if [ ! -d "$mount2" ]
then
   printf "creating\n"
   sudo mkdir "$mount2"
else
   printf "ok\n"
fi
printf "checking $mount3: "
if [ ! -d "$mount3" ]
then
   printf "creating\n"
   sudo mkdir "$mount3"
else
   printf "ok\n"
fi

Damit das Skript auch problemlos auf anderen Rechnern genutzt werden kann, sind die Mountpunkte definiert und werden bei Bedarf angelegt.

132
133
134
135
136
137
138
echo "mounting devices: "
sudo mount -t ntfs-3g -o rw,uid=1000,gid=1000 $(echo $dev)5 $mount1
sudo mount -t vfat -o rw,uid=1000,gid=1000 $(echo $dev)6 $mount2
sudo mount -t xfs /dev/mapper/$mapName $mount3  
 
echo "device mountet successfully and can now be used"
exit 0

Abschließend sollte natürlich auch noch alles gemountet werden :)

Angehängt findet man das komplette Skript. Natürlich sollte es individuell angepasst werden. Dies betrifft die jeweiligen Mountpunkte und die Partitionen. Bei Fragen, kann man sich gern an mich wenden.

Mountskript

Immer haben die anderen Recht…

January 22nd, 2008 @ 20:23 by lookshe

Hatte der Patrick in seinem Kommentar doch tatsächlich Recht. Wenn ich nur nach dem Etch-Tutorial vorgehe, klappt es wunderbar. Einziges Problem war noch der ClamAV, der wohl einem bekannten Bug zum Opfer gefallen ist und keinen Socket anlegt. Leider find ich grad den Bug-Eintrag nimmer. Jetzt läuft zum Scannen der Mails jedenfalls AntiVir. Ich weiß, nicht die beste Wahl, aber was anderes kostenloses, dass unter Linux läuft und sich in Amavis integrieren lässt, habe ich leider nicht gefunden.
Etwas Nerviges war noch, dass Spam zwar markiert wird, aber trotzdem noch im normalen Posteingang landet. Das hat auch noch mal paar Stunden gebraucht, da Google da leider nicht allzu hilfreich war. Jetzt gehts allerdings. Hatte von Anfang an eine fast richtige Lösung gehabt. Dovecot legt die Mails per “deliver” ab. Ein Script hatte ich ja schon, nur da dies nicht ging, habe ich mehrere andere Sachen mit procmail und maildrop probiert. Leider funktioniert das alles nicht, wenn man Dovecot nutzt, da dann vom Postfix das “mailbox_command” in der Config ignoriert wird. Dann stellte sich später raus, als ich endlich mal in das Log vom Dovecot gesehen habe, dass alles die ganze Zeit richtig war, nur der Ordner falsch angegeben wurde. Auf der Platte sind die Mailverzeichnisse mit .$Ordnername angegeben, wenn man es mit Deliver verschieben will, muss man die Ordner ohne den Punkt vorne dran angeben… darauf muss man erstmal kommen.

So sieht das Script jetzt jedenfalls aus:

require "fileinto";
if header :contains "subject" ["SPAM"] {
   fileinto "Junk";
} else {
   keep;
}

Wenn man sich die Dokumentation zu Sieve, so heißt die Sprache in der man sowas schreibt, mal genauer ansieht, kann man damit echt tolle Mailfilter und noch einiges mehr basteln. Werd ich mich mal irgendwann ransetzen, dann brauch ich das nicht mehr erst im Thunderbird über Filter sortieren lassen.

Durch das wälzen der Dokus, kann ich das ganze jetzt aber auch problemlos mit maildrop und procmail machen. Hatte also auch was Gutes. :)

Die spinnen die Amis

January 20th, 2008 @ 3:35 by lookshe

Da hat’s mich doch fast vom Stuhl gehauen heute, als ich diese Heise-News im Ticker gelesen habe…
60.000 Dollar Strafe für DNS-Abruf

Zitat:

Er benutzte den UNIX-Befehl “host -l” und stieß damit einen Zonentransfer beim DNS-Server der Firma Sierra Corporate Design an. Der Server rückte auf diesen Befehl hin die Informationen bereitwillig heraus, und damit die komplette interne Adress- und Namensstruktur von Sierra. Nach eigenen Angaben ist die Firma spezialisiert auf Webhosting und Internet-Services.

Der Server war also öffentlich zugänglich und gab auf eine simple DNS-Anfrage alles preis. Wenn man das verhindern will, sollte man es sperren. Für eine Firma, die im Bereich Webhosting und Internet-Services tätig ist, sollte dies kein Problem darstellen, in dem Fall aber scheinbar schon…

Hier mal der Auszug aus der Manpage von host:

List mode is selected by the -l option. This makes host perform a zone transfer for zone name. Transfer the zone printing out the NS, PTR and
address records (A/AAAA). If combined with -a all records will be printed.

Ganz böser Befehl also, wird wohl in “Good old Germany” dann auch bald verboten werden, Hackerparagraph und so.

Weiter heißt es im Text:

Das Gericht stellte fest, dass Ritz dabei seine “Identität hinter Proxies verbarg, ein UNIX-Betriebssystem verwendete und neben anderen Methoden Shell Accounts einsetzte. Außerdem gab er sich als Mail-Server aus.” Die auf diese Weise gewonnenen Informationen machte Ritz publik. Diese Information, stellte das Gericht fest, sei nicht öffentlich verfügbar gewesen. Damit habe Ritz die Datensicherheit von Sierra gefährdet, Ritz sei also als Hacker einzustufen, schließlich sei der Befehl “host -l” dem normalen Anwender nicht bekannt.

Nicht öffentlich zugänglich? Dabei hat er doch mit der Aktion das genaue Gegenteil bewiesen.
Und ein UNIX-Betriebssystem, uh sehr böse!!! Da ich das Windows ja auch nur noch zum Spielen nutze, und sonst immer Linux, bin ich natürlich auch ein ganz böser H4xx0r *g*. Apropos Hacker, da könnte man doch glatt mal auf’s Habo verweisen. Sind ja auch alles H4xx0r dort. Zumindest die meisten im Planschbecken (leider nur für angemeldete Mitglieder sichtbar)

Aber die Strafe errechnet sich ja mal auch geil:

Der nachgewiesene Schaden für Sierra beläuft sich dem Urteil zufolge auf knapp 3000 Dollar für die durch Ritz’ Aktionen notwendig gewordenen Änderungen der internen Kommunikationsstruktur, also Änderungen von Hostnamen und -adressen. Daraus errechnete das Gericht eine Zahlung von 50.000 Dollar – ein in den USA übliches Verfahren, wo anders als im deutschen Recht Strafe und Schadenersatz bei vorsätzlichen Taten miteinander verquickt werden. Obendrauf kommen noch einmal 10.000 Dollar für Missachtung des Gerichts; Ritz hatte während des laufenden Verfahrens die von Sierra betriebene Seite Newsfeeds.com aufgerufen, obwohl ihm das Gericht untersagt hatte, “irgendeine Website von Sierra zu besuchen”.

Bei kleinen Vergehen hauen wir also erstmal ordentlich was drauf. Ja ne, schon klar…

Aber irgendwie hat der Typ schon was, sich das Gericht einfach so am Arsch vorbeigehen zu lassen. Mal sehen wie das weitergeht, da kommt bestimmt noch ein Echo.