Lines Matching +full:input +full:- +full:value

83 	(void)remove(port->name);  in lsock_remove()
85 return (-1); in lsock_remove()
159 if ((port->name = malloc(namelen + 1)) == NULL) { in lsock_open_port()
165 strncpy(port->name, name, namelen); in lsock_open_port()
166 port->name[namelen] = '\0'; in lsock_open_port()
168 port->type = type; in lsock_open_port()
169 port->str_sock = -1; in lsock_open_port()
170 LIST_INIT(&port->peers); in lsock_open_port()
172 port->tport.index.len = namelen + 1; in lsock_open_port()
173 port->tport.index.subs[0] = namelen; in lsock_open_port()
175 port->tport.index.subs[u + 1] = name[u]; in lsock_open_port()
178 LIST_INSERT_HEAD(&port->peers, peer, link); in lsock_open_port()
180 peer->port = port; in lsock_open_port()
182 peer->input.fd = -1; in lsock_open_port()
183 peer->input.id = NULL; in lsock_open_port()
184 peer->input.stream = is_stream; in lsock_open_port()
185 peer->input.cred = need_cred; in lsock_open_port()
186 peer->input.peer = (struct sockaddr *)&peer->peer; in lsock_open_port()
189 trans_insert_port(my_trans, &port->tport); in lsock_open_port()
192 (err = lsock_init_port(&port->tport)) != SNMP_ERR_NOERROR) { in lsock_open_port()
193 lsock_close_port(&port->tport); in lsock_open_port()
210 snmpd_input_close(&peer->input); in lsock_peer_close()
223 if (port->str_id != NULL) in lsock_close_port()
224 fd_deselect(port->str_id); in lsock_close_port()
225 if (port->str_sock >= 0) in lsock_close_port()
226 (void)close(port->str_sock); in lsock_close_port()
227 (void)remove(port->name); in lsock_close_port()
231 while ((peer = LIST_FIRST(&port->peers)) != NULL) in lsock_close_port()
234 free(port->name); in lsock_close_port()
239 * Input on a local socket (either datagram or stream)
245 struct lsock_port *p = peer->port; in lsock_input()
247 peer->input.peerlen = sizeof(peer->peer); in lsock_input()
248 if (snmpd_input(&peer->input, &p->tport) == -1 && peer->input.stream) in lsock_input()
249 /* framing or other input error */ in lsock_input()
264 syslog(LOG_WARNING, "%s: peer malloc failed", p->name); in lsock_listen_input()
269 peer->port = p; in lsock_listen_input()
271 peer->input.stream = 1; in lsock_listen_input()
272 peer->input.cred = (p->type == LOCP_DGRAM_PRIV || in lsock_listen_input()
273 p->type == LOCP_STREAM_PRIV); in lsock_listen_input()
274 peer->input.peerlen = sizeof(peer->peer); in lsock_listen_input()
275 peer->input.peer = (struct sockaddr *)&peer->peer; in lsock_listen_input()
277 peer->input.fd = accept(fd, peer->input.peer, &peer->input.peerlen); in lsock_listen_input()
278 if (peer->input.fd == -1) { in lsock_listen_input()
279 syslog(LOG_WARNING, "%s: accept failed: %m", p->name); in lsock_listen_input()
284 if ((peer->input.id = fd_select(peer->input.fd, lsock_input, in lsock_listen_input()
286 close(peer->input.fd); in lsock_listen_input()
291 LIST_INSERT_HEAD(&p->peers, peer, link); in lsock_listen_input()
303 if (p->type == LOCP_STREAM_PRIV || p->type == LOCP_STREAM_UNPRIV) { in lsock_init_port()
304 if ((p->str_sock = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) { in lsock_init_port()
309 strlcpy(sa.sun_path, p->name, sizeof(sa.sun_path)); in lsock_init_port()
313 (void)remove(p->name); in lsock_init_port()
315 if (bind(p->str_sock, (struct sockaddr *)&sa, sizeof(sa))) { in lsock_init_port()
317 close(p->str_sock); in lsock_init_port()
318 p->str_sock = -1; in lsock_init_port()
321 syslog(LOG_ERR, "bind: %s %m", p->name); in lsock_init_port()
322 close(p->str_sock); in lsock_init_port()
323 p->str_sock = -1; in lsock_init_port()
326 if (chmod(p->name, 0666) == -1) in lsock_init_port()
327 syslog(LOG_WARNING, "chmod(%s,0666): %m", p->name); in lsock_init_port()
329 if (listen(p->str_sock, 10) == -1) { in lsock_init_port()
330 syslog(LOG_ERR, "listen: %s %m", p->name); in lsock_init_port()
331 (void)remove(p->name); in lsock_init_port()
332 close(p->str_sock); in lsock_init_port()
333 p->str_sock = -1; in lsock_init_port()
337 p->str_id = fd_select(p->str_sock, lsock_listen_input, p, NULL); in lsock_init_port()
338 if (p->str_id == NULL) { in lsock_init_port()
339 (void)remove(p->name); in lsock_init_port()
340 close(p->str_sock); in lsock_init_port()
341 p->str_sock = -1; in lsock_init_port()
348 peer = LIST_FIRST(&p->peers); in lsock_init_port()
350 if ((peer->input.fd = socket(PF_LOCAL, SOCK_DGRAM, 0)) < 0) { in lsock_init_port()
355 if (setsockopt(peer->input.fd, 0, LOCAL_CREDS, &on, in lsock_init_port()
356 sizeof(on)) == -1) { in lsock_init_port()
358 close(peer->input.fd); in lsock_init_port()
359 peer->input.fd = -1; in lsock_init_port()
363 strlcpy(sa.sun_path, p->name, sizeof(sa.sun_path)); in lsock_init_port()
367 (void)remove(p->name); in lsock_init_port()
369 if (bind(peer->input.fd, (struct sockaddr *)&sa, sizeof(sa))) { in lsock_init_port()
371 close(peer->input.fd); in lsock_init_port()
372 peer->input.fd = -1; in lsock_init_port()
375 syslog(LOG_ERR, "bind: %s %m", p->name); in lsock_init_port()
376 close(peer->input.fd); in lsock_init_port()
377 peer->input.fd = -1; in lsock_init_port()
380 if (chmod(p->name, 0666) == -1) in lsock_init_port()
381 syslog(LOG_WARNING, "chmod(%s,0666): %m", p->name); in lsock_init_port()
383 peer->input.id = fd_select(peer->input.fd, lsock_input, in lsock_init_port()
385 if (peer->input.id == NULL) { in lsock_init_port()
386 (void)remove(p->name); in lsock_init_port()
387 close(peer->input.fd); in lsock_init_port()
388 peer->input.fd = -1; in lsock_init_port()
405 if (p->type == LOCP_DGRAM_PRIV || p->type == LOCP_DGRAM_UNPRIV) { in lsock_send()
406 peer = LIST_FIRST(&p->peers); in lsock_send()
410 LIST_FOREACH(peer, &p->peers, link) in lsock_send()
411 if (peer->input.peerlen == addrlen && in lsock_send()
412 memcmp(peer->input.peer, addr, addrlen) == 0) in lsock_send()
416 return (-1); in lsock_send()
420 return (sendto(peer->input.fd, buf, len, 0, addr, addrlen)); in lsock_send()
432 if (getsockopt(pi->fd, 0, LOCAL_PEERCRED, &ucred, &ucredlen) == 0 && in check_priv_stream()
434 pi->priv = (ucred.cr_uid == 0); in check_priv_stream()
436 pi->priv = 0; in check_priv_stream()
452 if (pi->buf == NULL) { in lsock_recv()
453 /* no buffer yet - allocate one */ in lsock_recv()
454 if ((pi->buf = buf_alloc(0)) == NULL) { in lsock_recv()
455 /* ups - could not get buffer. Return an error in lsock_recv()
457 return (-1); in lsock_recv()
459 pi->buflen = buf_size(0); in lsock_recv()
460 pi->consumed = 0; in lsock_recv()
461 pi->length = 0; in lsock_recv()
465 msg.msg_name = pi->peer; in lsock_recv()
466 msg.msg_namelen = pi->peerlen; in lsock_recv()
473 iov[0].iov_base = pi->buf + pi->length; in lsock_recv()
474 iov[0].iov_len = pi->buflen - pi->length; in lsock_recv()
476 len = recvmsg(pi->fd, &msg, 0); in lsock_recv()
478 if (len == -1 || len == 0) in lsock_recv()
480 return (-1); in lsock_recv()
482 pi->length += len; in lsock_recv()
484 if (pi->cred) in lsock_recv()
530 if (!(ld->set & LD_STATUS)) in lsock_func()
532 else if (ld->port == NULL) { in lsock_func()
533 if (!ld->status) in lsock_func()
538 err = lsock_open_port(ld->path, ld->pathlen, in lsock_func()
539 &ld->port, ld->type); in lsock_func()
541 ld->set |= LD_CREATE; in lsock_func()
543 } else if (!ld->status) { in lsock_func()
544 /* delete - hard to roll back so defer to finalizer */ in lsock_func()
545 ld->set |= LD_DELETE; in lsock_func()
547 /* modify - read-only */ in lsock_func()
553 if (ld->set & LD_CREATE) { in lsock_func()
555 lsock_close_port(&ld->port->tport); in lsock_func()
560 if ((ld->set & LD_DELETE) && ctx->code == SNMP_RET_OK) in lsock_func()
561 lsock_close_port(&ld->port->tport); in lsock_func()
562 free(ld->path); in lsock_func()
572 op_lsock_port(struct snmp_context *ctx, struct snmp_value *value, in op_lsock_port() argument
575 asn_subid_t which = value->var.subs[sub-1]; in op_lsock_port()
586 &value->var, sub)) == NULL) in op_lsock_port()
588 index_append(&value->var, sub, &p->tport.index); in op_lsock_port()
593 &value->var, sub)) == NULL) in op_lsock_port()
599 &value->var, sub); in op_lsock_port()
601 if (index_decode(&value->var, sub, iidx, &name, &namelen)) in op_lsock_port()
604 asn_slice_oid(&didx, &value->var, sub, value->var.len); in op_lsock_port()
612 if (ld->path == NULL) { in op_lsock_port()
613 ld->path = name; in op_lsock_port()
614 ld->pathlen = namelen; in op_lsock_port()
618 ld->port = p; in op_lsock_port()
623 if (ld->set & LD_STATUS) in op_lsock_port()
625 if (!TRUTH_OK(value->v.integer)) in op_lsock_port()
628 ld->status = TRUTH_GET(value->v.integer); in op_lsock_port()
629 ld->set |= LD_STATUS; in op_lsock_port()
633 if (ld->set & LD_TYPE) in op_lsock_port()
635 if (value->v.integer < 1 || value->v.integer > 4) in op_lsock_port()
638 ld->type = value->v.integer; in op_lsock_port()
639 ld->set |= LD_TYPE; in op_lsock_port()
653 * Come here to fetch the value in op_lsock_port()
658 value->v.integer = 1; in op_lsock_port()
662 value->v.integer = p->type; in op_lsock_port()