|
|
1.1 root 1: #line 2 "WRCNF1.C"
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: #include "scfg.h"
6:
7: extern int no_msghdr,all_msghdr;
8: extern int no_dirchk;
9:
10: char *crlf="\r\n";
11: char nulbuf[256]={0};
12: int pslen;
13:
14: #define put_int(var,stream) fwrite(&var,1,sizeof(var),stream)
15: #define put_str(var,stream) { pslen=strlen(var); \
16: fwrite(var,1,pslen > sizeof(var) \
17: ? sizeof(var) : pslen ,stream); \
18: fwrite(nulbuf,1,pslen > sizeof(var) \
19: ? 0 : sizeof(var)-pslen,stream); }
20:
21: void write_node_cfg()
22: {
23: char str[128],cmd[64],c;
24: int i,file;
25: short n;
26: FILE *stream;
27:
28: memset(cmd,0,64);
29:
30: upop("Writing NODE.CNF...");
31: sprintf(str,"%sNODE.CNF",node_path[node_num-1]);
32: backup(str);
33:
34: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
35: || (stream=fdopen(file,"wb"))==NULL) {
36: errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
37: return; }
38: setvbuf(stream,NULL,_IOFBF,2048);
39:
40: put_int(node_num,stream);
41: put_str(node_name,stream);
42: put_str(node_phone,stream);
43: put_str(node_comspec,stream); /* Was node_logon */
44: put_int(node_misc,stream);
45: put_int(node_ivt,stream);
46: put_int(node_swap,stream);
47: if(node_swapdir[0]) {
48: backslash(node_swapdir);
49: md(node_swapdir); } /* make sure it's a valid directory */
50: put_str(node_swapdir,stream);
51: put_int(node_valuser,stream);
52: put_int(node_minbps,stream);
53: put_str(node_ar,stream);
54: put_int(node_dollars_per_call,stream);
55: put_str(node_editor,stream);
56: put_str(node_viewer,stream);
57: put_str(node_daily,stream);
58: put_int(node_scrnlen,stream);
59: put_int(node_scrnblank,stream);
60: backslash(ctrl_dir);
61: put_str(ctrl_dir,stream);
62: backslash(text_dir);
63: put_str(text_dir,stream);
64: backslash(temp_dir);
65: put_str(temp_dir,stream);
66: for(i=0;i<10;i++)
67: put_str(wfc_cmd[i],stream);
68: for(i=0;i<12;i++)
69: put_str(wfc_scmd[i],stream);
70: put_str(mdm_hang,stream);
71: put_int(node_sem_check,stream);
72: put_int(node_stat_check,stream);
73: put_str(scfg_cmd,stream);
74: put_int(sec_warn,stream);
75: put_int(sec_hangup,stream);
76: n=0;
77: for(i=0;i<188;i++) /* unused init to NULL */
78: fwrite(&n,1,2,stream);
79: n=0xffff; /* unused init to 0xff */
80: for(i=0;i<256;i++)
81: fwrite(&n,1,2,stream);
82: put_int(com_port,stream);
83: put_int(com_irq,stream);
84: put_int(com_base,stream);
85: put_int(com_rate,stream);
86: put_int(mdm_misc,stream);
87: put_str(mdm_init,stream);
88: put_str(mdm_spec,stream);
89: put_str(mdm_term,stream);
90: put_str(mdm_dial,stream);
91: put_str(mdm_offh,stream);
92: put_str(mdm_answ,stream);
93: put_int(mdm_reinit,stream);
94: put_int(mdm_ansdelay,stream);
95: put_int(mdm_rings,stream);
96: put_int(mdm_results,stream);
97: for(i=0;i<mdm_results;i++) {
98: put_int(mdm_result[i].code,stream);
99: put_int(mdm_result[i].rate,stream);
100: put_int(mdm_result[i].cps,stream);
101: put_str(mdm_result[i].str,stream); }
102: fclose(stream);
103: }
104:
105: void free_node_cfg()
106: {
107:
108: FREE(mdm_result);
109: }
110:
111: void write_main_cfg()
112: {
113: char str[128],c=0;
114: int file;
115: short i,j,n;
116: FILE *stream;
117:
118: upop("Writing MAIN.CNF...");
119: sprintf(str,"%sMAIN.CNF",ctrl_dir);
120: backup(str);
121:
122: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
123: || (stream=fdopen(file,"wb"))==NULL) {
124: errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
125: return; }
126: setvbuf(stream,NULL,_IOFBF,2048);
127:
128: put_str(sys_name,stream);
129: put_str(sys_id,stream);
130: put_str(sys_location,stream);
131: put_str(sys_phonefmt,stream);
132: put_str(sys_op,stream);
133: put_str(sys_guru,stream);
134: put_str(sys_pass,stream);
135: put_int(sys_nodes,stream);
136: for(i=0;i<sys_nodes;i++) {
137: backslash(node_path[i]);
138: fwrite(node_path[i],LEN_DIR+1,1,stream); }
139: backslash(data_dir);
140: put_str(data_dir,stream);
141:
142: /************************************************************/
143: /* Create data and sub-dirs off data if not already created */
144: /************************************************************/
145: strcpy(str,data_dir);
146: md(str);
147: sprintf(str,"%sSUBS",data_dir);
148: md(str);
149: sprintf(str,"%sDIRS",data_dir);
150: md(str);
151: sprintf(str,"%sTEXT",data_dir);
152: md(str);
153: sprintf(str,"%sMSGS",data_dir);
154: md(str);
155: sprintf(str,"%sUSER",data_dir);
156: md(str);
157: sprintf(str,"%sUSER\\PTRS",data_dir);
158: md(str);
159: sprintf(str,"%sLOGS",data_dir);
160: md(str);
161: sprintf(str,"%sQNET",data_dir);
162: md(str);
163: sprintf(str,"%sFILE",data_dir);
164: md(str);
165:
166: backslash(exec_dir);
167: put_str(exec_dir,stream);
168: put_str(sys_logon,stream);
169: put_str(sys_logout,stream);
170: put_str(sys_daily,stream);
171: put_int(sys_timezone,stream);
172: put_int(sys_misc,stream);
173: put_int(sys_lastnode,stream);
174: put_int(sys_autonode,stream);
175: put_int(uq,stream);
176: put_int(sys_pwdays,stream);
177: put_int(sys_deldays,stream);
178: put_int(sys_exp_warn,stream);
179: put_int(sys_autodel,stream);
180: put_int(sys_def_stat,stream);
181: put_str(sys_chat_ar,stream);
182: put_int(cdt_min_value,stream);
183: put_int(max_minutes,stream);
184: put_int(cdt_per_dollar,stream);
185: put_str(new_pass,stream);
186: put_str(new_magic,stream);
187: put_str(new_sif,stream);
188: put_str(new_sof,stream);
189:
190: put_int(new_level,stream);
191: put_int(new_flags1,stream);
192: put_int(new_flags2,stream);
193: put_int(new_flags3,stream);
194: put_int(new_flags4,stream);
195: put_int(new_exempt,stream);
196: put_int(new_rest,stream);
197: put_int(new_cdt,stream);
198: put_int(new_min,stream);
199: put_str(new_xedit,stream);
200: put_int(new_expire,stream);
201: if(new_shell>total_shells)
202: new_shell=0;
203: put_int(new_shell,stream);
204: put_int(new_misc,stream);
205: put_int(new_prot,stream);
206: c=0;
207: put_int(c,stream);
208: n=0;
209: for(i=0;i<7;i++)
210: put_int(n,stream);
211:
212: put_int(expired_level,stream);
213: put_int(expired_flags1,stream);
214: put_int(expired_flags2,stream);
215: put_int(expired_flags3,stream);
216: put_int(expired_flags4,stream);
217: put_int(expired_exempt,stream);
218: put_int(expired_rest,stream);
219:
220: put_str(logon_mod,stream);
221: put_str(logoff_mod,stream);
222: put_str(newuser_mod,stream);
223: put_str(login_mod,stream);
224: put_str(logout_mod,stream);
225: put_str(sync_mod,stream);
226: put_str(expire_mod,stream);
227: put_int(c,stream);
228: n=0;
229: for(i=0;i<224;i++)
230: put_int(n,stream);
231: n=0xffff;
232: for(i=0;i<256;i++)
233: put_int(n,stream);
234:
235: n=0;
236: for(i=0;i<10;i++) {
237: put_int(val_level[i],stream);
238: put_int(val_expire[i],stream);
239: put_int(val_flags1[i],stream);
240: put_int(val_flags2[i],stream);
241: put_int(val_flags3[i],stream);
242: put_int(val_flags4[i],stream);
243: put_int(val_cdt[i],stream);
244: put_int(val_exempt[i],stream);
245: put_int(val_rest[i],stream);
246: for(j=0;j<8;j++)
247: put_int(n,stream); }
248:
249: c=0;
250: for(i=0;i<100 && !feof(stream);i++) {
251: put_int(level_timeperday[i],stream);
252: put_int(level_timepercall[i],stream);
253: put_int(level_callsperday[i],stream);
254: put_int(level_freecdtperday[i],stream);
255: put_int(level_linespermsg[i],stream);
256: put_int(level_postsperday[i],stream);
257: put_int(level_emailperday[i],stream);
258: put_int(level_misc[i],stream);
259: put_int(level_expireto[i],stream);
260: put_int(c,stream);
261: for(j=0;j<5;j++)
262: put_int(n,stream); }
263:
264: /* Command Shells */
265:
266: put_int(total_shells,stream);
267: for(i=0;i<total_shells;i++) {
268: put_str(shell[i]->name,stream);
269: put_str(shell[i]->code,stream);
270: put_str(shell[i]->ar,stream);
271: put_int(shell[i]->misc,stream);
272: n=0;
273: for(j=0;j<8;j++)
274: put_int(n,stream); }
275:
276: fclose(stream);
277: }
278:
279: void free_main_cfg()
280: {
281: int i;
282:
283: for(i=0;i<sys_nodes;i++)
284: FREE(node_path[i]);
285: FREE(node_path);
286: for(i=0;i<total_shells;i++)
287: FREE(shell[i]);
288: FREE(shell);
289: }
290:
291: void write_msgs_cfg()
292: {
293: char str[128],c;
294: int i,j,k,file,x;
295: short n;
296: long l;
297: FILE *stream;
298: smb_t smb;
299:
300: upop("Writing MSGS.CNF...");
301: sprintf(str,"%sMSGS.CNF",ctrl_dir);
302: backup(str);
303:
304: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
305: || (stream=fdopen(file,"wb"))==NULL) {
306: errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
307: return; }
308: setvbuf(stream,NULL,_IOFBF,2048);
309:
310: put_int(max_qwkmsgs,stream);
311: put_int(mail_maxcrcs,stream);
312: put_int(mail_maxage,stream);
313: put_str(preqwk_ar,stream);
314: put_int(smb_retry_time,stream);
315: n=0;
316: for(i=0;i<235;i++)
317: put_int(n,stream);
318: n=0xffff;
319: for(i=0;i<256;i++)
320: put_int(n,stream);
321:
322: /* Message Groups */
323:
324: put_int(total_grps,stream);
325: for(i=0;i<total_grps;i++) {
326: put_str(grp[i]->lname,stream);
327: put_str(grp[i]->sname,stream);
328: put_str(grp[i]->ar,stream);
329: n=0;
330: for(j=0;j<32;j++)
331: put_int(n,stream);
332: n=0xffff;
333: for(j=0;j<16;j++)
334: put_int(n,stream); }
335:
336: /* Message Sub-boards */
337:
338: backslash(echomail_dir);
339:
340: str[0]=0;
341: for(i=n=0;i<total_subs;i++)
342: if(sub[i]->grp<total_grps) /* total VALID sub-boards */
343: n++;
344: put_int(n,stream);
345: for(i=0;i<total_subs;i++) {
346: if(sub[i]->grp>=total_grps) /* skip bogus group numbers */
347: continue;
348: put_int(sub[i]->grp,stream);
349: put_str(sub[i]->lname,stream);
350: put_str(sub[i]->sname,stream);
351: put_str(sub[i]->qwkname,stream);
352: put_str(sub[i]->code,stream);
353: if(sub[i]->data_dir[0])
354: backslash(sub[i]->data_dir);
355: put_str(sub[i]->data_dir,stream);
356: md(sub[i]->data_dir);
357: put_str(sub[i]->ar,stream);
358: put_str(sub[i]->read_ar,stream);
359: put_str(sub[i]->post_ar,stream);
360: put_str(sub[i]->op_ar,stream);
361: l=(sub[i]->misc&(~SUB_HDRMOD)); /* Don't write mod bit */
362: put_int(l,stream);
363: put_str(sub[i]->tagline,stream);
364: put_str(sub[i]->origline,stream);
365: put_str(sub[i]->echomail_sem,stream);
366: if(sub[i]->echopath)
367: backslash(sub[i]->echopath);
368: put_str(sub[i]->echopath,stream);
369: if(sub[i]->misc&SUB_FIDO && (echomail_dir[0] || sub[i]->echopath[0])) {
370: md(echomail_dir);
371: if(!sub[i]->echopath[0])
372: sprintf(sub[i]->echopath,"%s%s",echomail_dir,sub[i]->code);
373: md(sub[i]->echopath); }
374: put_int(sub[i]->faddr,stream);
375: put_int(sub[i]->maxmsgs,stream);
376: put_int(sub[i]->maxcrcs,stream);
377: put_int(sub[i]->maxage,stream);
378: put_int(sub[i]->ptridx,stream);
379: put_str(sub[i]->mod_ar,stream);
380: put_int(sub[i]->qwkconf,stream);
381: c=0;
382: put_int(c,stream);
383: n=0;
384: for(k=0;k<26;k++)
385: put_int(n,stream);
386:
387: if(all_msghdr || (sub[i]->misc&SUB_HDRMOD && !no_msghdr)) {
388: if(!sub[i]->data_dir[0])
389: sprintf(smb.file,"%sSUBS\\%s",data_dir,sub[i]->code);
390: else
391: sprintf(smb.file,"%s%s",sub[i]->data_dir,sub[i]->code);
392: if((x=smb_open(&smb))!=0) {
393: errormsg(WHERE,ERR_OPEN,smb.file,x);
394: continue; }
395: if(!filelength(fileno(smb.shd_fp))) {
396: smb.status.max_crcs=sub[i]->maxcrcs;
397: smb.status.max_msgs=sub[i]->maxmsgs;
398: smb.status.max_age=sub[i]->maxage;
399: smb.status.attr=sub[i]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
400: if((x=smb_create(&smb))!=0)
401: errormsg(WHERE,ERR_CREATE,smb.file,x);
402: smb_close(&smb);
403: continue; }
404: if((x=smb_locksmbhdr(&smb))!=0) {
405: smb_close(&smb);
406: errormsg(WHERE,ERR_LOCK,smb.file,x);
407: continue; }
408: if((x=smb_getstatus(&smb))!=0) {
409: smb_close(&smb);
410: errormsg(WHERE,ERR_READ,smb.file,x);
411: continue; }
412: if((!(sub[i]->misc&SUB_HYPER) || smb.status.attr&SMB_HYPERALLOC)
413: && smb.status.max_msgs==sub[i]->maxmsgs
414: && smb.status.max_crcs==sub[i]->maxcrcs
415: && smb.status.max_age==sub[i]->maxage) { /* No change */
416: smb_close(&smb);
417: continue; }
418: smb.status.max_msgs=sub[i]->maxmsgs;
419: smb.status.max_crcs=sub[i]->maxcrcs;
420: smb.status.max_age=sub[i]->maxage;
421: if(sub[i]->misc&SUB_HYPER)
422: smb.status.attr|=SMB_HYPERALLOC;
423: if((x=smb_putstatus(&smb))!=0) {
424: smb_close(&smb);
425: errormsg(WHERE,ERR_WRITE,smb.file,x);
426: continue; }
427: smb_close(&smb); }
428:
429: }
430:
431: /* FidoNet */
432:
433: put_int(total_faddrs,stream);
434: for(i=0;i<total_faddrs;i++) {
435: put_int(faddr[i].zone,stream);
436: put_int(faddr[i].net,stream);
437: put_int(faddr[i].node,stream);
438: put_int(faddr[i].point,stream); }
439:
440: put_str(origline,stream);
441: put_str(netmail_sem,stream);
442: put_str(echomail_sem,stream);
443: backslash(netmail_dir);
444: put_str(netmail_dir,stream);
445: put_str(echomail_dir,stream);
446: backslash(fidofile_dir);
447: put_str(fidofile_dir,stream);
448: put_int(netmail_misc,stream);
449: put_int(netmail_cost,stream);
450: put_int(dflt_faddr,stream);
451: n=0;
452: for(i=0;i<28;i++)
453: put_int(n,stream);
454:
455: /* QWKnet Config */
456:
457: put_str(qnet_tagline,stream);
458:
459: put_int(total_qhubs,stream);
460: for(i=0;i<total_qhubs;i++) {
461: put_str(qhub[i]->id,stream);
462: put_int(qhub[i]->time,stream);
463: put_int(qhub[i]->freq,stream);
464: put_int(qhub[i]->days,stream);
465: put_int(qhub[i]->node,stream);
466: put_str(qhub[i]->call,stream);
467: put_str(qhub[i]->pack,stream);
468: put_str(qhub[i]->unpack,stream);
469: put_int(qhub[i]->subs,stream);
470: for(j=0;j<qhub[i]->subs;j++) {
471: put_int(qhub[i]->conf[j],stream);
472: put_int(qhub[i]->sub[j],stream);
473: put_int(qhub[i]->mode[j],stream); }
474: n=0;
475: for(j=0;j<32;j++)
476: put_int(n,stream); }
477: n=0;
478: for(i=0;i<32;i++)
479: put_int(n,stream);
480:
481: /* PostLink Config */
482:
483: memset(str,0,11);
484: fwrite(str,11,1,stream); /* unused, used to be site name */
485: put_int(sys_psnum,stream);
486:
487: put_int(total_phubs,stream);
488: for(i=0;i<total_phubs;i++) {
489: put_str(phub[i]->name,stream);
490: put_int(phub[i]->time,stream);
491: put_int(phub[i]->freq,stream);
492: put_int(phub[i]->days,stream);
493: put_int(phub[i]->node,stream);
494: put_str(phub[i]->call,stream);
495: n=0;
496: for(j=0;j<32;j++)
497: put_int(n,stream); }
498:
499: put_str(sys_psname,stream);
500: n=0;
501: for(i=0;i<32;i++)
502: put_int(n,stream);
503:
504: put_str(sys_inetaddr,stream); /* Internet address */
505: put_str(inetmail_sem,stream);
506: put_int(inetmail_misc,stream);
507: put_int(inetmail_cost,stream);
508:
509: fclose(stream);
510:
511: /* MUST BE AT END */
512:
513: if(!no_msghdr) {
514: backslash(data_dir);
515: sprintf(smb.file,"%sMAIL",data_dir);
516: if((x=smb_open(&smb))!=0) {
517: errormsg(WHERE,ERR_OPEN,smb.file,x);
518: return; }
519: if(!filelength(fileno(smb.shd_fp))) {
520: smb.status.max_crcs=mail_maxcrcs;
521: smb.status.max_msgs=MAX_SYSMAIL;
522: smb.status.max_age=mail_maxage;
523: smb.status.attr=SMB_EMAIL;
524: if((x=smb_create(&smb))!=0)
525: errormsg(WHERE,ERR_CREATE,smb.file,x);
526: smb_close(&smb);
527: return; }
528: if((x=smb_locksmbhdr(&smb))!=0) {
529: smb_close(&smb);
530: errormsg(WHERE,ERR_LOCK,smb.file,x);
531: return; }
532: if((x=smb_getstatus(&smb))!=0) {
533: smb_close(&smb);
534: errormsg(WHERE,ERR_READ,smb.file,x);
535: return; }
536: smb.status.max_msgs=MAX_SYSMAIL;
537: smb.status.max_crcs=mail_maxcrcs;
538: smb.status.max_age=mail_maxage;
539: if((x=smb_putstatus(&smb))!=0) {
540: smb_close(&smb);
541: errormsg(WHERE,ERR_WRITE,smb.file,x);
542: return; }
543: smb_close(&smb); }
544: }
545:
546: void free_msgs_cfg()
547: {
548: int i;
549:
550: for(i=0;i<total_grps;i++)
551: FREE(grp[i]);
552: FREE(grp);
553: grp=NULL;
554:
555: for(i=0;i<total_subs;i++)
556: FREE(sub[i]);
557: FREE(sub);
558: sub=NULL;
559:
560: FREE(faddr);
561: total_faddrs=0;
562:
563: for(i=0;i<total_qhubs;i++) {
564: FREE(qhub[i]->mode);
565: FREE(qhub[i]->conf);
566: FREE(qhub[i]->sub);
567: FREE(qhub[i]); }
568: FREE(qhub);
569: qhub=NULL;
570:
571: for(i=0;i<total_phubs;i++)
572: FREE(phub[i]);
573: FREE(phub);
574: phub=NULL;
575:
576: }
577:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.