Lines Matching refs:pmtab
49 static void openline(struct pmtab *, struct Gdef *);
50 static void invoke_service(struct pmtab *);
51 static char *do_autobaud(struct pmtab *, struct Gdef *);
61 tmchild(struct pmtab *pmtab) in tmchild() argument
71 if (pmtab->p_status != GETTY) { in tmchild()
89 if (pmtab->p_ttyflags & (C_FLAG|B_FLAG)) { in tmchild()
90 if (pmtab->p_fd > 0) { in tmchild()
91 (void) close(pmtab->p_fd); in tmchild()
92 pmtab->p_fd = 0; in tmchild()
102 speedef = get_speed(pmtab); in tmchild()
103 openline(pmtab, speedef); in tmchild()
104 if (pmtab->p_ttyflags & (C_FLAG|B_FLAG)) { in tmchild()
105 if (pmtab->p_fd >= 0) { in tmchild()
106 if ((pmtab->p_modules != NULL) && in tmchild()
107 (*(pmtab->p_modules) != '\0')) { in tmchild()
108 if (push_linedisc(pmtab->p_fd, in tmchild()
109 pmtab->p_modules, pmtab->p_device) == -1) { in tmchild()
110 (void) close(pmtab->p_fd); in tmchild()
116 if ((pmtab->p_ttyflags & C_FLAG) && in tmchild()
118 (!(pmtab->p_flags & X_FLAG))) { in tmchild()
128 invoke_service(pmtab); in tmchild()
132 auto_speed = do_autobaud(pmtab, speedef); in tmchild()
138 if ((pmtab->p_ttyflags & (R_FLAG|A_FLAG)) || in tmchild()
139 (pmtab->p_status == GETTY) || (pmtab->p_timeout > 0)) { in tmchild()
140 write_prompt(1, pmtab, TRUE, TRUE); in tmchild()
141 if (pmtab->p_timeout) { in tmchild()
146 (void) alarm((unsigned)pmtab->p_timeout); in tmchild()
148 } else if ((pmtab->p_ttyflags & (B_FLAG))) in tmchild()
149 write_prompt(pmtab->p_fd, pmtab, TRUE, TRUE); in tmchild()
161 if (pmtab->p_timeout) { in tmchild()
169 (pmtab->p_flags & X_FLAG)) { in tmchild()
170 write_prompt(1, pmtab, TRUE, FALSE); in tmchild()
178 invoke_service(pmtab); in tmchild()
191 auto_speed = do_autobaud(pmtab, speedef); in tmchild()
206 write_prompt(1, pmtab, TRUE, TRUE); in tmchild()
213 write_prompt(1, pmtab, FALSE, FALSE); in tmchild()
219 if (pmtab->p_timeout) { in tmchild()
224 (void) alarm((unsigned)pmtab->p_timeout); in tmchild()
230 openline(struct pmtab *pmtab, struct Gdef *speedef) in openline() argument
239 if (pmtab->p_status != GETTY) { in openline()
242 if ((pmtab->p_fd = open(pmtab->p_device, O_RDWR)) != 0) { in openline()
243 log("open \"%s\" failed: %s", pmtab->p_device, in openline()
253 if (pmtab->p_ttyflags & R_FLAG) { /* wait_read is needed */ in openline()
254 if (pmtab->p_count) { in openline()
258 pmtab->p_count--; in openline()
275 for (line_count = 0; line_count < pmtab->p_count; ) { in openline()
306 if (!(pmtab->p_ttyflags & A_FLAG)) { /* autobaud not enabled */ in openline()
314 if (pmtab->p_ttyflags & B_FLAG) { /* port is bi-directional */ in openline()
336 write_prompt(int fd, struct pmtab *pmtab, int flush, int clear) in write_prompt() argument
351 if ((State == PM_DISABLED) || (pmtab->p_flags & X_FLAG)) in write_prompt()
352 (void) write(fd, pmtab->p_dmsg, in write_prompt()
353 (unsigned)strlen(pmtab->p_dmsg)); in write_prompt()
355 (void) write(fd, pmtab->p_prompt, in write_prompt()
356 (unsigned)strlen(pmtab->p_prompt)); in write_prompt()
407 do_autobaud(struct pmtab *pmtab, struct Gdef *speedef) in do_autobaud() argument
416 if ((auto_speed = autobaud(0, pmtab->p_timeout)) == NULL) { in do_autobaud()
489 invoke_service(struct pmtab *pmtab) in invoke_service() argument
502 "tty on \"%s\",\n", pmtab->p_device); in invoke_service()
506 if (strcmp("/dev/console", pmtab->p_device) != 0) { in invoke_service()
513 pmtab->p_device); in invoke_service()
519 if (pmtab->p_status != GETTY) { in invoke_service()
527 if (pmtab->p_flags & U_FLAG) { in invoke_service()
528 if (account(pmtab->p_device) != 0) { in invoke_service()
535 mkargv(pmtab->p_server, &argvp[0], &cnt, MAXARGS-1); in invoke_service()
537 if (!(pmtab->p_ttyflags & C_FLAG)) { in invoke_service()
538 (void) sprintf(pbuf, "TTYPROMPT=%s", pmtab->p_prompt); in invoke_service()
544 if (pmtab->p_status != GETTY) { in invoke_service()
545 (void) sprintf(hbuf, "HOME=%s", pmtab->p_dir); in invoke_service()
553 if ((i = doconfig(0, pmtab->p_tag, 0)) != 0) { in invoke_service()
558 i, pmtab->p_tag); in invoke_service()
564 if (setgid(pmtab->p_gid)) { in invoke_service()
565 log("cannot set group id to %ld: %s", pmtab->p_gid, in invoke_service()
570 if (setuid(pmtab->p_uid)) { in invoke_service()
571 log("cannot set user id to %ld: %s", pmtab->p_uid, in invoke_service()
576 if (chdir(pmtab->p_dir)) { in invoke_service()
577 log("cannot chdir to %s: %s", pmtab->p_dir, strerror(errno)); in invoke_service()
581 if (pmtab->p_uid != ROOTUID) { in invoke_service()
583 (void) fchown(0, pmtab->p_uid, Tty_gid); in invoke_service()
588 if (pmtab->p_status != GETTY) { in invoke_service()
598 log("Starting service (%s) on %s", argvp[0], pmtab->p_device); in invoke_service()
601 if (pmtab->p_termtype != (char *)NULL) { in invoke_service()
602 (void) sprintf(tbuf, "TERM=%s", pmtab->p_termtype); in invoke_service()