summaryrefslogtreecommitdiffstats
path: root/sys/netinet/raw_ip.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/raw_ip.c')
-rw-r--r--sys/netinet/raw_ip.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c
index 1e3a35d..1320913 100644
--- a/sys/netinet/raw_ip.c
+++ b/sys/netinet/raw_ip.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)raw_ip.c 8.7 (Berkeley) 5/15/95
- * $Id: raw_ip.c,v 1.43 1997/03/03 09:23:35 davidg Exp $
+ * $Id: raw_ip.c,v 1.44 1997/04/03 05:14:43 davidg Exp $
*/
#include <sys/param.h>
@@ -40,6 +40,7 @@
#include <sys/errno.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
+#include <sys/proc.h>
#include <sys/protosw.h>
#include <sys/queue.h>
#include <sys/socket.h>
@@ -220,11 +221,12 @@ rip_output(m, so, dst)
* Raw IP socket option processing.
*/
int
-rip_ctloutput(op, so, level, optname, m)
+rip_ctloutput(op, so, level, optname, m, p)
int op;
struct socket *so;
int level, optname;
struct mbuf **m;
+ struct proc *p;
{
register struct inpcb *inp = sotoinpcb(so);
register int error;
@@ -313,7 +315,7 @@ rip_ctloutput(op, so, level, optname, m)
error = EINVAL;
return (error);
}
- return (ip_ctloutput(op, so, level, optname, m));
+ return (ip_ctloutput(op, so, level, optname, m, p));
}
/*
@@ -387,7 +389,7 @@ SYSCTL_INT(_net_inet_raw, OID_AUTO, recvspace, CTLFLAG_RW, &rip_recvspace,
0, "");
static int
-rip_attach(struct socket *so, int proto)
+rip_attach(struct socket *so, int proto, struct proc *p)
{
struct inpcb *inp;
int error;
@@ -395,11 +397,11 @@ rip_attach(struct socket *so, int proto)
inp = sotoinpcb(so);
if (inp)
panic("rip_attach");
- if ((so->so_state & SS_PRIV) == 0)
- return EACCES;
+ if (p && (error = suser(p->p_ucred, &p->p_acflag)) != 0)
+ return error;
if ((error = soreserve(so, rip_sendspace, rip_recvspace)) ||
- (error = in_pcballoc(so, &ripcbinfo)))
+ (error = in_pcballoc(so, &ripcbinfo, p)))
return error;
inp = (struct inpcb *)so->so_pcb;
inp->inp_ip_p = proto;
@@ -439,7 +441,7 @@ rip_disconnect(struct socket *so)
}
static int
-rip_bind(struct socket *so, struct mbuf *nam)
+rip_bind(struct socket *so, struct mbuf *nam, struct proc *p)
{
struct inpcb *inp = sotoinpcb(so);
struct sockaddr_in *addr = mtod(nam, struct sockaddr_in *);
@@ -457,7 +459,7 @@ rip_bind(struct socket *so, struct mbuf *nam)
}
static int
-rip_connect(struct socket *so, struct mbuf *nam)
+rip_connect(struct socket *so, struct mbuf *nam, struct proc *p)
{
struct inpcb *inp = sotoinpcb(so);
struct sockaddr_in *addr = mtod(nam, struct sockaddr_in *);
@@ -483,7 +485,7 @@ rip_shutdown(struct socket *so)
static int
rip_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *nam,
- struct mbuf *control)
+ struct mbuf *control, struct proc *p)
{
struct inpcb *inp = sotoinpcb(so);
register u_long dst;
@@ -509,5 +511,5 @@ struct pr_usrreqs rip_usrreqs = {
pru_connect2_notsupp, in_control, rip_detach, rip_disconnect,
pru_listen_notsupp, in_setpeeraddr, pru_rcvd_notsupp,
pru_rcvoob_notsupp, rip_send, pru_sense_null, rip_shutdown,
- in_setsockaddr
+ in_setsockaddr, sosend, soreceive, soselect
};
OpenPOWER on IntegriCloud