| version 1.88.4.2, 2006/09/09 02:58:47 |
version 1.89, 2006/05/14 21:19:34 |
| Line 141 rip_input(struct mbuf *m, ...) |
|
| Line 141 rip_input(struct mbuf *m, ...) |
|
| { |
{ |
| int proto; |
int proto; |
| struct ip *ip = mtod(m, struct ip *); |
struct ip *ip = mtod(m, struct ip *); |
| |
struct inpcb_hdr *inph; |
| struct inpcb *inp; |
struct inpcb *inp; |
| struct inpcb *last = 0; |
struct inpcb *last = 0; |
| struct mbuf *opts = 0; |
struct mbuf *opts = 0; |
| Line 166 rip_input(struct mbuf *m, ...) |
|
| Line 167 rip_input(struct mbuf *m, ...) |
|
| ip->ip_len = ntohs(ip->ip_len) - (ip->ip_hl << 2); |
ip->ip_len = ntohs(ip->ip_len) - (ip->ip_hl << 2); |
| NTOHS(ip->ip_off); |
NTOHS(ip->ip_off); |
| |
|
| CIRCLEQ_FOREACH(inp, &rawcbtable.inpt_queue, inp_queue) { |
CIRCLEQ_FOREACH(inph, &rawcbtable.inpt_queue, inph_queue) { |
| |
inp = (struct inpcb *)inph; |
| if (inp->inp_af != AF_INET) |
if (inp->inp_af != AF_INET) |
| continue; |
continue; |
| if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != proto) |
if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != proto) |
| Line 504 rip_usrreq(struct socket *so, int req, |
|
| Line 506 rip_usrreq(struct socket *so, int req, |
|
| struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) |
struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) |
| { |
{ |
| struct inpcb *inp; |
struct inpcb *inp; |
| |
struct proc *p; |
| int s; |
int s; |
| int error = 0; |
int error = 0; |
| #ifdef MROUTING |
#ifdef MROUTING |
| extern struct socket *ip_mrouter; |
extern struct socket *ip_mrouter; |
| #endif |
#endif |
| |
|
| |
p = l ? l->l_proc : NULL; |
| if (req == PRU_CONTROL) |
if (req == PRU_CONTROL) |
| return (in_control(so, (long)m, (caddr_t)nam, |
return (in_control(so, (long)m, (caddr_t)nam, |
| (struct ifnet *)control, l)); |
(struct ifnet *)control, p)); |
| |
|
| if (req == PRU_PURGEIF) { |
if (req == PRU_PURGEIF) { |
| in_pcbpurgeif0(&rawcbtable, (struct ifnet *)control); |
in_pcbpurgeif0(&rawcbtable, (struct ifnet *)control); |
| Line 539 rip_usrreq(struct socket *so, int req, |
|
| Line 543 rip_usrreq(struct socket *so, int req, |
|
| error = EISCONN; |
error = EISCONN; |
| break; |
break; |
| } |
} |
| if (l == 0 || (error = kauth_authorize_generic(l->l_cred, |
if (p == 0 || (error = kauth_authorize_generic(p->p_cred, |
| KAUTH_GENERIC_ISSUSER, &l->l_acflag))) { |
KAUTH_GENERIC_ISSUSER, &p->p_acflag))) { |
| error = EACCES; |
error = EACCES; |
| break; |
break; |
| } |
} |