Skip to content

Commit 6fe7ff9

Browse files
committed
Implements ancillary data on NetBSD.
With the couple LOCAL_CREDS/SCM_CREDS, in this system we get all the infos needed (included the process id). Closes GH-8700.
1 parent 8e00e82 commit 6fe7ff9

File tree

5 files changed

+20
-7
lines changed

5 files changed

+20
-7
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ PHP NEWS
7070
. Added TCP_KEEPALIVE, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT socket
7171
options. (David Carlier)
7272
. Added ancillary data support for FreeBSD. (David Carlier)
73+
. Added ancillary data support for NetBSD. (David Carlier)
7374

7475
- Sodium:
7576
. Added sodium_crypto_stream_xchacha20_xor_ic(). (Scott)

UPGRADING

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ PHP 8.2 UPGRADE NOTES
248248
. TCP_NOTSENT_LOWAT
249249
. LOCAL_CREDS_PERSISTENT (FreeBSD)
250250
. SCM_CREDS2 (FreeBSD)
251+
. LOCAL_CREDS (NetBSD)
251252

252253
========================================
253254
11. Changes to INI File Handling

ext/sockets/conversions.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ static void from_zval_write_sa_family(const zval *arr_value, char *field, ser_co
435435
memcpy(field, &ival, sizeof(ival));
436436
}
437437

438-
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT)
438+
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT) || defined(LOCAL_CREDS)
439439
static void from_zval_write_pid_t(const zval *arr_value, char *field, ser_context *ctx)
440440
{
441441
zend_long lval;
@@ -522,7 +522,7 @@ static void to_zval_read_uint32(const char *data, zval *zv, res_context *ctx)
522522
ZVAL_LONG(zv, (zend_long)ival);
523523
}
524524
#endif
525-
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT)
525+
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT) || defined(LOCAL_CREDS)
526526
static void to_zval_read_pid_t(const char *data, zval *zv, res_context *ctx)
527527
{
528528
pid_t ival;
@@ -1302,13 +1302,18 @@ void to_zval_read_in6_pktinfo(const char *data, zval *zv, res_context *ctx)
13021302
#endif
13031303

13041304
/* CONVERSIONS for struct ucred */
1305-
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT)
1305+
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT) || defined(LOCAL_CREDS)
13061306
static const field_descriptor descriptors_ucred[] = {
13071307
#if defined(LOCAL_CREDS_PERSISTENT)
13081308
{"pid", sizeof("pid"), 1, offsetof(struct sockcred2, sc_pid), from_zval_write_pid_t, to_zval_read_pid_t},
13091309
{"uid", sizeof("uid"), 1, offsetof(struct sockcred2, sc_euid), from_zval_write_uid_t, to_zval_read_uid_t},
13101310
/* the type gid_t is the same as uid_t: */
13111311
{"gid", sizeof("gid"), 1, offsetof(struct sockcred2, sc_egid), from_zval_write_uid_t, to_zval_read_uid_t},
1312+
#elif defined(LOCAL_CREDS)
1313+
{"pid", sizeof("pid"), 1, offsetof(struct sockcred, sc_pid), from_zval_write_pid_t, to_zval_read_pid_t},
1314+
{"uid", sizeof("uid"), 1, offsetof(struct sockcred, sc_euid), from_zval_write_uid_t, to_zval_read_uid_t},
1315+
/* the type gid_t is the same as uid_t: */
1316+
{"gid", sizeof("gid"), 1, offsetof(struct sockcred, sc_egid), from_zval_write_uid_t, to_zval_read_uid_t},
13121317
#elif defined(ANC_CREDS_CMSGCRED)
13131318
{"pid", sizeof("pid"), 1, offsetof(struct cmsgcred, cmcred_pid), from_zval_write_pid_t, to_zval_read_pid_t},
13141319
{"uid", sizeof("uid"), 1, offsetof(struct cmsgcred, cmcred_uid), from_zval_write_uid_t, to_zval_read_uid_t},

ext/sockets/conversions.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#ifndef PHP_WIN32
77
# include <netinet/in.h>
88
# include <sys/socket.h>
9-
# ifdef __FreeBSD__
9+
# if defined(__FreeBSD__) || defined(__NetBSD__)
1010
# include <sys/un.h>
1111
# endif
1212
#else
@@ -54,7 +54,7 @@ void from_zval_write_in6_pktinfo(const zval *container, char *in6_pktinfo_c, ser
5454
void to_zval_read_in6_pktinfo(const char *data, zval *zv, res_context *ctx);
5555
#endif
5656

57-
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT)
57+
#if defined(SO_PASSCRED) || defined(LOCAL_CREDS_PERSISTENT) || defined(LOCAL_CREDS)
5858
void from_zval_write_ucred(const zval *container, char *ucred_c, ser_context *ctx);
5959
void to_zval_read_ucred(const char *data, zval *zv, res_context *ctx);
6060
#endif

ext/sockets/sendrecvmsg.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,12 @@ static void init_ancillary_registry(void)
134134
#endif
135135
#endif
136136

137-
#ifdef LOCAL_CREDS_PERSISTENT
137+
#if defined(LOCAL_CREDS_PERSISTENT)
138138
PUT_ENTRY(SOCKCRED2SIZE(1), 1, 0, from_zval_write_ucred,
139139
to_zval_read_ucred, SOL_SOCKET, SCM_CREDS2);
140+
#elif defined(LOCAL_CREDS)
141+
PUT_ENTRY(SOCKCREDSIZE(1), 1, 0, from_zval_write_ucred,
142+
to_zval_read_ucred, SOL_SOCKET, SCM_CREDS);
140143
#endif
141144

142145
#ifdef SCM_RIGHTS
@@ -457,9 +460,12 @@ void php_socket_sendrecvmsg_init(INIT_FUNC_ARGS)
457460
#endif
458461
REGISTER_LONG_CONSTANT("SO_PASSCRED", SO_PASSCRED, CONST_CS | CONST_PERSISTENT);
459462
#endif
460-
#ifdef LOCAL_CREDS_PERSISTENT
463+
#if defined(LOCAL_CREDS_PERSISTENT)
461464
REGISTER_LONG_CONSTANT("SCM_CREDS2", SCM_CREDS2, CONST_CS | CONST_PERSISTENT);
462465
REGISTER_LONG_CONSTANT("LOCAL_CREDS_PERSISTENT", LOCAL_CREDS_PERSISTENT, CONST_CS | CONST_PERSISTENT);
466+
#elif defined(LOCAL_CREDS)
467+
REGISTER_LONG_CONSTANT("SCM_CREDS", SCM_CREDS, CONST_CS | CONST_PERSISTENT);
468+
REGISTER_LONG_CONSTANT("LOCAL_CREDS", LOCAL_CREDS, CONST_CS | CONST_PERSISTENT);
463469
#endif
464470

465471
#ifdef ZTS

0 commit comments

Comments
 (0)