Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Mar 2011 11:25:36 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r220032 - in head/sys: amd64/linux32 compat/linux i386/linux
Message-ID:  <201103261125.p2QBPa19020439@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Sat Mar 26 11:25:36 2011
New Revision: 220032
URL: http://svn.freebsd.org/changeset/base/220032

Log:
  linux compat: add SO_PASSCRED option with basic handling
  
  This seems to have been a part of a bigger patch by dchagin that either
  haven't been committed or committed partially.
  
  Submitted by:	dchagin, nox
  MFC after:	2 weeks

Modified:
  head/sys/amd64/linux32/linux.h
  head/sys/compat/linux/linux_socket.c
  head/sys/i386/linux/linux.h

Modified: head/sys/amd64/linux32/linux.h
==============================================================================
--- head/sys/amd64/linux32/linux.h	Sat Mar 26 11:05:53 2011	(r220031)
+++ head/sys/amd64/linux32/linux.h	Sat Mar 26 11:25:36 2011	(r220032)
@@ -695,6 +695,7 @@ union l_semun {
 #define	LINUX_SO_NO_CHECK	11
 #define	LINUX_SO_PRIORITY	12
 #define	LINUX_SO_LINGER		13
+#define	LINUX_SO_PASSCRED	16
 #define	LINUX_SO_PEERCRED	17
 #define	LINUX_SO_RCVLOWAT	18
 #define	LINUX_SO_SNDLOWAT	19

Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c	Sat Mar 26 11:05:53 2011	(r220031)
+++ head/sys/compat/linux/linux_socket.c	Sat Mar 26 11:25:36 2011	(r220032)
@@ -300,6 +300,8 @@ linux_to_bsd_so_sockopt(int opt)
 		return (SO_OOBINLINE);
 	case LINUX_SO_LINGER:
 		return (SO_LINGER);
+	case LINUX_SO_PASSCRED:
+		return (LOCAL_CREDS);
 	case LINUX_SO_PEERCRED:
 		return (LOCAL_PEERCRED);
 	case LINUX_SO_RCVLOWAT:
@@ -1467,6 +1469,12 @@ linux_setsockopt(struct thread *td, stru
 	switch (bsd_args.level) {
 	case SOL_SOCKET:
 		name = linux_to_bsd_so_sockopt(args->optname);
+		switch (args->optname) {
+		case LINUX_SO_PASSCRED:
+			/* FreeBSD bug? socket level opts at non socket level */
+			bsd_args.level = 0;
+			break;
+		}
 		switch (name) {
 		case SO_RCVTIMEO:
 			/* FALLTHROUGH */
@@ -1544,6 +1552,12 @@ linux_getsockopt(struct thread *td, stru
 	switch (bsd_args.level) {
 	case SOL_SOCKET:
 		name = linux_to_bsd_so_sockopt(args->optname);
+		switch (args->optname) {
+		case LINUX_SO_PASSCRED:
+			/* FreeBSD bug? socket level opts at non socket level */
+			bsd_args.level = 0;
+			break;
+		}
 		switch (name) {
 		case SO_RCVTIMEO:
 			/* FALLTHROUGH */

Modified: head/sys/i386/linux/linux.h
==============================================================================
--- head/sys/i386/linux/linux.h	Sat Mar 26 11:05:53 2011	(r220031)
+++ head/sys/i386/linux/linux.h	Sat Mar 26 11:25:36 2011	(r220032)
@@ -671,6 +671,7 @@ union l_semun {
 #define	LINUX_SO_NO_CHECK	11
 #define	LINUX_SO_PRIORITY	12
 #define	LINUX_SO_LINGER		13
+#define	LINUX_SO_PASSCRED	16
 #define	LINUX_SO_PEERCRED	17
 #define	LINUX_SO_RCVLOWAT	18
 #define	LINUX_SO_SNDLOWAT	19



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103261125.p2QBPa19020439>