Commit | Line | Data |
---|---|---|
128be09c N |
1 | #include "uucp.h" |
2 | #include "uucpdefs.h" | |
3 | #include <signal.h> | |
4 | #include <sys/types.h> | |
5 | #include <sys/stat.h> | |
6 | #include <sys/dir.h> | |
7 | ||
8 | int Stop = 0; | |
9 | ||
10 | /******* | |
11 | * | |
12 | * uulog - this program will append all update files in | |
13 | * directory (LOGDIR) to the log file (logf) and remove the | |
14 | * update files. | |
15 | * | |
16 | * options: | |
17 | * -n - nominal time for delete of lock file | |
18 | * -s - system name for search | |
19 | * -u - user name for search | |
20 | * -x - turn on debug outputs | |
21 | * | |
22 | * exit codes: | |
23 | * 0 - normal | |
24 | * 1 - lock file problems | |
25 | * | |
26 | */ | |
27 | ||
28 | ||
29 | #define NOMTIME 3600L | |
30 | ||
31 | ||
32 | main(argc, argv) | |
33 | char *argv[]; | |
34 | { | |
35 | FILE *plogf, *lsp; | |
36 | char filename[NAMESIZE]; | |
37 | time_t nomtime; | |
38 | char *system, *user; | |
39 | ||
40 | extern int onintr(), intr1(); | |
41 | char buf[BUFSIZ], u[20], s[20]; | |
42 | ||
43 | nomtime = NOMTIME; | |
44 | system = user = NULL; | |
45 | ||
46 | ||
47 | while (argc>1 && argv[1][0] == '-') { | |
48 | switch (argv[1][1]) { | |
49 | case 'd': | |
50 | printf("-d option removed\n"); | |
51 | break; | |
52 | case 'n': | |
53 | nomtime = atoi(&argv[1][2]); break; | |
54 | case 's': | |
55 | system = &argv[1][2]; | |
56 | break; | |
57 | case 'u': | |
58 | user = &argv[1][2]; | |
59 | break; | |
60 | case 'x': | |
61 | Debug = atoi(&argv[1][2]); | |
62 | if (Debug <= 0) | |
63 | Debug = 1; | |
64 | break; | |
65 | default: | |
66 | printf("unknown flag %s\n", argv[1]); break; | |
67 | } | |
68 | --argc; argv++; | |
69 | } | |
70 | ||
71 | DEBUG(4, "%s\n", "START"); | |
72 | chdir(LOGDIR); | |
73 | if (ulockf(LOGLOCK, nomtime) != 0) | |
74 | exit(0); | |
75 | signal(SIGHUP, intr1); | |
76 | signal(SIGINT,intr1); | |
77 | signal(SIGQUIT, intr1); | |
78 | ||
79 | if ((plogf = fopen(LOGFILE, "a")) == NULL) { | |
80 | rmlock(LOGLOCK); | |
81 | printf("can't open %s\n", LOGFILE); | |
82 | exit(0); | |
83 | } | |
84 | lsp = fopen(LOGDIR, "r"); | |
85 | ASSERT(lsp != NULL, "CAN NOT OPEN %s", LOGDIR); | |
86 | while ((gnamef(lsp, filename)) != 0) { | |
87 | DEBUG(4, "file-%s\n", filename); | |
88 | if (prefix(LOGPREFIX, filename)) { | |
89 | DEBUG(4, "copy file %s\n", filename); | |
90 | if (appendf(plogf, filename) == SUCCESS) { | |
91 | unlink(filename); | |
92 | } | |
93 | } | |
94 | } | |
95 | fclose(lsp); | |
96 | fclose(plogf); | |
97 | chmod(LOGFILE, 0666); | |
98 | rmlock(NULL); | |
99 | if (user == NULL && system == NULL) | |
100 | exit(0); | |
101 | if (Stop) | |
102 | exit(0); | |
103 | signal(SIGHUP, onintr); | |
104 | signal(SIGINT, onintr); | |
105 | signal(SIGQUIT, onintr); | |
106 | ||
107 | plogf = fopen(LOGFILE, "r"); | |
108 | ASSERT(plogf != NULL, "CAN NOT OPEN %s", LOGFILE); | |
109 | while (fgets(buf, BUFSIZ, plogf) != NULL) { | |
110 | sscanf(buf, "%s%s", u, s); | |
111 | DEBUG(4, "u s %s ", u); | |
112 | DEBUG(4, "%s ", s); | |
113 | DEBUG(4, "%s", buf); | |
114 | if (user != NULL && !prefix(user, u)) | |
115 | continue; | |
116 | if (system != NULL && !prefix(system, s)) | |
117 | continue; | |
118 | fputs(buf, stdout); | |
119 | } | |
120 | exit(0); | |
121 | } | |
122 | ||
123 | ||
124 | ||
125 | ||
126 | /*** | |
127 | * onintr() | |
128 | * | |
129 | * onintr - interrupt routine | |
130 | * remove lock file | |
131 | * | |
132 | */ | |
133 | ||
134 | onintr() | |
135 | { | |
136 | rmlock(NULL); | |
137 | exit(0); | |
138 | } | |
139 | ||
140 | ||
141 | intr1() | |
142 | { | |
143 | signal(SIGINT, intr1); | |
144 | signal(SIGHUP, intr1); | |
145 | signal(SIGQUIT, intr1); | |
146 | Stop = 1; | |
147 | return; | |
148 | } | |
149 | ||
150 | cleanup(code) | |
151 | int code; | |
152 | { | |
153 | exit(code); | |
154 | } | |
155 | ||
156 | ||
157 | /******* | |
158 | * appendf(fp, entryf) append file (entryf) to fp file | |
159 | * FILE *fp; | |
160 | * char *entryf; | |
161 | * | |
162 | * return codes: | |
163 | SUCCESS - ok | |
164 | * FAIL - file not readable | |
165 | */ | |
166 | ||
167 | appendf(fp, entryf) | |
168 | FILE *fp; | |
169 | char *entryf; | |
170 | { | |
171 | FILE *pentryf; | |
172 | char ltext[513]; | |
173 | ||
174 | if ((pentryf = fopen(entryf, "r")) == NULL) { | |
175 | /* file entryf not readable */ | |
176 | return(FAIL); | |
177 | } | |
178 | while (fgets(ltext, 512, pentryf)) fputs(ltext, fp); | |
179 | fclose(pentryf); | |
180 | return(SUCCESS); | |
181 | } |