Quassel – PHP_search
Ich nutze ja schon eine Weile lang Quassel-IRC. Leider durchsucht die Suche nur das bereits vorhandene Backlog (bzw. die "Chathistorie") und man muss immer erst mühsam bis zum Anfang hochscrollen, damit er sich "mehr" holt.
Jetzt hab ich einfach auf dem Server auf dem der Core läuft folgendes PHP-Script hinterlegt:
#!/usr/bin/php -q
<?php
$shortopts = "";
$shortopts .= "h:";
$shortopts .= "u:";
$shortopts .= "c:";
$shortopts .= "s:";
$options = getopt($shortopts);
function getMessage($db, $quasseluser, $channel, $search = null) {
$quasseluser = sqlite_escape_string($quasseluser);
$channel = sqlite_escape_string($channel);
$search = sqlite_escape_string($search);
$sql = '
SELECT DISTINCT
backlog.time AS time,
sender.sender AS sender,
backlog.message AS message,
buffer.buffername AS buffername
FROM backlog
OUTER JOIN quasseluser, buffer, sender
ON (
quasseluser.username = "'.$quasseluser.'"
AND
backlog.bufferid = buffer.bufferid
AND
quasseluser.userid = buffer.userid
AND
buffer.buffername LIKE "%'.$channel.'%"
AND
sender.senderid = backlog.senderid
)';
if ($search != null) {
$sql .= ' WHERE message LIKE "%'.$search.'%";';
}
$output = array();
$longestname = 0;
foreach ($db->query($sql) as $row) {
$sender = explode("!", $row['sender']);
$sendername = $sender[0];
if (strlen($sendername) > $longestname) {
$longestname = strlen($sendername);
}
array_push(
$output,
array(
date("Y-m-d H:i:s", $row['time']),
$row['buffername'],
$sendername,
$row['message']
));
}
foreach ($output as $entry) {
printf("%s (%s) %s : %s\n", $entry[0], $entry[1], str_pad($entry[2], $longestname, " "), $entry[3]);
}
printf("Es wurden %u Ergebnisse gefunden.\n", count($output));
}
try {
$homepath = $options["h"];
$username = $options["u"];
$buffer = $options["c"];
$search = $options["s"];
if(!$homepath || !$username || !$buffer) {
$output = "usage: ";
$output .= __FILE__." -h <path/to/quassel/sqlite> -u <quasseluser> -c <channel/buffer> [-s <string>]";
die($output . "\n");
}
$db = new PDO('sqlite:' . $homepath);
getMessage($db, $username, $buffer, $search);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Keinerlei Fehlerbehandlung, wenns schiefläuft geht bestimmt irgendwas irreperabel kaputt. Keine Garantie für nichts
Ein möglicher Aufruf wäre:
14:34:46 pennywise ~# ./searchQuassel.php -h quassel-storage.sqlite -u pennywise -c quassel.de -s foobar 2008-11-03 11:49:01 (#quassel.de) pennywise : und da war der Bot jetzt halt drin, weil er irgendwas gesagt hat wie "hallo foobar, wilkkommen in der hölle" 2008-11-06 20:35:57 (#quassel.de) pennywise : kann ich auch ein temporäres netzwerk haben? sowas wie /join irc.server.com/#foobar? 2008-11-12 11:52:56 (#quassel.de) hanswurst : im core-log steht nur "foobar benutzer x getrennt"
manpage
-h : Pfad zur SQLite-DB von quasselcore. Liegt meist in ~/.config/quassel-irc.org/
-u : Der Benutzer mit dem man sich in quassel einloggt. Dies hat nichts mit der IRC-Identität zu tun.
-c : Der Channel (bzw. das Query) in dem gesucht werden soll. Ist case insensitive und kann auch nur teilweise übergeben werden (z.B. "quassel" findet "#quassel", "#quassel.de" und "quassel-announce")
-s : OPTIONAL. Der Text nach dem gesucht werden soll. Wenn weggelassen, dann werden alle Nachrichten im übergebenen Channel zurückgegeben
Ich hatte auch noch ne Version mit Prepared Statements, aber die hat beim "$db->prepare($sql)" einfach kein Statement erzeugt. Ohne Fehlermeldung ohne alles. WTF?!
Unix vs. Dos
Jaja, UNIX ("\n") und DOS ("\r\n") Zeilenenden ... FALSCH:
./funD.reinstallExtension.sh : No such file or directoryh: line 3: cd: /cygdrive/c/Dokumente und Einstellungen/matthiasc/Eigene Dateien/Diplomarbeit/ ./funD.reinstallExtension.sh: line 4: $'\r': command not found : No such file or directorysion.sh : No such file or directory.sh : No such file or directorynsion ./funD.reinstallExtension.sh: line 8: $'\r': command not found : No such file or directoryh: line 9: cd: /cygdrive/c/Dokumente und Einstellungen/matthiasc/Eigene Dateien/Diplomarbeit
RICHTIG:
11:20:34 matthiasc@fungdenhut /cygdrive/c/Dokumente und Einstellungen/matthiasc/Eigene Dateien/Diplomarbeit $ ./funD.reinstallExtension.sh 11:20:36 matthiasc@fungdenhut /cygdrive/c/Dokumente und Einstellungen/matthiasc/Eigene Dateien/Diplomarbeit $
FileZilla & proftpd
Heute wollte ich mal wieder was per FTPS hochladen. Schmeiss also den FileZilla an, der informiert mich über eine neue Version, also mache ich das Update. Nun hab ich FileZilla 3.1.0.1 und auf dem Server läuft der proftpd 1.3.1_rc2-r3.
So, der Fehler ist nun
Status: Server hat die TLS-Verbindung nicht ordnungsgemäß geschlossen
Fehler: Could not read from transfer socket: ECONNABORTED - Connection aborted
Ahja. Ein bisschen googlen erbrachte dann erste Aufschreie im FileZilla-Forum. Da gibt's dann sowas wie
Frage: Hilfe, es geht nimmer!
Antwort: Upgrade auf einen besseren und korrekteren FTP-ServerQuelle: http://forum.filezilla-project.org/viewtopic.php?f=2&t=7580
Ansonsten gibts noch drei Threads, in denen das Problem etwas detailierter beschrieben wird, inkl. warum FileZilla hier das so macht wie er es macht, wobei der letzte der ausführlichste ist.
- http://forum.filezilla-project.org/viewtopic.php?f=2&t=7587
- http://forum.filezilla-project.org/viewtopic.php?f=2&t=7559
- http://forum.filezilla-project.org/viewtopic.php?f=2&t=7465
Auf filezilla-project.org gibts auch einen Newseintrag dazu:
2008-07-24 - Security Advisory
FileZilla 3.1.0.1 fixes a vulnerability regarding the way some errors are handled on SSL/TLS secured data transfers.
If the data connection of a transfer gets closed, FileZilla did not check if the server performed an orderly TLS shutdown.
Impact
An attacker could send spoofed FIN packets to the client. Even though GnuTLS detects this with GNUTLS_E_UNEXPECTED_PACKET_LENGTH, FileZilla did not record a transfer failure in all cases.
Unfortunately not all servers perform an orderly SSL/TLS shutdown. Since this cannot be distinguished from an attack, FileZilla will not be able to download listings or files from such servers.
Affected versions
All versions prior to 3.1.0.1 are affected. This vulnerability has been fixed in 3.1.0.1
Nunja, so wie es aussieht, verhaelt sich FileZilla so: Wir haben Recht, der Server is das Problem. Nungut, auf der Maillingliste von proftpd sieht das so aus:
http://sourceforge.net/mailarchive/forum.php?forum_name=proftp-user
da sieht man unter dem Thread [Proftpd-user] Filezilla - explicit TLS vom 29.07. 07:25 die ersten Berichte. Auf der Entwicklerliste wurde schon ein Patch eingereicht und hier (
[Proftpd-devel] Patch for mod_tls shutdown) diskutiert. Jetzt heisst es warten, bis der Patch auch bei Gentoo ankommt.
UPDATE: Oder einfach den FileZilla downgraden, das macht der Installer automatisch, einfach einen alten FileZilla runterladen.
Weitere Links:
IEs4Linux
Falls man dann doch mal den Internet Explorer braucht unter Linux (sei es fuer Webdesignzwecke oder weil Seiten nur mit dem IE funktionieren), dann sollte man sich mal
angucken
UPDATE:
Ok, der Installer ist total verbuggt. Man muss ihn teilweise einfach mehrsmals starten, dann kommt er einen Schritt weiter, manchmal hilft es auch anstatt nur den IE6 auch den IE5.5 und IE5 zu installieren. Wenn es aber mal durch ist, dann gibts einen IE6 mit Flash-Plugin, man ist also fuer ziemlich alles geruestet. Leider ist keine JVM installiert, so dass es fuer mich nichts taugt. Das nachinstallieren der JVM funktionierte nicht und der Autor von IEs4Linux sagt selber dass das nicht so schlimm waere. Fuer ihn vielleicht.
3/14
Toller Titel, ist das Datum von heute, nur in der englischen Darstellungsweise. Heute ist ja auch der "Huldigt der Zahl PI"-Tag. Was es alles gibt.
Kommen wir zu der Zusammenfassung der letzten Tage, es ist eine Menge passiert, und meistens kam ich nicht dazu es hier zu veröffentlichen. Deswegen wird dies hiermit und sofort nachgeholt:
- Inzwischen kann ich Boxen flashen. Was bedeutet: Ich kann den FPGA flashen und danach noch das Bios der Box. Näheres wird nicht erwähnt
- Tank Gauging aus der Sicht des Marketings ist doch ziemlich interessant. Bisher kannte ich nur die Entwicklersicht, aber mal aus dem eigenen Teller auszusteigen um über einen fremden Tellerrand zu blicken hat durchaus Vorteile.
- Postsendeanträge die nicht funktionieren sind lästig. Und da Nacharbeit teuer ist, hab ich 40 € und 6h Zeit investiert um ein Formular aus Karlsruhe zu besorgen das für mein Visum unentbehrlich ist. Ärgerlich wenn man Vorbereitungen trifft und diese absagen muss, weil eine "fremde" Macht einem einen Strich durch die Rechnung macht
- Refactoring ist ein interessantes Thema. Dazu werde ich noch einen eigenen Artikel schreiben.
- Das Visum J-1 wurde inzwischen genehmigt (der Termin im US-Konsulat Frankfurt war heute) und wird mir im Laufe der nächsten Woche postalisch zugesandt. Ärgerlich ist es nur wenn man Stunden warten muss, weil sich andere Leute nicht an die Vorschriften halten und den kompletten Sicherheitscheck aufhalten, weil Sie mal nicht eine Stunde auf ihr Handy verzichten können. Auf jeden Fall kann der Flug jetzt gebucht werden.
- Getoastetes Toast mit Schweinerückensteak und Champignonsahnesoße mit gemischtem italienischem Salat ist unglaublich lecker. Interessanterweise kann man mit Fleischkäse auch ein Cordon Bleu machen und das schmeckt dann sogar.
Konkurrenzbewusstsein
finch, die cui von pidgin
Da ich zur Zeit die consolenvariante ausprobier, hier mal die shortcuts:
- Alt + a: Bring up a list of available actions. You can use this list to access the accounts window, plugins window, preference window etc.
- Alt + n: Go to the next window.
- Alt + p: Go to the previous window.
- Alt + w: Show the list of windows. You can select and jump to any window from the list.
- Alt + c: Close the current window.
- Alt + q: Quit.
- Alt + m: Start moving a window. Press the cursor keys to move the window. When you are done, press Enter or Escape.
- Alt + r: Start resizing a window. Press the cursor keys to resize the window. When you are done, press Enter or Escape.
- Alt + d: Dump the contents of the screen in HTML format in a file named "dump.html" in working directory.
- Alt + . : Move the position of the current window in the window list one place to the right.
- Alt + , : Move the position of the current window in the window list one place to the left.
- Alt + l : Refresh the windows. This is useful after resizing the terminal window.
- Alt + 1 2 ... 0 : Jump to the 1st, 2nd ... 10th window.
- Ctrl + o: Bring up the menu (if there is one) for a window. Note that currently only the buddylist has a menu.
- Alt + / : Show a list of available key-bindings for the current widget in focus.
- Alt + > : Switch to the next workspace
- Alt + < : Switch to the previous workspace
- Alt + t: Tag (or untag) the current window
- Alt + T: Attached all the tag windows to the current workspace
- Alt + s :Show the workspace list
- F9 Create a new workspace and switch to it