static int load_config(int which) { char SubSection[32]; sprintf(SubSection, ":dynamic_%d", which); gen_source = cfg_get_list("list.generic", SubSection); if (!gen_source) { sprintf(SubSection, ":md5_gen(%d)", which); gen_source = cfg_get_list("list.generic", SubSection); } return !!gen_source; }
void ext_init(char *mode, struct db_main *db) { if (db!= NULL && db->format != NULL) { ext_cipher_limit = maxlen = db->format->params.plaintext_length; return; } else { ext_cipher_limit = options.length; } if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Unknown external mode: %s\n", mode); error(); } if (c_compile(ext_getchar, ext_rewind, &ext_globals)) { if (!ext_line) ext_line = ext_source->tail; #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Compiler error in %s at line %d: %s\n", ext_line->cfg_name, ext_line->number, c_errors[c_errno]); error(); } ext_word[0] = 0; c_execute(c_lookup("init")); f_generate = c_lookup("generate"); f_filter = c_lookup("filter"); if ((ext_flags & EXT_REQ_GENERATE) && !f_generate) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "No generate() for external mode: %s\n", mode); error(); } if ((ext_flags & EXT_REQ_FILTER) && !f_filter) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "No filter() for external mode: %s\n", mode); error(); } if ((ext_flags & (EXT_USES_GENERATE | EXT_USES_FILTER)) == EXT_USES_FILTER && f_generate) #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Warning: external mode defines generate(), " "but is only used for filter()\n"); ext_mode = mode; }
char *md5_gen_LOAD_PARSER_SIGNATURE(int which) { static char Sig[256]; char SubSection[128]; struct cfg_list *gen_source; struct cfg_line *gen_line; if (which < 1000) return NULL; sprintf(SubSection, ":md5_gen(%d)", which); gen_source = cfg_get_list("list.generic", SubSection); if (!gen_source) return NULL; // Setup the 'default' format name sprintf(Sig, "md5_gen(%d) ", which); gen_line = gen_source->head; while (gen_line) { if (!strncmp(gen_line->data, "Expression=", 11)) { char SigApp[241]; strncpy(SigApp, &gen_line->data[11], 240); SigApp[240] = 0; strcat(Sig, SigApp); break; } } return Sig; }
void SetupAlpha(const char *regex_alpha) { int i; struct cfg_list *list; // first off, set 'normal' strings for each char (i.e. 'a' outputs "a") for (i = 0; i < 256; ++i) { char *cp = (char*)mem_alloc_tiny(2,1); *cp = i; cp[1] = 0; rexgen_alphabets[i] = cp; } // we have to escape these (they are regex 'special' chars), so when we SEE them in code, we output them exactly as we see them rexgen_alphabets[(unsigned char)('[')] = str_alloc_copy("(\\[)"); rexgen_alphabets[(unsigned char)(']')] = str_alloc_copy("(\\])"); rexgen_alphabets[(unsigned char)('(')] = str_alloc_copy("(\\()"); rexgen_alphabets[(unsigned char)(')')] = str_alloc_copy("(\\))"); rexgen_alphabets[(unsigned char)('{')] = str_alloc_copy("(\\{)"); rexgen_alphabets[(unsigned char)('}')] = str_alloc_copy("(\\})"); rexgen_alphabets[(unsigned char)('|')] = str_alloc_copy("(\\|)"); rexgen_alphabets[(unsigned char)('.')] = str_alloc_copy("(\\.)"); rexgen_alphabets[(unsigned char)('?')] = str_alloc_copy("(\\?)"); rexgen_alphabets[(unsigned char)('\\')] = str_alloc_copy("(\\\\)"); // Now add the replacements from john.conf file. if ((list = cfg_get_list("list.rexgen.alpha", (char*) (®ex_alpha[5])))) { struct cfg_line *x = list->head; while (x) { if (x->data && x->data[1] == '=') rexgen_alphabets[(unsigned char)(x->data[0])] = str_alloc_copy(&(x->data[2])); x = x->next; } } }
int rpp_init(struct rpp_context *ctx, char *subsection) { struct cfg_list *list; if ((list = cfg_get_list(SECTION_RULES, subsection))) if ((ctx->input = list->head)) { ctx->count = -1; return 0; } return 1; }
int md5_gen_LOAD_PARSER_FUNCTIONS(int which) { // Ok, we load the section: // [List.Generic.md5_gen(#)] where # == which char SubSection[128]; struct cfg_list *gen_source; struct cfg_line *gen_line; sprintf(SubSection, ":md5_gen(%d)", which); gen_source = cfg_get_list("list.generic", SubSection); if (!gen_source) { fprintf(stderr, "Could not find section [List.Generic%s] in the john.ini/conf file\n", SubSection); error(); } // Setup the 'default' format name Setup.szFORMAT_NAME = malloc(strlen(SubSection)); sprintf(Setup.szFORMAT_NAME, "md5_gen(%d)", which); strcpy(SetupName, Setup.szFORMAT_NAME); // allocate (and set null) 5000 file pointers Setup.pFuncs = malloc(5000*sizeof(MD5_GEN_primitive_funcp)); memset(Setup.pFuncs, 0, 5000*sizeof(MD5_GEN_primitive_funcp)); // allocate (and set null) 20 Preloads nMaxPreloadCnt = 20; Setup.pPreloads = malloc((nMaxPreloadCnt+1)*sizeof(MD5_GEN_Preloads)); memset(Setup.pPreloads, 0, (nMaxPreloadCnt+1)*sizeof(MD5_GEN_Preloads)); Setup.flags = 0; Setup.SaltLen = 0; // Ok, now 'grind' through the data I do know know how to use // the config stuff too much, so will grind for now, and later // go back over this, and do it 'right', if there is a right way gen_line = gen_source->head; while (gen_line) { if (!md5_gen_LOAD_PARSER_FUNCTIONS_LoadLINE(gen_line->data)) { fprintf(stderr, "Error parsing section [List.Generic%s] in the john.ini/conf file\n", SubSection); error(); } gen_line = gen_line->next; } md5_gen_SETUP(&Setup); return 1; }
int ext_has_function(char *mode, char *function) { if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) { fprintf(stderr, "Unknown external mode: %s\n", mode); error(); } if (c_compile(ext_getchar, ext_rewind, &ext_globals)) { if (!ext_line) ext_line = ext_source->tail; fprintf(stderr, "Compiler error in %s at line %d: %s\n", ext_line->cfg_name, ext_line->number, c_errors[c_errno]); error(); } return (c_lookup(function) != NULL); }
void ext_init(char *mode) { if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) { fprintf(stderr, "Unknown external mode: %s\n", mode); error(); } if (c_compile(ext_getchar, ext_rewind, &ext_globals)) { if (!ext_line) ext_line = ext_source->tail; fprintf(stderr, "Compiler error in %s at line %d: %s\n", cfg_name, ext_line->number, c_errors[c_errno]); error(); } ext_word[0] = 0; c_execute(c_lookup("init")); f_generate = c_lookup("generate"); f_filter = c_lookup("filter"); ext_mode = mode; }
static Cfg *init_bearerbox(Cfg *cfg) { CfgGroup *grp; Octstr *log, *val; long loglevel, store_dump_freq, value; int lf, m; #ifdef HAVE_LIBSSL Octstr *ssl_server_cert_file; Octstr *ssl_server_key_file; int ssl_enabled = 0; #endif /* HAVE_LIBSSL */ Octstr *http_proxy_host = NULL; long http_proxy_port = -1; int http_proxy_ssl = 0; List *http_proxy_exceptions = NULL; Octstr *http_proxy_username = NULL; Octstr *http_proxy_password = NULL; Octstr *http_proxy_exceptions_regex = NULL; /* defaults: use localtime and markers for access-log */ lf = m = 1; grp = cfg_get_single_group(cfg, octstr_imm("core")); log = cfg_get(grp, octstr_imm("log-file")); if (log != NULL) { if (cfg_get_integer(&loglevel, grp, octstr_imm("log-level")) == -1) loglevel = 0; log_open(octstr_get_cstr(log), loglevel, GW_NON_EXCL); octstr_destroy(log); } if ((val = cfg_get(grp, octstr_imm("syslog-level"))) != NULL) { long level; Octstr *facility; if ((facility = cfg_get(grp, octstr_imm("syslog-facility"))) != NULL) { log_set_syslog_facility(octstr_get_cstr(facility)); octstr_destroy(facility); } if (octstr_compare(val, octstr_imm("none")) == 0) { log_set_syslog(NULL, 0); } else if (octstr_parse_long(&level, val, 0, 10) > 0) { log_set_syslog("bearerbox", level); } octstr_destroy(val); } else { log_set_syslog(NULL, 0); } if (check_config(cfg) == -1) panic(0, "Cannot start with corrupted configuration"); /* determine which timezone we use for access logging */ if ((log = cfg_get(grp, octstr_imm("access-log-time"))) != NULL) { lf = (octstr_case_compare(log, octstr_imm("gmt")) == 0) ? 0 : 1; octstr_destroy(log); } /* should predefined markers be used, ie. prefixing timestamp */ cfg_get_bool(&m, grp, octstr_imm("access-log-clean")); /* custom access-log format */ if ((log = cfg_get(grp, octstr_imm("access-log-format"))) != NULL) { bb_alog_init(log); octstr_destroy(log); } /* open access-log file */ if ((log = cfg_get(grp, octstr_imm("access-log"))) != NULL) { alog_open(octstr_get_cstr(log), lf, m ? 0 : 1); octstr_destroy(log); } if (cfg_get_integer(&store_dump_freq, grp, octstr_imm("store-dump-freq")) == -1) store_dump_freq = -1; log = cfg_get(grp, octstr_imm("store-file")); /* initialize the store file */ if (log != NULL) { warning(0, "'store-file' option deprecated, please use 'store-location' and 'store-type' instead."); val = octstr_create("file"); } else { log = cfg_get(grp, octstr_imm("store-location")); val = cfg_get(grp, octstr_imm("store-type")); } if (store_init(val, log, store_dump_freq, msg_pack, msg_unpack_wrapper) == -1) panic(0, "Could not start with store init failed."); octstr_destroy(val); octstr_destroy(log); cfg_get_integer(&http_proxy_port, grp, octstr_imm("http-proxy-port")); #ifdef HAVE_LIBSSL cfg_get_bool(&http_proxy_ssl, grp, octstr_imm("http-proxy-ssl")); #endif /* HAVE_LIBSSL */ http_proxy_host = cfg_get(grp, octstr_imm("http-proxy-host")); http_proxy_username = cfg_get(grp, octstr_imm("http-proxy-username")); http_proxy_password = cfg_get(grp, octstr_imm("http-proxy-password")); http_proxy_exceptions = cfg_get_list(grp, octstr_imm("http-proxy-exceptions")); http_proxy_exceptions_regex = cfg_get(grp, octstr_imm("http-proxy-exceptions-regex")); conn_config_ssl (grp); /* * Make sure we have "ssl-server-cert-file" and "ssl-server-key-file" specified * in the core group since we need it to run SSL-enabled internal box * connections configured via "smsbox-port-ssl = yes" and "wapbox-port-ssl = yes". * Check only these, because for "admin-port-ssl" and "sendsms-port-ssl" for the * SSL-enabled HTTP servers are probed within gw/bb_http.c:httpadmin_start() */ #ifdef HAVE_LIBSSL ssl_server_cert_file = cfg_get(grp, octstr_imm("ssl-server-cert-file")); ssl_server_key_file = cfg_get(grp, octstr_imm("ssl-server-key-file")); if (ssl_server_cert_file != NULL && ssl_server_key_file != NULL) { /* we are fine, at least files are specified in the configuration */ } else { cfg_get_bool(&ssl_enabled, grp, octstr_imm("smsbox-port-ssl")); cfg_get_bool(&ssl_enabled, grp, octstr_imm("wapbox-port-ssl")); if (ssl_enabled) { panic(0, "You MUST specify cert and key files within core group for SSL-enabled inter-box connections!"); } } octstr_destroy(ssl_server_cert_file); octstr_destroy(ssl_server_key_file); #endif /* HAVE_LIBSSL */ /* if all seems to be OK by the first glimpse, real start-up */ outgoing_sms = gwlist_create(); incoming_sms = gwlist_create(); outgoing_wdp = gwlist_create(); incoming_wdp = gwlist_create(); outgoing_sms_counter = counter_create(); incoming_sms_counter = counter_create(); incoming_dlr_counter = counter_create(); outgoing_dlr_counter = counter_create(); outgoing_wdp_counter = counter_create(); incoming_wdp_counter = counter_create(); status_mutex = mutex_create(); outgoing_sms_load = load_create(); /* add 60,300,-1 entries */ load_add_interval(outgoing_sms_load, 60); load_add_interval(outgoing_sms_load, 300); load_add_interval(outgoing_sms_load, -1); incoming_sms_load = load_create(); /* add 60,300,-1 entries */ load_add_interval(incoming_sms_load, 60); load_add_interval(incoming_sms_load, 300); load_add_interval(incoming_sms_load, -1); incoming_dlr_load = load_create(); /* add 60,300,-1 entries to dlr */ load_add_interval(incoming_dlr_load, 60); load_add_interval(incoming_dlr_load, 300); load_add_interval(incoming_dlr_load, -1); outgoing_dlr_load = load_create(); /* add 60,300,-1 entries to dlr */ load_add_interval(outgoing_dlr_load, 60); load_add_interval(outgoing_dlr_load, 300); load_add_interval(outgoing_dlr_load, -1); setup_signal_handlers(); /* http-admin is REQUIRED */ httpadmin_start(cfg); if (cfg_get_integer(&max_incoming_sms_qlength, grp, octstr_imm("maximum-queue-length")) == -1) max_incoming_sms_qlength = -1; else { warning(0, "Option 'maximum-queue-length' is deprecated! Please use" " 'sms-incoming-queue-limit' instead!"); } if (max_incoming_sms_qlength == -1 && cfg_get_integer(&max_incoming_sms_qlength, grp, octstr_imm("sms-incoming-queue-limit")) == -1) max_incoming_sms_qlength = -1; if (cfg_get_integer(&max_outgoing_sms_qlength, grp, octstr_imm("sms-outgoing-queue-limit")) == -1) max_outgoing_sms_qlength = -1; if (max_outgoing_sms_qlength < 0) max_outgoing_sms_qlength = DEFAULT_OUTGOING_SMS_QLENGTH; if (cfg_get_integer(&value, grp, octstr_imm("http-timeout")) == 0) http_set_client_timeout(value); #ifndef NO_SMS { List *list; list = cfg_get_multi_group(cfg, octstr_imm("smsc")); if (list != NULL) { gwlist_destroy(list, NULL); if (start_smsc(cfg) == -1) { panic(0, "Unable to start SMSCs."); return NULL; } } } #endif #ifndef NO_WAP grp = cfg_get_single_group(cfg, octstr_imm("core")); val = cfg_get(grp, octstr_imm("wdp-interface-name")); if (val != NULL && octstr_len(val) > 0) start_udp(cfg); octstr_destroy(val); if (cfg_get_single_group(cfg, octstr_imm("wapbox")) != NULL) start_wap(cfg); #endif if (http_proxy_host != NULL && http_proxy_port > 0) { http_use_proxy(http_proxy_host, http_proxy_port, http_proxy_ssl, http_proxy_exceptions, http_proxy_username, http_proxy_password, http_proxy_exceptions_regex); } octstr_destroy(http_proxy_host); octstr_destroy(http_proxy_username); octstr_destroy(http_proxy_password); octstr_destroy(http_proxy_exceptions_regex); gwlist_destroy(http_proxy_exceptions, octstr_destroy_item); return cfg; }
/* * Read all reloadable configuration directives */ static void config_reload(int reload) { Cfg *cfg; CfgGroup *grp; List *groups; long map_url_max; Octstr *s; long i; long new_value; int new_bool; Octstr *http_proxy_host; Octstr *http_interface_name; long http_proxy_port; int http_proxy_ssl = 0; List *http_proxy_exceptions; Octstr *http_proxy_username; Octstr *http_proxy_password; Octstr *http_proxy_exceptions_regex; int warn_map_url = 0; /* XXX TO-DO: if(reload) implement wapbox.suspend/mutex.lock */ if (reload) debug("config_reload", 0, "Reloading configuration"); /* * NOTE: we could lstat config file and only reload if it was modified, * but as we have a include directive, we don't know every file's * timestamp at this point */ cfg = cfg_create(config_filename); if (cfg_read(cfg) == -1) { warning(0, "Couldn't %sload configuration from `%s'.", (reload ? "re" : ""), octstr_get_cstr(config_filename)); return; } grp = cfg_get_single_group(cfg, octstr_imm("core")); http_proxy_host = cfg_get(grp, octstr_imm("http-proxy-host")); http_proxy_port = -1; cfg_get_integer(&http_proxy_port, grp, octstr_imm("http-proxy-port")); #ifdef HAVE_LIBSSL cfg_get_bool(&http_proxy_ssl, grp, octstr_imm("http-proxy-ssl")); #endif /* HAVE_LIBSSL */ http_proxy_username = cfg_get(grp, octstr_imm("http-proxy-username")); http_proxy_password = cfg_get(grp, octstr_imm("http-proxy-password")); http_proxy_exceptions = cfg_get_list(grp, octstr_imm("http-proxy-exceptions")); http_proxy_exceptions_regex = cfg_get(grp, octstr_imm("http-proxy-exceptions-regex")); if (http_proxy_host != NULL && http_proxy_port > 0) { http_use_proxy(http_proxy_host, http_proxy_port, http_proxy_ssl, http_proxy_exceptions, http_proxy_username, http_proxy_password, http_proxy_exceptions_regex); } octstr_destroy(http_proxy_host); octstr_destroy(http_proxy_username); octstr_destroy(http_proxy_password); octstr_destroy(http_proxy_exceptions_regex); gwlist_destroy(http_proxy_exceptions, octstr_destroy_item); grp = cfg_get_single_group(cfg, octstr_imm("wapbox")); if (grp == NULL) { warning(0, "No 'wapbox' group in configuration."); return; } if (cfg_get_integer(&new_value, grp, octstr_imm("log-level")) != -1) { reload_int(reload, octstr_imm("log level"), &logfilelevel, &new_value); logfilelevel = new_value; log_set_log_level(new_value); } /* Configure interface name for http requests */ http_interface_name = cfg_get(grp, octstr_imm("http-interface-name")); if (http_interface_name != NULL) { http_set_interface(http_interface_name); octstr_destroy(http_interface_name); } /* * users may define 'smart-errors' to have WML decks returned with * error information instead of signaling using the HTTP reply codes */ cfg_get_bool(&new_bool, grp, octstr_imm("smart-errors")); reload_bool(reload, octstr_imm("smart error messaging"), &wsp_smart_errors, &new_bool); /* decide if our XML parser within WML compiler is strict or relaxed */ cfg_get_bool(&new_bool, grp, octstr_imm("wml-strict")); reload_bool(reload, octstr_imm("XML within WML has to be strict"), &wml_xml_strict, &new_bool); if (!wml_xml_strict) warning(0, "'wml-strict' config directive has been set to no, " "this may make you vulnerable against XML bogus input."); if (cfg_get_bool(&new_bool, grp, octstr_imm("concatenation")) == 1) reload_bool(reload, octstr_imm("concatenation"), &concatenation, &new_bool); else concatenation = 1; if (cfg_get_integer(&new_value, grp, octstr_imm("max-messages")) != -1) { max_messages = new_value; reload_int(reload, octstr_imm("max messages"), &max_messages, &new_value); } /* configure URL mappings */ map_url_max = -1; cfg_get_integer(&map_url_max, grp, octstr_imm("map-url-max")); if (map_url_max > 0) warn_map_url = 1; if (reload) { /* clear old map */ wap_map_destroy(); wap_map_user_destroy(); } if ((device_home = cfg_get(grp, octstr_imm("device-home"))) != NULL) { wap_map_url_config_device_home(octstr_get_cstr(device_home)); } if ((s = cfg_get(grp, octstr_imm("map-url"))) != NULL) { warn_map_url = 1; wap_map_url_config(octstr_get_cstr(s)); octstr_destroy(s); } debug("wap", 0, "map_url_max = %ld", map_url_max); for (i = 0; i <= map_url_max; i++) { Octstr *name; name = octstr_format("map-url-%d", i); if ((s = cfg_get(grp, name)) != NULL) wap_map_url_config(octstr_get_cstr(s)); octstr_destroy(name); } /* warn the user that he/she should use the new wap-url-map groups */ if (warn_map_url) warning(0, "'map-url' config directive and related are deprecated, " "please use wap-url-map group"); /* configure wap-url-map */ groups = cfg_get_multi_group(cfg, octstr_imm("wap-url-map")); while (groups && (grp = gwlist_extract_first(groups)) != NULL) { Octstr *name, *url, *map_url, *send_msisdn_query; Octstr *send_msisdn_header, *send_msisdn_format; int accept_cookies; name = cfg_get(grp, octstr_imm("name")); url = cfg_get(grp, octstr_imm("url")); map_url = cfg_get(grp, octstr_imm("map-url")); send_msisdn_query = cfg_get(grp, octstr_imm("send-msisdn-query")); send_msisdn_header = cfg_get(grp, octstr_imm("send-msisdn-header")); send_msisdn_format = cfg_get(grp, octstr_imm("send-msisdn-format")); accept_cookies = -1; cfg_get_bool(&accept_cookies, grp, octstr_imm("accept-cookies")); wap_map_add_url(name, url, map_url, send_msisdn_query, send_msisdn_header, send_msisdn_format, accept_cookies); info(0, "Added wap-url-map <%s> with url <%s>, map-url <%s>, " "send-msisdn-query <%s>, send-msisdn-header <%s>, " "send-msisdn-format <%s>, accept-cookies <%s>", octstr_get_cstr(name), octstr_get_cstr(url), octstr_get_cstr(map_url), octstr_get_cstr(send_msisdn_query), octstr_get_cstr(send_msisdn_header), octstr_get_cstr(send_msisdn_format), (accept_cookies ? "yes" : "no")); } gwlist_destroy(groups, NULL); /* configure wap-user-map */ groups = cfg_get_multi_group(cfg, octstr_imm("wap-user-map")); while (groups && (grp = gwlist_extract_first(groups)) != NULL) { Octstr *name, *user, *pass, *msisdn; name = cfg_get(grp, octstr_imm("name")); user = cfg_get(grp, octstr_imm("user")); pass = cfg_get(grp, octstr_imm("pass")); msisdn = cfg_get(grp, octstr_imm("msisdn")); wap_map_add_user(name, user, pass, msisdn); info(0,"Added wap-user-map <%s> with credentials <%s:%s> " "and MSISDN <%s>", octstr_get_cstr(name), octstr_get_cstr(user), octstr_get_cstr(pass), octstr_get_cstr(msisdn)); } gwlist_destroy(groups, NULL); cfg_destroy(cfg); /* XXX TO-DO: if(reload) implement wapbox.resume/mutex.unlock */ }
void ext_init(char *mode, struct db_main *db) { if (db != NULL && db->format != NULL) { /* This is second time we are called, just update max length */ ext_cipher_limit = maxlen = db->format->params.plaintext_length - mask_add_len; if (mask_num_qw > 1) { ext_cipher_limit /= mask_num_qw; maxlen /= mask_num_qw; } return; } else ext_cipher_limit = options.length; ext_time = (int) time(NULL); ext_maxlen = options.force_maxlength; if (options.force_minlength > 0) ext_minlen = options.force_minlength; else ext_minlen = 0; if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) { if (john_main_process) fprintf(stderr, "Unknown external mode: %s\n", mode); error(); } if (c_compile(ext_getchar, ext_rewind, &ext_globals)) { if (!ext_line) ext_line = ext_source->tail; if (john_main_process) fprintf(stderr, "Compiler error in %s at line %d: %s\n", cfg_name, ext_line->number, c_errors[c_errno]); error(); } ext_word[0] = 0; c_execute(c_lookup("init")); f_generate = c_lookup("generate"); f_filter = c_lookup("filter"); if ((ext_flags & EXT_REQ_GENERATE) && !f_generate) { if (john_main_process) fprintf(stderr, "No generate() for external mode: %s\n", mode); error(); } if ((ext_flags & EXT_REQ_GENERATE) && !c_lookup("restore")) { if (ext_flags & EXT_REQ_RESTORE) { if (john_main_process) fprintf(stderr, "No restore() for external mode: %s\n", mode); error(); } else if (john_main_process) fprintf(stderr, "Warning: external mode '%s' can't be" " resumed if aborted\n", mode); } if ((ext_flags & EXT_REQ_FILTER) && !f_filter) { if (john_main_process) fprintf(stderr, "No filter() for external mode: %s\n", mode); error(); } if (john_main_process && (ext_flags & (EXT_USES_GENERATE | EXT_USES_FILTER)) == EXT_USES_FILTER && f_generate) if (john_main_process) fprintf(stderr, "Warning: external mode defines generate(), " "but is only used for filter()\n"); ext_mode = mode; }
void ext_init(char *mode, struct db_main *db) { if (!strncmp(mode, "gijohn", 5)) gijohnmodule = 1; if (db) { maxlen = db->format->params.plaintext_length; return; } if (!gijohnmodule) { if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Unknown external mode: %s\n", mode); error(); } if (c_compile(ext_getchar, ext_rewind, &ext_globals)) { if (!ext_line) ext_line = ext_source->tail; #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Compiler error in %s at line %d: %s\n", ext_line->cfg_name, ext_line->number, c_errors[c_errno]); error(); } } ext_word[0] = 0; c_execute(c_lookup("init")); if (gijohnmodule) { sig_done(); getthenewpiece(); init_external(xmlxml.keymap.charset, strlen(xmlxml.keymap.charset), xmlxml.keymap.firstword, xmlxml.keymap.lastword); sig_init(); } f_generate = c_lookup("generate"); f_filter = c_lookup("filter"); if (gijohnmodule) { ext_mode = mode; return; } if ((ext_flags & EXT_REQ_GENERATE) && !f_generate) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "No generate() for external mode: %s\n", mode); error(); } if ((ext_flags & EXT_REQ_FILTER) && !f_filter) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "No filter() for external mode: %s\n", mode); error(); } if ((ext_flags & (EXT_USES_GENERATE | EXT_USES_FILTER)) == EXT_USES_FILTER && f_generate) #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Warning: external mode defines generate(), " "but is only used for filter()\n"); ext_mode = mode; }