1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * supporting modules.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_line() - write a line to TCP client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_write_client(clientp, vntsd_eol, VNTSD_EOL_LEN);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_lines() write one or more lines to client. */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_write_lines(vntsd_client_t *clientp, char *lines)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_get_yes_no() - read in a "y" or "n" */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_get_yes_no(vntsd_client_t *clientp, char *msg, int *yes_no)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* create [y/n] prompt */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, msg, strlen(msg)))
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, yesno, strlen(yesno))) !=
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*NOTREACHED*/
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_open_vcc() - open a vcc port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) snprintf(path, sz-1, VCC_DEVICE_PATH, dev_name);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (vntsd_vcc_ioctl(VCC_FORCE_CLOSE, cons_no, &cons_no)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo D1(stderr, "t@%d open_vcc@%s exit\n", thr_self(), dev_name);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_cons_by_consno() - match a console structure to cons no */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_cons_by_consno(vntsd_cons_t *consp, int *cons_id)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_client() write to telnet client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_write_client(vntsd_client_t *client, char *buffer, size_t sz)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* write to client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* client has output, reset timer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_fd() write to tcp socket file descriptor */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo while (sz > 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n < 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n == 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd_read_char() - read a char from TCP Clienti. Returns:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_SUCCESS, VNTSD_STATUS_CLIENT_QUIT or VNTSD_STATUS_INTR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* attach to timer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_attach_timer(&tmo)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* detach from timer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_detach_timer(&tmo)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n == 1) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n == 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * read error or wake up by signal, either console is being removed or
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * timeout occurs.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* any other error, we close client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd_read_data() - handle special commands
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * such as telnet, daemon and ctrl cmds. Returns:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * from vntsd_read_char:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_CLIENT_QUIT
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_INTR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * from vnts_process_daemon_cmd:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_RESELECT_CONS
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_MOV_CONS_FORWARD
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_MOV_CONS_BACKWARD
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_ACQURE_WRITER
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_CONTINUE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * from vntsd_telnet_cmd
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_CONTINUE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_read_char(clientp, c)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* daemon cmd? */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* telnet cmd? */
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse * either a daemon cmd or a telnet cmd
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse * was processed.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*NOTREACHED*/
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_read_line() - read a line from TCP client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_read_line(vntsd_client_t *clientp, char *buf, int *in_sz)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_read_data(clientp, &c)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (c == BS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (c == CR) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* end of line */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*NOTREACHED*/
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* free a client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* check if a vcc console port still ok */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* construct current configuration */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) strncpy(vcc_cons.domain_name, consp->domain_name, MAXPATHLEN);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) strncpy(vcc_cons.group_name, consp->group->group_name,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* call vcc to verify */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_vcc_ioctl(VCC_CONS_STATUS, consp->cons_no, &vcc_cons);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* port is gone */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* port is ok */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* add to total if a console is alive */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* total alive consoles in a group */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) vntsd_que_find(groupp->conspq, (compare_func_t)total_cons,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_log() log function for errors */
7636cb21f250f0485ca6052ffadc80ace93e6358lm status_msg = "All console(s) in the group have been deleted.";
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna status_msg = "VNTSD_STATUS_AUTH_ENABLED";
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna DERR(stderr, "%s: thread[%d] %s\n", status_msg, thr_self(), msg);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg, thr_self(), msg);