PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : monior 1.8.1 - Fehlermeldung "Syntaxfehler in Aktionsaufruf ->%T oder %R"



Thorongil
05.12.2009, 13:08
Hi zusammen,

ich steh gerade wie der Ochs vorm Berg,

in meiner .monrc habe ich Einträge folgender Form:




PAGER 0136241* [../../../etc/pocserv/dispatch/DISPATCH '%R' '%T' >> /tmp/monitoractionlog] Vollalarm Bibabutzedorf


Ja, ist ein wenig krude, aber monitor macht bei mir alle Pfade relativ zum Home des aufrufenden Users, aber ohne die %R und %T wird es gerufen. Mit den %R und %T wie oben kriege ich bei Auslösung die Fehlermeldung:

Syntaxfehler in Aktionsaufruf ->%T oder %R

Schnell mal in den Code geguggt, aber sehe gerade nicht, was daran verkehrt sein soll, da wird simple Stringersetzung gemacht?

Oder stört es sich an den Quotes? Brauche ich halt, können ja auch Leerzeichen drin sein?



void action(char *program) {
/************************************************** ************************
* ggf. Ersetzen von %? und Programmaufruf
************************************************** ************************/
#define ALLACTIONLEN 600
char actionoutprint[ALLACTIONLEN], *c;

/* Aktion für POCSAG
* system ruft die auszuführende Datei mit Pfad auf */

if (*program == 0)
return;

time(&tp);

/* falls nicht bereits innerhalb der letzten 30 Sec. */
if (tp - al->action->value > 30) {
al->action->value = tp;
memset(actionoutprint, 0, sizeof(actionoutprint));
memcpy(actionoutprint, program, strlen(program));
delete_EOF_errors(print);
while ((c = strchr(actionoutprint, '%')) != NULL) {
int plen, clen = strlen(c), i;

switch (*(c + 1)) {

case 'T': /* Text */
plen = strlen(print);

memcpy((c + plen), c, clen);
memcpy(c + 1, print, plen);
*c = '\"';
*(c + plen + 1) = '\"';
break;

case 'R': /* Ric */
plen = 7;
memcpy((c + plen - 1), c, clen);
for (i = 0; i < 7; i++) {
d = set[i] + '0';
*(c + i) = d;
}
*(c + 7) = rx->func + '0';
break;

default:
verbprintf(ALWAYS, "POCSAG: Syntaxfehler in Aktionsaufruf -> %%T oder %%R");
sprintf(outprint, "POCSAG: Syntaxfehler in Aktionsaufruf -> %%T oder %%R");
update_view(outprint, 0, FIRSTLINE, NEW);
return;
}
continue;
}
if (s->l2.pocsag.sclog)
update_file(actionoutprint, LOG);
system(actionoutprint);
}
} /* pocsag_printmessage:action */



Weiß jemand von Euch, was ich verkehrt mache?

Grüße,
Thorongil

SirFS
07.12.2009, 11:32
Also wenn ich den Quelltext richtig interpretiere, dann wird der Text (%T) schon vom Programm aus in Anführungszeichen gesetzt.
Da die RIC (%R) nur nummerisch ausgegeben wird, braucht man dort keine Hochkommas.

So wie ich das sehe, wird dann die folgende Befehlszeile zusammengesetzt:

../../../etc/pocserv/dispatch/DISPATCH '1234567' '"Das ist ein Test"' >> /tmp/monitoractionlog

Möglicherweise stört er sich an den doppelt vorhandenen Anführungszeichen.

Probiers doch einfach mal ohne die Hochkommas (') um %T und %R

Das Monitor alle Pfade relativ zum HOME-Verzeichnis macht, ist normal.

Thorongil
07.12.2009, 21:12
Hm, das hatte ich auch probiert.

Einzig was mir noch in den Sinn käme: Ubuntu 9.10 läuft durchweg in Unicode.

die Quellcodestelle macht aber direkt Stringoperationen auf einzel-byte-weiten zeichen.
Dann funzt evtl. das switch net, weil nach dem "%" eben net gleich "T" oder "R" kommt..

Aber hab mich jetzt verabschiedet und den monitord eingesetzt, mit Perl einen primitivclient für POCSAG basteln war dann einfacher als ich ursptünglich gedacht hatte.

Und mit init-Skripten starten zu können ist auch was Feines :D