|
|
1.1 root 1: /*
2: * berknews - send news article via Berknet
3: *
4: * Synopsis:
5: * berknews [-o] [-n newsgroup] host_net_command machine remote_rnews
6: */
7:
8: #ifdef SCCSID
9: static char *SccsId = "@(#)berknews.c 2.5 4/16/85";
10: #endif /* SCCSID */
11:
12: #include <stdio.h>
13: #include <ctype.h>
14: #ifndef USG
15: #include <whoami.h>
16: struct utsname {
17: char Sysname[9];
18: char nodename[33];
19: char release[9];
20: char version[9];
21: };
22: #else /* USG */
23: #include <sys/utsname.h>
24: #endif /* USG */
25:
26:
27: struct network {
28: char *uucpname;
29: char *berkname;
30: } berknet[] = {
31: /* UUCP Net Name BerkNet Name
32: ------------- ------------ */
33: "ucbvax", "CSVAX",
34: "populi", "G",
35: "ucbarpa", "ARPAVAX",
36: "ucbcfo-c", "C",
37: "ucbopt", "ESVAX",
38: "ucbcad", "ucbcad",
39: "ucbcory", "Cory",
40: "ucb", "C70",
41: "ucbmathstat", "MathStat",
42: "ucbonyx", "Onyx",
43: "ucbkim", "Kim",
44: "ucbcfo-a", "A",
45: "ucbcfo-b", "B",
46: "ucbcfo-d", "D",
47: "ucbcfo-e", "E",
48: "ucbcfo-f", "F",
49: "ucbingvax", "IngVAX",
50: "ucbingres", "Ingres",
51: "ucbeecs40", "EECS40",
52: "ucbvlsi", "VLSI",
53: "ucbsrc", "SRC",
54: "ucbimage", "Image",
55: '\0', '\0'
56: };
57:
58: char *index();
59: char buffer[BUFSIZ];
60: int linecount;
61:
62: FILE *popen();
63: main(argc, argv)
64: int argc;
65: char **argv;
66: {
67: FILE *out;
68: char sender[BUFSIZ],newsgroup[100];
69: char *punct;
70: char sysn[20];
71: int sysnl;
72: struct utsname ubuf;
73:
74: if (argc < 4) {
75: fprintf(stderr, "Too few arguments.\n");
76: exit(1);
77: }
78:
79: #ifdef debug
80: printf("%s - -m%s %s\n", argv[1], argv[2], argv[3]);
81: sprintf(buffer, "cat");
82: #else
83: sprintf(buffer, "%s - -m%s %s", argv[1], argv[2], argv[3]);
84: #endif
85: out = popen(buffer, "w");
86: uname(&ubuf);
87: strcpy(sysn, ubuf.nodename);
88: strcat(sysn, "!");
89: sysnl = strlen(sysn);
90:
91: while (fgets(buffer, sizeof buffer, stdin)) {
92: if (fromline()) {
93: punct = index(buffer, '!');
94: if (punct == NULL)
95: printf("Bad from line: '%s'\n", buffer);
96: else {
97: *punct = ':'; /* berknet mail delimiter */
98: if (!strncmp("From: ", buffer, 6))
99: punct = &buffer[6];
100: else if (!strncmp("From ",buffer,5))
101: punct = &buffer[5];
102: else
103: punct = buffer;
104: fiddle(punct);
105: }
106: }
107: fputs(buffer, out);
108: }
109: pclose(out);
110: exit(0);
111: }
112:
113: fromline() {
114: if (!linecount && (!strncmp("From: ", buffer, 6) || !strncmp("From ", buffer, 5)))
115: return ++linecount;
116: return 0;
117: }
118:
119: /*
120: * make sure the host name is a correct berknet address, since the
121: * internal names are not the berknet host names.
122: */
123: fiddle(buf)
124: char *buf;
125: {
126: char uucpname[100];
127: register struct network *netptr;
128: char *rest;
129:
130: strcpy(uucpname, buf);
131: rest = index(uucpname, ':');
132: *rest++ = 0;
133: #ifdef debug
134: printf("uucpname = '%s', buf = '%s', rest = '%s'\n", uucpname, buf, rest);
135: #endif
136: for (netptr = &berknet[0]; strcmp(netptr->uucpname, uucpname) && netptr->uucpname; netptr++)
137: ;
138: if (netptr->uucpname)
139: sprintf(buf, "%s:%s", netptr->berkname, rest);
140: else
141: sprintf(buf, "UNKNOWN:%s", rest);
142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.