diff options
author | Gustavo Lopes <glopes@nebm.ist.utl.pt> | 2012-11-05 11:40:24 +0100 |
---|---|---|
committer | Gustavo Lopes <glopes@nebm.ist.utl.pt> | 2013-02-02 16:38:06 +0100 |
commit | 7fc4671df985ab1cedcd9b03d7bd792cc1188758 (patch) | |
tree | a62a5aacff53bb8bf1cc1fdd59e2f14da67343b4 /ext/sockets/tests | |
parent | a85d7f28f69fbc522ed90aee1926d3733be7620d (diff) | |
download | php-git-7fc4671df985ab1cedcd9b03d7bd792cc1188758.tar.gz |
Add test for CMSG_CREDENTIALS message
Diffstat (limited to 'ext/sockets/tests')
-rw-r--r-- | ext/sockets/tests/socket_cmsg_credentials.phpt | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/ext/sockets/tests/socket_cmsg_credentials.phpt b/ext/sockets/tests/socket_cmsg_credentials.phpt new file mode 100644 index 0000000000..6a1c23fa8c --- /dev/null +++ b/ext/sockets/tests/socket_cmsg_credentials.phpt @@ -0,0 +1,89 @@ +--TEST-- +recvmsg(): receive SCM_CREDENTIALS messages +--SKIPIF-- +<?php +if (!extension_loaded('sockets')) { +die('skip sockets extension not available.'); +} +if (strtolower(substr(PHP_OS, 0, 3)) == 'win') { +die('skip not for Microsoft Windows'); +} +--CLEAN-- +<?php +$path = __DIR__ . "/unix_sock"; +@unlink($path); + +--FILE-- +<?php +include __DIR__."/mcast_helpers.php.inc"; +$path = __DIR__ . "/unix_sock"; + +@unlink($path); + +echo "creating send socket\n"; +$sends1 = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err"); +var_dump($sends1); +socket_set_nonblock($sends1) or die("Could not put in non-blocking mode"); + +echo "creating receive socket\n"; +$s = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err"); +var_dump($s); +$br = socket_bind($s, $path) or die("err"); +var_dump($br); +socket_set_nonblock($sends1) or die("Could not put in non-blocking mode"); +socket_set_option($s, SOL_SOCKET, SO_PASSCRED, 1) or die("could not set SO_PASSCRED"); + + +//$r = socket_sendmsg($sends1, [ +// "iov" => ["test ", "thing", "\n"], +//], 0); +$r = socket_sendto($sends1, $msg = "dread", strlen($msg), 0, $path); +var_dump($r); +checktimeout($s, 500); + +$data = [ + "name" => [], + "buffer_size" => 2000, + "controllen" => socket_cmsg_space(SOL_SOCKET, SCM_CREDENTIALS) +]; +if (!socket_recvmsg($s, $data, 0)) die("recvmsg"); +print_r($data); + +$pid = getmypid(); +var_dump($data['control'][0]['data']['pid'] === $pid); + +--EXPECTF-- +creating send socket +resource(%d) of type (Socket) +creating receive socket +resource(%d) of type (Socket) +bool(true) +int(5) +Array +( + [name] => + [control] => Array + ( + [0] => Array + ( + [level] => %d + [type] => %d + [data] => Array + ( + [pid] => %d + [uid] => %d + [gid] => %d + ) + + ) + + ) + + [iov] => Array + ( + [0] => dread + ) + + [flags] => 0 +) +bool(true) |