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
f16eed37
Commit
f16eed37
authored
Feb 27, 2018
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make sure certain failures from jail functions go into CLI responses.
Fixes 2461
parent
2637332b
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
50 additions
and
24 deletions
+50
-24
mgt.h
bin/varnishd/mgt/mgt.h
+9
-9
mgt_jail.c
bin/varnishd/mgt/mgt_jail.c
+16
-6
mgt_jail_solaris.c
bin/varnishd/mgt/mgt_jail_solaris.c
+2
-2
mgt_jail_unix.c
bin/varnishd/mgt/mgt_jail_unix.c
+21
-5
mgt_main.c
bin/varnishd/mgt/mgt_main.c
+1
-1
mgt_vcc.c
bin/varnishd/mgt/mgt_vcc.c
+1
-1
No files found.
bin/varnishd/mgt/mgt.h
View file @
f16eed37
...
...
@@ -123,8 +123,8 @@ enum jail_fixfd_e {
typedef
int
jail_init_f
(
char
**
);
typedef
void
jail_master_f
(
enum
jail_master_e
);
typedef
void
jail_subproc_f
(
enum
jail_subproc_e
);
typedef
int
jail_make_dir_f
(
const
char
*
dname
);
typedef
void
jail_fixfd_f
(
int
fd
,
enum
jail_fixfd_e
);
typedef
int
jail_make_dir_f
(
const
char
*
,
const
char
*
,
struct
vsb
*
);
typedef
void
jail_fixfd_f
(
int
,
enum
jail_fixfd_e
);
struct
jail_tech
{
unsigned
magic
;
...
...
@@ -134,16 +134,16 @@ struct jail_tech {
jail_master_f
*
master
;
jail_subproc_f
*
subproc
;
jail_make_dir_f
*
make_workdir
;
jail_make_dir_f
*
make_
vcl
dir
;
jail_make_dir_f
*
make_
sub
dir
;
jail_fixfd_f
*
fixfd
;
};
void
VJ_Init
(
const
char
*
j_arg
);
void
VJ_master
(
enum
jail_master_e
jme
);
void
VJ_subproc
(
enum
jail_subproc_e
jse
);
int
VJ_make_workdir
(
const
char
*
dname
);
int
VJ_make_
vcldir
(
const
char
*
dname
);
void
VJ_fix_fd
(
int
fd
,
enum
jail_fixfd_e
);
void
VJ_Init
(
const
char
*
);
void
VJ_master
(
enum
jail_master_e
);
void
VJ_subproc
(
enum
jail_subproc_e
);
int
VJ_make_workdir
(
const
char
*
);
int
VJ_make_
subdir
(
const
char
*
,
const
char
*
,
struct
vsb
*
);
void
VJ_fix_fd
(
int
,
enum
jail_fixfd_e
);
extern
const
struct
jail_tech
jail_tech_unix
;
extern
const
struct
jail_tech
jail_tech_solaris
;
...
...
bin/varnishd/mgt/mgt_jail.c
View file @
f16eed37
...
...
@@ -142,7 +142,7 @@ VJ_make_workdir(const char *dname)
AN
(
dname
);
CHECK_OBJ_NOTNULL
(
vjt
,
JAIL_TECH_MAGIC
);
if
(
vjt
->
make_workdir
!=
NULL
)
{
i
=
vjt
->
make_workdir
(
dname
);
i
=
vjt
->
make_workdir
(
dname
,
NULL
,
NULL
);
if
(
i
)
return
(
i
);
VJ_master
(
JAIL_MASTER_FILE
);
...
...
@@ -169,17 +169,27 @@ VJ_make_workdir(const char *dname)
}
int
VJ_make_
vcldir
(
const
char
*
dname
)
VJ_make_
subdir
(
const
char
*
dname
,
const
char
*
what
,
struct
vsb
*
vsb
)
{
int
e
;
AN
(
dname
);
AN
(
what
);
CHECK_OBJ_NOTNULL
(
vjt
,
JAIL_TECH_MAGIC
);
if
(
vjt
->
make_
vcl
dir
!=
NULL
)
return
(
vjt
->
make_
vcldir
(
dname
));
if
(
vjt
->
make_
sub
dir
!=
NULL
)
return
(
vjt
->
make_
subdir
(
dname
,
what
,
vsb
));
if
(
mkdir
(
dname
,
0755
)
<
0
&&
errno
!=
EEXIST
)
{
MGT_Complain
(
C_ERR
,
"Cannot create VCL directory '%s': %s"
,
dname
,
strerror
(
errno
));
e
=
errno
;
if
(
vsb
!=
NULL
)
{
VSB_printf
(
vsb
,
"Cannot create %s directory '%s': %s
\n
"
,
what
,
dname
,
strerror
(
e
));
}
else
{
MGT_Complain
(
C_ERR
,
"Cannot create %s directory '%s': %s"
,
what
,
dname
,
strerror
(
e
));
}
return
(
1
);
}
return
(
0
);
...
...
bin/varnishd/mgt/mgt_jail_solaris.c
View file @
f16eed37
bin/varnishd/mgt/mgt_jail_unix.c
View file @
f16eed37
...
...
@@ -240,13 +240,25 @@ vju_subproc(enum jail_subproc_e jse)
}
static
int
v_matchproto_
(
jail_make_dir_f
)
vju_make_
vcldir
(
const
char
*
dname
)
vju_make_
subdir
(
const
char
*
dname
,
const
char
*
what
,
struct
vsb
*
vsb
)
{
int
e
;
AN
(
dname
);
AN
(
what
);
AZ
(
seteuid
(
0
));
if
(
mkdir
(
dname
,
0755
)
<
0
&&
errno
!=
EEXIST
)
{
MGT_Complain
(
C_ERR
,
"Cannot create VCL directory '%s': %s"
,
dname
,
strerror
(
errno
));
e
=
errno
;
if
(
vsb
!=
NULL
)
{
VSB_printf
(
vsb
,
"Cannot create %s directory '%s': %s
\n
"
,
what
,
dname
,
strerror
(
e
));
}
else
{
MGT_Complain
(
C_ERR
,
"Cannot create %s directory '%s': %s"
,
what
,
dname
,
strerror
(
e
));
}
return
(
1
);
}
AZ
(
chown
(
dname
,
vju_uid
,
vju_gid
));
...
...
@@ -255,8 +267,12 @@ vju_make_vcldir(const char *dname)
}
static
int
v_matchproto_
(
jail_make_dir_f
)
vju_make_workdir
(
const
char
*
dname
)
vju_make_workdir
(
const
char
*
dname
,
const
char
*
what
,
struct
vsb
*
vsb
)
{
AN
(
dname
);
AZ
(
what
);
AZ
(
vsb
);
AZ
(
seteuid
(
0
));
if
(
mkdir
(
dname
,
0755
)
<
0
&&
errno
!=
EEXIST
)
{
...
...
@@ -297,7 +313,7 @@ const struct jail_tech jail_tech_unix = {
.
name
=
"unix"
,
.
init
=
vju_init
,
.
master
=
vju_master
,
.
make_
vcldir
=
vju_make_vcl
dir
,
.
make_
subdir
=
vju_make_sub
dir
,
.
make_workdir
=
vju_make_workdir
,
.
fixfd
=
vju_fixfd
,
.
subproc
=
vju_subproc
,
...
...
bin/varnishd/mgt/mgt_main.c
View file @
f16eed37
...
...
@@ -745,7 +745,7 @@ main(int argc, char * const *argv)
ARGV_ERR
(
"Cannot create working directory (%s): %s
\n
"
,
dirname
,
strerror
(
errno
));
if
(
VJ_make_
vcldir
(
"vmod_cache"
))
{
if
(
VJ_make_
subdir
(
"vmod_cache"
,
"VMOD cache"
,
NULL
))
{
ARGV_ERR
(
"Cannot create vmod directory (%s/vmod_cache): %s
\n
"
,
dirname
,
strerror
(
errno
));
...
...
bin/varnishd/mgt/mgt_vcc.c
View file @
f16eed37
...
...
@@ -317,7 +317,7 @@ mgt_VccCompile(struct cli *cli, struct vclprog *vcl, const char *vclname,
vp
.
dir
=
strdup
(
VSB_data
(
sb
));
AN
(
vp
.
dir
);
if
(
VJ_make_
vcldir
(
vp
.
dir
))
{
if
(
VJ_make_
subdir
(
vp
.
dir
,
"VCL"
,
cli
->
sb
))
{
free
(
vp
.
dir
);
VSB_destroy
(
&
sb
);
VCLI_Out
(
cli
,
"VCL compilation failed"
);
...
...
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