Baïkal contacts (CardDAV) and calendar (CardDAV) installation package for Synology

Status
Für weitere Antworten geschlossen.
DSM 5.0-4482 with non-working Baikal admin UI.
This is the response of 'http://.../baikal/zaza.php':
Rich (BBCode):
Array ( 
[...]
[DOCUMENT_ROOT] => /var/services/web 
[REQUEST_URI] => /baikal/zaza.php 
)

Hmmm, this is looking good too :-/

Can you please move "zaza.php" to the underlying "admin" folder and test again, this time with admin in the path of course:
Rich (BBCode):
http://.../baikal/admin/zaza.php'

:cool: Thanks keyhan for the hint to use <pre> tags, for getting newlines.
The zaza.php file should better be like this indeed:
PHP:
<pre>
<?php
  print_r($_SERVER);
  ?>
</pre>

Thx,
Erik
 
Hi Eric,

actually I would expect the stated behavior to be correct ... when calling subdomain.domain.tld then /var/services/web/subdomain is the Document_Root and therefore the requested URI is /. So calling the zaza.php in this case would be a mere addition, i.e. Document_Root (/var/services/web/baikal) + Request_URI (/zaza.php) = /var/services/web/baikal/zaza.php.

Other way around ... when calling domain.tld then /var/services/web is the Document_Root, by addressing domain.tld/baikal the Request_URI is /baikal as addition to the Document_Root. So calling the zaza.php in this case would be an addition of Document_Root (/var/services/web) + Request_URI (/baikal/zaza.php) = /var/services/web/baikal/zaza.php.

The received output as I have sated it, is what I received in exactly the order stated.

Best regards,

dsmynas
 
You enabled Web Station only recently, did you retest if you really need your "customisation" after all ?
Ok, I did a check right now. The base href command in the sourcecode of the web admin page looks like this with customization:
Rich (BBCode):
<base href="http://[hostname]/baikal/" />
And without the additional (customized) code it looks like this:
Rich (BBCode):
<base href="http://[hostname]/" />

You can see the web admin frontend under the attached picture as well. On the left with the customized code and on the right without it (the original code):

baikal-web-admin-difference.jpg

Additionally:
Can you please also test in the "admin" folder, as described in the next post #161 ?
Rich (BBCode):
 Array
(
    [USER] => http
    [HOME] => /var/services/web
    [FCGI_ROLE] => RESPONDER
    [REDIRECT_HTTP_AUTHORIZATION] => 
    [REDIRECT_MOD_X_SENDFILE_ENABLED] => yes
    [REDIRECT_HANDLER] => php5-fastcgi
    [REDIRECT_STATUS] => 200
    [MOD_X_SENDFILE_ENABLED] => yes
    [HTTP_HOST] => [hostname]
    [HTTP_USER_AGENT] => [useragent]
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_COOKIE] => [somecookiestuff]
    [HTTP_CONNECTION] => keep-alive
    [PATH] => /bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin
    [SERVER_SIGNATURE] => 
    [SERVER_SOFTWARE] => Apache
    [SERVER_NAME] => [hostname]
    [SERVER_ADDR] => [address]
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => [address]
    [DOCUMENT_ROOT] => /var/services/web
    [SERVER_ADMIN] => admin
    [SCRIPT_FILENAME] => /var/services/web/baikal/admin/zaza.php
    [REMOTE_PORT] => 60510
    [REDIRECT_URL] => /baikal/admin/zaza.php
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /baikal/admin/zaza.php
    [SCRIPT_NAME] => /baikal/admin/zaza.php
    [ORIG_SCRIPT_FILENAME] => /php-fpm-handler
    [ORIG_PATH_INFO] => /baikal/admin/zaza.php
    [ORIG_PATH_TRANSLATED] => /var/services/web/baikal/admin/zaza.php
    [ORIG_SCRIPT_NAME] => /php-fpm-handler.fcgi
    [PHP_SELF] => /baikal/admin/zaza.php
    [REQUEST_TIME_FLOAT] => 1400148019.2744
    [REQUEST_TIME] => 1400148019
)
 
Hi Basalt,

this is the result for 'http://.../baikal/admin/zaza.php':

Rich (BBCode):
Array
(
    [USER] => http
    [HOME] => /var/services/web
    [FCGI_ROLE] => RESPONDER
    [REDIRECT_HTTP_AUTHORIZATION] => 
    [REDIRECT_MOD_X_SENDFILE_ENABLED] => yes
    [REDIRECT_HANDLER] => php5-fastcgi
    [REDIRECT_STATUS] => 200
    [MOD_X_SENDFILE_ENABLED] => yes
    [HTTP_HOST] => nessie
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_LANGUAGE] => de,en-US;q=0.7,en;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_DNT] => 1
    [HTTP_CONNECTION] => keep-alive
    [PATH] => /bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin
    [SERVER_SIGNATURE] => 
    [SERVER_SOFTWARE] => Apache
    [SERVER_NAME] => nessie
    [SERVER_ADDR] => 192.168.2.11
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 192.168.2.100
    [DOCUMENT_ROOT] => /var/services/web
    [SERVER_ADMIN] => admin
    [SCRIPT_FILENAME] => /var/services/web/baikal/admin/zaza.php
    [REMOTE_PORT] => 52066
    [REDIRECT_URL] => /baikal/admin/zaza.php
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /baikal/admin/zaza.php
    [SCRIPT_NAME] => /baikal/admin/zaza.php
    [ORIG_SCRIPT_FILENAME] => /php-fpm-handler
    [ORIG_PATH_INFO] => /baikal/admin/zaza.php
    [ORIG_PATH_TRANSLATED] => /var/services/web/baikal/admin/zaza.php
    [ORIG_SCRIPT_NAME] => /php-fpm-handler.fcgi
    [PHP_SELF] => /baikal/admin/zaza.php
    [REQUEST_TIME_FLOAT] => 1400174549.7022
    [REQUEST_TIME] => 1400174549
)
 
actually I would expect the stated behavior to be correct ...
[...]
The received output as I have sated it, is what I received in exactly the order stated.

Yes, I think you are right.

I am really puzzeled now, all $_SERVER strings of you, Grottenolm and Keyhan are looking good, and the similar as under DSM 4.3
Still it doesn't work under DSM 5 :eek:

I have to dive deeper into the code, busy preparing an enhanced "zaza.php" with Baikal code in it for testing...

/Erik
 
Admin url and DSM 5.0 fix!

Finally I tracked down the problem of the wrong admin urls.

The Core/Frameworks/Flake/Framework.php wrongfully detect the base url of the site. Although the problem is not with the Framework.php but with the php version included with dsm 5.0. There is a problem with a php function named substr_compare which is compares to strings but it always return true even if the searched string not included in the base string. This specific function used for testing the url if it's includes the actual php script's name (mostly index.php) or not to decide to cut it off or not from the request uri. So if you try to access the admin like this http://[hostname]/baikal/admin/index.php it will work until the url has the index.php ending. But if you not specify the index.php at the end it won't.

So to fix this (more precisely to make a workaround) you have to edit the referred php script and replace the endsWith function (line 81) to this one:

PHP:
	public static function endsWith($sString, $sTest) {
		$iTestLen = strlen($sTest);
		if ($iTestLen > strlen($sString)) return false;
		//this is the original line: return substr_compare($sString, $sTest, -$iTestLen) === 0; 
		return substr($sString, -$iTestLen) == $sTest;
	}

After this the admin site will function normally without further modification of admin/index.php

My baikal version is 0.2.7 and DMS version is 5.0-4482. I tested this out on a fresh install of baikal.
 
@Pimpa: Thanks for tracking it down. And yes, you're right, for some reason the substr_compare function does not return the right value in this case.
If your substr-code is doing it right (I just checked and afaik it does) I don't see why we should rely on substr_compare. So maybe you should post your knowledge on this site as well.
 
Alright, now I think I know what's going on. This is what we have:
Rich (BBCode):
return substr_compare($sString, $sTest, -$iTestLen) === 0;
So, if we take a close look here, we'll see that in our case this function "compares $sString from position -$iTestLen with $sTest".
We have no length parameter, so we'll get the "default" value:
The default value is the largest of the length of the str compared to the length of main_str less the offset.
But you'll find a note from a user named "Skyborne" which states, that you'll get unexpected results if you leave this part out. And I think he's right, because the default value (for the length) here is "0", which leads to this issue. So if you set this parameter to a value not equal to zero you get what you want:
Rich (BBCode):
return substr_compare($sString, $sTest, -$iTestLen, 1) === 0;

I'm no PHP expert, so correct me if I'm wrong.
 
Finally I tracked down the problem of the wrong admin urls.

The Core/Frameworks/Flake/Framework.php wrongfully detect the base url of the site. Although the problem is not with the Framework.php but with the php version included with dsm 5.0. There is a problem with a php function named substr_compare which is compares to strings but it always return true even if the searched string not included in the base string. This specific function used for testing the url if it's includes the actual php script's name (mostly index.php) or not to decide to cut it off or not from the request uri. So if you try to access the admin like this http://[hostname]/baikal/admin/index.php it will work until the url has the index.php ending. But if you not specify the index.php at the end it won't.

So to fix this (more precisely to make a workaround) you have to edit the referred php script and replace the endsWith function (line 81) to this one:

PHP:
	public static function endsWith($sString, $sTest) {
		$iTestLen = strlen($sTest);
		if ($iTestLen > strlen($sString)) return false;
		//this is the original line: return substr_compare($sString, $sTest, -$iTestLen) === 0; 
		return substr($sString, -$iTestLen) == $sTest;
	}
After this the admin site will function normally without further modification of admin/index.php
After testing this weekend with my "enhanced zaza.php", the only logical explanation I could come up with was a buggy standard function in the PHP of DSM 5. It seemed very unlikely to me :eek:

Your improved code makes perfectly sense to me.

=> Just to be sure: can someone else test this as well ?

Next steps could be:
- ask the Baikal team to implement the fix and make a new release
- possibly fix this for the current Synology package in advance

Thx,
Erik
 
Zuletzt bearbeitet:
Rich (BBCode):
return substr_compare($sString, $sTest, -$iTestLen, 1) === 0;

I'm no PHP expert, so correct me if I'm wrong.
I am not a PHP expert either, but I think this code would only compare the first char, not the whole test string.

/Erik
 
@Basalt:
Yes, that's what I would expect too. I compared the results of this specific "substr_compare" routine on DSM 5 and on this site.
The code i took:
Rich (BBCode):
$sString = "/baikal/admin/";
$sTest = "index.php";
$iTestLen = 9;
echo substr_compare($sString, $sTest, -$iTestLen);
echo " ... ";
echo substr_compare($sString, $sTest, -$iTestLen, 1);
The results are completely different.
On Synology I get 0 (without length) and -5 (with the length parameter).
While the Sandbox gives me -1 in both cases.
 
Very strange indeed.

Do you agree with Pimpa's proposal ?
 
Hey!

The same problem occured to me and google directed me to to Pimpa's solution. I tested it, but it didn't work for me. Instead I changed line 37 in baikal/Core/Frameworks/BaikalAdmin/Framework.php as follows:

Rich (BBCode):
namespace BaikalAdmin;

class Framework extends \Flake\Core\Framework {
	
	public static function bootstrap() {
		define("BAIKALADMIN_PATH_ROOT", PROJECT_PATH_ROOT . "Core/Frameworks/BaikalAdmin/");	# ./
		
		\Baikal\Framework::bootstrap();
		\Formal\Framework::bootstrap();

		// Original code: $GLOBALS["ROUTER"]::setURIPath("admin/");
                $GLOBALS["ROUTER"]::setURIPath("admin/index.php");


		# Include BaikalAdmin Framework config
		require_once(BAIKALADMIN_PATH_ROOT . "config.php");
	}
}
 
The same problem occured to me and google directed me to to Pimpa's solution. I tested it, but it didn't work for me. Instead I changed line 37 in baikal/Core/Frameworks/BaikalAdmin/Framework.php as follows:
[...]
There is no such code in the Baikal 0.2.7 flat package, where this Syno package is based on.
What Baikal version are you using? How did you install?

Shortly, I will release the -002 version of this Syno package. I would appreciate if you could test it.

Best regards,
Erik
 
0.2.7-002 released

I just released the 0.2.7-002 version on SourceForge (see first post for the link), with the fix suggested by Pimpa.
Please check if this solves the issue for you all. See PDF manual for update instructions.

=> Remember that when using SQLite (NOT: MariaDB), appearently you need to enable the mssql extension (see e.g. this post).

:):) Many thanks to atzis77, mausbieber, rwe444, dsmynas, grottenolm, keyhan, Pimpa, funkfux and others for testing, analysing, suggesting improvements, etc, etc :):)

/Erik
 
Zuletzt bearbeitet:
There is no such code in the Baikal 0.2.7 flat package, where this Syno package is based on.
What Baikal version are you using? How did you install?

I'm using Baikal0.2.7 as well. You find the code in your package.tgz and then in /flat/Core/Frameworks/BaikalAdmin/Framework.php.

However, the origin of my problem wasn't in this file, but in the settings of my server. Normally, if you try to access a folder like https://mydomain/baikal/admin/ the server tries to show you the index file of this folder. But my server was configured to show index.html files only, so I had to tell him to look for index.php files as well.
 
You find the code in your package.tgz and then in /flat/Core/Frameworks/BaikalAdmin/Framework.php.
Aha, you are right, I looked in the wrong folder.

I understand that the fix you mentioned was specifically for your situation, not to be generally implemented by others.

Thanks for your feedback,
Erik.
 
Danke!

Basalt, wir haben zu danken! Für das Package, die ausdauernde Fehlersuche und das schnelle Update.

Viele Grüße,
Grottenolm
 
Wie bekommen wir denn Update ohne die vorhandenen Daten gelöscht zu bekommen?
 
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