<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Ok, ich habe noch ein kleines Tool gebaut mit dem sich beliebige Token erzeugen lassen und den AuthorizatonController so angepasst dass die Tokens auch “constraints” haben können:<div class=""><br class=""></div><div class=""><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>❯ php misc/tools/token-helper.php decode $(php misc/tools/token-helper.php create andig --operation add --context data --valid 1.1.2019)</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>{"sub":"andig","iat":1516536798,"exp":1546297200,"vz:ctx":"data","vz:ops":"POST"}</div><div class=""><br class=""></div><div class="">In diesem Fall darf das 1 Jahr gültige Token ausschließlich “POST” auf den “/data” Kontext, also nur neue Daten anlegen aber nix löschen.</div><div class=""><br class=""></div><div class="">@Matthias: könntest Du im vzlogger eine Option einbauen mit der sich für das VZ API ein “Authorization: Bearer <token string>” Header mitschicken ließe?</div><div class=""><br class=""></div><div class="">@Frank: Cookie schaue ich mir noch separat an.</div><div class=""><br class=""></div><div class="">Viele Grüße, </div><div class="">Andreas</div><div class=""><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class="">On 21. Jan 2018, at 12:07, Andreas Goetz <<a href="mailto:cpuidle@gmail.com" class="">cpuidle@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Moin<br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On 20. Jan 2018, at 15:58, Frank Richter <<a href="mailto:frank.richter83@gmail.com" class="">frank.richter83@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">...<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><div class=""><span class=""><div class=""><br class=""></div></span>Da bin ich einmal nicht so schnell :O<br class=""></div></div></div></blockquote><div class=""><br class=""></div><div class="">kein Ding. Hab nur angefangen mich zu wundern, warum zweimal keine Reaktion zum selben Thema kommt...</div><div class="">Du hast uns halt zu sehr verwöhnt was Reaktionszeit angeht ;-)</div><div class="">Hoffe dein NAS-Recovery ist erfolgreich gewesen oder auf einem guten Weg!</div></div></div></div></div></blockquote><div class=""><br class=""></div>Gottseidank ja. Der Bootprozess klemmte weil metricbeat auf das defekte Volume zugreifen wollte- deshalb kam die Oberfläche nicht hoch. Nach Prozess killen gabs dann eine NAS Oberfläche mit der sich das defekte Volume reparieren ließ. Disk1 hatte seine Systempartition verloren- weiß der Geier warum….</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><div class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">...</div></blockquote><div class=""><br class=""></div></span>Dann greifen wir die Punkte doch auf:</div><div class=""><br class=""></div><div class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"></div></div></div><blockquote type="cite" class=""><span class=""><div class=""><div class="gmail_extra"><div class="gmail_quote">Am 25.12.2017 12:43 schrieb "Andreas Goetz" <<a href="mailto:cpuidle@gmail.com" target="_blank" class="">cpuidle@gmail.com</a>>:<br type="attribution" class=""><blockquote class="m_-158179271690499791quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class="">Servus,<div class=""><br class=""></div><div class="">Der PR steht hier zur Verfügung: <a href="https://github.com/volkszaehler/volkszaehler.org/pull/659" target="_blank" class="">https://github.com/<wbr class="">volkszaehler/volkszaehler.org/<wbr class="">pull/659</a></div><div class=""><br class=""></div><div class="">Vor Merge wär unabhängiger Test gut. Für die Installation im Image sind zwei Punkte wichtig:</div><div class=""><br class=""></div><div class="">1. unbeschränkten Zugang gibts jetzt nur noch von localhost und localnet</div><div class="">2. es werden ein secretkey (salt) und user/passwort für Schreibzugriffe benötigt, ggf -secretkey im installer automatisch erzeugen</div></div></blockquote></div></div></div><div dir="auto" class=""><br class=""></div></span><div dir="auto" class="">da fällt mir unsere alte Diskussion um manuelle, d.h. nicht vom Frontend abgesetzte API-Requests von extern ein. Diese funktionieren dann nicht mehr, weil man keine Möglichkeit hat, dem Request das nötige Authentifizierungs-Token mitzugeben. Das könnte ein Problem sein für alle, die ihren vz extern hosten.</div><div dir="auto" class="">Auch vzlogger könnte Stand heute nicht zu einer externen, abgesicherten Installation loggen, oder? Außer man erlaubt POST standardmäßig, aber das macht ja die Absicherung irgendwie witzlos.<br class=""></div></blockquote><div class=""><br class=""></div>Ich sehe zwei Möglichkeiten (da würde mich auch die Meinung von Justin interessieren):</div><div class=""><br class=""></div><div class="">1) wir erlauben die Erstellung von long-lived Tokens und bringen vzlogger bei so einen Token als curl Header mitzuschicken. Ist trivial, hat aber einen Nachteil: kommt so ein Token abhanden kann jeder damit machen was er will. Das ließe sich noch abmildern wenn wir dem Token eingeschränkte Rechte verpassen, z.B. nur POST oder nur für einzelne Kanäle. Das Grundproblem bliebe aber- Token weg, Tür offen.</div></div></div></div></blockquote><div class=""><br class=""></div><div class="">Ist das riskanter als eine verlorene Benutzername/Passwort-Kombination. Kann man ein fragliches Token serverseitig ungültig machen?</div></div></div></div></div></blockquote><div class=""><br class=""></div>Da Token nicht gespeichert werden kann man sie auch nicht einzeln ohne Codeeingriff ungültig machen. Änder man aber in der Config den secretkey dann sind alle Token ungültig. </div><div class=""><br class=""></div><div class="">Standard ist eigentlich die Tokens kurzlebig zumachen. “Richtig” löst man das z.B. mit OAuth was bedeutet dass jede Applikation sich neue Tokens bei Bedarf mittels API Key (=secret) anfordert. Das müsste aber in den vzlogger, also ein größerer Eingriff mit überschaubarem Nutzen.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class="">2) Man erlaubt tatsächlich POST von außen, und zwar nur auf /data:<br class=""></div><div class=""><br class=""></div><div class=""><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">      </span>[<span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">       </span></div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">              </span>'path'<span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">          </span>=> ‘/data',</div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">              </span>'methods'<span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">       </span>=> 'POST',</div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">         </span>'action'<span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">        </span>=> 'allow'</div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;"> </span>],</div><div class=""><br class=""></div><div class="">damit lassen sich ausschließlich Daten schreiben, aber zumindest keine Löschen (m.E. auch nicht ändern, wäre zu testen). Wenn dazu noch GET verboten wird:</div><div class=""><br class=""></div><div class=""><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">        </span>[</div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">             </span>'methods'<span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">       </span>=> 'GET',</div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">          </span>'action'<span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">        </span>=> ‘auth'</div><div class=""><span class="m_-158179271690499791Apple-tab-span" style="white-space: pre-wrap;">        </span>],</div></div><div class=""><br class=""></div><div class="">gibts auch ohne Login keine Möglichkeit mehr Daten oder Kanäle abzufragen. Das würde es mal deutlich schwieriger machen irgendwelche UUIDs rauszubekommen um dort Daten zu überschreiben.</div></div></div></blockquote><div class=""><br class=""></div><div class="">Das Risiko, dass UUIDs abhanden kommen, dürfte ähnlich sein wie beim Token?</div></div></div></div></div></blockquote><div class=""><br class=""></div>Ich verstehe die Frage nicht. Mir gings drum- wenn vzlogger per Token Zugang bekommt _und_ der Token verloren ginge- die Risiken zu  ermitteln. Aus meiner Sicht beherrschbar und nicht größer als heute ohne jede Zugriffsbeschränkung.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><div class=""></div><div class="">Variante 2) lässt sich heute per Config machen. Reicht das?</div></div></div></blockquote><div class=""><br class=""></div><div class="">Ich denke für den Moment reicht's, das mit den Tokens für vzlogger (und andere Clients) würde das Konzept aber IMHO noch runder machen. </div></div></div></div></div></blockquote><div class=""><br class=""></div>Gut, ich schau mal. Egtl. nicht schwierig. Ich schaue dass wir neue Tokens bauen die </div><div class=""><br class=""></div><div class="">a) eine lange Laufzeit haben und</div><div class="">b) nur bestimmte Rechte mitbringen wie etwa POST auf /data- mehr braucht der logger ja nicht</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><div class="">In jedem Fall wirds nicht schlimmer als heute da die Systeme aktuell ja komplett auf sind.</div></div></div></blockquote><div class=""><br class=""></div><div class="">Das stimmt, so lang es den Status quo nicht verschlechtert, sollte das einem Merge nicht im Weg stehen.</div><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class="">Wenn ich momentan Services ins Internet hänge stelle ich übrigens immer Traefik als Reverse Proxy davor- da lässt sich ganz einfach auch SSL und Basic Auth mit einschalten, auch das wären zusätzliche Absicherungsmöglichkeiten vor einer VZ Installation.<br class=""></div></div></blockquote><div class=""><br class=""></div><div class="">Schau ich mir mal genauer an. Macht das auch in einem althergebrachten System ohne Docker und Konsorten Sinn?</div></div></div></div></div></blockquote><div class=""><br class=""></div>Absolut. Heute brauchst Du ja auch einen Reverse Proxy  (apache, nginx). Traefik ist Welten einfache zu konfigurieren und kann viel mehr wie z.B selbst die LetsEncrypt Zertifikate erzeugen. Fertig ist die SSL Verschlüsselung...</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><blockquote type="cite" class=""><span class=""><div dir="auto" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="m_-158179271690499791quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class="">Letztlich bleibt dann die Frage ob es die ganze “public” Channel Mimik noch braucht oder die weggeschmissen werden sollte. Wer keinen Zugriff will kann ja einfach die Installation privat halten und hinter U//P verstecken. <br class=""></div></blockquote></div></div></div><div dir="auto" class=""><br class=""></div></span><div dir="auto" class="">Du würdest also alle Kanäle so behandeln wie die die heutigen public channels? Wäre für mich okay, allerdings funktioniert damit <a href="http://demo.volkszaehler.org/" target="_blank" class="">demo.volkszaehler.org</a> <wbr class="">nicht mehr in der heutigen Form.</div></blockquote><div class=""><br class=""></div>Das stimmt uns ist auch noch nicht implementiert. Für Demo müsste es dann einen automatisch eingeloggten `guest` user geben der im Falle von Demo eben mehr Rechte als normalerweise bekäme.</div></blockquote><div class=""><br class=""></div><div class="">Der guest user sollte dann aber nicht alle vorhandenen Kanäle als öffentlich angezeigt bekommen. Deswegen kann die Unterscheidung public/private channels erst entfallen, wenn es eine Implementierung von</div><div class="">  </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><span class=""><div dir="auto" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="m_-158179271690499791quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class="">Der letzte konsequente Schritt wäre dann eine echte Userverwaltung statt Konfigurationsdatei und damit auch “Owner” von Kanälen und Sichtbarkeitssteuerung. Aber das ist noch eine ganz andere Diskssuion und bräucht ein wenig Spec bevor losgecodet wird.<br class=""></div></blockquote></div></div></div><div dir="auto" class=""><br class=""></div></span><div dir="auto" class="">Das wäre zumindest eine Lösung für o.g. Problem mit demo.</div></blockquote></div></div></blockquote><div class="">gibt.<br class=""></div></div></div></div></div></blockquote><div class=""><br class=""></div>Stimmt. Aber da ich dafür eh grad keine Zeit hab ist’s egal :)</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><div dir="auto" class="">Aktuell relevant ist egtl. nur der Punkt mit vzlogger. Also was tun- rein damit und per Config lösen?<br class=""></div></blockquote></div></div></blockquote><div class=""><br class=""></div><div class="">Grundsätzlich rein damit. Ich bin mir nur unsicher, wie viel Support-Aufwand wir damit generieren. Was hältst du davon, die Firewall nicht "scharf geschaltet" auszuliefern ("allow" statt "auth" für alle verbleibenden Requests)? Dasselbe gilt für </div></div></div></div></div></blockquote><div class=""><br class=""></div>M.E. lieber AUTH. Wer Dinge mutwillig ins Internet hängt sollte sich damit auseinander setzen. Security by design? Im local net ist ja weiter alles offen.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class="">unpassende/unvollständige Config-Files: Lässt es sich mit wenig Aufwand so coden, dass die Firewall einfach offen bleibt, wenn die erforderlichen Optionen nicht gefunden werden?</div></div></div></div></div></blockquote><div class=""><br class=""></div>Security by design. Ja, würde ich aber nicht machen wollen.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class="">Wer die Absicherung verwenden will, muss sich dann halt damit beschäftigen.</div><div class=""><br class=""></div><div class="">Ansonsten wär ein kleine Script für die einfache Erfassung von user/password/secretkey bestimmt sinnvoll. Wahrscheinlich macht es wenig Sinn, in zukünftigen Images schon einen secretkey einzutragen, weil der dann öffentlich bekannt wäre? Ich kann leider in Sachen Bash-Script nicht aushelfen.</div></div></div></div></div></blockquote><div class=""><br class=""></div>Hilfe willkommen. Ggf. ein kleines Tool das User anlegt, ich schau mal.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><div class="">Das einzige, was mir sonst noch fehlt, ist eine Lösung für den schnellen Middleware-Request zwischendurch, z.B. auch für deinen neuen query Kontext. Ich würde eigentlich auch für GET gerne "auth" verwenden, aber darüber stolpere ich regelmäßig. Kann die middleware.php irgendwie abfragen, ob der aufrufende Browser ein gültiges Token in den Cookies liegen hat?</div></div></div></div></div></blockquote></div><div class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><div class="">Ich glaub wir hatten das Thema schon mal, und du warst unschlüssig, ob das security-mäßig in Ordnung wäre. Also möglicherweise auch ein Frage an   </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><div dir="auto" class=""></div></blockquote></div><div class="">@justin?<br class=""></div></div></blockquote></div></div></div></div></blockquote><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Du meinst falls kein Token im Header aber im Cookie auch ok? Klingt eigentlich plausibel (tm).</div><div class=""><br class=""></div><div class="">@Justin: ist sowas eine gute Idee?</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word; line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Viele Grüße, Andreas</div><div class=""><br class=""></div><div class="">..snip..<br class=""></div></div></blockquote><div class=""><br class=""></div><div class="">Viele Grüße</div><div class="">Frank </div></div></div></div></div></blockquote></div><br class=""><div class="">Viele Grüße, Andreas</div><div class=""><br class=""></div><div class="">PS.: und vielen Dank für die aktive Diskussion :)</div><div class=""><br class=""></div></div></div></blockquote></div><br class=""></div></body></html>