Autor Beitrag
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Mi 13.02.08 14:49 
user profile iconjasocul hat folgendes geschrieben:
user profile iconelundril hat folgendes geschrieben:
oder du machst es ganz lustig und zippst die Datei einfach. So machts OpenOffice.
Wäre mir neu. Du meinst sicher MS-Office.

Also OpenOffice-Dateien sind sicher Zip-Archive. Bei MS-Office wäre mir das wiederum neu.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 13.02.08 14:52 
Stimmt tatsächlich. Bei OO sind die gezippt.
MS macht das seit Office 2007. Zumindest konnte ich das in der Version das erste mal feststellen.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 13.02.08 16:03 
Sag ich ja. ;-) wollt nämlich mal das Dateiformat in meinen Textus einbauen.

//edit: war ein Schwachsinnspost vorher. Deswegen gelöscht.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jackle32 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 7

Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
BeitragVerfasst: Di 19.02.08 12:42 
Also die Ideen mit dem zippen sind ja schön und gut aber einfach zu aufwendig. Werde jetzt dann einfach eine xml Datei benutzen, bei der ich die Endung ändere.

Gruß Jack

_________________
Es gibt keine dummen Fragen, nur dumme Antworten.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 19.02.08 13:45 
:shock: Wenn die 5 Zeilen Code oder so für Komprimierung bzw. Dekomprimierung, die man dafür selbst (ab-)schreiben muss, schon aufwendig sind, dann möchte ich lieber nicht wissen, was bei dir nicht aufwendig ist...
Aber Hauptsache ist ja, dass du eine für dich akzeptable Lösung hast ;-).
Zorro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win 2000, Win XP Pro
Delphi 7 Architect
BeitragVerfasst: Mi 20.02.08 00:02 
user profile iconjasocul hat folgendes geschrieben:
user profile iconelundril hat folgendes geschrieben:
oder du machst es ganz lustig und zippst die Datei einfach. So machts OpenOffice.
Wäre mir neu. Du meinst sicher MS-Office.


Jepp - OO machts schon länger und MS seit kurzem - und daran hängt nun auch die ganze (leidige) Diskussion um das Thema Dateiformat(e), anscheinend ist es ungemein wichtig, ein "eigenes" Format als "allgemein gültiges" zu haben...

Greetz
Zorro


Zuletzt bearbeitet von Zorro am Mi 20.02.08 00:06, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 20.02.08 00:04 
Da hat wohl jemand die zweite Seite nicht gelesen ;-).
jackle32 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 7

Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
BeitragVerfasst: Mi 20.02.08 15:28 
@jaenicke: Wenn es wirklich nicht mehr ist, dann ist das natürlich schon wieder zu überlegen, hast du dann dafür mal einen Beispielcode für mich

Gruß Jack

_________________
Es gibt keine dummen Fragen, nur dumme Antworten.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 20.02.08 15:50 
Du benötigst dafür lediglich diese Unit:
www.howtodothings.co...1211-pascal-lzh.html
sowie:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
  TCompressStream = class(TObject)
  private
    FSignature: array[0..5] of Char;
  public
    constructor Create; virtual;
    procedure Compress(InStream, OutStream: TStream; InSize: LongInt);
    procedure DeCompress(InStream, OutStream: TStream);
  end;

{ TCompressStream }

constructor TCompressStream.Create;
begin
  FSignature := 'XY2008';
end;

procedure TCompressStream.Compress(InStream, OutStream: TStream; InSize: LongInt);
var InBuffer, OutBuffer: BufferArray;
  CompressedSize, BytesRead, FinalPos, SizePos, TotalSize: LongInt;
begin
  TotalSize := 0;
  OutStream.WriteBuffer(FSignature, SizeOf(FSignature));
  SizePos := OutStream.Position;
  OutStream.WriteBuffer(TotalSize, SizeOf(TotalSize));
  while InSize > 0 do
  begin
    BytesRead := InStream.Read(InBuffer, SizeOf(InBuffer));
    CompressedSize := Compression(@InBuffer, @OutBuffer, BytesRead);
    OutStream.WriteBuffer(CompressedSize, SizeOf(CompressedSize));
    OutStream.WriteBuffer(OutBuffer, CompressedSize);
    TotalSize := TotalSize + CompressedSize + SizeOf(CompressedSize);
    InSize := InSize - BytesRead;
  end;
  FinalPos := OutStream.Position;
  OutStream.Position := SizePos;
  OutStream.WriteBuffer(TotalSize, SizeOf(TotalSize));
  OutStream.Position := FinalPos;
end;

procedure TCompressStream.DeCompress(InStream, OutStream: TStream);
var InBuffer, OutBuffer: BufferArray;
    CompressedSize, UnCompressedSize, InSize: LongInt;
    Sig: array[0..SizeOf(FSignature)-1] of Char;
begin
  InStream.ReadBuffer(Sig, SizeOf(FSignature));
  if Sig <> FSignature then
    raise Exception.Create('Wrong file type');
  InStream.ReadBuffer(InSize, SizeOf(InSize));
  while InSize > 0 do
  begin
    InStream.ReadBuffer(CompressedSize, SizeOf(CompressedSize));
    InStream.ReadBuffer(InBuffer, CompressedSize);
    UnCompressedSize := DeCompression(@InBuffer, @OutBuffer, CompressedSize);
    OutStream.WriteBuffer(OutBuffer, UnCompressedSize);
    InSize := InSize - CompressedSize - SizeOf(CompressedSize);
  end;
end;
Die Benutzung ist dann einfach:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    DataFileStream.Position := 0;
    with TCompressStream.Create do
      try
        DeCompress(DataFileStream, DataStream);
      finally
        Free; // with TCompressStream.Create
        DataFileStream.Free;
      end;
DataFileStream ist bei mir ein geöffneter TFileStream, DataStream ein TMemoryStream in den die entpackten Daten kommen. Dabei gibt es bei mir jeweils einen Dateikopf mit CRC-Daten, so dass korrupte Daten erkannt werden. Ansonsten könnte ein Fehler auftreten, d.h. man muss irgendwo sicherstellen, dass die Daten unbeschädigt sind. (Wie ja auch bei einer simplen Textdatei bzw. INI-/XML-Datei ;-)).

Die Komprimierung ist genau das selbe, nur mit Compress. Die Signatur FSignature dient zur Überprüfung, ob die Datei wie erwartet komprimiert vorliegt. Da ich die Gültigkeit der Daten bereits vorher und danach verifiziere, behandle ich eine Exception nur mit try..finally, ggf. müsste das ein try..except werden, und ein Fehler behandelt werden.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Sa 23.02.08 01:02 
Ich würde dennoch die Daten, wenn man sie vor einer Manipulation schützen möchte verschlüsseln!
Eine Begründung dies Abzulehnen war es den Schlüssel aus dem RAM zu lesen, aber wenn sich jemand diese Mühe macht und das kann, dann könnte er auch die Daten - egal bei welchem Verfahren - im RAM editieren!

Für Komprimierung und Verschlüsselung gibt es heute so viele Bibliotheken, die man einfach einbinden kann und sehr effizient laufen, sodass man von Aufwand egal in welchem Sinne nicht sprechen kann!

Nur komprimieren würde ich persönlich ablehnen, weil wenn jemand etwas ändern möchte, dann wird er bereits im Header der Datei feststellen, dass es sich um eine Komprimierung handelt!
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 23.02.08 16:12 
user profile iconSirke hat folgendes geschrieben:
Ich würde dennoch die Daten, wenn man sie vor einer Manipulation schützen möchte verschlüsseln!
Eine Begründung dies Abzulehnen war es den Schlüssel aus dem RAM zu lesen, aber wenn sich jemand diese Mühe macht und das kann, dann könnte er auch die Daten - egal bei welchem Verfahren - im RAM editieren!

Für Komprimierung und Verschlüsselung gibt es heute so viele Bibliotheken, die man einfach einbinden kann und sehr effizient laufen, sodass man von Aufwand egal in welchem Sinne nicht sprechen kann!

Nur komprimieren würde ich persönlich ablehnen, weil wenn jemand etwas ändern möchte, dann wird er bereits im Header der Datei feststellen, dass es sich um eine Komprimierung handelt!


das sind dann aber auch nur leute die sich damit auskennen und die können auch mit ner anleitung nen Trainer machen und das ebenfalls im RAM manipulieren. Was lernen wir daraus? es gibt nix sicheres!

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 25.02.08 23:08 
user profile iconSirke hat folgendes geschrieben:
Ich würde dennoch die Daten, wenn man sie vor einer Manipulation schützen möchte verschlüsseln!
Eine Begründung dies Abzulehnen war es den Schlüssel aus dem RAM zu lesen, aber wenn sich jemand diese Mühe macht und das kann, dann könnte er auch die Daten - egal bei welchem Verfahren - im RAM editieren!

Ich hab mit Narses in der Hinsicht mal meine Späße gehabt ... Er hat ein Programm geschrieben und kurz nach dem er mir die Version immer zugeschickt hatte, ging ne Mail an ihn raus, dass ich den RAM-Schutz umgangen hab ... Bis er dann irgendwann jegliche Daten verschlüsselt im RAM abgelegt hatte ... Da musste ich dann passen; und dabei wusste ich, wie die Verschlüsslung funktionierte - ich konnte die Daten aber nicht mehr ausfindig machen. Verschlüsslung im RAM bringt also schon einiges, und wenn man will, dass Daten nicht manipuliert oder ausgelesen werden, sollte man sie eh nicht mit einem Computer verarbeiten ... ;-)

user profile iconSirke hat folgendes geschrieben:
Für Komprimierung und Verschlüsselung gibt es heute so viele Bibliotheken, die man einfach einbinden kann und sehr effizient laufen, sodass man von Aufwand egal in welchem Sinne nicht sprechen kann!

ACK. Der größte Aufwand daran ist es herauszufinden, wie man am intelligentesten die gewünschte Bibliothek nutzt.

user profile iconSirke hat folgendes geschrieben:
Nur komprimieren würde ich persönlich ablehnen, weil wenn jemand etwas ändern möchte, dann wird er bereits im Header der Datei feststellen, dass es sich um eine Komprimierung handelt!

Und wenn man etwas verschlüsselt, wird jemand, der etwas ändern will, bereits im Header feststellen, dass es sich um eine Verschlüsslung handelt.

Sorry, aber jede Kodierung von Informationen hinterlässt ihre Spuren. Und sei's nur, wenn der Admin das Backup auf /dev/null kodiert ... dann hinterlässt das nen leeren Arbeitsplatz des Admins.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Di 26.02.08 00:17 
user profile iconBenBE hat folgendes geschrieben:
user profile iconSirke hat folgendes geschrieben:
Nur komprimieren würde ich persönlich ablehnen, weil wenn jemand etwas ändern möchte, dann wird er bereits im Header der Datei feststellen, dass es sich um eine Komprimierung handelt!

Und wenn man etwas verschlüsselt, wird jemand, der etwas ändern will, bereits im Header feststellen, dass es sich um eine Verschlüsslung handelt.
Jain, jeder Zufallstext sieht einer Verschlüsselung gleich und man benötigt den Algorithmus, welchen man - klar - auf viele gewisse Weisen bekommen kann! Dennoch muss der Schlüssel herausgefunden, was aba vllt auch nicht so schwer ist! Dennoch kann man hier gewissermaßen auf Security-By-Obsecurity vertrauen, indem man einen bekannten Algo nimmt, aber die Wahl nicht veröffentlicht
Zum Schützen bleiben dann ja noch Formeln um Zahlen z.B. aufzuteilen und man kommt dann nur mit allen Zahlen zu der richtigen einen, alle anderen liefern falsche Ergebnisse. Über Checksummen kann man dann noch feststellen, ob das die richtgen sind, die gewonnen wurden!

Und klar, alles was iwie vom Computer verarbeitet wird, kann man finden, daher bleibt einem nur abzuwägen, was wie Sinnvoll ist. Zum einen eben der Aufwand und Effiziens im Vergleich zu der Sicherheit!

Daher haben wir nun um den Heißen Brei rumgeredet und sind an sich zu keinem Ergebnis gekommen, was man hier aber meiner Meinung nach auch nicht wirklich geht, weil man eben erst einen Kompromiss für jedes Projekt einzeln machen muss!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 26.02.08 01:24 
user profile iconSirke hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
user profile iconSirke hat folgendes geschrieben:
Nur komprimieren würde ich persönlich ablehnen, weil wenn jemand etwas ändern möchte, dann wird er bereits im Header der Datei feststellen, dass es sich um eine Komprimierung handelt!

Und wenn man etwas verschlüsselt, wird jemand, der etwas ändern will, bereits im Header feststellen, dass es sich um eine Verschlüsslung handelt.
Jain, jeder Zufallstext sieht einer Verschlüsselung gleich und man benötigt den Algorithmus, welchen man - klar - auf viele gewisse Weisen bekommen kann! Dennoch muss der Schlüssel herausgefunden, was aba vllt auch nicht so schwer ist! Dennoch kann man hier gewissermaßen auf Security-By-Obsecurity vertrauen, indem man einen bekannten Algo nimmt, aber die Wahl nicht veröffentlicht

Security by Obscurity ist keine Sicherheit. Jeder der das ernsthaft behauptet sollte am besten so lange "Security by Obscurity bringt keine Sicherheit" an die Tafel schreiben, bis er's verstanden hat :P

In einem geb ich Dir aber Recht: Es macht einem das Leben schwerer ... Spätestens aber, wenn jemand mal in's Programm schaut, und sich durchschaut, wie da verschlüsselt oder encodiert wird, fällt dein System. Die meisten Keygens existieren auch nur, weil das zu schützende Programm auf Security by Obscurity setzt.

Und zu dem "Jeder Zufallstext sieht einer Verschlüsslung gleich": Jain ... auf den ersten Blick schon, die meisten Verschlüsslungsverfahren lassen sich aber dennoch an einer gewissen statistischen Verteilung von reinem Zufall unterscheiden.

Kleines Beispiel: Man nehme eine Stromverschlüsslung, die einen zufälligen Datenstrom D1 erzeugt und XORe auf diesen die Nutzdaten, wodurch man den Datenstrom D2 erhält. Selbst wenn D1 und D2 perfekt zufällig ausschauen, hinterlässt das XORen von Daten in D2 eine Veränderung der Verteilung, die man durch ausreichend große Datenmengen nachweisen kann.

user profile iconSirke hat folgendes geschrieben:
Zum Schützen bleiben dann ja noch Formeln um Zahlen z.B. aufzuteilen und man kommt dann nur mit allen Zahlen zu der richtigen einen, alle anderen liefern falsche Ergebnisse. Über Checksummen kann man dann noch feststellen, ob das die richtgen sind, die gewonnen wurden!

Schützt was? Dann schau ich in dein Programm und guck, wie Du die Daten einliest ... Schon hab ich auch wieder die entschlüsselten Daten. der einzig praktikable Weg zum Schutz von Daten, ist, diese nur verschlüsselt im Speicher zu halten und nur wenn nötig (einzeln) zu entschlüsseln, oder wenn möglich, gleich die verschlüsselte Form zu bearbeiten (auch das geht je nach Verschlüsslung nämlich ;-))

user profile iconSirke hat folgendes geschrieben:
Und klar, alles was iwie vom Computer verarbeitet wird, kann man finden, daher bleibt einem nur abzuwägen, was wie Sinnvoll ist. Zum einen eben der Aufwand und Effiziens im Vergleich zu der Sicherheit!

Daher haben wir nun um den Heißen Brei rumgeredet und sind an sich zu keinem Ergebnis gekommen, was man hier aber meiner Meinung nach auch nicht wirklich geht, weil man eben erst einen Kompromiss für jedes Projekt einzeln machen muss!

ACK. Wobei mitunter die einfachsten Dateiformate die effizientesten sind. Nichts ist schlimmer als Informationen redundant zu speichern, wenn Redundanz nicht benötigt wird. Das führt dann nur zu solchen Files wie bei M$ Word, wo ein leeres Dokument mal eben 20KB groß ist, obwohl nix drinsteht ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Di 26.02.08 09:12 
@Threadersteller
Mach das ganze doch so:

Schreib einfach munter deine Daten in eine Datei, evtl XOR verschlüsselt (einfach).
Dann hänge ans Ende der Datei oder irgendwo zwischendrin - wie du gerade lustig bist - eine Prüfsumme an.

Das sollte die meisten User davon abhalten an deinen Leveldaten etwas zu ändern.
100%igen Schutz gibt es so oder so nicht, aber mit dieser Methode hast du auf einfache Art und Weise
einen relativ effektiven Schutz aufgebaut

_________________
Delphi: XE - OS: Windows 7 Professional x64
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Di 26.02.08 11:35 
@BenBE: Ich meinte bei allem angespochenen zwar etwas anderes, doch nützt es jetzt hier nicht weiter drüber zu diskutieren, weil wir dann nur noch weiter vom Thema abkommen und uns im Kreis drehen!

user profile iconBenBE hat folgendes geschrieben:
der einzig praktikable Weg zum Schutz von Daten, ist, diese nur verschlüsselt im Speicher zu halten und nur wenn nötig (einzeln) zu entschlüsseln, oder wenn möglich, gleich die verschlüsselte Form zu bearbeiten (auch das geht je nach Verschlüsslung nämlich ;-))
Dennoch benötigt man doch einen Schlüssel, welchen man iwo speichern muss und somit abfangen kann! Dann mach das doch wieder keinen Sinn, nur ist ggf das verändern im RAM dann schwieriger!
Bei welcher Verschlüsselung kann man verschlüsselte Daten denn direkt weiter verarbeiten?! Aber kein bekannter Algo oder?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 26.02.08 17:24 
user profile iconSirke hat folgendes geschrieben:
@BenBE: Ich meinte bei allem angespochenen zwar etwas anderes, doch nützt es jetzt hier nicht weiter drüber zu diskutieren, weil wir dann nur noch weiter vom Thema abkommen und uns im Kreis drehen!

user profile iconBenBE hat folgendes geschrieben:
der einzig praktikable Weg zum Schutz von Daten, ist, diese nur verschlüsselt im Speicher zu halten und nur wenn nötig (einzeln) zu entschlüsseln, oder wenn möglich, gleich die verschlüsselte Form zu bearbeiten (auch das geht je nach Verschlüsslung nämlich ;-))
Dennoch benötigt man doch einen Schlüssel, welchen man iwo speichern muss und somit abfangen kann! Dann mach das doch wieder keinen Sinn, nur ist ggf das verändern im RAM dann schwieriger!

Finde mal den Schlüssel, wenn der gesamte RAM-Inhalt verschlüsselt ist ;-) Der Schlüssel wäre zwar das einzig unverschlüsselte daran,, Zufallsdaten (in so kleinem Maß, wie für einen Schlüssel benötigt) und die verschlüsselten Daten können aber praktisch nicht unterschieden werden.

user profile iconSirke hat folgendes geschrieben:
Bei welcher Verschlüsselung kann man verschlüsselte Daten denn direkt weiter verarbeiten?! Aber kein bekannter Algo oder?

Mit praktisch jeder Strom-Verschlüsslung ohne Feedback-Chaining. Vignere wäre z.B. eine, bei der das geht.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.