12 # 1 "/usr/include/stdio.h"
23 extern struct _iobuf {
80 struct _iobuf *fopen();
81 struct _iobuf *fdopen();
82 struct _iobuf *freopen();
83 struct _iobuf *popen();
90 # 1 "/usr/include/utmp.h"
124 # 1 "/usr/include/ctype.h"
136 extern char _ctype_[];
155 # 1 "/usr/include/sys/types.h"
180 typedef unsigned char u_char;
181 typedef unsigned short u_short;
182 typedef unsigned int u_int;
183 typedef unsigned long u_long;
184 typedef unsigned short ushort;
187 typedef struct _physadr { short r[1]; } *physadr;
188 typedef struct label_t {
192 typedef struct _quad { long val[2]; } quad;
193 typedef long daddr_t;
194 typedef char * caddr_t;
195 typedef u_short ino_t;
196 typedef long swblk_t;
197 typedef u_int size_t;
202 typedef u_short uid_t;
203 typedef u_short gid_t;
205 typedef u_short mode_t;
214 # 1 "/usr/include/sys/select.h"
254 # 1 "/usr/include/sys/types.h"
265 # 64 "/usr/include/sys/types.h"
267 # 40 "/usr/include/sys/select.h"
279 typedef long fd_mask;
282 typedef struct fd_set {
297 # 59 "/usr/include/sys/types.h"
300 typedef u_int memaddr;
301 typedef long ubadr_t;
306 # 1 "/usr/include/sys/stat.h"
322 unsigned short st_mode;
337 u_short st_spare4[3];
402 # 100 "/usr/include/sys/stat.h"
408 # 1 "/usr/include/errno.h"
525 # 121 "/usr/include/errno.h"
529 # 1 "/usr/include/string.h"
539 # 1 "/usr/include/sys/types.h"
550 # 64 "/usr/include/sys/types.h"
552 # 10 "/usr/include/string.h"
554 # 13 "/usr/include/string.h"
557 extern char *strcat(), *strncat(), *strcpy(), *strncpy(), *index();
558 extern char *rindex(), *strstr(), *syserrlst();
559 extern int strcmp(), strncmp(), strcasecmp(), strncasecmp(), strlen();
562 extern char *memccpy(), *memchr(), *memcpy(), *memset(), *strchr();
563 extern char *strdup(), *strpbrk(), *strrchr(), *strsep(), *strtok();
564 extern size_t strcspn(), strspn();
566 extern char *strerror();
569 # 1 "/usr/include/unistd.h"
615 # 1 "/usr/include/sys/types.h"
626 # 64 "/usr/include/sys/types.h"
628 # 46 "/usr/include/unistd.h"
635 # 54 "/usr/include/unistd.h"
640 unsigned int alarm();
652 unsigned int sleep();
661 char *getusershell();
665 extern char *sys_siglist[];
671 unsigned int ualarm();
676 extern int opterr, optind, optopt;
681 # 1 "/usr/include/stdlib.h"
729 # 58 "/usr/include/stdlib.h"
732 # 62 "/usr/include/stdlib.h"
757 unsigned long strtoul();
770 extern int opterr, optind, optopt;
773 extern char *suboptarg;
785 struct utmp *getutmp();
786 static struct _iobuf *cfile;
788 ruserpass(host, aname, apass)
789 char *host, **aname, **apass;
792 renv(host, aname, apass);
793 if (*aname == 0 || *apass == 0)
794 rnetrc(host, aname, apass);
796 char *myname = getlogin();
797 *aname = (char *)malloc(16);
798 printf("Name (%s:%s): ", host, myname);
800 if (read(2, *aname, 16) <= 0)
802 if ((*aname)[0] == '\n')
805 if (index(*aname, '\n'))
806 *index(*aname, '\n') = 0;
808 if (*aname && *apass == 0) {
809 printf("Password (%s:%s): ", host, *aname);
811 *apass = getpass("");
816 renv(host, aname, apass)
817 char *host, **aname, **apass;
820 char *stemp, fgetlogin, *comma;
825 if (! ((_ctype_+1)[cp[0]]&(01|02)))
827 comma = index(cp, ',');
831 *aname = (char *)malloc(comma - cp + 1);
832 strncpy(*aname, cp, comma - cp);
834 if (strncmp(*aname, cp, comma - cp))
837 cp = (char *)malloc(strlen(comma)+1);
839 *apass = (char *)malloc(16);
840 mkpwclear(cp, host[0], *apass);
848 register char *cp, **env;
849 extern char **environ;
852 for (env = environ; *env != 0; env++)
853 if (!strncmp(*env, "MACH", 4)) {
854 cp = index(*env, '=');
857 if (strncmp(*env+4, host, cp-(*env+4)))
876 static char tokval[100];
878 static struct toktab {
898 rnetrc(host, aname, apass)
899 char *host, **aname, **apass;
901 char *hdir, buf[1024];
906 hdir = getenv("HOME");
909 sprintf(buf, "%s/.netrc", hdir);
910 cfile = fopen(buf, "r");
917 while ((t = token())) switch(t) {
924 if (token() != 10 || strcmp(host, tokval))
926 while ((t = token()) && t != 11) switch(t) {
931 *aname = (char *)malloc(strlen(tokval) + 1);
932 strcpy(*aname, tokval);
934 if (strcmp(*aname, tokval))
939 if (fstat( ((cfile)->_file), &stb) >= 0
940 && (stb.st_mode & 077) != 0) {
941 fprintf((&_iob[2]), "Error - .netrc file not correct mode.\n");
942 fprintf((&_iob[2]), "Remove password or correct mode.\n");
945 if (token() && *apass == 0) {
946 *apass = (char *)malloc(strlen(tokval) + 1);
947 strcpy(*apass, tokval);
957 fprintf((&_iob[2]), "Unknown .netrc option %s\n", tokval);
973 if ( (((cfile)->_flag&020)!=0))
975 while ((c = (--(cfile)->_cnt>=0? (int)(*(unsigned char *)(cfile)->_ptr++):_filbuf(cfile))) != (-1) &&
976 (c == '\n' || c == '\t' || c == ' ' || c == ','))
982 while ((c = (--(cfile)->_cnt>=0? (int)(*(unsigned char *)(cfile)->_ptr++):_filbuf(cfile))) != (-1) && c != '"') {
984 c = (--(cfile)->_cnt>=0? (int)(*(unsigned char *)(cfile)->_ptr++):_filbuf(cfile));
989 while ((c = (--(cfile)->_cnt>=0? (int)(*(unsigned char *)(cfile)->_ptr++):_filbuf(cfile))) != (-1)
990 && c != '\n' && c != '\t' && c != ' ' && c != ',') {
992 c = (--(cfile)->_cnt>=0? (int)(*(unsigned char *)(cfile)->_ptr++):_filbuf(cfile));
999 for (t = toktab; t->tokstr; t++)
1000 if (!strcmp(t->tokstr, tokval))
1006 char *deblknot(), *deblkclr();
1007 char *nbs8decrypt(), *nbs8encrypt();
1024 char *nbsencrypt(str,key,result)
1027 static char buf[20],oldbuf[20];
1032 for(j=0;j<10;j++)buf[j] = 0;
1033 for(j=0;j<8 && *str;j++)buf[j] = *str++;
1034 strcat(result,nbs8encrypt(buf,oldbuf));
1041 char *nbsdecrypt(cpt,key,result)
1049 for(s = cpt;*s && *s != '$';s++);
1052 strcpy(oldbuf,nbs8decrypt(cpt,oldbuf));
1053 strcat(result,oldbuf);
1061 char *nbs8encrypt(str,key)
1063 static char keyblk[100], blk[100];
1066 enblkclr(keyblk,key);
1069 for(i=0;i<48;i++) E[i] = e[i];
1073 return(deblknot(blk));
1077 char *nbs8decrypt(crp,key)
1079 static char keyblk[100], blk[100];
1082 enblkclr(keyblk,key);
1085 for(i=0;i<48;i++) E[i] = e[i];
1089 return(deblkclr(blk));
1097 for(i=0;i<70;i++)blk[i] = 0;
1098 for(i=0; (c= *str) && i<64; str++){
1099 for(j=0; j<7; j++, i++)
1100 blk[i] = (c>>(6-j)) & 01;
1110 static char iobuf[30];
1111 for(i=0; i<10; i++){
1129 for(i=0;i<70;i++)blk[i] = 0;
1130 for(i=0; (c= *crp) && i<64; crp++){
1134 for(j=0; j<6; j++, i++)
1135 blk[i] = (c>>(5-j)) & 01;
1144 static char iobuf[30];
1145 for(i=0; i<11; i++){
1170 static char IP[] = {
1171 58,50,42,34,26,18,10, 2,
1172 60,52,44,36,28,20,12, 4,
1173 62,54,46,38,30,22,14, 6,
1174 64,56,48,40,32,24,16, 8,
1175 57,49,41,33,25,17, 9, 1,
1176 59,51,43,35,27,19,11, 3,
1177 61,53,45,37,29,21,13, 5,
1178 63,55,47,39,31,23,15, 7,
1184 static char FP[] = {
1185 40, 8,48,16,56,24,64,32,
1186 39, 7,47,15,55,23,63,31,
1187 38, 6,46,14,54,22,62,30,
1188 37, 5,45,13,53,21,61,29,
1189 36, 4,44,12,52,20,60,28,
1190 35, 3,43,11,51,19,59,27,
1191 34, 2,42,10,50,18,58,26,
1192 33, 1,41, 9,49,17,57,25,
1201 static char PC1_C[] = {
1202 57,49,41,33,25,17, 9,
1203 1,58,50,42,34,26,18,
1204 10, 2,59,51,43,35,27,
1205 19,11, 3,60,52,44,36,
1208 static char PC1_D[] = {
1209 63,55,47,39,31,23,15,
1210 7,62,54,46,38,30,22,
1211 14, 6,61,53,45,37,29,
1212 21,13, 5,28,20,12, 4,
1218 static char shifts[] = {
1219 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,
1226 static char PC2_C[] = {
1233 static char PC2_D[] = {
1250 static char KS[16][48];
1269 for (i=0; i<28; i++) {
1270 C[i] = key[PC1_C[i]-1];
1271 D[i] = key[PC1_D[i]-1];
1278 for (i=0; i<16; i++) {
1282 for (k=0; k<shifts[i]; k++) {
1284 for (j=0; j<28-1; j++)
1288 for (j=0; j<28-1; j++)
1295 for (j=0; j<24; j++) {
1296 KS[i][j] = C[PC2_C[j]-1];
1297 KS[i][j+24] = D[PC2_D[j]-28-1];
1308 static char S[8][64] = {
1309 14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
1310 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
1311 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0,
1312 15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13,
1314 15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10,
1315 3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,
1316 0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15,
1317 13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9,
1319 10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8,
1320 13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1,
1321 13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7,
1322 1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12,
1324 7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15,
1325 13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9,
1326 10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4,
1327 3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14,
1329 2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9,
1330 14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6,
1331 4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,
1332 11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3,
1334 12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11,
1335 10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8,
1336 9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6,
1337 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13,
1339 4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1,
1340 13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6,
1341 1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2,
1342 6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12,
1344 13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7,
1345 1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,
1346 7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8,
1347 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11,
1368 static char L[32], R[32];
1369 static char tempL[32];
1375 static char preS[48];
1382 blkencrypt(block, edflag)
1391 for (j=0; j<64; j++)
1392 L[j] = block[IP[j]-1];
1396 for (ii=0; ii<16; ii++) {
1408 for (j=0; j<32; j++)
1414 for (j=0; j<48; j++)
1415 preS[j] = R[E[j]-1] ^ KS[i][j];
1427 for (j=0; j<8; j++) {
1429 k = S[j][(preS[t+0]<<5)+
1445 for (j=0; j<32; j++)
1446 R[j] = L[j] ^ f[P[j]-1];
1451 for (j=0; j<32; j++)
1457 for (j=0; j<32; j++) {
1466 for (j=0; j<64; j++)
1467 block[j] = L[FP[j]-1];
1477 struct utmp *getutmp(sttyname)
1480 static struct utmp utmpstr;
1481 struct _iobuf *fdutmp;
1483 if(sttyname == 0 || sttyname[0] == 0)return(0);
1485 fdutmp = fopen("/var/run/utmp","r");
1486 if(fdutmp == 0)return(0);
1488 while(fread(&utmpstr,1,sizeof utmpstr,fdutmp) == sizeof utmpstr)
1489 if(strcmp(utmpstr.ut_line,sttyname+5) == 0){
1498 sreverse(sto, sfrom)
1499 register char *sto, *sfrom;
1505 *sto++ = sfrom[i--];
1512 static char skey[40];
1513 register struct utmp *putmp;
1514 char stemp[40], stemp1[40], sttyname[30];
1515 register char *sk,*p;
1518 strcpy(sttyname,ttyname(2));
1520 strcpy(sttyname,ttyname(0));
1522 strcpy(sttyname,ttyname(1));
1525 putmp = getutmp(sttyname);
1533 sprintf(stemp, "%ld", putmp->ut_time);
1534 sreverse(stemp1, stemp);
1542 mkpwunclear(spasswd,mch,sencpasswd)
1543 char mch, *spasswd, *sencpasswd;
1545 register char *skey;
1547 if (spasswd[0] == 0) {
1551 skey = mkenvkey(mch);
1553 fprintf((&_iob[2]), "Can't make key\n");
1556 nbsencrypt(spasswd, skey, sencpasswd);
1559 mkpwclear(sencpasswd,mch,spasswd)
1560 char mch, *spasswd, *sencpasswd;
1562 register char *skey;
1564 if (sencpasswd[0] == 0) {
1568 skey = mkenvkey(mch);
1570 fprintf((&_iob[2]), "Can't make key\n");
1573 nbsdecrypt(sencpasswd, skey, spasswd);