|
|
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.