socket_cmsg_rights.phpt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. --TEST--
  2. recvmsg(): receive SCM_CREDENTIALS messages
  3. --EXTENSIONS--
  4. sockets
  5. --SKIPIF--
  6. <?php
  7. if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
  8. die('skip not for Microsoft Windows');
  9. }
  10. if (strtolower(substr(PHP_OS, 0, 3)) == 'aix') {
  11. die('skip not for AIX');
  12. }
  13. --FILE--
  14. <?php
  15. include __DIR__."/mcast_helpers.php.inc";
  16. $path = sys_get_temp_dir() . "/socket_cmsg_rights.sock";
  17. @unlink($path);
  18. echo "creating send socket\n";
  19. $sends1 = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err");
  20. var_dump($sends1);
  21. socket_set_nonblock($sends1) or die("Could not put in non-blocking mode");
  22. echo "creating receive socket\n";
  23. $s = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err");
  24. var_dump($s);
  25. $br = socket_bind($s, $path) or die("err");
  26. var_dump($br);
  27. socket_set_nonblock($s) or die("Could not put in non-blocking mode");
  28. $r = socket_sendmsg($sends1, [
  29. "name" => [ "path" => $path ],
  30. "iov" => ["test ", "thing", "\n"],
  31. "control" => [
  32. [
  33. "level" => SOL_SOCKET,
  34. "type" => SCM_RIGHTS,
  35. "data" => [$sends1, STDIN, STDOUT, STDERR],
  36. ]
  37. ]
  38. ], 0);
  39. var_dump($r);
  40. checktimeout($s, 500);
  41. $data = [
  42. "name" => [],
  43. "buffer_size" => 2000,
  44. "controllen" => socket_cmsg_space(SOL_SOCKET, SCM_RIGHTS, 4)
  45. ];
  46. var_dump($data);
  47. if (!socket_recvmsg($s, $data, 0)) die("recvmsg");
  48. if ($data["control"]) {
  49. $control = $data["control"][0];
  50. if ($control["level"] == SOL_SOCKET &&
  51. $control["type"] == SCM_RIGHTS) {
  52. foreach ($control["data"] as $resource) {
  53. if (!is_resource($resource)) {
  54. echo "FAIL RES\n";
  55. var_dump($data);
  56. exit;
  57. }
  58. }
  59. echo "OK";
  60. } else {
  61. echo "FAIL RIGHTS\n";
  62. var_dump($data);
  63. exit;
  64. }
  65. } else {
  66. echo "FAIL CONTROL\n";
  67. var_dump($data);
  68. }
  69. ?>
  70. --CLEAN--
  71. <?php
  72. $path = sys_get_temp_dir() . "/socket_cmsg_rights.sock";
  73. @unlink($path);
  74. --EXPECTF--
  75. creating send socket
  76. object(Socket)#%d (0) {
  77. }
  78. creating receive socket
  79. object(Socket)#%d (0) {
  80. }
  81. bool(true)
  82. int(11)
  83. array(3) {
  84. ["name"]=>
  85. array(0) {
  86. }
  87. ["buffer_size"]=>
  88. int(2000)
  89. ["controllen"]=>
  90. int(%d)
  91. }
  92. OK