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


Reply via email to