diff options
author | Roland McGrath <roland@gnu.org> | 2002-06-13 20:52:17 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-06-13 20:52:17 +0000 |
commit | 47488b9e4d2b815e429423a060054308dae0d995 (patch) | |
tree | 47d8f683fc1ecc69c86823e0b0a1fe8ba90dad7f /term/users.c | |
parent | 6475c2bf80f6af42dc9437879315651d71e74251 (diff) | |
download | hurd-47488b9e4d2b815e429423a060054308dae0d995.tar.gz hurd-47488b9e4d2b815e429423a060054308dae0d995.tar.bz2 hurd-47488b9e4d2b815e429423a060054308dae0d995.zip |
2002-06-13 Roland McGrath <roland@frob.com>
* ptyio.c (pty_io_readable): int -> size_t in argument type.
* term.h: Update decl.
* users.c (trivfs_S_io_write): int -> size_t in AMT argument type.
(trivfs_S_io_readable): Likewise.
(trivfs_S_io_read): Likewise. Also u_int -> size_t, off_t -> loff_t.
(trivfs_S_io_write): Likewise.
(trivfs_S_io_map): Add reply port args.
Diffstat (limited to 'term/users.c')
-rw-r--r-- | term/users.c | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/term/users.c b/term/users.c index c0eb6f7c..0cba9de4 100644 --- a/term/users.c +++ b/term/users.c @@ -79,7 +79,7 @@ static error_t carrier_error; struct protid_hook { int refcnt; - pid_t pid, pgrp; + pid_t pid, pgrp, sid; }; void @@ -415,10 +415,10 @@ S_termctty_open_terminal (mach_port_t arg, /* Implement term_become_ctty as described in <hurd/term.defs>. */ kern_return_t S_term_open_ctty (mach_port_t arg, - pid_t pid, - pid_t pgrp, - mach_port_t *newpt, - mach_msg_type_name_t *newpttype) + pid_t pid, + pid_t pgrp, + mach_port_t *newpt, + mach_msg_type_name_t *newpttype) { error_t err; struct trivfs_protid *newcred; @@ -427,6 +427,12 @@ S_term_open_ctty (mach_port_t arg, if (!cred) return EOPNOTSUPP; + if (pid <= 0 || pgrp <= 0) + { + ports_port_deref (cred); + return EINVAL; + } + mutex_lock (&global_lock); if (!cred->po->openmodes & (O_READ|O_WRITE)) @@ -445,6 +451,7 @@ S_term_open_ctty (mach_port_t arg, hook->pid = pid; hook->pgrp = pgrp; + hook->sid = getsid (pid); hook->refcnt = 1; if (newcred->hook) @@ -560,9 +567,9 @@ trivfs_S_io_write (struct trivfs_protid *cred, mach_port_t reply, mach_msg_type_name_t replytype, char *data, - u_int datalen, - off_t offset, - int *amt) + size_t datalen, + loff_t offset, + size_t *amt) { int i; int cancel; @@ -637,9 +644,9 @@ trivfs_S_io_read (struct trivfs_protid *cred, mach_port_t reply, mach_msg_type_name_t replytype, char **data, - u_int *datalen, - off_t offset, - int amount) + size_t *datalen, + loff_t offset, + size_t amount) { int cancel; int i, max; @@ -817,7 +824,7 @@ error_t trivfs_S_io_readable (struct trivfs_protid *cred, mach_port_t reply, mach_msg_type_name_t replytype, - int *amt) + size_t *amt) { if (!cred) return EOPNOTSUPP; @@ -1634,6 +1641,9 @@ S_tioctl_tiocspgrp (io_t port, mutex_lock (&global_lock); if (!(cred->po->openmodes & (O_READ|O_WRITE))) err = EBADF; + else if (!cred->hook + || getsid (-pgrp) != ((struct protid_hook *)cred->hook)->sid) + err = EPERM; else { termflags &= ~NO_OWNER; @@ -2032,11 +2042,13 @@ trivfs_S_io_select (struct trivfs_protid *cred, } kern_return_t -trivfs_S_io_map (struct trivfs_protid *cred, - mach_port_t *rdobj, - mach_msg_type_name_t *rdtype, - mach_port_t *wrobj, - mach_msg_type_name_t *wrtype) +trivfs_S_io_map (struct trivfs_protid *cred, + mach_port_t reply, + mach_msg_type_name_t replyPoly, + mach_port_t *rdobj, + mach_msg_type_name_t *rdtype, + mach_port_t *wrobj, + mach_msg_type_name_t *wrtype) { return EOPNOTSUPP; } |