make sure null padded when writing in /etc/utmp
[unix-history] / usr / src / usr.bin / uucp / acucntrl / acucntrl.c
index 4451c98..0baa41a 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)acucntrl.c 5.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)acucntrl.c 5.12    (Berkeley) %G%";
 #endif
 
 /*  acucntrl - turn around tty line between dialin and dialout
 #endif
 
 /*  acucntrl - turn around tty line between dialin and dialout
@@ -46,20 +46,24 @@ static char sccsid[] = "@(#)acucntrl.c      5.2 (Berkeley) %G%";
 /* #define SENSECARRIER */
 
 #include "uucp.h"
 /* #define SENSECARRIER */
 
 #include "uucp.h"
+#ifdef DIALINOUT
 #include <sys/buf.h>
 #include <signal.h>
 #include <sys/conf.h>
 #include <sys/buf.h>
 #include <signal.h>
 #include <sys/conf.h>
+#ifdef vax
 #ifdef BSD4_2
 #ifdef BSD4_2
-#include "/sys/vaxuba/ubavar.h"
+#include <vaxuba/ubavar.h>
 #else
 #include <sys/ubavar.h>
 #endif
 #else
 #include <sys/ubavar.h>
 #endif
+#endif /* vax */
 #include <sys/stat.h>
 #include <nlist.h>
 #include <sgtty.h>
 #include <utmp.h>
 #include <pwd.h>
 #include <stdio.h>
 #include <sys/stat.h>
 #include <nlist.h>
 #include <sgtty.h>
 #include <utmp.h>
 #include <pwd.h>
 #include <stdio.h>
+#include <sys/file.h>
 
 #define NDZLINE        8       /* lines/dz */
 #define NDHLINE        16      /* lines/dh */
 
 #define NDZLINE        8       /* lines/dz */
 #define NDHLINE        16      /* lines/dh */
@@ -110,6 +114,11 @@ struct nlist nl[] = {
 
 char Etcutmp[] = "/etc/utmp";
 char Etcttys[] = "/etc/ttys";
 
 char Etcutmp[] = "/etc/utmp";
 char Etcttys[] = "/etc/ttys";
+#ifdef BSD4_3
+FILE *ttysfile, *nttysfile;
+char NEtcttys[] = "/etc/ttys.new";
+extern long ftell();
+#endif BSD4_3
 char Devhome[] = "/dev";
 
 char usage[] = "Usage: acucntrl {dis|en}able ttydX\n";
 char Devhome[] = "/dev";
 
 char usage[] = "Usage: acucntrl {dis|en}able ttydX\n";
@@ -146,28 +155,30 @@ int argc; char *argv[];
        }
 
        /* interpret command type */
        }
 
        /* interpret command type */
-       if (prefix(argv[1], "disable")  || strcmp(argv[1],"dialout")==0)
+       if (prefix(argv[1], "disable")  || strcmp(argv[1], "dialout")==0)
                enable = 0;
                enable = 0;
-       else if (prefix(argv[1], "enable")  || strcmp(argv[1],"dialin")==0)
+       else if (prefix(argv[1], "enable")  || strcmp(argv[1], "dialin")==0)
                enable = 1;
        else {
                fprintf(stderr, usage);
                exit(1);
        }
 
                enable = 1;
        else {
                fprintf(stderr, usage);
                exit(1);
        }
 
-       device = rindex(argv[2],'/');
+       device = rindex(argv[2], '/');
        device = (device == NULL) ? argv[2]: device+1;
 
        /* only recognize devices of the form ttydX */
        device = (device == NULL) ? argv[2]: device+1;
 
        /* only recognize devices of the form ttydX */
-       if (strncmp(device,"ttyd",4)!=0) {
-               fprintf(stderr,"Bad Device Name %s",device);
+       if (strncmp(device, "ttyd", 4)!=0) {
+               fprintf(stderr, "Bad Device Name %s", device);
                exit(1);
        }
 
        opnttys(device);
 
                exit(1);
        }
 
        opnttys(device);
 
+#ifdef vax
        /* Get nlist info */
        /* Get nlist info */
-       nlist("/vmunix",nl);
+       nlist("/vmunix", nl);
+#endif vax
 
        /* Chdir to /dev */
        if(chdir(Devhome) < 0) {
 
        /* Chdir to /dev */
        if(chdir(Devhome) < 0) {
@@ -182,7 +193,7 @@ int argc; char *argv[];
 
        p = getpwuid(uid)->pw_name;
        if (p==NULL) {
 
        p = getpwuid(uid)->pw_name;
        if (p==NULL) {
-               fprintf(stderr,"cannot get uid name\n");
+               fprintf(stderr, "cannot get uid name\n");
                exit(1);
        }
 
                exit(1);
        }
 
@@ -190,31 +201,29 @@ int argc; char *argv[];
        i = 0;
        do {
                uname[i] = *p;
        i = 0;
        do {
                uname[i] = *p;
-               Uname[i] = (*p>='a' && *p<='z') ? (*p - ('a'-'A')) : *p;
-               i++; p++;
-       } while (*p && i<NAMSIZ);
-
+               Uname[i++] = (*p>='a' && *p<='z') ? (*p - ('a'-'A')) : *p;
+       } while (*p++ && i<NAMSIZ);
 
        /* check to see if line is being used */
        if( (etcutmp = open(Etcutmp, 2)) < 0) {
 
        /* check to see if line is being used */
        if( (etcutmp = open(Etcutmp, 2)) < 0) {
-               fprintf(stderr,"On open %s open: %s\n",
-                       Etcutmp,sys_errlist[errno]);
+               fprintf(stderr, "On open %s open: %s\n",
+                       Etcutmp, sys_errlist[errno]);
                exit(1);
        }
 
                exit(1);
        }
 
-       (void)lseek(etcutmp,utmploc, 0);
+       (void)lseek(etcutmp, utmploc, 0);
 
 
-       i = read(etcutmp,(char *)&utmp,sizeof(struct utmp));
+       i = read(etcutmp, (char *)&utmp, sizeof(struct utmp));
 
        if(
                i == sizeof(struct utmp) &&
                utmp.ut_line[0] != '\0'  &&
                utmp.ut_name[0] != '\0'  &&
                (
 
        if(
                i == sizeof(struct utmp) &&
                utmp.ut_line[0] != '\0'  &&
                utmp.ut_name[0] != '\0'  &&
                (
-                       !upcase(utmp.ut_name,NAMSIZ) ||
+                       !upcase(utmp.ut_name, NAMSIZ) ||
                        (
                                uid != 0 &&
                        (
                                uid != 0 &&
-                               strncmp(utmp.ut_name,Uname,NAMSIZ) != 0
+                               strncmp(utmp.ut_name, Uname, NAMSIZ) != 0
                        )
                )
        ) {
                        )
                )
        ) {
@@ -222,49 +231,62 @@ int argc; char *argv[];
                exit(2);
        }
 
                exit(2);
        }
 
+#ifndef sequent
        /* Disable modem control */
        /* Disable modem control */
-       if (setmodem(device,DISABLE)<0) {
-               fprintf(stderr,"Unable to disable modem control\n");
+       if (setmodem(device, DISABLE) < 0) {
+               fprintf(stderr, "Unable to disable modem control\n");
                exit(1);
        }
                exit(1);
        }
+#endif !sequent
 
        if (enable) {
 
        if (enable) {
+#ifdef sequent
+               if (setmodem(device, ENABLE) < 0) {
+                       fprintf(stderr, "Cannot Enable modem control\n");
+                       (void)setmodem(device, i);
+                       exit(1);
+               }
+#endif sequent
+#ifndef sequent
                if((devfile = open(device, 1)) < 0) {
                if((devfile = open(device, 1)) < 0) {
-                       fprintf(stderr,"On open of %s: %s\n",
+                       fprintf(stderr, "On open of %s: %s\n",
                                device, sys_errlist[errno]);
                                device, sys_errlist[errno]);
-                       (void)setmodem(device,resetmodem);
+                       (void)setmodem(device, resetmodem);
                        exit(1);
                }
                /* Try one last time to hang up */
                        exit(1);
                }
                /* Try one last time to hang up */
-               if (ioctl(devfile,(int)TIOCCDTR,(char *)0) < 0)
-                       fprintf(stderr,"On TIOCCDTR ioctl: %s\n",
+               if (ioctl(devfile, (int)TIOCCDTR, (char *)0) < 0)
+                       fprintf(stderr, "On TIOCCDTR ioctl: %s\n",
                                sys_errlist[errno]);
 
                                sys_errlist[errno]);
 
-               if (ioctl(devfile, (int)TIOCNXCL,(char *)0) < 0)
+               if (ioctl(devfile, (int)TIOCNXCL, (char *)0) < 0)
                        fprintf(stderr,
                            "Cannot clear Exclusive Use on %s: %s\n",
                                device, sys_errlist[errno]);
 
                        fprintf(stderr,
                            "Cannot clear Exclusive Use on %s: %s\n",
                                device, sys_errlist[errno]);
 
-               if (ioctl(devfile, (int)TIOCHPCL,(char *)0) < 0)
+               if (ioctl(devfile, (int)TIOCHPCL, (char *)0) < 0)
                        fprintf(stderr,
                            "Cannot set hangup on close on %s: %s\n",
                                device, sys_errlist[errno]);
 
                        fprintf(stderr,
                            "Cannot set hangup on close on %s: %s\n",
                                device, sys_errlist[errno]);
 
+#endif !sequent
                i = resetmodem;
 
                i = resetmodem;
 
-               if (setmodem(device,ENABLE) < 0) {
-                       fprintf(stderr,"Cannot Enable modem control\n");
-                       (void)setmodem(device,i);
+#ifndef sequent
+               if (setmodem(device, ENABLE) < 0) {
+                       fprintf(stderr, "Cannot Enable modem control\n");
+                       (void)setmodem(device, i);
                        exit(1);
                }
                        exit(1);
                }
+#endif sequent
                resetmodem=i;
 
                if (settys(ENABLE)) {
                resetmodem=i;
 
                if (settys(ENABLE)) {
-                       fprintf(stderr,"%s already enabled\n",device);
+                       fprintf(stderr, "%s already enabled\n", device);
                } else {
                } else {
-                       pokeinit(device,Uname,enable);
+                       pokeinit(device, Uname, enable);
                }
                }
-               post(device,"");
+               post(device, "");
 
        } else {
 #if defined(TIOCMGET) && defined(SENSECARRIER)
 
        } else {
 #if defined(TIOCMGET) && defined(SENSECARRIER)
@@ -275,18 +297,18 @@ int argc; char *argv[];
                        sleep(2); /* need time after modem control turnoff */
 
                        if((devfile = open(device, 1)) < 0) {
                        sleep(2); /* need time after modem control turnoff */
 
                        if((devfile = open(device, 1)) < 0) {
-                               fprintf(stderr,"On open of %s: %s\n",
+                               fprintf(stderr, "On open of %s: %s\n",
                                        device, sys_errlist[errno]);
                                        device, sys_errlist[errno]);
-                               (void)setmodem(device,resetmodem);
+                               (void)setmodem(device, resetmodem);
                                exit(1);
                        }
 
                                exit(1);
                        }
 
-                       (void)ioctl(devfile,TIOCMGET,&linestat);
+                       (void)ioctl(devfile, TIOCMGET, &linestat);
 
                        if (linestat&TIOCM_CAR) {
 
                        if (linestat&TIOCM_CAR) {
-                               fprintf(stderr,"%s is in use (Carrier On)\n",
+                               fprintf(stderr, "%s is in use (Carrier On)\n",
                                        device);
                                        device);
-                               (void)setmodem(device,resetmodem);
+                               (void)setmodem(device, resetmodem);
                                exit(2);
                        }
                        (void)close(devfile);
                                exit(2);
                        }
                        (void)close(devfile);
@@ -300,12 +322,19 @@ int argc; char *argv[];
 
                /* poke init */
                if(settys(DISABLE)) {
 
                /* poke init */
                if(settys(DISABLE)) {
-                       fprintf(stderr,"%s already disabled\n",device);
+                       fprintf(stderr, "%s already disabled\n", device);
                } else {
                } else {
-                       pokeinit(device,Uname,enable);
+                       pokeinit(device, Uname, enable);
                }
                }
-               post(device,Uname);
-               if((devfile = open(device, 1)) < 0) {
+               post(device, Uname);
+#ifdef sequent
+       /* Disable modem control */
+       if (setmodem(device, DISABLE) < 0) {
+               fprintf(stderr, "Unable to disable modem control\n");
+               exit(1);
+       }
+#endif sequent
+               if((devfile = open(device, O_RDWR|O_NDELAY)) < 0) {
                        fprintf(stderr, "On %s open: %s\n",
                                device, sys_errlist[errno]);
                } else {
                        fprintf(stderr, "On %s open: %s\n",
                                device, sys_errlist[errno]);
                } else {
@@ -320,7 +349,7 @@ int argc; char *argv[];
 }
 
 /* return true if no lower case */
 }
 
 /* return true if no lower case */
-upcase(str,len)
+upcase(str, len)
 register char *str;
 register int len;
 {
 register char *str;
 register int len;
 {
@@ -331,22 +360,22 @@ register int len;
 }
 
 /* Post name to public */
 }
 
 /* Post name to public */
-post(device,name)
+post(device, name)
 char *device, *name;
 {
        (void)time((time_t *)&utmp.ut_time);
 char *device, *name;
 {
        (void)time((time_t *)&utmp.ut_time);
-       strcpyn(utmp.ut_line, device, LINSIZ);
-       strcpyn(utmp.ut_name, name,  NAMSIZ);
-       if (lseek(etcutmp, utmploc, 0)<0)
-               fprintf(stderr,"on lseek in /etc/utmp: %s",
+       strncpy(utmp.ut_line, device, LINSIZ);
+       strncpy(utmp.ut_name, name,  NAMSIZ);
+       if (lseek(etcutmp, utmploc, 0) < 0)
+               fprintf(stderr, "on lseek in /etc/utmp: %s",
                        sys_errlist[errno]);
                        sys_errlist[errno]);
-       if (write(etcutmp, (char *)&utmp, sizeof(utmp))<0)
-               fprintf(stderr,"on write in /etc/utmp: %s",
+       if (write(etcutmp, (char *)&utmp, sizeof(utmp)) < 0)
+               fprintf(stderr, "on write in /etc/utmp: %s",
                        sys_errlist[errno]);
 }
        
 /* poke process 1 and wait for it to do its thing */
                        sys_errlist[errno]);
 }
        
 /* poke process 1 and wait for it to do its thing */
-pokeinit(device,uname,enable)
+pokeinit(device, uname, enable)
 char *uname, *device; int enable;
 {
        struct utmp utmp;
 char *uname, *device; int enable;
 {
        struct utmp utmp;
@@ -360,7 +389,7 @@ char *uname, *device; int enable;
                    "Cannot send hangup to init process: %s\n",
                        sys_errlist[errno]);
                (void)settys(resettty);
                    "Cannot send hangup to init process: %s\n",
                        sys_errlist[errno]);
                (void)settys(resettty);
-               (void)setmodem(device,resetmodem);
+               (void)setmodem(device, resetmodem);
                exit(1);
        }
 
                exit(1);
        }
 
@@ -368,18 +397,154 @@ char *uname, *device; int enable;
                return;
 
        /* wait till init has responded, clearing the utmp entry */
                return;
 
        /* wait till init has responded, clearing the utmp entry */
-       i=100;
+       i = 100;
        do {
                sleep(1);
        do {
                sleep(1);
-               if (lseek(etcutmp,utmploc,0)<0)
-                       fprintf(stderr,"On lseek in /etc/utmp: %s",
+               if (lseek(etcutmp, utmploc, 0) < 0)
+                       fprintf(stderr, "On lseek in /etc/utmp: %s",
                                sys_errlist[errno]);
                                sys_errlist[errno]);
-               if (read(etcutmp,(char *)&utmp,sizeof utmp)<0)
-                       fprintf(stderr,"On read from /etc/utmp: %s",
+               if (read(etcutmp, (char *)&utmp, sizeof utmp) < 0)
+                       fprintf(stderr, "On read from /etc/utmp: %s",
                                sys_errlist[errno]);
        } while (utmp.ut_name[0] != '\0' && --i > 0);
 }
 
                                sys_errlist[errno]);
        } while (utmp.ut_name[0] != '\0' && --i > 0);
 }
 
+#ifdef BSD4_3
+/* identify terminal line in ttys */
+opnttys(device)
+char *device;
+{
+       register int  ndevice; 
+       register char *p;
+       char *index();
+       char linebuf[BUFSIZ];
+
+       ttysfile = NULL;
+       do {
+               if (ttysfile != NULL) {
+                       fclose(ttysfile);
+                       sleep(5);
+               }
+               ttysfile = fopen(Etcttys, "r");
+               if(ttysfile == NULL) {
+                       fprintf(stderr, "Cannot open %s: %s\n", Etcttys,
+                               sys_errlist[errno]);
+                       exit(1);
+               }
+       } while (flock(fileno(ttysfile), LOCK_NB|LOCK_EX) < 0);
+       nttysfile = fopen(NEtcttys, "w");
+       if(nttysfile == NULL) {
+               fprintf(stderr, "Cannot open %s: %s\n", Etcttys,
+                       sys_errlist[errno]);
+               exit(1);
+       }
+
+       ndevice = strlen(device);
+#ifndef BRL4_2
+       utmploc = sizeof(utmp);
+#else BRL4_2
+       utmploc = 0;
+#endif BRL4_2
+
+       while(fgets(linebuf, sizeof(linebuf) - 1, ttysfile) != NULL) {
+               if(strncmp(device, linebuf, ndevice) == 0)
+                       return;
+               ttyslnbeg += strlen(linebuf);
+               if (linebuf[0] != '#' && linebuf[0] != '\0')
+                       utmploc += sizeof(utmp);
+               if (fputs(linebuf, nttysfile) == NULL) {
+                       fprintf(stderr, "On %s write: %s\n",
+                               Etcttys, sys_errlist[errno]);
+                       exit(1);
+               }
+               
+       }
+       fprintf(stderr, "%s not found in %s\n", device, Etcttys);
+       exit(1);
+}
+
+/* modify appropriate line in /etc/ttys to turn on/off the device */
+settys(enable)
+int enable;
+{
+       register char *cp, *cp2;
+       char lbuf[BUFSIZ];
+       int i;
+       char c1, c2;
+
+       (void) fseek(ttysfile, ttyslnbeg, 0);
+       if(fgets(lbuf, BUFSIZ, ttysfile) == NULL) {
+               fprintf(stderr, "On %s read: %s\n",
+                       Etcttys, sys_errlist[errno]);
+               exit(1);
+       }
+       /* format is now */
+       /* ttyd0 std.100 dialup on secure # comment */
+       /* except, 2nd item may have embedded spaces inside quotes, Hubert */
+       cp = lbuf;
+       for (i=0;*cp && i<3;i++) {
+               if (*cp == '"') {
+                       cp++;
+                       while (*cp && *cp != '"')
+                               cp++;
+                       if (*cp != '\0')
+                               cp++;
+               }else {
+                       while (*cp && *cp != ' ' && *cp != '\t')
+                               cp++;
+               }
+               while (*cp && (*cp == ' ' || *cp == '\t'))
+                       cp++;
+       }
+       if (*cp == '\0') {
+               fprintf(stderr,"Badly formatted line in /etc/ttys:\n%s", lbuf);
+               exit(1);
+       }
+       c1 = *--cp;
+       *cp++ = '\0';
+       cp2 = cp;
+       while (*cp && *cp != ' ' && *cp != '\t' && *cp != '\n')
+               cp++;
+       if (*cp == '\0') {
+               fprintf(stderr,"Badly formatted line in /etc/ttys:\n%s", lbuf);
+               exit(1);
+       }
+       c2 = *cp;
+       *cp++ = '\0';
+       while (*cp && (*cp == ' ' || *cp == '\t'))
+               cp++;
+       resettty = strcmp("on", cp2) != 0;
+       fprintf(nttysfile,"%s%c%s%c%s", lbuf, c1, enable ? "on" : "off", c2, cp);
+       if (ferror(nttysfile)) {
+               fprintf(stderr, "On %s fprintf: %s\n",
+                       NEtcttys, sys_errlist[errno]);
+               exit(1);
+       }
+       while(fgets(lbuf, sizeof(lbuf) - 1, ttysfile) != NULL) {
+               if (fputs(lbuf, nttysfile) == NULL) {
+                       fprintf(stderr, "On %s write: %s\n",
+                               NEtcttys, sys_errlist[errno]);
+                       exit(1);
+               }
+       }
+               
+       if (enable^resettty)
+               (void) unlink(NEtcttys);
+       else {
+               struct stat statb;
+               if (stat(Etcttys, &statb) == 0) {
+                       fchmod(fileno(nttysfile) ,statb.st_mode);
+                       fchown(fileno(nttysfile), statb.st_uid, statb.st_gid);
+               }
+               (void) rename(NEtcttys, Etcttys);
+       }
+       (void) fclose(nttysfile);
+       (void) fclose(ttysfile);
+       return enable^resettty;
+}
+
+#else !BSD4_3
+
 /* identify terminal line in ttys */
 opnttys(device)
 char *device;
 /* identify terminal line in ttys */
 opnttys(device)
 char *device;
@@ -388,7 +553,7 @@ char *device;
        register int  ndevice, lnsiz; 
        register char *p;
        char *index();
        register int  ndevice, lnsiz; 
        register char *p;
        char *index();
-       char linebuf[100];
+       char linebuf[BUFSIZ];
 
        ttysfile = fopen(Etcttys, "r");
        if(ttysfile == NULL) {
 
        ttysfile = fopen(Etcttys, "r");
        if(ttysfile == NULL) {
@@ -402,15 +567,19 @@ char *device;
        utmploc = 0;
 
        while(fgets(linebuf, sizeof(linebuf) - 1, ttysfile) != NULL) {
        utmploc = 0;
 
        while(fgets(linebuf, sizeof(linebuf) - 1, ttysfile) != NULL) {
-               utmploc += sizeof(utmp);
                lnsiz = strlen(linebuf);
                lnsiz = strlen(linebuf);
-               if ((p = index(linebuf,'\n')) != NULL)
+               if ((p = index(linebuf, '\n')) != NULL)
                        *p = '\0';
                if(strncmp(device, &linebuf[2], ndevice) == 0) {
                        (void)fclose(ttysfile);
                        *p = '\0';
                if(strncmp(device, &linebuf[2], ndevice) == 0) {
                        (void)fclose(ttysfile);
+#ifdef sequent
+                       /* Why is the sequent off by one? */
+                       utmploc += sizeof(utmp);
+#endif sequent
                        return;
                }
                ttyslnbeg += lnsiz;
                        return;
                }
                ttyslnbeg += lnsiz;
+               utmploc += sizeof(utmp);
        }
        fprintf(stderr, "%s not found in %s\n", device, Etcttys);
        exit(1);
        }
        fprintf(stderr, "%s not found in %s\n", device, Etcttys);
        exit(1);
@@ -421,48 +590,60 @@ settys(enable)
 int enable;
 {
        int ittysfil;
 int enable;
 {
        int ittysfil;
-       char out,in;
+       char out, in;
 
        ittysfil = open(Etcttys, 2);
 
        ittysfil = open(Etcttys, 2);
-       if(ittysfil == NULL) {
+       if(ittysfil < 0) {
                fprintf(stderr, "Cannot open %s for output: %s\n",
                        Etcttys, sys_errlist[errno]);
                exit(1);
        }
                fprintf(stderr, "Cannot open %s for output: %s\n",
                        Etcttys, sys_errlist[errno]);
                exit(1);
        }
-       (void)lseek(ittysfil,ttyslnbeg,0);
-       if(read(ittysfil,&in,1)<0) {
-               fprintf(stderr,"On %s write: %s\n",
+       (void)lseek(ittysfil, ttyslnbeg, 0);
+       if(read(ittysfil, &in, 1)<0) {
+               fprintf(stderr, "On %s write: %s\n",
                        Etcttys, sys_errlist[errno]);
                exit(1);
        }
        resettty = (in == '1');
        out = enable ? '1' : '0';
                        Etcttys, sys_errlist[errno]);
                exit(1);
        }
        resettty = (in == '1');
        out = enable ? '1' : '0';
-       (void)lseek(ittysfil,ttyslnbeg,0);
-       if(write(ittysfil,&out,1)<0) {
-               fprintf(stderr,"On %s write: %s\n",
+       (void)lseek(ittysfil, ttyslnbeg, 0);
+       if(write(ittysfil, &out, 1)<0) {
+               fprintf(stderr, "On %s write: %s\n",
                        Etcttys, sys_errlist[errno]);
                exit(1);
        }
        (void)close(ittysfil);
        return(in==out);
 }
                        Etcttys, sys_errlist[errno]);
                exit(1);
        }
        (void)close(ittysfil);
        return(in==out);
 }
+#endif !BSD4_3
 
 
+#ifdef sequent
+setmodem(ttyline, enable)
+char *ttyline; int enable;
+{
+       char *sysbuf[BUFSIZ];
+       sprintf(sysbuf,"/etc/ttyconfig /dev/%s -special %s", ttyline,
+               enable ? "-carrier" : "-nocarrier");
+       system(sysbuf);
+}
+#endif /* sequent */
+#ifdef vax
 /*
 /*
- * Excerpted from (June 8,1983 W.Sebok)
+ * Excerpted from (June 8, 1983 W.Sebok)
  * > ttymodem.c - enable/disable modem control for tty lines.
  * >
  * > Knows about DZ11s and DH11/DM11s.
  * > 23.3.83 - TS
  * > ttymodem.c - enable/disable modem control for tty lines.
  * >
  * > Knows about DZ11s and DH11/DM11s.
  * > 23.3.83 - TS
- * > modified to know about DMF's  (hasn't been tested) Nov 8,1984 - WLS
+ * > modified to know about DMF's  (hasn't been tested) Nov 8, 1984 - WLS
  */
 
 
  */
 
 
-setmodem(ttyline,enable)
+setmodem(ttyline, enable)
 char *ttyline; int enable;
 {
        dev_t dev;
        int kmem;
 char *ttyline; int enable;
 {
        dev_t dev;
        int kmem;
-       int unit,line,nlines,addr,tflags;
+       int unit, line, nlines, addr, tflags;
        int devtype=0;
        char cflags; short sflags;
 #ifdef BSD4_2
        int devtype=0;
        char cflags; short sflags;
 #ifdef BSD4_2
@@ -475,105 +656,106 @@ char *ttyline; int enable;
        struct cdevsw cdevsw;
 
        if(nl[CDEVSW].n_type == 0) {
        struct cdevsw cdevsw;
 
        if(nl[CDEVSW].n_type == 0) {
-               fprintf(stderr,"No namelist.\n");
+               fprintf(stderr, "No namelist.\n");
                return(-1);
        }
 
        if((kmem = open("/dev/kmem", 2)) < 0) {
                return(-1);
        }
 
        if((kmem = open("/dev/kmem", 2)) < 0) {
-               fprintf(stderr,"/dev/kmem open: %s\n", sys_errlist[errno]);
+               fprintf(stderr, "/dev/kmem open: %s\n", sys_errlist[errno]);
                return(-1);
        }
 
                return(-1);
        }
 
-       if(stat(ttyline,&statb) < 0) {
-               fprintf(stderr,"%s stat: %s\n", ttyline, sys_errlist[errno]);
+       if(stat(ttyline, &statb) < 0) {
+               fprintf(stderr, "%s stat: %s\n", ttyline, sys_errlist[errno]);
                return(-1);
        }
 
        if((statb.st_mode&S_IFMT) != S_IFCHR) {
                return(-1);
        }
 
        if((statb.st_mode&S_IFMT) != S_IFCHR) {
-               fprintf(stderr,"%s is not a character device.\n",ttyline);
+               fprintf(stderr, "%s is not a character device.\n",ttyline);
                return(-1);
        }
 
        dev = statb.st_rdev;
        (void)lseek(kmem,
                (off_t) &(((struct cdevsw *)NLVALUE(CDEVSW))[major(dev)]),0);
                return(-1);
        }
 
        dev = statb.st_rdev;
        (void)lseek(kmem,
                (off_t) &(((struct cdevsw *)NLVALUE(CDEVSW))[major(dev)]),0);
-       (void)read(kmem,(char *) &cdevsw,sizeof cdevsw);
+       (void)read(kmem, (char *) &cdevsw, sizeof cdevsw);
 
        if((int)(cdevsw.d_open) == NLVALUE(DZOPEN)) {
                devtype = DZ11;
                unit = minor(dev) / NDZLINE;
                line = minor(dev) % NDZLINE;
                addr = (int) &(((int *)NLVALUE(DZINFO))[unit]);
 
        if((int)(cdevsw.d_open) == NLVALUE(DZOPEN)) {
                devtype = DZ11;
                unit = minor(dev) / NDZLINE;
                line = minor(dev) % NDZLINE;
                addr = (int) &(((int *)NLVALUE(DZINFO))[unit]);
-               (void)lseek(kmem,(off_t) NLVALUE(NDZ11),0);
+               (void)lseek(kmem, (off_t) NLVALUE(NDZ11), 0);
        } else if((int)(cdevsw.d_open) == NLVALUE(DHOPEN)) {
                devtype = DH11;
                unit = minor(dev) / NDHLINE;
                line = minor(dev) % NDHLINE;
                addr = (int) &(((int *)NLVALUE(DHINFO))[unit]);
        } else if((int)(cdevsw.d_open) == NLVALUE(DHOPEN)) {
                devtype = DH11;
                unit = minor(dev) / NDHLINE;
                line = minor(dev) % NDHLINE;
                addr = (int) &(((int *)NLVALUE(DHINFO))[unit]);
-               (void)lseek(kmem,(off_t) NLVALUE(NDH11),0);
+               (void)lseek(kmem, (off_t) NLVALUE(NDH11), 0);
        } else if((int)(cdevsw.d_open) == NLVALUE(DMFOPEN)) {
                devtype = DMF;
                unit = minor(dev) / NDMFLINE;
                line = minor(dev) % NDMFLINE;
                addr = (int) &(((int *)NLVALUE(DMFINFO))[unit]);
        } else if((int)(cdevsw.d_open) == NLVALUE(DMFOPEN)) {
                devtype = DMF;
                unit = minor(dev) / NDMFLINE;
                line = minor(dev) % NDMFLINE;
                addr = (int) &(((int *)NLVALUE(DMFINFO))[unit]);
-               (void)lseek(kmem,(off_t) NLVALUE(NDMF),0);
+               (void)lseek(kmem, (off_t) NLVALUE(NDMF), 0);
        } else {
        } else {
-               fprintf(stderr,"Device %s (%d/%d) unknown.\n",ttyline,
-                   major(dev),minor(dev));
+               fprintf(stderr, "Device %s (%d/%d) unknown.\n", ttyline,
+                   major(dev), minor(dev));
                return(-1);
        }
 
                return(-1);
        }
 
-       (void)read(kmem,(char *) &nlines,sizeof nlines);
+       (void)read(kmem, (char *) &nlines, sizeof nlines);
        if(minor(dev) >= nlines) {
        if(minor(dev) >= nlines) {
-               fprintf(stderr,"Sub-device %d does not exist (only %d).\n",
-                   minor(dev),nlines);
+               fprintf(stderr, "Sub-device %d does not exist (only %d).\n",
+                   minor(dev), nlines);
                return(-1);
        }
 
                return(-1);
        }
 
-       (void)lseek(kmem,(off_t)addr,0);
-       (void)read(kmem,(char *) &ubinfo,sizeof ubinfo);
-       (void)lseek(kmem,(off_t) &(ubinfo->ui_flags),0);
-       (void)read(kmem,(char *) &flags,sizeof flags);
+       (void)lseek(kmem, (off_t)addr, 0);
+       (void)read(kmem, (char *) &ubinfo, sizeof ubinfo);
+       (void)lseek(kmem, (off_t) &(ubinfo->ui_flags), 0);
+       (void)read(kmem, (char *) &flags, sizeof flags);
 
        tflags = 1<<line;
        resetmodem = ((flags&tflags) == 0);
        flags = enable ? (flags & ~tflags) : (flags | tflags);
 
        tflags = 1<<line;
        resetmodem = ((flags&tflags) == 0);
        flags = enable ? (flags & ~tflags) : (flags | tflags);
-       (void)lseek(kmem,(off_t) &(ubinfo->ui_flags),0);
-       (void)write(kmem,(char *) &flags, sizeof flags);
+       (void)lseek(kmem, (off_t) &(ubinfo->ui_flags), 0);
+       (void)write(kmem, (char *) &flags, sizeof flags);
        switch(devtype) {
                case DZ11:
                        if((addr = NLVALUE(DZSCAR)) == 0) {
        switch(devtype) {
                case DZ11:
                        if((addr = NLVALUE(DZSCAR)) == 0) {
-                               fprintf(stderr,"No dzsoftCAR.\n");
+                               fprintf(stderr, "No dzsoftCAR.\n");
                                return(-1);
                        }
                        cflags = flags;
                                return(-1);
                        }
                        cflags = flags;
-                       (void)lseek(kmem,(off_t) &(((char *)addr)[unit]),0);
-                       (void)write(kmem,(char *) &cflags, sizeof cflags);
+                       (void)lseek(kmem, (off_t) &(((char *)addr)[unit]), 0);
+                       (void)write(kmem, (char *) &cflags, sizeof cflags);
                        break;
                case DH11:
                        if((addr = NLVALUE(DHSCAR)) == 0) {
                        break;
                case DH11:
                        if((addr = NLVALUE(DHSCAR)) == 0) {
-                               fprintf(stderr,"No dhsoftCAR.\n");
+                               fprintf(stderr, "No dhsoftCAR.\n");
                                return(-1);
                        }
                        sflags = flags;
                                return(-1);
                        }
                        sflags = flags;
-                       (void)lseek(kmem,(off_t) &(((short *)addr)[unit]),0);
-                       (void)write(kmem,(char *) &sflags, sizeof sflags);
+                       (void)lseek(kmem, (off_t) &(((short *)addr)[unit]), 0);
+                       (void)write(kmem, (char *) &sflags, sizeof sflags);
                        break;
                case DMF:
                        if((addr = NLVALUE(DMFSCAR)) == 0) {
                        break;
                case DMF:
                        if((addr = NLVALUE(DMFSCAR)) == 0) {
-                               fprintf(stderr,"No dmfsoftCAR.\n");
+                               fprintf(stderr, "No dmfsoftCAR.\n");
                                return(-1);
                        }
                        cflags = flags;
                                return(-1);
                        }
                        cflags = flags;
-                       (void)lseek(kmem,(off_t) &(((char *)addr)[unit]),0);
-                       (void)write(kmem,(char *) &flags, sizeof cflags);
+                       (void)lseek(kmem, (off_t) &(((char *)addr)[unit]), 0);
+                       (void)write(kmem, (char *) &flags, sizeof cflags);
                        break;
                default:
                        break;
                default:
-                       fprintf(stderr,"Unknown device type\n");
+                       fprintf(stderr, "Unknown device type\n");
                        return(-1);
        }
        return(0);
 }
                        return(-1);
        }
        return(0);
 }
+#endif /* vax */
 
 prefix(s1, s2)
        register char *s1, *s2;
 
 prefix(s1, s2)
        register char *s1, *s2;
@@ -585,3 +767,9 @@ prefix(s1, s2)
                        return (1);
        return (c == '\0');
 }
                        return (1);
        return (c == '\0');
 }
+#else  /* !DIALINOUT */
+main()
+{
+       fprintf(stderr,"acucntrl is not supported on this system\n");
+}
+#endif /* !DIALINOUT */