struct socket: add owner pid member field.
S_io_mod_owner, S_io_get_owner: implement set/get owner pid
---
pflocal/io.c | 24 ++++++++++++++++++++++++
pflocal/sock.c | 3 ++-
pflocal/sock.h | 3 +++
3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/pflocal/io.c b/pflocal/io.c
index 6d43b6d..66acbfe 100644
--- a/pflocal/io.c
+++ b/pflocal/io.c
@@ -555,3 +555,27 @@ S_io_identity (struct sock_user *user,
return err;
}
+
+kern_return_t
+S_io_mod_owner (struct sock_user *user, pid_t owner)
+{
+ if (!user)
+ return EOPNOTSUPP;
+ else
+ {
+ user->sock->owner == owner;
+ return 0;
+ }
+}
+
+kern_return_t
+S_io_get_owner (struct sock_user *user, pid_t *owner)
+{
+ if (!user)
+ return EOPNOTSUPP;
+ else
+ {
+ *owner = user->sock->owner;
+ return 0;
+ }
+}
diff --git a/pflocal/sock.c b/pflocal/sock.c
index 6bc061d..20f127f 100644
--- a/pflocal/sock.c
+++ b/pflocal/sock.c
@@ -126,6 +126,7 @@ sock_create (struct pipe_class *pipe_class, mode_t mode,
struct sock **sock)
new->addr = NULL;
new->uid = getuid ();
new->gid = getgid ();
+ new->owner = 0;
memset (&new->change_time, 0, sizeof (new->change_time));
pthread_mutex_init (&new->lock, NULL);
@@ -488,7 +489,7 @@ sock_shutdown (struct sock *sock, unsigned flags)
/* Unlock SOCK here, as we may subsequently wake up other threads. */
pthread_mutex_unlock (&sock->lock);
-
+
if (read_pipe)
pipe_remove_reader (read_pipe);
if (write_pipe)
diff --git a/pflocal/sock.h b/pflocal/sock.h
index 6a724d4..8e6b888 100644
--- a/pflocal/sock.h
+++ b/pflocal/sock.h
@@ -85,6 +85,9 @@ struct sock
/* Effective identity of the creator of the socket */
uid_t uid;
gid_t gid;
+
+ /* This store the owner of file descriptor */
+ pid_t owner;
};
/* Socket flags */
--
2.47.3