[gelöst] Java-Script startet bash-script?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
TomL

[gelöst] Java-Script startet bash-script?

Beitrag von TomL » 14.04.2017 16:58:26

Moin

Nach folgender Anleitung habe ich meinem Thunderbird einen Custom-Button "verpasst":
https://developer.mozilla.org/en-US/doc ... bar_button

Das klappt mit diesem Musterbeispiel so weit auch prima... der Button macht genau das, was da Beispiel verlangt, und zwar eine einfache Meldung ausgeben:

Code: Alles auswählen

CustomButton = {

1: function () {
  alert("Just testing")	
  },
}
Jetzt würde ich gerne statt der Meldung "Just testing" zwar die Meldung ausgeben, aber durchlaufend (also ohne zu warten) zusätzlich ein Bash-Script starten.... also irgendwie solchen Code funktionierend "einbauen":

Code: Alles auswählen

var process = require('child_process');
 
process.exec('/sbin/ip -a >/home/thomas/ip-out.txt',function (err,stdout,stderr) {
if (err) {
     console.log("\n"+stderr);
     } 
else {
     console.log(stdout);
     }
});
Beim Aufruf des Shellbefehls soll kein Terminal-Fenster geöffnet werden... es soll einfach schnell, still und unauffällig im Hintergrund seinen Job tun, sich beenden und dann das Message-Fenster wieder schließen.

Ich kriegs nicht hin.... wenn ich die Zeilen reinkopiere, passiert gar nix, kein Crash, keine Fehlermeldung, einfach gar nix. Jetzt hoffe ich, dass mir jemand dabei helfen kann.... denn nur für diese paar Java-Zeilen, die die ersten in meinem Leben sind und garantiert auch die letzten sein werden, würde ich mir gerne ersparen, jetzt auch noch Java lernen zu müssen.

:hail:
Zuletzt geändert von TomL am 15.04.2017 10:36:38, insgesamt 1-mal geändert.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Java-Script startet bash-script?

Beitrag von breakthewall » 14.04.2017 19:22:31

TomL hat geschrieben:Beim Aufruf des Shellbefehls soll kein Terminal-Fenster geöffnet werden... es soll einfach schnell, still und unauffällig im Hintergrund seinen Job tun, sich beenden und dann das Message-Fenster wieder schließen.

Ich kriegs nicht hin.... wenn ich die Zeilen reinkopiere, passiert gar nix, kein Crash, keine Fehlermeldung, einfach gar nix. Jetzt hoffe ich, dass mir jemand dabei helfen kann.... denn nur für diese paar Java-Zeilen, die die ersten in meinem Leben sind und garantiert auch die letzten sein werden, würde ich mir gerne ersparen, jetzt auch noch Java lernen zu müssen.

:hail:
Hallo

Als Ich den Threadtitel laß, war mein erster Gedanke bei einer Malwareinfektion via Browser. Aber so würde Ich Dich nun nicht einschätzen. :D

Soweit Ich das verstanden habe, ist das auf diesem Wege mit Javascript wohl nicht möglich. Also mit lokalen Ressourcen zu interagieren aufgrund von Sicherheitseinschränkungen. Da wirst schon etwas Komplexeres wie PHP benötigen. Auch wäre wohl z.B. ein lokaler Webserver nötig, der es explizit zulässt PHP bzw. Javascript auszuführen. Nur blockieren moderne Browser so etwas recht wahrscheinlich, was dann vermutlich das nächste Problem wäre. Was Dir fehlt für einen Direktzugang, wären wohl ein paar nette Exploits, oder etwas anderes was Ich gerade nicht auf dem Schirm habe. :wink:

TomL

Re: Java-Script startet bash-script?

Beitrag von TomL » 14.04.2017 21:37:27

Das ist weissgott eine schlechte Nachricht :( Und jetzt, wo Du mich drauf hinweist, wird mir klar, dass ich vermutlich bei anderer Gelegenheit sogar laut geschimpft hätte, wenns "diesen Exploit" tatsächlich gebe würde. Wobei mir allerdings erst durch Deine Antwort bewusst wurde, dass das wirklich wohl ein Scheunentor ist. lst natürlich klar, dass vom Thunderbird via Java besser keine lokalen Ressouren verfügbar sein dürfen... aber die Idee war bei oberflächlicher Betrachtung wirklich zu schön.

Worum gehts überhaupt? Ich bin seit Tagen dabei einen IMAP-Server aufzubauen - zunächst auf einer Testmaschine. Weil der spätere "produktive" Server aber nur LAN-Intern erreichbar ist, soll der darauf laufende IMAP-Srv nicht regelmäßig zyklisch die Mail-ISP pollen, sondern nur dann explizit für den User, der jetzt Thunderbird auf seinem Client startet und sich anmeldet. Der Hintergrund ist, die Mobilgeräte nicht zwischendurch abzuhängen, weil die direkt das Mail-ISP-IMAP nutzen. Diesen Schritt habe ich realisiert. Ich habe dazu für den Server einen Eventhandler als Daemon geschrieben, der auf einen TCP-Port lauscht. Sobald am Client Thunderbird gestartet wird, wird der Eventhandler via TCP informiert und pollt via Getmail die gegebenen ISP-Provider dieses Users. Das klappt alles prima. Jetzt wollte ich zusätzlich erreichen, dass ein neuer "Abrufen"-Button dem User ermöglicht, ein erneutes Polling zu starten, ohne TB zu beenden und neu zu starten.

Fällt Dir (oder jedem anderen interessierten und hilfsbereiten Leser) vielleicht dazu eine Alternativ-Lösung ein...?... jetzt wo mein Ballon geplatzt ist?

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Java-Script startet bash-script?

Beitrag von scientific » 15.04.2017 09:04:26

Wenn ich

Code: Alles auswählen

journalctl -f -u dovecot
laufen lasse und Thunderbird starte und dann wieder beende, zeigt mir das Journal folgendes:

Code: Alles auswählen

Apr 15 08:53:52 aldebaran dovecot[887]: imap-login: Login: user=<jakob>, method=PLAIN, rip=::1, lip=::1, mpid=21610, TLS, session=<XXXXXXX>
Apr 15 08:53:52 aldebaran dovecot[887]: managesieve-login: Login: user=<jakob>, method=PLAIN, rip=::1, lip=::1, mpid=21612, secured, session=<XXXXX>
Apr 15 08:54:19 aldebaran dovecot[887]: imap(jakob): Logged out in=17000 out=2567373
Apr 15 08:54:19 aldebaran dovecot[887]: managesieve(jakob): Disconnected: Logged out bytes=37365/37498
Du hast also eine Art session am Mailserver, sobald ein User sich bei authentifiziertem IMAP am Mailserver anmeldet.

Da müsste es dir gelingen einen Timer einzuhängen, der alle X Minuten per Getmail die Emails pollt, und der beim Logout wieder beendet wird.

Ansonsten versuchst du über einen Button in Thunderbird (Den müsstest du in jedem Thunderbird einbauen... und der nur auf Thunderbird funktioniert, nicht auf Smartphones, nicht auf Tablets) auf einem Rechner A einen Prozess auf Rechner B (Raspi - Mailserver) zu starten...

Für das Starten eines Skriptes nach dem Login auf dovecot (IMAP-Server) kannst du dich da ran halten: https://wiki.dovecot.org/PostLoginScripting
In dieses Skript packst du den Start eines Timers (ev. systemd --user Unit) der dann Getmail regelmäßig aufruft.

Wie man das beim Logout beendet, konnte ich auf die Schnelle noch nicht finden.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Java-Script startet bash-script?

Beitrag von scientific » 15.04.2017 09:23:37

Jetzt hab ich auf der Debug-Shell von systemd einmal ein wenig näher zugeschaut...

Wenn ich Thunderbird starte, gibt es genau eine Login-Session in dovecot, die gestartet wird und die erst beim Beenden von Thunderbird wieder geschlossen wird.

Logge ich mich von Linux ab und starte über den Browser am Smartphone Roundcube und logge mich dort ein, wird für jeden Aufruf eine Emails eine IMAP-Session gestartet und beendet.

In Thunderbird habe ich übrigens die "Maximale Anzahl der Serververbindungen" auf genau 1 gestellt. Dies soll IMAP mit Thunderbird wesentlich beschleunigen. Default ist 10.

Ich müsst am Smartphone jetzt erst das Konto im Email-Client einrichten, was ich aber wegen doppelten Emails (Einmal per IMAP vom ISP, einmal vom lokalen Mailserver) nicht machen möchte. Aber der Versuch zeigt eh schön die Unterschiede auf, die du abfangen musst.

Leider beherrscht fetchmail nicht die Fähigkeit, einen Zeitraum angeben zu können, wie lange per POP3 geholte Emails am Server verbleiben, bis sie gelöscht werden. Thunderbird kann das nämlich. Das wäre nämlich meine LIeblingslösung... Ich hole mit fetchmail meine Emails ab, und hab sie aber trotzdem noch z.B. 1 Monat per Webmail oder Smartphone-Account abrufbar, und sie werden dann erst beim ISP gelöscht... Fetchmail bietet nur an, holen und löschen oder behalten.

[EDIT]
Ich sehe gerade https://serverfault.com/questions/79963 ... der-than-x
Das wäre was auch für dich!

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

TomL

Re: [gelöst] Java-Script startet bash-script?

Beitrag von TomL » 15.04.2017 11:02:27

Moin @ all

Vorab bemerkt... es funktioniert super-gut-genial :D

@breakthewall
Gestern bin ich doch tatsächlich in Dein Falle getappt... *lol*.... aber sehr spät, noch wach im Bett liegend, fiel mir auf einmal ein, dass Zugriffe durch AddOns auf lokale Ressourcen doch nix ungewöhnliches sind. Es gibt haufenweise AddOns, die Daten auf der lokalen Platte anlegen, öffnen, lesen, schreiben, usw. Als Beispiel sei UBlock Origin genannt, der meine persönlichen Black- und Whitelist-Einstellungen schreibt und beim nächsten Start wieder einliest. Oder Lightning im Thunderbird, der seine Termine auf die Platte schreibt.... beides nur Java-AddOns. Und da gibts eben viele AddOns, die das oder ähnliches tun.

@scientific
Ja, das mit dem Journal war mir bekannt. Ich hatte das erwogen, aber als untauglich verworfen. Aus gleichem Grund hatte ich die zyklische Überwachung eines Statusfiles verworfen, welches vom Client erstellt wird. Beiden Varianten haben die Schwäche der fehlenden zeitlichen Kongruenz... so das der User vielleicht am Client vor dem Monitor sitzt und auf das nächste timer-polling wartet, wobei er gar nicht weiss, dass per Timer gepollt wird. Und der Frust steigt und steigt und steigt, wenn dann über Whatsapp so ein Dialog startet:
- "ich habe die Mail gesendet"
-- "die kommt aber nicht an, du hast dich bestimmt mit der adresse vertan"
- "nein, die adresse ist richtig, bei mir ist gesendet"
-- "ja, aber trotzdem muss bei dir ein fehler sein, hier kommt nix an"
- "okay, dann sende ich noch mal"
-- "hier kommt immer noch nix....vielleicht ist auch mein laptop kaputt..."
--"warte, ich schalte mal den router aus und wieder ein"
- "okay, ich sende noch mal"
--"im handy sehe ich jetzt deine mail, sogar alle drei, aber auf dem laptop kommt immer noch nix an."
--"thooooomas, mach den thunderbird fertig, der ist wieder kaputt"


Boooar... also den Frust will ich mir doch lieber sparen :mrgreen:

Eine deutlich bessere und zeitlich kongruente Alternative zu den zwei obigen wäre hingegen "incron" gewesen, welches auf dem Server ein Statusfile beobachten könnte, welches wiederum vom Client "bestückt" wird. "incron" handelt Filesystem-Events und fungiert quasi als notifier. Aber damit habe ich mich nicht weiter befasst. Die noch bessere Alternative ist, wenn der Client einfach direkt und zeitlich auf den Punkt den Server informiert "lade jetzt für thomas die aktuellen Mails runter". Genau das habe ich jetzt gelöst. Sowohl beim Starten von Thunderbird wird via TCP an die Server-IP:Port eine Nachricht gesendet, mit der der Server via Getmail das Polling für diesen User startet. Die gleiche Technik wendet nun mein Custom-Button "Abrufen" im Thunderbird-GUI an, der als AddOn den originalen Button ersetzt.
Zuletzt geändert von TomL am 15.04.2017 11:31:20, insgesamt 1-mal geändert.

TomL

Re: Java-Script startet bash-script?

Beitrag von TomL » 15.04.2017 11:24:59

scientific hat geschrieben:In Thunderbird habe ich übrigens die "Maximale Anzahl der Serververbindungen" auf genau 1 gestellt. Dies soll IMAP mit Thunderbird wesentlich beschleunigen. Default ist 10.
Welcher Parameter ist das? Ich finde keinen passenden, unter allen, die eine 10 als default eingetragen haben. Unter dem Filter "mail.server" finde ich auch keinen mit passenden Namen. Ich habe nur einen einzigen gefunden, der damit im Zusammenhang stehen könnte:

Code: Alles auswählen

mail.server.default.check_time;10
Aber diesen Parameter deute ich als Polling-Zyklus. :?

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] Java-Script startet bash-script?

Beitrag von scientific » 15.04.2017 11:39:18

In den Erweiterten Imap-Servereinstellungen unter Servereinstellungen beim Account
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

TomL

Re: [gelöst] Java-Script startet bash-script?

Beitrag von TomL » 15.04.2017 12:01:48

scientific hat geschrieben:In den Erweiterten Imap-Servereinstellungen unter Servereinstellungen beim Account
Danke! Habs gefunden. Mit dem folgenden Filter kann man alle hinternanderweg in einer Rutsche verändern:

Code: Alles auswählen

mail.server.server*.max_cached_connections

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: [gelöst] Java-Script startet bash-script?

Beitrag von breakthewall » 15.04.2017 22:28:16

TomL hat geschrieben:@breakthewall
Gestern bin ich doch tatsächlich in Dein Falle getappt... *lol*.... aber sehr spät, noch wach im Bett liegend, fiel mir auf einmal ein, dass Zugriffe durch AddOns auf lokale Ressourcen doch nix ungewöhnliches sind. Es gibt haufenweise AddOns, die Daten auf der lokalen Platte anlegen, öffnen, lesen, schreiben, usw. Als Beispiel sei UBlock Origin genannt, der meine persönlichen Black- und Whitelist-Einstellungen schreibt und beim nächsten Start wieder einliest. Oder Lightning im Thunderbird, der seine Termine auf die Platte schreibt.... beides nur Java-AddOns. Und da gibts eben viele AddOns, die das oder ähnliches tun.
Laut deinem ersten Post ging es ja allgemein um Javascript, und nicht um eine spezifische Anwendung dessen, weshalb Ich schrieb was Mir dazu als erstes einfiel. Und Addons sind ja wieder etwas anderes, und haben ja letztlich verschiedene APIs zur Verfügung, zumindest mit begrenztem Wirkungsbereich. Ob dann Javascript client -oder serverseitig genutzt wird, unterscheidet auch nochmals bezüglich der Möglichkeiten, wie man an dem Erfolg via Serverdienst sieht. Letztlich werden die alten Addon-APIs bald ersetzt werden, durch die neuen WebExtensions, die das mit der Sicherheit noch drastischer regeln. So kann ein Addon z.B. nur noch auf eigene Daten zugreifen. Aber nun hast ja eine praktikable Lösung gefunden.

Antworten