#include "os.h" #include "s_defines.h" #include "match_ext.h" #ifdef RUSNET_IRCD #define BUFLEN 255 #define CFG_COMMENT '#' #define CFG_CMD_END ';' unsigned char logging_enabled = 0; unsigned char logfile_name[BUFLEN + 1]; char config_prefix[BUFLEN + 1]; unsigned char* servicesname = NULL; void update_matchtables() { int i; for (i=0xc0; i<=0xdf; i++) { touppertab[i] = i+0x20; tolowertab[i+0x20] = i; char_atribs[i] = char_atribs[i+0x20] = PRINT|ALPHA; } touppertab[0xa3] = 0xb3; tolowertab[0xb3] = 0xa3; char_atribs[0xa3] = char_atribs[0xb3] = PRINT|ALPHA; } void initialize_rusnet(char *path) { /* extern unsigned long rusnet_vaddr; */ extern struct rusnet_route *hdr_rusnet_route; FILE *finit; char s[BUFLEN + 1]; int i,j,k,l; char *parm[16], *p, *r; char *ptr; char *codepage_name, *intable, *outtable, *portnum; hdr_rusnet_route = NULL; update_matchtables(); finit = fopen(path, "rt"); if (finit == NULL) return; s[BUFLEN] = '\0'; /* terminate buffer string for occasion */ while (fgets(s,BUFLEN,finit) != NULL) { r = s; /* пропуск пробелов в начале */ while ( isspace(*r) ) { r++; } if (*r == '#') continue; /* коментарий - на новую строку */ while ( (p = strchr(r, CFG_CMD_END)) != NULL) { *p++ = '\0'; /* terminate the token */ } for (i = 0, ptr = strtok(r, " \t\n\r"); ptr != NULL && *ptr != CFG_COMMENT && i < 16; ptr = strtok(NULL, " \t\n\r")) { parm[i++] = ptr; /* split parameters */ } if (i == 0) continue; /* Umka: handle empty command */ #if 0 if (ptr != NULL && i < 16 && *ptr == CFG_COMMENT) continue; #endif while (i < 16) parm[i++] = NULL; /* finalize parameters */ /* * Configure rusnet extensions */ if (strcasecmp(parm[0], "logfile") == 0) { logging_enabled = 1; strcpy(logfile_name, parm[1]); } else if (strcasecmp(parm[0], "prefix") == 0) { strcpy(config_prefix, parm[1]); } else if (strcasecmp(parm[0], "codepage") == 0) { codepage_name = parm[1]; for (j = 0; codepage_name[j] != '\0'; j++) codepage_name[j] = toupper(codepage_name[j]); intable = outtable = portnum = NULL; for (j = 2; parm[j] != NULL; j++) { if (strcasecmp(parm[j], "incoming") == 0) intable = parm[++j]; else if (strcasecmp(parm[j], "outgoing") == 0) outtable = parm[++j]; else if (strcasecmp(parm[j], "port") == 0) portnum = parm[++j]; } if (portnum != NULL) rusnet_codepage_register(portnum, codepage_name, intable, outtable); } else /* if (strcasecmp(parm[0],"interface") == 0) { rusnet_vaddr = inet_addr(parm[1]); } else if (strcasecmp(parm[0],"connect") == 0) { if (strcasecmp(parm[2],"thru") == 0) { rusnet_add_route(parm[1],parm[3],(parm[4] == NULL) ? "[Unnamed]" : parm[4]); } } else if( strcasecmp(parm[0],"forbid" ) == 0 ) { if( parm[1][0] == 0 ) continue; rusnet_add_forbid_mask(parm[1]); } else if( strcasecmp(parm[0],"services" ) == 0 ) { if( parm[1][0] == 0 ) continue; if( servicesname != NULL ) MyFree( servicesname ); servicesname = (char *) mystrdup( parm[1] ); } */ r = p; /* prepare for next clause */ /* while (isspace(*r)) r++; if (*r == '#') break; */ } fclose(finit); } void uninitialize_rusnet(void) { rusnet_codepage_free(); } #endif