Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
6d039769
Commit
6d039769
authored
Mar 13, 2015
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
common jail_gen_e to keep things simple in the solaris jail
parent
b3b122e1
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
72 additions
and
36 deletions
+72
-36
mgt_jail_solaris.c
bin/varnishd/mgt/mgt_jail_solaris.c
+72
-36
No files found.
bin/varnishd/mgt/mgt_jail_solaris.c
View file @
6d039769
...
@@ -225,6 +225,33 @@
...
@@ -225,6 +225,33 @@
* the real thing
* the real thing
*/
*/
// XXX @phk can we merge jail_subproc_e and jail_master_e please?
#define JAILG_SHIFT 16
enum
jail_gen_e
{
JAILG_SUBPROC_VCC
=
JAIL_SUBPROC_VCC
,
JAILG_SUBPROC_CC
=
JAIL_SUBPROC_CC
,
JAILG_SUBPROC_VCLLOAD
=
JAIL_SUBPROC_VCLLOAD
,
JAILG_SUBPROC_WORKER
=
JAIL_SUBPROC_WORKER
,
JAILG_MASTER_LOW
=
JAIL_MASTER_LOW
<<
JAILG_SHIFT
,
JAILG_MASTER_HIGH
=
JAIL_MASTER_HIGH
<<
JAILG_SHIFT
};
static
inline
enum
jail_gen_e
jail_subproc_gen
(
enum
jail_subproc_e
e
)
{
assert
(
e
<
(
1
<<
JAILG_SHIFT
));
return
(
enum
jail_gen_e
)
e
;
}
static
inline
enum
jail_gen_e
jail_master_gen
(
enum
jail_master_e
e
)
{
return
(
enum
jail_gen_e
)(
e
<<
JAILG_SHIFT
);
}
static
int
__match_proto__
(
jail_init_f
)
static
int
__match_proto__
(
jail_init_f
)
vjs_init
(
char
**
args
)
vjs_init
(
char
**
args
)
{
{
...
@@ -263,22 +290,22 @@ setppriv_check(int a) {
...
@@ -263,22 +290,22 @@ setppriv_check(int a) {
#define setppriv_assert(a) assert(setppriv_check(a))
#define setppriv_assert(a) assert(setppriv_check(a))
static
void
static
void
vjs_add_inheritable
(
priv_set_t
*
pset
,
enum
jail_
subproc_e
js
e
)
vjs_add_inheritable
(
priv_set_t
*
pset
,
enum
jail_
gen_e
jg
e
)
{
{
switch
(
j
s
e
)
{
switch
(
j
g
e
)
{
case
JAIL_SUBPROC_VCC
:
case
JAIL
G
_SUBPROC_VCC
:
/* for /etc/resolv.conf and /etc/hosts */
/* for /etc/resolv.conf and /etc/hosts */
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
break
;
break
;
case
JAIL_SUBPROC_CC
:
case
JAIL
G
_SUBPROC_CC
:
priv_setop_assert
(
priv_addset
(
pset
,
PRIV_PROC_EXEC
));
priv_setop_assert
(
priv_addset
(
pset
,
PRIV_PROC_EXEC
));
priv_setop_assert
(
priv_addset
(
pset
,
PRIV_PROC_FORK
));
priv_setop_assert
(
priv_addset
(
pset
,
PRIV_PROC_FORK
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_write"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_write"
));
break
;
break
;
case
JAIL_SUBPROC_VCLLOAD
:
case
JAIL
G
_SUBPROC_VCLLOAD
:
break
;
break
;
case
JAIL_SUBPROC_WORKER
:
case
JAIL
G
_SUBPROC_WORKER
:
break
;
break
;
default:
default:
INCOMPL
();
INCOMPL
();
...
@@ -291,17 +318,17 @@ vjs_add_inheritable(priv_set_t *pset, enum jail_subproc_e jse)
...
@@ -291,17 +318,17 @@ vjs_add_inheritable(priv_set_t *pset, enum jail_subproc_e jse)
*/
*/
static
void
static
void
vjs_add_effective
(
priv_set_t
*
pset
,
enum
jail_
subproc_e
js
e
)
vjs_add_effective
(
priv_set_t
*
pset
,
enum
jail_
gen_e
jg
e
)
{
{
switch
(
j
s
e
)
{
switch
(
j
g
e
)
{
case
JAIL_SUBPROC_VCC
:
case
JAIL
G
_SUBPROC_VCC
:
priv_setop_assert
(
priv_addset
(
pset
,
"file_write"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_write"
));
break
;
break
;
case
JAIL_SUBPROC_CC
:
case
JAIL
G
_SUBPROC_CC
:
break
;
break
;
case
JAIL_SUBPROC_VCLLOAD
:
case
JAIL
G
_SUBPROC_VCLLOAD
:
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
case
JAIL_SUBPROC_WORKER
:
case
JAIL
G
_SUBPROC_WORKER
:
priv_setop_assert
(
priv_addset
(
pset
,
"net_access"
));
priv_setop_assert
(
priv_addset
(
pset
,
"net_access"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_read"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_write"
));
priv_setop_assert
(
priv_addset
(
pset
,
"file_write"
));
...
@@ -317,14 +344,14 @@ vjs_add_effective(priv_set_t *pset, enum jail_subproc_e jse)
...
@@ -317,14 +344,14 @@ vjs_add_effective(priv_set_t *pset, enum jail_subproc_e jse)
*/
*/
static
void
static
void
vjs_add_permitted
(
priv_set_t
*
pset
,
enum
jail_
subproc_e
js
e
)
vjs_add_permitted
(
priv_set_t
*
pset
,
enum
jail_
gen_e
jg
e
)
{
{
switch
(
j
s
e
)
{
switch
(
j
g
e
)
{
case
JAIL_SUBPROC_VCC
:
case
JAIL
G
_SUBPROC_VCC
:
case
JAIL_SUBPROC_CC
:
case
JAIL
G
_SUBPROC_CC
:
case
JAIL_SUBPROC_VCLLOAD
:
case
JAIL
G
_SUBPROC_VCLLOAD
:
break
;
break
;
case
JAIL_SUBPROC_WORKER
:
case
JAIL
G
_SUBPROC_WORKER
:
/* for raising limits in cache_waiter_ports.c */
/* for raising limits in cache_waiter_ports.c */
AZ
(
priv_addset
(
pset
,
PRIV_SYS_RESOURCE
));
AZ
(
priv_addset
(
pset
,
PRIV_SYS_RESOURCE
));
break
;
break
;
...
@@ -338,9 +365,9 @@ vjs_add_permitted(priv_set_t *pset, enum jail_subproc_e jse)
...
@@ -338,9 +365,9 @@ vjs_add_permitted(priv_set_t *pset, enum jail_subproc_e jse)
* will get waived in vjs_waive
* will get waived in vjs_waive
*/
*/
static
void
static
void
vjs_add_initial
(
priv_set_t
*
pset
,
enum
jail_
subproc_e
js
e
)
vjs_add_initial
(
priv_set_t
*
pset
,
enum
jail_
gen_e
jg
e
)
{
{
(
void
)
j
s
e
;
(
void
)
j
g
e
;
/* for setgid/setuid */
/* for setgid/setuid */
AZ
(
priv_addset
(
pset
,
PRIV_PROC_SETID
));
AZ
(
priv_addset
(
pset
,
PRIV_PROC_SETID
));
...
@@ -356,7 +383,7 @@ vjs_add_initial(priv_set_t *pset, enum jail_subproc_e jse)
...
@@ -356,7 +383,7 @@ vjs_add_initial(priv_set_t *pset, enum jail_subproc_e jse)
*/
*/
static
void
static
void
vjs_setup
(
enum
jail_
subproc_e
js
e
)
vjs_setup
(
enum
jail_
gen_e
jg
e
)
{
{
priv_set_t
*
priv_all
;
priv_set_t
*
priv_all
;
...
@@ -370,10 +397,10 @@ vjs_setup(enum jail_subproc_e jse)
...
@@ -370,10 +397,10 @@ vjs_setup(enum jail_subproc_e jse)
priv_emptyset
(
priv_all
);
priv_emptyset
(
priv_all
);
vjs_add_inheritable
(
priv_all
,
j
s
e
);
vjs_add_inheritable
(
priv_all
,
j
g
e
);
vjs_add_effective
(
priv_all
,
j
s
e
);
vjs_add_effective
(
priv_all
,
j
g
e
);
vjs_add_permitted
(
priv_all
,
j
s
e
);
vjs_add_permitted
(
priv_all
,
j
g
e
);
vjs_add_initial
(
priv_all
,
j
s
e
);
vjs_add_initial
(
priv_all
,
j
g
e
);
/* try to get all possible privileges, expect EPERM here */
/* try to get all possible privileges, expect EPERM here */
setppriv_assert
(
setppriv
(
PRIV_ON
,
PRIV_PERMITTED
,
priv_all
));
setppriv_assert
(
setppriv
(
PRIV_ON
,
PRIV_PERMITTED
,
priv_all
));
...
@@ -384,9 +411,9 @@ vjs_setup(enum jail_subproc_e jse)
...
@@ -384,9 +411,9 @@ vjs_setup(enum jail_subproc_e jse)
}
}
static
void
static
void
vjs_privsep
(
enum
jail_
subproc_e
js
e
)
vjs_privsep
(
enum
jail_
gen_e
jg
e
)
{
{
(
void
)
j
s
e
;
(
void
)
j
g
e
;
if
(
priv_ineffect
(
PRIV_PROC_SETID
))
{
if
(
priv_ineffect
(
PRIV_PROC_SETID
))
{
if
(
getgid
()
!=
mgt_param
.
gid
)
if
(
getgid
()
!=
mgt_param
.
gid
)
...
@@ -417,7 +444,7 @@ vjs_privsep(enum jail_subproc_e jse)
...
@@ -417,7 +444,7 @@ vjs_privsep(enum jail_subproc_e jse)
*/
*/
static
void
static
void
vjs_waive
(
enum
jail_
subproc_e
js
e
)
vjs_waive
(
enum
jail_
gen_e
jg
e
)
{
{
priv_set_t
*
effective
,
*
inheritable
,
*
permitted
;
priv_set_t
*
effective
,
*
inheritable
,
*
permitted
;
...
@@ -437,13 +464,13 @@ vjs_waive(enum jail_subproc_e jse)
...
@@ -437,13 +464,13 @@ vjs_waive(enum jail_subproc_e jse)
*/
*/
priv_emptyset
(
inheritable
);
priv_emptyset
(
inheritable
);
vjs_add_inheritable
(
inheritable
,
j
s
e
);
vjs_add_inheritable
(
inheritable
,
j
g
e
);
priv_copyset
(
inheritable
,
effective
);
priv_copyset
(
inheritable
,
effective
);
vjs_add_effective
(
effective
,
j
s
e
);
vjs_add_effective
(
effective
,
j
g
e
);
priv_copyset
(
effective
,
permitted
);
priv_copyset
(
effective
,
permitted
);
vjs_add_permitted
(
permitted
,
j
s
e
);
vjs_add_permitted
(
permitted
,
j
g
e
);
/*
/*
* invert the sets and clear privileges such that setppriv will always
* invert the sets and clear privileges such that setppriv will always
...
@@ -466,16 +493,23 @@ vjs_waive(enum jail_subproc_e jse)
...
@@ -466,16 +493,23 @@ vjs_waive(enum jail_subproc_e jse)
static
void
__match_proto__
(
jail_subproc_f
)
static
void
__match_proto__
(
jail_subproc_f
)
vjs_subproc
(
enum
jail_subproc_e
jse
)
vjs_subproc
(
enum
jail_subproc_e
jse
)
{
{
vjs_setup
(
jse
);
enum
jail_gen_e
jge
=
jail_subproc_gen
(
jse
);
vjs_privsep
(
jse
);
vjs_setup
(
jge
);
vjs_waive
(
jse
);
vjs_privsep
(
jge
);
vjs_waive
(
jge
);
}
}
// XXX TODO
static
void
__match_proto__
(
jail_master_f
)
static
void
__match_proto__
(
jail_master_f
)
vjs_master
(
enum
jail_master_e
jme
)
vjs_master
(
enum
jail_master_e
jme
)
{
{
(
void
)
jme
;
enum
jail_gen_e
jge
=
jail_master_gen
(
jme
);
(
void
)
jge
;
/*
if (jme == JAILG_MASTER_HIGH)
AZ(seteuid(0));
else
AZ(seteuid(vju_uid));
*/
}
}
const
struct
jail_tech
jail_tech_solaris
=
{
const
struct
jail_tech
jail_tech_solaris
=
{
...
@@ -483,6 +517,8 @@ const struct jail_tech jail_tech_solaris = {
...
@@ -483,6 +517,8 @@ const struct jail_tech jail_tech_solaris = {
.
name
=
"solaris"
,
.
name
=
"solaris"
,
.
init
=
vjs_init
,
.
init
=
vjs_init
,
.
master
=
vjs_master
,
.
master
=
vjs_master
,
// .make_workdir = vjs_make_workdir,
// .storage_file = vjs_storage_file,
.
subproc
=
vjs_subproc
,
.
subproc
=
vjs_subproc
,
};
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment