mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
socket: pass cred to bind and setopt
This commit is contained in:
@@ -33,7 +33,7 @@ typedef struct {
|
|||||||
#define SOCKET_RECV_FLAGS_WAITALL 0x4000000000000000l
|
#define SOCKET_RECV_FLAGS_WAITALL 0x4000000000000000l
|
||||||
#define SOCKET_SEND_FLAGS_NOSIGNAL 0x8000000000000000l
|
#define SOCKET_SEND_FLAGS_NOSIGNAL 0x8000000000000000l
|
||||||
typedef struct socketops_t {
|
typedef struct socketops_t {
|
||||||
int (*bind)(socket_t *socket, sockaddr_t *addr);
|
int (*bind)(socket_t *socket, sockaddr_t *addr, cred_t *cred);
|
||||||
int (*send)(socket_t *socket, sockaddr_t *addr, void *buffer, size_t count, uintmax_t flags, size_t *sendcount);
|
int (*send)(socket_t *socket, sockaddr_t *addr, void *buffer, size_t count, uintmax_t flags, size_t *sendcount);
|
||||||
int (*recv)(socket_t *socket, sockaddr_t *addr, void *buffer, size_t count, uintmax_t flags, size_t *recvcount);
|
int (*recv)(socket_t *socket, sockaddr_t *addr, void *buffer, size_t count, uintmax_t flags, size_t *recvcount);
|
||||||
int (*poll)(socket_t *socket, polldata_t *data, int events);
|
int (*poll)(socket_t *socket, polldata_t *data, int events);
|
||||||
@@ -44,7 +44,7 @@ typedef struct socketops_t {
|
|||||||
int (*getpeername)(socket_t *socket, sockaddr_t *addr);
|
int (*getpeername)(socket_t *socket, sockaddr_t *addr);
|
||||||
size_t (*datacount)(socket_t *socket);
|
size_t (*datacount)(socket_t *socket);
|
||||||
void (*destroy)(socket_t *socket);
|
void (*destroy)(socket_t *socket);
|
||||||
int (*setopt)(socket_t *socket, int optname, void *buffer, size_t len);
|
int (*setopt)(socket_t *socket, int optname, void *buffer, size_t len, cred_t *cred);
|
||||||
} socketops_t;
|
} socketops_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -668,7 +668,7 @@ static void localsock_destroy(socket_t *socket) {
|
|||||||
free(socket);
|
free(socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int localsock_bind(socket_t *socket, sockaddr_t *addr) {
|
static int localsock_bind(socket_t *socket, sockaddr_t *addr, cred_t *cred) {
|
||||||
MUTEX_ACQUIRE(&socket->mutex, false);
|
MUTEX_ACQUIRE(&socket->mutex, false);
|
||||||
int error;
|
int error;
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
|
|||||||
@@ -1412,7 +1412,7 @@ static int tcp_poll(socket_t *socket, polldata_t *data, int events) {
|
|||||||
return revents;
|
return revents;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcp_bind(socket_t *socket, sockaddr_t *addr) {
|
static int tcp_bind(socket_t *socket, sockaddr_t *addr, cred_t *cred) {
|
||||||
tcpsocket_t *tcpsocket = (tcpsocket_t *)socket;
|
tcpsocket_t *tcpsocket = (tcpsocket_t *)socket;
|
||||||
if (addr->ipv4addr.addr != 0) {
|
if (addr->ipv4addr.addr != 0) {
|
||||||
printf("tcp: bind tried to bind to non zero address %x\n", addr->ipv4addr.addr);
|
printf("tcp: bind tried to bind to non zero address %x\n", addr->ipv4addr.addr);
|
||||||
@@ -1787,7 +1787,7 @@ static int tcp_getpeername(socket_t *socket, sockaddr_t *addr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// called with socket locked
|
// called with socket locked
|
||||||
static int tcp_setopt(socket_t *socket, int optname, void *buffer, size_t len) {
|
static int tcp_setopt(socket_t *socket, int optname, void *buffer, size_t len, cred_t *cred) {
|
||||||
tcpsocket_t *tcpsocket = (tcpsocket_t *)socket;
|
tcpsocket_t *tcpsocket = (tcpsocket_t *)socket;
|
||||||
tcb_t *tcb = tcpsocket->tcb;
|
tcb_t *tcb = tcpsocket->tcb;
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ void udp_process(netdev_t *netdev, void *buffer, uint32_t peer) {
|
|||||||
__atomic_sub_fetch(&socket->packetsprocessing, 1, __ATOMIC_SEQ_CST);
|
__atomic_sub_fetch(&socket->packetsprocessing, 1, __ATOMIC_SEQ_CST);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int udp_bind(socket_t *socket, sockaddr_t *addr) {
|
static int udp_bind(socket_t *socket, sockaddr_t *addr, cred_t *cred) {
|
||||||
int e;
|
int e;
|
||||||
MUTEX_ACQUIRE(&socket->mutex, false);
|
MUTEX_ACQUIRE(&socket->mutex, false);
|
||||||
if (socket->state != SOCKET_STATE_UNBOUND) {
|
if (socket->state != SOCKET_STATE_UNBOUND) {
|
||||||
|
|||||||
Reference in New Issue
Block a user