Synology 3rd Party CONFIG

Status
Für weitere Antworten geschlossen.

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
Datei war die richtige....
ich hatte nur Anzeigesprache auf: Browser Standardeinstellung

deswegen war da def drine :(
danke dir aber!!
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Rich (BBCode):
#!/bin/bash
#********************************************************************#
#  get_language.sh                                                   #
#  Description: Script get the current used dsm language             #
#  Author:      QTip from the german Synology support forum          #
#  Copyright:   2016-2018 by QTip                                    #
#  License:     GNU GPLv3                                            #
#  ----------------------------------------------------------------  #
#  Version:     0.15 - 11/06/2018                                    #
#********************************************************************#

# Funktion zur Ermittlung der eingestellten Sprache
# - DSM Sprache ermitteln (aus synoinfo.conf)
# - Browser Sprache ermitteln (aus ${HTTP_ACCEPT_LANGUAGE})
# - wenn DSM Sprache = default, dann benutze Browser Sprache
# - persoenliche DSM Sprache ermitteln (aus usersettings)
# - falls persoenliche DSM Sprache = default oder null, dann benutze weiterhin die zuvor
#   ermittelte Sprache, ansonsten benutze die ermittelte persoenliche DSM Sprache
# - ist DSM Sprache und persoenliche DSM Sprache = "def" oder "null" und Browser Sprache nicht gesetzt,
#   dann benutze die Standard Sprache (DEFLANG)
# Prioritaeten: 1. Persoenliche DSM Sprache => 2. DSM Sprache => 3. Browser Sprache => 4. Standard Sprache
#

get_language() {
     # Aufruf:
     #
     # get_language <username>  fuer <username> den gewuenschten Usernamen verwenden
     # Beim Aufruf ohne Username wird die persoenliche Sprache ignoriert
     #
     local DSMUSER="${1}" BL DEFLANG PERSONALLANG USERSETTINGSFILE

     # Uebersetzungstabelle deklarieren
     declare -a ISO2SYNO
     ISO2SYNO=( ["de"]="ger" ["en"]="enu" ["zh"]="chs" ["cs"]="csy" ["jp"]="jpn" ["ko"]="krn" ["da"]="dan" ["fr"]="fre" ["it"]="ita" ["nl"]="nld" ["no"]="nor" ["pl"]="plk" ["ru"]="rus" ["sp"]="spn" ["sv"]="sve" ["hu"]="hun" ["tr"]="trk" ["pt"]="ptg" )

     echo Languages
     echo ---------
     # DSM Sprache ermitteln
     DSMLANG=`/bin/get_key_value /etc/synoinfo.conf language`
     DEFLANG="ger"

     echo DSM language: ${DSMLANG}
     if [ "${DSMLANG}" == "def" ] ; then
          # Browsersprache ermitteln
          if [ -n "${HTTP_ACCEPT_LANGUAGE}" ] ; then
               BL=`echo ${HTTP_ACCEPT_LANGUAGE} | cut -d "," -f1`
               BL=${BL:0:2}
               DSMLANG=${ISO2SYNO[${BL}]}
               echo Browser language: ${BL}
          else
               DSMLANG=${DEFLANG}
          fi
     fi
     # Persoenliche DSM Sprache ermitteln
     USERSETTINGSFILE=/usr/syno/etc/preference/${DSMUSER}/usersettings
     if [ -f ${USERSETTINGSFILE} ] ; then
          PERSONALLANG=`jq -r ".Personal.lang" ${USERSETTINGSFILE}`
          echo DSM personal language: ${PERSONALLANG} 
          if [ -n "${PERSONALLANG}" -a "${PERSONALLANG}" != "def" -a "${PERSONALLANG}" != "null" ] ; then
               DSMLANG=${PERSONALLANG}
          fi
     fi
     echo Final language: ${DSMLANG}
}

Du kannst auch die Funktion aus dem obigen Script verwenden, es beachtet alle möglichen gesetzten Sprachen (DSM global, Browser, Persönlich) im DSM. Browsersprache funktioniert nur, wenn du das Script z.B. per AJAX aus dem Browser aufrufst.
Aufruf und Rückgabe in einer Variable zur Weiterverarbeitung:
Rich (BBCode):
LANGUAGE=$(get_language <username>)
Für <username> natürlich deinen gewünschten Usernamen einsetzen ;)
 
Zuletzt bearbeitet:

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
geile Sache ich danke dir ;)

habe es kurz mal testen wollen (ohne def)
bekomme folgende Meldung:
Rich (BBCode):
/volume1/02_public/ex.sh: line 30: declare: -A: invalid option
declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
Languages
---------
DSM language: ger
Final language: ger

kan ich die Meldung von declare ignorieren ??
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Auf welcher DSM Version hast du dein Script getestet? Ich habe bei 6.1 und 6.2 keine Meldung diesbezüglich erhalten. Bash Version ist bei beiden DSM Versionen GNU bash, version 4.3.48(1)-release
Verwende das folgende Kommando um deine Version zu ermitteln
Rich (BBCode):
bash --version

Das declare -a deklariert die Variable ISO2SYNO explizit als lokales Array und ist somit nur in der Funktion vorhanden. Das Array wird nur benötigt, wenn die Browsersprache verfügbar ist, also das Script z.B. per AJAX aus dem DSM aufgerufen wird.
Wenn dies die einzige Funktion in deinem Script ist oder du keine weitere Variable mit dem Namen ISO2SYNO verwendest, dann kannst die Meldung ignorieren und die Zeile mit "declare -a ISO2SYNO" auskommentieren.
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
hatte es auf eine anderen DS mit DSM6.1 getestet da ging es.... bash war Anscheins zu alt auf meinem DSM5.2.....
Geht nun wunderbar ;)

eine andere frage an euch:
Rich (BBCode):
syno_group_user_create () {
	synouser --add "${USER}" "pSynowDSAppsd" "${SYNO_USER_DESC}" 0 "" 0
	synogroup --add "${SYNO_GROUP}" "${USER}"
	synogroup --descset "${SYNO_GROUP}" "${SYNO_GROUP_DESC}"
	
	chown -R ${USER}:root ${SYNOPKG_PKGDEST}
}

mit dieser Funktion erstelle ich mir meinen Benutzer für die app....
der Eintrag in der /etc/passwd ist aber als /sbin/nologin deklariert..... wie kann ich das ändern bei erstellen meines Benutzers weis das zufällig wer ?

Ich danke schoneinmal im Voraus :)
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Normalerweise wird das mit dem Befehl chsh durchgeführt, der existiert aber auf den Synology's nicht. Ein Umweg über sed sollte funktionieren, wie steht hier https://forum.synology.com/enu/viewtopic.php?t=137870#p510505 Ob die Änderungen wirklich bei jedem Neustart überschrieben werden und du den Teil mit dem cron benötigst kann ich leider nicht sagen.
 
Zuletzt bearbeitet:

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
Js - json

Hallo zusammen,

kennt sich wer zufällig einwenig mit JS aus....
ich habe ein Problem ich möchte mir gerade ein uifile schreiben aber verstehe nicht wie die DS das abarbeitet hatte auch noch nicht viel mit js zu tun.....
Meins sieht nun so aus..:

Rich (BBCode):
"step_title": "Konfigurationsdateien, Scripte und Backup´s",
	"invalid_next_disabled": true,
	"items": [{
		"type": "singleselect",
		"desc": "<b>Auswahl wie mit den Systemdateien umgegangen werden soll:</b><br>
				Systemdateien: Ordner Verschlüsselungen; Konfigurationsdateien; Systemkonfiguration; Scripts; Logdateien; Prozessdateien<br>
				Scripts, Logdateien nur die welche im Wurzelverzeichnis gesichert wurden",
		"subitems": [{
			"key": "pkgwizard_upgrade_sys_none",
			"desc": "Bitte gewünschte Option wählen:",
			"defaultValue": true,
			"validator": {
				"fn": "{var upgrade_sys_none=arguments[0]; if (upgrade_sys_none) return false;}"
			}
		}, {
			"key": "pkgwizard_upgrade_sys_no",
			"desc": "Systemdateien nicht sichern (Systemdateien werden mit der Aktualisierung gelöscht)",
			"defaultValue": false,
			"validator": {
				"fn": "{var upgrade_sys_no=arguments[0]; if (upgrade_backup_yes && !upgrade_sys_yes) return 'JA -- upgrade_sys_no'; return 'NEIN -- upgrade_sys_no';}"
			}
		}, {
			"key": "pkgwizard_upgrade_sys_yes",
			"desc": "Systemdateien sichern (Systemdateien werden mit der Aktualisierung übernommen)",
			"defaultValue": false,
			"validator": {
				"fn": "{var upgrade_sys_yes=arguments[0]; if (upgrade_backup_yes && !upgrade_sys_yes) return 'JA -- upgrade_sys_yes'; return 'NEIN -- upgrade_sys_yes';}"
			}
		}]
	}, {
		"type": "singleselect",
		"desc": "<b>Auswahl wie mit den Backup Ordnern und Scripten umgegangen werden soll:</b><br>
				(Unter Berücksichtigung was in den jeweiligen Scripten hinterlegt wurde<br>
				[Angabe Delete Backup])",
		"subitems": [{
			"key": "pkgwizard_upgrade_backup_none",
			"desc": "Bitte gewünschte Option wählen:",
			"defaultValue": true,
			"validator": {
				"fn": "{var upgrade_backup_none=arguments[0]; if (upgrade_backup_none) return false;}"
			}
		}, {
			"key": "pkgwizard_upgrade_backup_no",
			"desc": "Backup Ordner und Scripte beibehalten",
			"defaultValue": false,
			"validator": {
				"fn": "{var upgrade_backup_no=arguments[0]; if (upgrade_backup_yes && !upgrade_sys_yes) return 'JA -- upgrade_backup_no'; return 'NEIN -- upgrade_backup_no';}"
			}
		}, {
			"key": "pkgwizard_upgrade_backup_yes",
			"desc": "Backup Ordner und Scripte löschen",
			"defaultValue": false,
			"validator": {
				"fn": "{var upgrade_backup_yes=arguments[0]; if (upgrade_backup_yes && !upgrade_sys_yes) return 'JA -- upgrade_backup_yes'; return 'NEIN -- upgrade_backup_yes';}"
			}
		}]
	}]

ich hatte nun einfach nur vor sie untereinander zu verketten:

z.b.:

wenn upgrade_sys_yes gesetzt ist darf nicht upgrade_backup_yes gesetzt sein....
aber irgend wie geht das nicht ich glaube er bekommt die abfrage nicht mit oder so ....
weis einer wie die hier das ganze abarbeiten ?

Normalerweise wird das mit dem Befehl chsh durchgeführt, der existiert aber auf den Synology's nicht. Ein Umweg über sed sollte funktionieren, wie steht hier https://forum.synology.com/enu/viewt...137870#p510505 Ob die Änderungen wirklich bei jedem Neustart überschrieben werden und du den Teil mit dem cron benötigst kann ich leider nicht sagen.

Habe nun Neustarts etc. Hinter mir und bisher geht es kann nun aber nichts dazu sagen was Updates der DS betrifft aber bisher geht es ohne Cron....
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
1. Wofür möchtest du die uifiles verwenden? Wenn ich weiter unten etwas von cron und sed lese, kommt mir der Gedanke, daß hier Einiges vermischt wird. uifiles werden nur für die Assistenten-Gui bei der Installation, Aktualisierung und Deinstallation von Paketen verwendet, das Booten deiner DS kannst du dir sparen.
2. Wenn dies dein komplettes uifile ist, dann fehlt zumindest ein [{ am Anfang und ein }] am Ende.
3. wie heißt dein uifile, nur uifile funktioniert nicht. Entweder install_uifile, upgrade_uifile oder uninstall_uifile. Diese Auflistung sind nur die default uifiles, falls keines für eine bestimmte Sprache existiert. Die uifiles für eine bestimmte Sprache haben noch ein 3-Zeichen Kürzel mit einem führenden Unterstrich hinten angehangen, z.B. "_ger" für deutsch.
4. In den in Punkt 3 angesprochenen "einfachen" uifiles kannst du keine Auswertungen der Buttonzustände durchführen, dies geht nur in preinst. Du benötigst die erweiterte Variante, welche ausführbare Shell-Scripts sind. Diese uifiles haben hinten noch die Endung .sh angehangen. Einziger Nachteil...diese uifiles können erst ab DSM 5.0 verwendet werden.

Für genaue Informationen bezüglich uifiles empfehle ich dir die offizielle DSM 6.0 Developer Guide von Synology oder schau dir mein Paket EBI an.
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
zu 1.: Die uifiles möchte ich dafür um eine abfrage zu gestallten ob gewisse Systemdateien gelöscht werden sollen von meinem Paket oder nicht das hat nichts mit sed oder Cron zu tun dazu etwas unter Punkt 5.
ich dachte das ich eine Abfrage gewisser Checkboxen mit JS machen kann mit dem fn "Operanden"
zu 2.: Nein das war nicht mein Komplettes nur ein teilausschnitt. gehen an sich tut dies.
zu 3.: upgrade_uifile_ger bzw. upgrade_uifile
zu 4.: Naja ich will ja keine werte auslesen nur die abfrage auf true oder false machen mit diesem abschnitt:
Rich (BBCode):
"validator": {
				"fn": "{var upgrade_sys_no=arguments[0]; if (upgrade_backup_yes && !upgrade_sys_yes) return 'JA -- upgrade_sys_no'; return 'NEIN -- upgrade_sys_no';}"
			}
sodass der Weiterbutton welcher ohne Angabe gesperrt ist.... also keine Auswertung der Variablen das kommt wie du sagtest in preinst oder preupgrade etc...
5.:
Normalerweise wird das mit dem Befehl chsh durchgeführt, der existiert aber auf den Synology's nicht. Ein Umweg über sed sollte funktionieren, wie steht hier https://forum.synology.com/enu/viewt...137870#p510505 Ob die Änderungen wirklich bei jedem Neustart überschrieben werden und du den Teil mit dem cron benötigst kann ich leider nicht sagen.
das Zitat war von dir am 18.06 und darauf habe ich das mit dem Cron bezogen nicht auf die uifiles sry war vllt nicht so super von mir das zu vermischen.

Frage zu: check_apprivilege.php
PHP:
Zeile: 41$appprivilege = (array_key_exists($appname, $initdata['data']['AppPrivilege']) && $initdata['data']['AppPrivilege'][$appname]) ? 1 : 0;
          Zeile: 42$is_admin = (array_key_exists('is_admin', $initdata['data']['Session']) && $initdata['data']['Session']['is_admin'] == 1) ? 1 : 0;
Seid meinem Update auf DSM 6.0 bekomme ich hier die Aussage / Ausgabe das
PHP:
 array_key_exists
ein array erwarten würde
ist darüber etwas bekannt wie man das fixen kann ?

hier noch die Ausgabe des Fehlers:
Rich (BBCode):
LOGIN -- Warning: array_key_exists() expects parameter 2 to be array, null given in /volume1/@appstore/SynoDSApps/webapp/login/check_appprivilege.php on line 41 Warning: array_key_exists() expects parameter 2 to be array, null given in /volume1/@appstore/SynoDSApps/webapp/login/check_appprivilege.php on line 42 0
 
Zuletzt bearbeitet:

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
desweiter ist mir aufgefallen wenn ich mir den Token ausgeben lasse sieht erst aus:
Rich (BBCode):
LOGIN_TOKEN -- KuRFplE.oK9KM
das heißt er beinhaltet ein Leerzeichen am beginn obwohl ich es so geschrieben habe:
Rich (BBCode):
LOGIN_TOKEN --'$LOGIN_TOKEN'

denn in der URL kommt nun auch die Ausgabe:
Rich (BBCode):
?SynoToken=%20KuRFplE.oK9KM

Ich versteh aber nicht woher es kommt.... denn wenn ich:
PHP:
str_replace(' ', '', $TOKEN);
verwende ändert sich daran auch nichts......

Ich versteh langsam echt nur noch Bahnhof......
und so ist der Token unbrauchbar.... versteh aber nicht wieso.... :(
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Seid meinem Update auf DSM 6.0 bekomme ich hier die Aussage / Ausgabe das
PHP:
 array_key_exists
ein array erwarten würde
ist darüber etwas bekannt wie man das fixen kann ?
Meine letzten Tests in PHP liegen schon eine Weile zurück, da gab es diese Meldung nicht. Hoffentlich hat Synlogy nicht wieder etwas geändert. Mit welchem User hast du getestet?

zu 4.: Naja ich will ja keine werte auslesen nur die abfrage auf true oder false machen mit diesem abschnitt:
Rich (BBCode):
"validator": {
                "fn": "{var upgrade_sys_no=arguments[0]; if  (upgrade_backup_yes && !upgrade_sys_yes) return 'JA --  upgrade_sys_no'; return 'NEIN -- upgrade_sys_no';}"
            }
sodass der Weiterbutton welcher ohne Angabe gesperrt ist.... also keine Auswertung der Variablen das kommt wie du sagtest in preinst oder preupgrade etc...
Ich habe jetzt erst gesehen, daß du statt z.B. "pkgwizard_upgrade_sys_none" "pkgwizard_upgrade_sys_none" verwendet hast, evtl. funktioniert es ja dann doch, wenn du den Namen der Variable vollständig verwendest.

zu dem führendem Leerzeichen in SynoToken: Dazu kann ich ohne eigene Tests nicht viel sagen. Wenn aber ein trim oder str_replace nicht funktioniert, muss es wohl etwas Anderes sein. In appprivilege.php wird ja bereits ein
PHP:
$synotoken = trim($synotoken[1]);
durchgeführt.
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
Meine letzten Tests in PHP liegen schon eine Weile zurück, da gab es diese Meldung nicht. Hoffentlich hat Synlogy nicht wieder etwas geändert. Mit welchem User hast du getestet?
Das hatte ich mit meine Admin getestet worin ich die Meldung bekam..

Ich habe jetzt erst gesehen, daß du statt z.B. "pkgwizard_upgrade_sys_none" "pkgwizard_upgrade_sys_none" verwendet hast, evtl. funktioniert es ja dann doch, wenn du den Namen der Variable vollständig verwendest.
bin ich nun Bild du hast doch aber nun 2 mal das gleiche geschrieben oder irre ich mich gerade ??

zu dem führendem Leerzeichen in SynoToken: Dazu kann ich ohne eigene Tests nicht viel sagen. Wenn aber ein trim oder str_replace nicht funktioniert, muss es wohl etwas Anderes sein. In appprivilege.php wird ja bereits ein
Ich weis das ist ja das was ich nicht wirklich verstehen tue.....
wenn ich die Datei mit php -f ausführen würde in der Bash funktioniert es dort genauso ??
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
bin ich nun Bild du hast doch aber nun 2 mal das gleiche geschrieben oder irre ich mich gerade ??
Sorry, ich meinte natürlich... Ich habe jetzt erst gesehen, daß du statt z.B. "pkgwizard_upgrade_sys_none" "upgrade_sys_none" verwendet hast, evtl. funktioniert es ja dann doch, wenn du den Namen der Variable vollständig verwendest.

wenn ich die Datei mit php -f ausführen würde in der Bash funktioniert es dort genauso ??
Das glaube ich eigentlich nicht, denn einige Varaiblen wie z.B. $_SERVER['HTTP_COOKIE'] existieren nur, wenn das im Webserver läuft. Darfst es natürlich gerne ausprobieren.
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
Sorry, ich meinte natürlich... Ich habe jetzt erst gesehen, daß du statt z.B. "pkgwizard_upgrade_sys_none" "upgrade_sys_none" verwendet hast, evtl. funktioniert es ja dann doch, wenn du den Namen der Variable vollständig verwendest.
ne daran kann das nicht liegen da:
Rich (BBCode):
 pkgwizard_upgrade_sys_none
Key ist heißt das spreche ich dann in preupgrade oder postupgrade an und:
Rich (BBCode):
 upgrade_sys_none
ist die var Definition in dem JSON

Das glaube ich eigentlich nicht, denn einige Varaiblen wie z.B. $_SERVER['HTTP_COOKIE'] existieren nur, wenn das im Webserver läuft. Darfst es natürlich gerne ausprobieren.
hast recht das geht nicht.....
habe leider auch noch keine Lösung woran das liegen könnte.... ist bescheiden das ganz.....


Eine andere frage...
ich habe hier erfahren das ich in der .cgi datei unter Bash eine form abfrage über POST über stdin lesen kann....
wenn ich nun aber folgendes verwende:
Rich (BBCode):
TEST_="/volume1/02_public/3rd_Party_Apps/Ausgabe Sys/index.cfg/test_log"
                        POST_DATA=$(<"/dev/stdin")
			if [[ "$REQUEST_METHOD" == "POST" ]]
			then
				if [[ "$CONTENT_LENGTH" -gt 0 ]]
				then
					echo $(echo "$POST_DATA" | head -n "$CONTENT_LENGTH") >> "$TEST_"
				fi
			fi
bekomme ich keinen Output und die seite läuft bis auf 15min und weiter danach habe ich abgebrochen....
weis einer von euch wie man das über stdin abfragen soll bei google habe ich auch nichts gescheites darüber gefunden.....
selbst wenn ich stdin einfach nur so ausgeben möchte kommt nichts....
aber alles was ich dazu gefunden habe soll das angeblich so gehen :(
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
ich habe hier erfahren das ich in der .cgi datei unter Bash eine form abfrage über POST über stdin lesen kann....
...bekomme ich keinen Output und die seite läuft bis auf 15min und weiter danach habe ich abgebrochen....
Du musst natürlich auch etwas per POST senden, ein einfaches direktes Aufrufen der Seite funktioniert nicht. Einfach über ein Testformular die Daten per POST an die Auswerteseite senden.
Die folgende Methode hatte bei mir vor einiger Zeit funktioniert http://www.team2053.org/docs/bashcgi/postdata.html
 

Kalysto

Benutzer
Mitglied seit
30. Dez 2014
Beiträge
343
Punkte für Reaktionen
8
Punkte
18
Ich danke dir für den Tipp das Script Funktioniert wunderbar :)
Besten dank dir!

Hättest du evtl noch eine Idee woran das liegen kann mit deinem Script bezüglich des Admin und SynoToken Fehlers ??
oder wie kann ich am besten da rann gehen um dies zu testen ?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.141
Punkte für Reaktionen
1.112
Punkte
314
Jetzt hab ich aber auch mal eine Frage an dich QTip!

Ich habe das von dir verlinkte Script https://oinkzwurgl.org/hacking/bash_cgi/ in einer Testumgebung mal ausprobiert und solange ich ohne den SynoToken arbeite, läuft das auch prima. Nur wenn ich den SynoToken einbaue, dann funktioniert das nur noch per GET. Per POST wird das "Übertragen der Daten..." augenscheinlich nicht weiterverarbeitet und der Browsertab dreht sich im Kreis. Auch ein anhängen des SynoToken an den form-TAG ändert daran nichts.

PsychoHH hatte das damals *hier* schon festgestellt, jedoch blieb die Frage unbeantwortet. Vielleicht hast du da eine Idee.

Was habe ich gemacht? Ich habe mir ein Test-SPK gebaut und darin einfach das oben verlinke Script in eine leere index.cgi kopiert. Wenn ich das SPK dann aufrufen, funktiert es wie gesagt per GET als auch über POST. Füge ich den SynoToken ein, dann geht POST nicht mehr. Ich muß dazu sagen, das wir (PsychoHH und ich) den SynoToken anders implementieren als du vorgesehen hast, aber das tut der Sache eigentlich keinen Abbruch. Wir fragen einfach die token.php ab und extrahieren daraus dann die nötigen Variablen.

PHP:
# SPK lokalisieren
app_home=$(echo /volume*/@appstore/Holodeck) || exit

# Zugangsberechtigungen überprüfen (Syno-Token)
logincheck=$(php -f $app_home/includes/token.php) || exit
synotoken=$(echo $logincheck | sed "s/.*token: //;s/ user:.*//") || exit
synouser=$(echo $logincheck | sed "s/.*user: //;s/ admin:.*//") || exit
is_admin=$(echo $logincheck | sed -e 's/.*admin: //') || exit
if [ -n "$logincheck" ]; then
	if [[ "$logincheck" != "0" ]] && [[ "$synouser" != "0" ]]; then
		access="yes"
	fi
fi
# Beenden wenn keine Zugangsberechtigung...
if [ -z "$access" ]; then
	exit
# ... ansonsten SPK ausführen!
else
...
..
.

Den Form-Tag habe ich u.a. mal mit dem SynoToken gefüttert, es geht aber auch ohne... zumidest bei GET

PHP:
<form action="?foo=${foo:=123}&token=$synotoken" method="POST" enctype="application/x-www-form-urlencoded">

Vielleicht magst du das mal überprüfen und vielleicht findest du ja auch heraus, warum in Verbindung mit dem SynoToken das mit dem POST nicht funktioniert. In den einschlägigen Log-Files konnte ich jedenfalls keine Hinweise finden, die weiterhelfen würden.

Tommes
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Du kannst beim Senden per POST keine Variablen wie bei GET einfach anhängen. Stattdessen musst du deinem Form eine hidden var mit dem gewünschten Namen und Wert hinzufügen. In deinem Beispiel müßte das folgendermaßen funktionieren:
PHP:
<form action="index.php" method="POST"> 
<input type="hidden" name="token" value="$synotoken" />

Normalerweise übermittelt check_appprivilege.php das Token bereits in der Umgebungsvariablen "X-SYNO-TOKEN" mit. Da ihr aber nicht das PHP vom Webserver verwendet, wird diese Variable vermutlich nicht greifbar bzw. gesetzt sein.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.141
Punkte für Reaktionen
1.112
Punkte
314
Hm... also das ich den SynoToken über ein hidden field mitgebe macht Sinn (hätt ich ja auch selber drauf kommen können), jedoch führt mich das immer noch nicht zum Ziel. Die Anfrage wird im Browser einfach nicht weiterverarbeitet wenn ich das über POST laufen lasse. Ich hab da also noch irgendeinen Denkfehler.

Ich erhalte beim Abfragen der check_appprivilege.php mittels des System PHP durchaus einen Token, nur stellt sich mir grade tatsächlich die Frage, ob dieser dann auch identisch mit dem Token des PHP vom Webservers ist. Das wäre jedenfalls eine logische Erklärung für das Fehlverhalten. Ich werde mir (heute jedoch wohl nicht mehr) php aus dem Paketzentrum installieren und den Token über das PHP des Webservers extrahieren und an das hidden field anhängen. Ich werde also berichten.

Bis dahin noch ein Screenshot, indem du siehst, das der Token per GET durchaus über das hidden field übergeben wird.

2018-07-09_Screenshot_01.PNG

Tommes
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Bis dahin noch ein Screenshot, indem du siehst, das der Token per GET durchaus über das hidden field übergeben wird.
Hm, per hidden Field über GET, da passt doch etwas nicht...habe ich da jetzt etwas verpasst?

Versuche mal als hidden-Field statt dem Namen "token" das korrekte "X-SYNO-TOKEN" zu verwenden.
Wenn du Firefox verwendest, kannst du mit SHIFT + STRG + K die Konsole aufrufen, dann in der Liste auf deinen POST-Link klicken und rechts im Register "Kopfzeilen" solltest du dann in den Anfragezeilen das Schlüsselwort "X-SYNO-TOKEN" mit deinem Token finden.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat