Tim Jansen's Blog (deutsch)


2003/09/21
C Applikationen
Diese Woche haben es sowohl OpenSSH als auch LSH geschafft, mit Root Exploits mein letztes Vertrauen in C Server zu zerstören. Mal ganz abgesehen von den üblichen Sendmail-Problemen, über die schon niemand mehr redet. Offensichtlich ist es nicht nicht möglich, einen komplexen Server in C zu programmieren ohne ein ernsthaftes Sicherheitsproblem pro Jahr. Deswegen sollten sie alle ersetzt werden. Ein guter Grund mehr, Server mit dem KDE Framework zu bauen. Dies könnte eine gute Alternative sein zwischen Scriptsprachen und Java, die sich nicht sonderlich gut ins System integrieren und Resourcen schlucken, und C mit seinen Sicherheitslücken.

Knot
Da nun auch noch mein Hauptserver bzw dessen Festplatte den Geist aufgegeben hat, bin ich nicht sehr viel weiter gekommen, weil ich einfach nicht testen kann. Die von mir geplante SLP Extension, um Services in allen Sprachen zu finden, habe ich nach einer kleinen Diskussion auf srvloc-discuss aufgegeben und stattdessen eine Lösung implementiert, die zusätzlich zur voreingestellten Sprache gleichzeitig in Englisch suchen kann. Das ist implementiert, aber auch nicht getestet. Zum Testen der KDE API fehlt mir auch noch ein Testprogramm, damit habe ich ein wenig angefangen, bin aber nicht sehr weit. Vielleicht mache ich dies heute.

KDE 4.0
Was ich vielleicht am meisten in Qt/KDE vermisse sind abstrakte Klassen für Byte Ströme wie InputStream und OutputStream. QIODevice ist kein wirklicher Ersatz, es ist zu komplex zu implementieren und entspricht mehr einem File Descriptor. Folge ist, dass viele APIs relativ unflexibel oder unkomfortabel gestaltet sind. Eine einfache Möglichkeit, grössere Datenmengen komfortabel zu verarbeiten fehlt, entweder haben die APIs umständliche eigene Methoden zum schreiben oder lesen oder sie nehmen nur ganze Files oder Speicherregionen als Ein- bzw Ausgabe. Daher habe ich gestern den halben Tag damit verbracht, eine Java-ähnliche API zu schreiben, inklusive Pendants zu Java Klassen wie dem BufferedOutputStream, dem ByteArrayOutputStream und Kompatibilität zu QIODevice mittels Adapterklassen. Ich halte meine API für schöner als die von Java, die Klassen sind simpler und vor allem habe ich meine Lieblingshelferklasse für Input/OutputStreams, Pipe, dabei. Pipe erlaubt es, synchron oder asynchron Daten von InputStreams in OutputStreams zu schreiben, womit man sich praktisch alle Schleifen zum Kopieren von Daten spart. Die Klassen existieren zur Zeit nur als Header-Dateien. Sobald ich sie brauche (und das wird wohl sein, wenn ich Knot's HTTP Interface schreibe), werde ich sie implementieren und auf KDE Developers vorstellen.



This page is powered by Blogger. Isn't yours? Creative Commons License
All text in this blog is licensed under a Creative Commons License.
(Images containing screenshots etc are excluded)