fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths

Vor kurzem bekam ich bei einem git-Befehl diese Fehlermeldung

fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths

Grund für die Fehlermeldung war dass ich einen git-Befehl wie diesen ausgeführt habe

git rev-list --count ''

Nach ein bisschen suchen kam ich auf den Grund der Fehlermeldung

An empty string as a pathspec element that means "everything" i.e. 'git add ""', is now illegal. We started this by first deprecating and warning a pathspec that has such an element in 2.11 (Nov 2016).

Mit anderen Worten, ich musste meinen git-Befehl so anpassen, dass sich anstelle der zwei Apostrophe eine Commit ID befindet, also z.B.

git rev-list --count e12821

oder

git rev-list --count HEAD

tar Archive parallel packen und komprimieren

Vor kurzem hab ich gelernt, dass man mit tar Archive auch parallel packen und komprimieren kann. Dazu wird das Programm pigz benötigt.

Installation von pigz

Installiert wird das Programm unter CentOS mit

sudo yum install pigz

und unter Ubuntu mit

sudo apt install pigz

Paralleles archivieren und komprimieren von Dateien

Ist pigz installiert, lassen sich Dateien mit tar recht einfach packen und komprimieren. Dazu wird der Parameter –use-compress-program (Kurzform: -I (großes i)) verwendet:

tar -c -I pigz -f archive.tar.gz datei1 datei2

Paralleles Entpacken

Parallel entpacken funktioniert ähnlich wie das packen:

tar -x -I pigz -f archive.tar.gz

Referer Informationen im Request Header deaktivieren

Wenn man normalerweise auf einen Link klickt, fügt der Browser in dem Request Header eine entsprechende “Referer” Zeile hinzu. Doch nicht immer möchte man, dass die eigene Web Applikationen diese Informationen weiterleitet. Das kann auch aus sicherheitstechnischen Aspekten relevant sein, wenn man nicht zu viel Informationen aus dem internen Netz nach außen geben möchte.

Mittlerweile kann der Webserver den Header “Referrer-Policy” setzen um zu verhindern, dass der Browser “Referer” Informationen weiter gibt. Dazu kann man z.B. in der httpd.conf eine Zeile wie diese eingeben

Header always set Referrer-Policy "no-referrer"

Jetzt muss man dem httpd noch sagen, dass er die Konfiguration neu laden soll

/usr/sbin/httpd -k graceful

Man kann neben “no-referrernoch andere Werte angeben. Das liegt dann an den eigenen Wünschen, welchen Wert man nimmt.

XML-RPC bei DokuWiki aktivieren

Um XMP-RPC bei DokuWiki zu aktivieren, geht man zuerst in die Konfigurationseinstellungen:

In den Konfigurationseinstellungen muss man dann in den Abschnitt Authentication:

Dort gibt es ganz unten dann den Abschnitt über XML-RPC:

Jetzt muss man einen Haken neben “Enable the remote API system. This allows other applications to access the wiki via XML-RPC or other mechanisms.” setzen.

Als nächstes muss man in der Textzeile darunter diejenigen User auflisten, die Zugriff auf XML-RPC haben sollen. Also anstelle von “!!not set!!“.

Jetzt nur noch am Ende der Seite auf Save drücken und XML-RPC ist aktiviert.

Um zu überprüfen, ob XML-RPC aktiviert ist, reicht ein curl Kommando im Terminal. Wenn man z.B.

curl --request POST  --data '<?xml version="1.0" ?><methodCall><methodName>dokuwiki.getVersion</methodName></methodCall>' http://127.0.0.1/lib/exe/xmlrpc.php

abschickt, dann müsste eine Antwort dieser Art auftauchen

<?xml version="1.0"?>
 <methodResponse>
   <fault>
     <value>
       <struct>
         <member>
           <name>faultCode</name>
           <value><int>-32603</int></value>
         </member>
         <member>
           <name>faultString</name>
           <value><string>server error. not authorized to call method dokuwiki.getVersion</string></value>
         </member>
       </struct>
     </value>
   </fault>
 </methodResponse>

Die Antwort zeigt, dass XML-RPC aktiv ist, aber die entsprechenden Rechte für eine Abfrage fehlen. Dazu müsste man noch die Cookies beim Request anpassen.

HTML und PHP Code in DokuWiki aktivieren

Standardmäßig kann man in DokuWiki keinen HTML oder PHP Code ausführen. Möchte man also z.B. die PHP Funktion phpinfo(); auf einer Seite ausführen, muss man dafür etwas tun.

Der entsprechende Code zum aufrufen der phpinfo(); würde z.B. so aussehen:

<php>phpinfo();</php>

Zwischen den Tags <php> und </php> kann man beliebigen Code ausführen.

Um die Ausführung der Funktion (bzw. PHP Code im Allgemeinen) zu aktivieren, muss in der Datei conf/local.php die folgende Zeile einfügt bzw. angepasst werden:

$conf['phpok'] = 1;

Ist der Wert von $conf[‘phpok’] auf 1, sollte man die Funktion phpinfo(); ausführen können.

Wenn der Wert von $conf[‘phpok’] allerdings auf 0 ist, dann sieht man auf der entsprechenden Seite nur einen farblich hervorgehobenen Text:

Quellen:

Uncaught Error: Call to undefined function json_encode()

Beim Aufsetzen eines CentOS 8 Images mit httpd und DokuWiki bekam ich diese Fehlermeldung

Fatal error: Uncaught Error: Call to undefined function json_encode() in /var/www/html/dokuwiki/inc/template.php:343 Stack trace: #0 /var/www/html/dokuwiki/lib/tpl/dokuwiki/main.php(22): tpl_metaheaders() #1 /var/www/html/dokuwiki/inc/actions.php(27): include('/var/www/html/d…') #2 /var/www/html/dokuwiki/doku.php(120): act_dispatch() #3 {main} thrown in /var/www/html/dokuwiki/inc/template.php on line 343

Die Lösung dafür war, das Paket php-json auf der Maschine zu installieren:

yum install -y php-json