socket_cmsg_credentials.phpt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. if (!defined('SO_PASSCRED')) {
  14. die('skip SO_PASSCRED is not defined');
  15. }
  16. --FILE--
  17. <?php
  18. include __DIR__."/mcast_helpers.php.inc";
  19. $path = sys_get_temp_dir() . "/socket_cmsg_credentials.sock";
  20. @unlink($path);
  21. echo "creating send socket\n";
  22. $sends1 = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err");
  23. var_dump($sends1);
  24. socket_set_nonblock($sends1) or die("Could not put in non-blocking mode");
  25. echo "creating receive socket\n";
  26. $s = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err");
  27. var_dump($s);
  28. $br = socket_bind($s, $path) or die("err");
  29. var_dump($br);
  30. socket_set_nonblock($s) or die("Could not put in non-blocking mode");
  31. socket_set_option($s, SOL_SOCKET, SO_PASSCRED, 1) or die("could not set SO_PASSCRED");
  32. //$r = socket_sendmsg($sends1, [
  33. // "iov" => ["test ", "thing", "\n"],
  34. //], 0);
  35. $r = socket_sendto($sends1, $msg = "dread", strlen($msg), 0, $path);
  36. var_dump($r);
  37. checktimeout($s, 500);
  38. $data = [
  39. "name" => [],
  40. "buffer_size" => 2000,
  41. "controllen" => socket_cmsg_space(SOL_SOCKET, SCM_CREDENTIALS)
  42. ];
  43. if (!socket_recvmsg($s, $data, 0)) die("recvmsg");
  44. print_r($data);
  45. $pid = getmypid();
  46. var_dump($data['control'][0]['data']['pid'] === $pid);
  47. ?>
  48. --CLEAN--
  49. <?php
  50. $path = sys_get_temp_dir() . "/socket_cmsg_credentials.sock";
  51. @unlink($path);
  52. --EXPECTF--
  53. creating send socket
  54. object(Socket)#%d (0) {
  55. }
  56. creating receive socket
  57. object(Socket)#%d (0) {
  58. }
  59. bool(true)
  60. int(5)
  61. Array
  62. (
  63. [name] =>
  64. [control] => Array
  65. (
  66. [0] => Array
  67. (
  68. [level] => %d
  69. [type] => %d
  70. [data] => Array
  71. (
  72. [pid] => %d
  73. [uid] => %d
  74. [gid] => %d
  75. )
  76. )
  77. )
  78. [iov] => Array
  79. (
  80. [0] => dread
  81. )
  82. [flags] => 0
  83. )
  84. bool(true)