[Patch] passcred cleanup in struct socket

2005-02-17 Thread Herbert Poetzl

struct socket uses a 'bool' (unsigned char) to
'flag' the pass-credential option for sockets
(which can be easily replaced by a flag)

best,
Herbert


diff -NurpP --minimal linux-2.6.11-rc4/include/linux/net.h 
linux-2.6.11-rc4-sock/include/linux/net.h
--- linux-2.6.11-rc4/include/linux/net.h2005-02-13 17:17:06 +0100
+++ linux-2.6.11-rc4-sock/include/linux/net.h   2005-02-17 09:47:44 +0100
@@ -61,6 +61,7 @@ typedef enum {
 #define SOCK_ASYNC_NOSPACE 0
 #define SOCK_ASYNC_WAITDATA1
 #define SOCK_NOSPACE   2
+#define SOCK_PASSCRED  3
 
 #ifndef ARCH_HAS_SOCKET_TYPES
 /** sock_type - Socket types
@@ -111,7 +112,6 @@ struct socket {
struct sock *sk;
wait_queue_head_t   wait;
short   type;
-   unsigned char   passcred;
 };
 
 struct vm_area_struct;
diff -NurpP --minimal linux-2.6.11-rc4/include/net/scm.h 
linux-2.6.11-rc4-sock/include/net/scm.h
--- linux-2.6.11-rc4/include/net/scm.h  2004-08-14 12:55:32 +0200
+++ linux-2.6.11-rc4-sock/include/net/scm.h 2005-02-17 09:49:42 +0100
@@ -51,13 +51,13 @@ static __inline__ void scm_recv(struct s
 {
if (!msg->msg_control)
{
-   if (sock->passcred || scm->fp)
+   if (test_bit(SOCK_PASSCRED, >flags) || scm->fp)
msg->msg_flags |= MSG_CTRUNC;
scm_destroy(scm);
return;
}
 
-   if (sock->passcred)
+   if (test_bit(SOCK_PASSCRED, >flags))
put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(scm->creds), 
>creds);
 
if (!scm->fp)
diff -NurpP --minimal linux-2.6.11-rc4/net/core/sock.c 
linux-2.6.11-rc4-sock/net/core/sock.c
--- linux-2.6.11-rc4/net/core/sock.c2005-02-13 17:17:18 +0100
+++ linux-2.6.11-rc4-sock/net/core/sock.c   2005-02-17 09:49:42 +0100
@@ -333,7 +333,10 @@ int sock_setsockopt(struct socket *sock,
break;
 
case SO_PASSCRED:
-   sock->passcred = valbool;
+   if (valbool)
+   set_bit(SOCK_PASSCRED, >flags);
+   else
+   clear_bit(SOCK_PASSCRED, >flags);
break;
 
case SO_TIMESTAMP:
@@ -557,7 +560,7 @@ int sock_getsockopt(struct socket *sock,
break; 
 
case SO_PASSCRED:
-   v.val = sock->passcred;
+   v.val = test_bit(SOCK_PASSCRED, >flags) ? 1 : 0;
break;
 
case SO_PEERCRED:
diff -NurpP --minimal linux-2.6.11-rc4/net/socket.c 
linux-2.6.11-rc4-sock/net/socket.c
--- linux-2.6.11-rc4/net/socket.c   2005-02-13 17:17:19 +0100
+++ linux-2.6.11-rc4-sock/net/socket.c  2005-02-17 09:34:41 +0100
@@ -287,7 +287,7 @@ static struct inode *sock_alloc_inode(st
ei->socket.ops = NULL;
ei->socket.sk = NULL;
ei->socket.file = NULL;
-   ei->socket.passcred = 0;
+   ei->socket.flags = 0;
 
return >vfs_inode;
 }
diff -NurpP --minimal linux-2.6.11-rc4/net/unix/af_unix.c 
linux-2.6.11-rc4-sock/net/unix/af_unix.c
--- linux-2.6.11-rc4/net/unix/af_unix.c 2005-02-13 17:17:19 +0100
+++ linux-2.6.11-rc4-sock/net/unix/af_unix.c2005-02-17 09:49:42 +0100
@@ -861,8 +861,8 @@ static int unix_dgram_connect(struct soc
goto out;
alen = err;
 
-   if (sock->passcred && !unix_sk(sk)->addr &&
-   (err = unix_autobind(sock)) != 0)
+   if (test_bit(SOCK_PASSCRED, >flags) &&
+   !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0)
goto out;
 
other=unix_find_other(sunaddr, alen, sock->type, hash, );
@@ -952,7 +952,8 @@ static int unix_stream_connect(struct so
goto out;
addr_len = err;
 
-   if (sock->passcred && !u->addr && (err = unix_autobind(sock)) != 0)
+   if (test_bit(SOCK_PASSCRED, >flags)
+   && !u->addr && (err = unix_autobind(sock)) != 0)
goto out;
 
timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
@@ -1286,7 +1287,8 @@ static int unix_dgram_sendmsg(struct kio
goto out;
}
 
-   if (sock->passcred && !u->addr && (err = unix_autobind(sock)) != 0)
+   if (test_bit(SOCK_PASSCRED, >flags)
+   && !u->addr && (err = unix_autobind(sock)) != 0)
goto out;
 
err = -EMSGSIZE;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[Patch] passcred cleanup in struct socket

2005-02-17 Thread Herbert Poetzl

struct socket uses a 'bool' (unsigned char) to
'flag' the pass-credential option for sockets
(which can be easily replaced by a flag)

best,
Herbert


diff -NurpP --minimal linux-2.6.11-rc4/include/linux/net.h 
linux-2.6.11-rc4-sock/include/linux/net.h
--- linux-2.6.11-rc4/include/linux/net.h2005-02-13 17:17:06 +0100
+++ linux-2.6.11-rc4-sock/include/linux/net.h   2005-02-17 09:47:44 +0100
@@ -61,6 +61,7 @@ typedef enum {
 #define SOCK_ASYNC_NOSPACE 0
 #define SOCK_ASYNC_WAITDATA1
 #define SOCK_NOSPACE   2
+#define SOCK_PASSCRED  3
 
 #ifndef ARCH_HAS_SOCKET_TYPES
 /** sock_type - Socket types
@@ -111,7 +112,6 @@ struct socket {
struct sock *sk;
wait_queue_head_t   wait;
short   type;
-   unsigned char   passcred;
 };
 
 struct vm_area_struct;
diff -NurpP --minimal linux-2.6.11-rc4/include/net/scm.h 
linux-2.6.11-rc4-sock/include/net/scm.h
--- linux-2.6.11-rc4/include/net/scm.h  2004-08-14 12:55:32 +0200
+++ linux-2.6.11-rc4-sock/include/net/scm.h 2005-02-17 09:49:42 +0100
@@ -51,13 +51,13 @@ static __inline__ void scm_recv(struct s
 {
if (!msg-msg_control)
{
-   if (sock-passcred || scm-fp)
+   if (test_bit(SOCK_PASSCRED, sock-flags) || scm-fp)
msg-msg_flags |= MSG_CTRUNC;
scm_destroy(scm);
return;
}
 
-   if (sock-passcred)
+   if (test_bit(SOCK_PASSCRED, sock-flags))
put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(scm-creds), 
scm-creds);
 
if (!scm-fp)
diff -NurpP --minimal linux-2.6.11-rc4/net/core/sock.c 
linux-2.6.11-rc4-sock/net/core/sock.c
--- linux-2.6.11-rc4/net/core/sock.c2005-02-13 17:17:18 +0100
+++ linux-2.6.11-rc4-sock/net/core/sock.c   2005-02-17 09:49:42 +0100
@@ -333,7 +333,10 @@ int sock_setsockopt(struct socket *sock,
break;
 
case SO_PASSCRED:
-   sock-passcred = valbool;
+   if (valbool)
+   set_bit(SOCK_PASSCRED, sock-flags);
+   else
+   clear_bit(SOCK_PASSCRED, sock-flags);
break;
 
case SO_TIMESTAMP:
@@ -557,7 +560,7 @@ int sock_getsockopt(struct socket *sock,
break; 
 
case SO_PASSCRED:
-   v.val = sock-passcred;
+   v.val = test_bit(SOCK_PASSCRED, sock-flags) ? 1 : 0;
break;
 
case SO_PEERCRED:
diff -NurpP --minimal linux-2.6.11-rc4/net/socket.c 
linux-2.6.11-rc4-sock/net/socket.c
--- linux-2.6.11-rc4/net/socket.c   2005-02-13 17:17:19 +0100
+++ linux-2.6.11-rc4-sock/net/socket.c  2005-02-17 09:34:41 +0100
@@ -287,7 +287,7 @@ static struct inode *sock_alloc_inode(st
ei-socket.ops = NULL;
ei-socket.sk = NULL;
ei-socket.file = NULL;
-   ei-socket.passcred = 0;
+   ei-socket.flags = 0;
 
return ei-vfs_inode;
 }
diff -NurpP --minimal linux-2.6.11-rc4/net/unix/af_unix.c 
linux-2.6.11-rc4-sock/net/unix/af_unix.c
--- linux-2.6.11-rc4/net/unix/af_unix.c 2005-02-13 17:17:19 +0100
+++ linux-2.6.11-rc4-sock/net/unix/af_unix.c2005-02-17 09:49:42 +0100
@@ -861,8 +861,8 @@ static int unix_dgram_connect(struct soc
goto out;
alen = err;
 
-   if (sock-passcred  !unix_sk(sk)-addr 
-   (err = unix_autobind(sock)) != 0)
+   if (test_bit(SOCK_PASSCRED, sock-flags) 
+   !unix_sk(sk)-addr  (err = unix_autobind(sock)) != 0)
goto out;
 
other=unix_find_other(sunaddr, alen, sock-type, hash, err);
@@ -952,7 +952,8 @@ static int unix_stream_connect(struct so
goto out;
addr_len = err;
 
-   if (sock-passcred  !u-addr  (err = unix_autobind(sock)) != 0)
+   if (test_bit(SOCK_PASSCRED, sock-flags)
+!u-addr  (err = unix_autobind(sock)) != 0)
goto out;
 
timeo = sock_sndtimeo(sk, flags  O_NONBLOCK);
@@ -1286,7 +1287,8 @@ static int unix_dgram_sendmsg(struct kio
goto out;
}
 
-   if (sock-passcred  !u-addr  (err = unix_autobind(sock)) != 0)
+   if (test_bit(SOCK_PASSCRED, sock-flags)
+!u-addr  (err = unix_autobind(sock)) != 0)
goto out;
 
err = -EMSGSIZE;
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/