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
This commit is contained in:
avg 2011-03-26 11:25:36 +00:00
parent a923658583
commit df7a39b1d0
3 changed files with 16 additions and 0 deletions

View File

@ -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

View File

@ -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, struct linux_setsockopt_args *args)
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, struct linux_getsockopt_args *args)
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 */

View File

@ -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