#!/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}
}
LANGUAGE=$(get_language <username>)
/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
bash --version
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}
}
"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';}"
}
}]
}]
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.
"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';}"
}
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.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.
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;
array_key_exists
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
LOGIN_TOKEN -- KuRFplE.oK9KM
LOGIN_TOKEN --'$LOGIN_TOKEN'
?SynoToken=%20KuRFplE.oK9KM
str_replace(' ', '', $TOKEN);
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?Seid meinem Update auf DSM 6.0 bekomme ich hier die Aussage / Ausgabe dasein array erwarten würdePHP:array_key_exists
ist darüber etwas bekannt wie man das fixen kann ?
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 4.: Naja ich will ja keine werte auslesen nur die abfrage auf true oder false machen mit diesem abschnitt:
sodass der Weiterbutton welcher ohne Angabe gesperrt ist.... also keine Auswertung der Variablen das kommt wie du sagtest in preinst oder preupgrade etc...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';}" }
$synotoken = trim($synotoken[1]);
Das hatte ich mit meine Admin getestet worin ich die Meldung bekam..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?
bin ich nun Bild du hast doch aber nun 2 mal das gleiche geschrieben oder irre ich mich gerade ??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.
Ich weis das ist ja das was ich nicht wirklich verstehen tue.....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
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.bin ich nun Bild du hast doch aber nun 2 mal das gleiche geschrieben oder irre ich mich gerade ??
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.wenn ich die Datei mit php -f ausführen würde in der Bash funktioniert es dort genauso ??
ne daran kann das nicht liegen da: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.
pkgwizard_upgrade_sys_none
upgrade_sys_none
hast recht das geht nicht.....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.
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
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.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....
# 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
...
..
.
<form action="?foo=${foo:=123}&token=$synotoken" method="POST" enctype="application/x-www-form-urlencoded">
<form action="index.php" method="POST">
<input type="hidden" name="token" value="$synotoken" />
Hm, per hidden Field über GET, da passt doch etwas nicht...habe ich da jetzt etwas verpasst?Bis dahin noch ein Screenshot, indem du siehst, das der Token per GET durchaus über das hidden field übergeben wird.
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.