- close(conf_fd);
-#if 0
- while (fbgets(line, sizeof(line) - 1, file)) {
- if ('#' == *line || IsSpace(*line))
- continue;
-
- if ((src = strchr(line, '\n')))
- *src = '\0';
-
- if (':' != line[1]) {
- Debug((DEBUG_ERROR, "Bad config line: %s", line));
- sendto_opmask_butone(0, SNO_OLDSNO,"Bad Config line");
- continue;
- }
-
- /*
- * do escapes, quoting, comments, and field breakup in place
- * in one pass with a poor mans state machine
- */
- field_vector[0] = line;
- field_count = 1;
- quoted = 0;
-
- for (src = line, dest = line; *src; ) {
- switch (*src) {
- case '\\':
- ++src;
- switch (*src) {
- case 'b':
- *dest++ = '\b';
- ++src;
- break;
- case 'f':
- *dest++ = '\f';
- ++src;
- break;
- case 'n':
- *dest++ = '\n';
- ++src;
- break;
- case 'r':
- *dest++ = '\r';
- ++src;
- break;
- case 't':
- *dest++ = '\t';
- ++src;
- break;
- case 'v':
- *dest++ = '\v';
- ++src;
- break;
- case '\\':
- *dest++ = '\\';
- ++src;
- break;
- case '\0':
- break;
- default:
- *dest++ = *src++;
- break;
- }
- break;
- case '"':
- if (quoted)
- quoted = 0;
- else
- quoted = 1;
- /*
- * strip quotes
- */
- ++src;
- break;
- case ':':
- if (quoted)
- *dest++ = *src++;
- else {
- *dest++ = '\0';
- field_vector[field_count++] = dest;
- if (field_count > MAX_FIELDS)
- *src = '\0';
- else
- ++src;
- }
- break;
- case '#':
- *src = '\0';
- break;
- default:
- *dest++ = *src++;
- break;
- }
- }
- *dest = '\0';
-
- if (field_count < 2 || EmptyString(field_vector[0]))
- continue;
-
- if (aconf)
- free_conf(aconf);
-
- aconf = make_conf();
-
- switch (*field_vector[0]) {
- case 'A': /* Name, e-mail address of administrator */
- case 'a': /* of this server. CONF_ADMIN */
- conf_add_admin(field_vector, field_count);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'C': /* Server where I should try to connect */
- case 'c': /* in case of lp failures */
- ++ccount;
- aconf->status = CONF_SERVER;
- break;
- /* Connect rule */
- case 'D': /* CONF_CRULEALL */
- conf_add_crule(field_vector, field_count, CRULE_ALL);
- aconf->status = CONF_ILLEGAL;
- break;
- /* Connect rule - autos only */
- case 'd': /* CONF_CRULEAUTO */
- conf_add_crule(field_vector, field_count, CRULE_AUTO);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'F': /* Feature line */
- case 'f':
- feature_set(0, &field_vector[1], field_count - 1);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'H': /* Hub server line */
- case 'h':
- aconf->status = CONF_HUB;
- break;
- case 'I': /* Just plain normal irc client trying */
- case 'i': /* to connect me */
- aconf->status = CONF_CLIENT;
- break;
- case 'K': /* Kill user line on irc.conf */
- conf_add_deny(field_vector, field_count, 0);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'k': /* Kill user line based on IP in ircd.conf */
- conf_add_deny(field_vector, field_count, 1);
- aconf->status = CONF_ILLEGAL;
- break;
- /* Operator. Line should contain at least */
- /* password and host where connection is */
- case 'L': /* guaranteed leaf server */
- case 'l':
- aconf->status = CONF_LEAF;
- break;
- /* Me. Host field is name used for this host */
- /* and port number is the number of the port */
- case 'M':
- case 'm': /* CONF_ME */
- conf_add_local(field_vector, field_count);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'O':
- aconf->status = CONF_OPERATOR;
- break;
- /* Local Operator, (limited privs --SRB) */
- case 'o':
- aconf->status = CONF_LOCOP;
- break;
- case 'P': /* listen port line */
- case 'p': /* CONF_LISTEN_PORT */
- conf_add_listener(field_vector, field_count);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'T': /* print out different motd's */
- case 't': /* based on hostmask - CONF_TLINES */
- motd_add(field_vector[1], field_vector[2]);
- aconf->status = CONF_ILLEGAL;
- break;
- case 'U': /* Underworld server, allowed to hack modes */
- case 'u': /* *Every* server on the net must define the same !!! */
- aconf->status = CONF_UWORLD;
- break;
- case 'Y':
- case 'y': /* CONF_CLASS */
- conf_add_class(field_vector, field_count);
- aconf->status = CONF_ILLEGAL;
- break;
- default:
- Debug((DEBUG_ERROR, "Error in config file: %s", line));
- sendto_opmask_butone(0, SNO_OLDSNO, "Unknown prefix in config file: %c",
- *field_vector[0]);
- aconf->status = CONF_ILLEGAL;
- break;
- }
- if (IsIllegal(aconf))
- continue;
-
- if (!EmptyString(field_vector[1]))
- DupString(aconf->host, field_vector[1]);
-
- if (!EmptyString(field_vector[2]))
- DupString(aconf->passwd, field_vector[2]);
-
- if (field_count > 3 && !EmptyString(field_vector[3]))
- DupString(aconf->name, field_vector[3]);
-
- if (field_count > 4 && !EmptyString(field_vector[4]))
- aconf->port = atoi(field_vector[4]);
-
- if (field_count > 5 && !EmptyString(field_vector[5]))
- aconf->conn_class = find_class(atoi(field_vector[5]));
-
- /*
- * Associate each conf line with a class by using a pointer
- * to the correct class record. -avalon
- */
- if (aconf->status & CONF_CLIENT_MASK) {
- if (aconf->conn_class == 0)
- aconf->conn_class = find_class(0);
- }
- if (aconf->status & CONF_CLIENT) {
- struct ConfItem *bconf;
-
- if ((bconf = find_conf_entry(aconf, aconf->status))) {
- delist_conf(bconf);
- bconf->status &= ~CONF_ILLEGAL;
- if (aconf->status == CONF_CLIENT) {
- /*
- * copy the password field in case it changed
- */
- MyFree(bconf->passwd);
- bconf->passwd = aconf->passwd;
- aconf->passwd = 0;
-
- ConfLinks(bconf) -= bconf->clients;
- bconf->conn_class = aconf->conn_class;
- if (bconf->conn_class)
- ConfLinks(bconf) += bconf->clients;
- }
- free_conf(aconf);
- aconf = bconf;
- }
- }
- if (aconf->status & CONF_SERVER) {
- if (ccount > MAXCONFLINKS || !aconf->host || strchr(aconf->host, '*') ||
- strchr(aconf->host, '?') || !aconf->name)
- continue;
- }
- if (aconf->status & (CONF_LOCOP | CONF_OPERATOR)) {
- if (!strchr(aconf->host, '@')) {
- char* newhost;
- int len = 3; /* *@\0 = 3 */
-
- len += strlen(aconf->host);
- newhost = (char*) MyMalloc(len);
- assert(0 != newhost);
- ircd_snprintf(0, newhost, len, "*@%s", aconf->host);
- MyFree(aconf->host);
- aconf->host = newhost;
- }
- }
- if (aconf->status & CONF_SERVER) {
- if (EmptyString(aconf->passwd))
- continue;
- lookup_confhost(aconf);
- }
- /*
- * Juped nicks are listed in the 'password' field of U:lines,
- * the list is comma separated and might be empty and/or contain
- * empty elements... the only limit is that it MUST be shorter
- * than 512 chars, or they will be cutted out :)
- */
- if ((aconf->status == CONF_UWORLD) && (aconf->passwd) && (*aconf->passwd))
- addNickJupes(aconf->passwd);
-
- collapse(aconf->host);
- collapse(aconf->name);
- Debug((DEBUG_NOTICE,
- "Read Init: (%d) (%s) (%s) (%s) (%u) (%p)",
- aconf->status, aconf->host, aconf->passwd,
- aconf->name, aconf->port, aconf->conn_class));
- aconf->next = GlobalConfList;
- GlobalConfList = aconf;
- aconf = NULL;
- }
- if (aconf)
- free_conf(aconf);
- fbclose(file);
-/* nextping = nextconnect = CurrentTime; */
-#endif