Fix fchmod() and fchown() on fifos.

The new fifo implementation in r232055 broke fchmod() and fchown() on fifos.
Postfix needs this.

Submitted by:	gianni
Reported by:	dougb
This commit is contained in:
Jilles Tjoelker 2012-02-26 15:14:29 +00:00
parent c077ef009e
commit 581400dfed
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=232183

View File

@ -152,6 +152,8 @@ static fo_poll_t pipe_poll;
static fo_kqfilter_t pipe_kqfilter;
static fo_stat_t pipe_stat;
static fo_close_t pipe_close;
static fo_chmod_t pipe_chmod;
static fo_chown_t pipe_chown;
struct fileops pipeops = {
.fo_read = pipe_read,
@ -162,8 +164,8 @@ struct fileops pipeops = {
.fo_kqfilter = pipe_kqfilter,
.fo_stat = pipe_stat,
.fo_close = pipe_close,
.fo_chmod = invfo_chmod,
.fo_chown = invfo_chown,
.fo_chmod = pipe_chmod,
.fo_chown = pipe_chown,
.fo_flags = DFLAG_PASSABLE
};
@ -1548,6 +1550,43 @@ pipe_close(fp, td)
return (0);
}
static int
pipe_chmod(fp, mode, active_cred, td)
struct file *fp;
mode_t mode;
struct ucred *active_cred;
struct thread *td;
{
struct pipe *cpipe;
int error;
cpipe = fp->f_data;
if (cpipe->pipe_state & PIPE_NAMED)
error = vn_chmod(fp, mode, active_cred, td);
else
error = invfo_chmod(fp, mode, active_cred, td);
return (error);
}
static int
pipe_chown(fp, uid, gid, active_cred, td)
struct file *fp;
uid_t uid;
gid_t gid;
struct ucred *active_cred;
struct thread *td;
{
struct pipe *cpipe;
int error;
cpipe = fp->f_data;
if (cpipe->pipe_state & PIPE_NAMED)
error = vn_chown(fp, uid, gid, active_cred, td);
else
error = invfo_chown(fp, uid, gid, active_cred, td);
return (error);
}
static void
pipe_free_kmem(cpipe)
struct pipe *cpipe;