void ns_html_err_service_not_available(FILE *fout, struct http_request_info *phr, int priv_mode, const char *format, ...) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); unsigned char buf[1024]; va_list args; if (format && *format) { va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); err("%d: service not available: %s", phr->id, buf); } else { err("%d: service not available", phr->id); } if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } // try fancy headers if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } else { if (!header || !footer) { header = ns_fancy_priv_header; separator = ns_fancy_priv_separator; footer = ns_fancy_priv_footer; } } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Service not available")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } fprintf(fout, "<p>%s</p>\n", _("Service that you requested is not available.")); ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); }
int prepare_serve_defaults( const struct contest_desc *cnts, serve_state_t state, const struct contest_desc **p_cnts) { int i; #if defined EJUDGE_CONTESTS_DIR if (!state->global->contests_dir[0]) { snprintf(state->global->contests_dir, sizeof(state->global->contests_dir), "%s", EJUDGE_CONTESTS_DIR); } #endif /* EJUDGE_CONTESTS_DIR */ if (!state->global->contests_dir[0]) { err("global.contests_dir must be set"); return -1; } if ((i = contests_set_directory(state->global->contests_dir)) < 0) { err("invalid contests directory '%s': %s", state->global->contests_dir, contests_strerror(-i)); return -1; } if (p_cnts) { int contest_id = 0; if (cnts) { contest_id = cnts->id; } else { contest_id = state->global->contest_id; } if ((i = contests_get(contest_id, p_cnts)) < 0) { err("cannot load contest information: %s", contests_strerror(-i)); return -1; } snprintf(state->global->name, sizeof(state->global->name), "%s", (*p_cnts)->name); } return 0; }
static int process_contest(int contest_id) { const struct contest_desc *cnts = 0; unsigned char config_path[PATH_MAX]; unsigned char out_config_path[PATH_MAX]; unsigned char old_config_path[PATH_MAX]; const unsigned char *conf_dir = 0; struct stat stbuf; serve_state_t state = 0; struct section_global_data *global = 0; int lang_id; struct section_language_data *lang, *cs_lang_by_short, *cs_lang_by_id, *cs_lang; int compile_id; int i; int has_to_convert = 0, has_errors = 0; int *lang_map = 0; unsigned char **lang_shorts = 0; unsigned char short_name[1024]; struct textfile config_text; FILE *config_file = NULL; FILE *out_config_file = NULL; unsigned char cmd_buf[PATH_MAX]; memset(&config_text, 0, sizeof(config_text)); fprintf(stderr, "Processing contest %d\n", contest_id); if (contests_get(contest_id, &cnts) < 0 || !cnts) { error("cannot read contest XML for contest %d", contest_id); goto failure; } if (cnts->conf_dir && os_IsAbsolutePath(cnts->conf_dir)) { snprintf(config_path, sizeof(config_path), "%s/serve.cfg", cnts->conf_dir); } else { if (!cnts->root_dir) { error("contest %d root_dir is not set", contest_id); goto failure; } else if (!os_IsAbsolutePath(cnts->root_dir)) { error("contest %d root_dir %s is not absolute", contest_id, cnts->root_dir); goto failure; } if (!(conf_dir = cnts->conf_dir)) conf_dir = "conf"; snprintf(config_path, sizeof(config_path), "%s/%s/serve.cfg", cnts->root_dir, conf_dir); } if (stat(config_path, &stbuf) < 0) { error("contest %d config file %s does not exist", contest_id, config_path); goto failure; } if (!S_ISREG(stbuf.st_mode)) { error("contest %d config file %s is not a regular file", contest_id, config_path); goto failure; } if (access(config_path, R_OK) < 0) { error("contest %d config file %s is not readable", contest_id, config_path); goto failure; } state = serve_state_init(contest_id); state->config_path = xstrdup(config_path); state->current_time = time(0); state->load_time = state->current_time; if (prepare(NULL, state, state->config_path, 0, PREPARE_SERVE, "", 1, 0, 0) < 0) goto failure; global = state->global; if (!global) { error("contest %d has no global section", contest_id); goto failure; } if (strcmp(global->rundb_plugin, "mysql") != 0) { fprintf(stderr, "contest %d does not use mysql\n", contest_id); goto failure; } if (state->max_lang >= 0) { XCALLOC(lang_map, state->max_lang + 1); XCALLOC(lang_shorts, state->max_lang + 1); } for (lang_id = 1; lang_id <= state->max_lang; ++lang_id) { if (!(lang = state->langs[lang_id])) continue; compile_id = lang->compile_id; if (compile_id <= 0) compile_id = lang->id; if (lang->id > 1000) { fprintf(stderr, " language %s id > 1000 (%d)\n", lang->short_name, lang->id); has_errors = 1; continue; } snprintf(short_name, sizeof(short_name), "%s", lang->short_name); map_lang_aliases(short_name, sizeof(short_name)); /* search the language in the compilation server by short_name and by id */ cs_lang_by_short = 0; cs_lang_by_id = 0; for (i = 1; i < cs_lang_total; ++i) { if ((cs_lang = cs_langs[i]) && cs_lang->id == compile_id) { cs_lang_by_id = cs_lang; break; } } for (i = 1; i < cs_lang_total; ++i) { if ((cs_lang = cs_langs[i]) && !strcmp(cs_lang->short_name, short_name)) { cs_lang_by_short = cs_lang; break; } } /* condition to convert: 1) contest language id does not match to compilation server language id; 2) contest language short name, compilation server language short name match. */ if (lang->id != compile_id && cs_lang_by_short != NULL && cs_lang_by_short == cs_lang_by_id) { has_to_convert = 1; fprintf(stderr, " language %s id %d to be changed to %d\n", lang->short_name, lang->id, compile_id); lang_map[lang_id] = compile_id; lang_shorts[lang_id] = xstrdup(lang->short_name); } else if (lang->id == compile_id && cs_lang_by_short != NULL && cs_lang_by_short == cs_lang_by_id) { /* condition to do nothing: 1) contest language id match compilation server language id; 2) contest language short name, compilation server language short name match. */ } else { has_errors = 1; fprintf(stderr, " unexpected language %s, id %d, compile id %d\n", lang->short_name, lang->id, lang->compile_id); if (cs_lang_by_id) { fprintf(stderr, " CS lang by id: id %d, short %s\n", cs_lang_by_id->id, cs_lang_by_id->short_name); } else { fprintf(stderr, " CS lang by id: NULL\n"); } if (cs_lang_by_short) { fprintf(stderr, " CS lang by short name: id %d, short %s\n", cs_lang_by_short->id, cs_lang_by_short->short_name); } else { fprintf(stderr, " CS lang by short name: NULL\n"); } } } if (has_errors) { fprintf(stderr, "contest %d cannot be converted\n", contest_id); return 0; } if (!has_to_convert) { fprintf(stderr, "contest %d is ok\n", contest_id); return 0; } config_file = fopen(config_path, "r"); if (!config_file) { fprintf(stderr, "cannot open %s\n", config_path); return 0; } if (gettextfile(config_file, &config_text) <= 0) { fprintf(stderr, "configuration file %s is empty\n", config_path); return 0; } fclose(config_file); config_file = NULL; normalize_text(&config_text); process_text(&config_text, state->max_lang + 1, lang_map, lang_shorts); snprintf(out_config_path, sizeof(out_config_path), "%s.out", config_path); out_config_file = fopen(out_config_path, "w"); if (!out_config_file) { fprintf(stderr, "cannot open %s\n", out_config_path); return 0; } puttext(out_config_file, &config_text); fclose(out_config_file); out_config_file = NULL; snprintf(cmd_buf, sizeof(cmd_buf), "diff -u %s %s", config_path, out_config_path); //fprintf(stderr, ">>%s\n", cmd_buf); system(cmd_buf); process_db(contest_id, state->max_lang + 1, lang_map); snprintf(old_config_path, sizeof(old_config_path), "%s.old", config_path); fprintf(stderr, "Rename: %s->%s, %s->%s\n", config_path, old_config_path, out_config_path, config_path); if (rename(config_path, old_config_path) < 0) { fprintf(stderr, "Rename: %s->%s failed\n", config_path, old_config_path); } if (rename(out_config_path, config_path) < 0) { fprintf(stderr, "Rename: %s->%s failed\n", out_config_path, config_path); } return 0; failure: return 1; }
void ns_html_err_registration_incomplete( FILE *fout, struct http_request_info *phr) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); struct html_armor_buffer ab = HTML_ARMOR_INITIALIZER; const unsigned char *a_open = "", *a_close = ""; unsigned char reg_url[1024], reg_buf[1024]; err("%d: registration incomplete", phr->id); if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Registration incomplete")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } if (cnts && cnts->allow_reg_data_edit && contests_check_register_ip_2(cnts, &phr->ip, phr->ssl_flag) > 0 && (cnts->reg_deadline <= 0 || cur_time < cnts->reg_deadline)) { get_register_url(reg_url, sizeof(reg_url), cnts, phr->self_url); if (phr->session_id) { snprintf(reg_buf, sizeof(reg_buf), "<a href=\"%s?SID=%llx\">", reg_url, phr->session_id); } else { snprintf(reg_buf, sizeof(reg_buf), "<a href=\"%s?contest_id=%d&action=%d\">", reg_url, phr->contest_id, NEW_SRV_ACTION_REG_LOGIN_PAGE); } a_open = reg_buf; a_close = "</a>"; } fprintf(fout, _("<p>You cannot participate in the contest because your registration is incomplete. Please, %sgo back to the registration forms%s and fill up them correctly.</p>\n"), a_open, a_close); ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); html_armor_free(&ab); }
void ns_html_err_inv_session(FILE *fout, struct http_request_info *phr, int priv_mode, const char *format, ...) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); unsigned char buf[1024]; va_list args; if (format && *format) { va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); err("%d: invalid session: %s", phr->id, buf); } else { err("%d: invalid session", phr->id); } if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra && !priv_mode) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } else if (extra && priv_mode) { watched_file_update(&extra->priv_header, cnts->priv_header_file, cur_time); watched_file_update(&extra->priv_footer, cnts->priv_footer_file, cur_time); header = extra->priv_header.text; footer = extra->priv_footer.text; } if (!priv_mode) { if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } } else { if (!header || !footer) { header = ns_fancy_priv_header; separator = ns_fancy_priv_separator; footer = ns_fancy_priv_footer; } } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Invalid session")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } fprintf(fout, "<p>%s</p>\n", _("Invalid session identifier. The possible reasons are as follows.")); fprintf(fout, "<ul>\n"); fprintf(fout, _("<li>The specified session does not exist.</li>\n")); fprintf(fout, _("<li>The specified session has expired.</li>\n")); fprintf(fout, _("<li>The session was created from a different IP-address or protocol, that yours (%s,%s).</li>\n"), xml_unparse_ipv6(&phr->ip), ns_ssl_flag_str[phr->ssl_flag]); fprintf(fout, _("<li>The session was removed by an administrator.</li>")); fprintf(fout, "</ul>\n"); fprintf(fout, _("<p>Note, that the exact reason is not reported due to security reasons.</p>")); ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); }
void ns_html_err_internal_error(FILE *fout, struct http_request_info *phr, int priv_mode, const char *format, ...) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); unsigned char buf[1024]; va_list args; if (format && *format) { va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); err("%d: internal error: %s", phr->id, buf); } else { err("%d: internal error", phr->id); } if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra && !priv_mode) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } else if (extra && priv_mode) { watched_file_update(&extra->priv_header, cnts->priv_header_file, cur_time); watched_file_update(&extra->priv_footer, cnts->priv_footer_file, cur_time); header = extra->priv_header.text; footer = extra->priv_footer.text; } if (!priv_mode) { if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } } else { if (!header || !footer) { header = ns_fancy_priv_header; separator = ns_fancy_priv_separator; footer = ns_fancy_priv_footer; } } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Internal error")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } fprintf(fout, "<p>%s</p>\n", _("Your request has caused an internal server error. Please, report it as a bug.")); ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); }
void ns_html_err_cnts_unavailable(FILE *fout, struct http_request_info *phr, int priv_mode, const unsigned char *messages, const char *format, ...) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); unsigned char buf[1024]; va_list args; if (format && *format) { va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); err("%d: contest not available: %s", phr->id, buf); } else { err("%d: contest not available", phr->id); } if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } // try fancy headers if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } else { if (!header || !footer) { header = ns_fancy_priv_header; separator = ns_fancy_priv_separator; footer = ns_fancy_priv_footer; } } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Contest not available")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } fprintf(fout, "<p>%s</p>\n", _("The contest is temporarily not available. Please, retry the request a bit later.")); if (messages) { unsigned char *a = html_armor_string_dup(messages); fprintf(fout, "<pre><font color=\"red\">%s</font></pre>\n", a); xfree(a); a = NULL; } ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); }
void ns_html_err_simple_registered( FILE *fout, struct http_request_info *phr, int priv_mode, const char *format, ...) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); unsigned char buf[1024]; unsigned char hbuf[1024]; int blen; va_list args; struct html_armor_buffer ab = HTML_ARMOR_INITIALIZER; va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); err("%d: simple_registered user: %s", phr->id, buf); if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra && !priv_mode) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } else if (extra && priv_mode) { watched_file_update(&extra->priv_header, cnts->priv_header_file, cur_time); watched_file_update(&extra->priv_footer, cnts->priv_footer_file, cur_time); header = extra->priv_header.text; footer = extra->priv_footer.text; } if (!priv_mode) { if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } } else { if (!header || !footer) { header = ns_fancy_priv_header; separator = ns_fancy_priv_separator; footer = ns_fancy_priv_footer; } } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Cannot participate")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } fprintf(fout, "<p>%s</p>\n", _("You cannot participate in this contest. Your account was created using the simple registration procedure, i.e. your e-mail address was not verified. This contest requires e-mail verification, so your account cannot be accepted.")); if (cnts->enable_password_recovery) { if (cnts->team_url) { snprintf(buf, sizeof(buf), "%s", cnts->team_url); } else { snprintf(hbuf, sizeof(hbuf), "%s", phr->self_url); blen = strlen(hbuf); while (blen > 0 && hbuf[blen - 1] != '/') blen--; hbuf[blen] = 0; snprintf(buf, sizeof(buf), "%snew-client", hbuf); } snprintf(hbuf, sizeof(hbuf), "%s?contest_id=%d&locale_id=%d&action=%d", buf, phr->contest_id, phr->locale_id, NEW_SRV_ACTION_FORGOT_PASSWORD_1); fprintf(fout, _("<p>To validate your e-mail and enable your participation in this contest you may use the <a href=\"%s\">password restoration</a> service.</p>\n"), hbuf); } ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); html_armor_free(&ab); }
void ns_html_err_no_perm(FILE *fout, struct http_request_info *phr, int priv_mode, const char *format, ...) { const struct contest_desc *cnts = 0; struct contest_extra *extra = 0; const unsigned char *header = 0, *footer = 0, *separator = 0; const unsigned char *copyright = 0; time_t cur_time = time(0); unsigned char buf[1024]; va_list args; struct html_armor_buffer ab = HTML_ARMOR_INITIALIZER; va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); err("%d: permission denied: %s", phr->id, buf); if (phr->contest_id > 0) contests_get(phr->contest_id, &cnts); if (cnts) extra = ns_get_contest_extra(phr->contest_id); if (extra && !priv_mode) { watched_file_update(&extra->header, cnts->team_header_file, cur_time); watched_file_update(&extra->separator, cnts->team_separator_file, cur_time); watched_file_update(&extra->footer, cnts->team_footer_file, cur_time); watched_file_update(&extra->copyright, cnts->copyright_file, cur_time); header = extra->header.text; separator = extra->separator.text; footer = extra->footer.text; copyright = extra->copyright.text; } else if (extra && priv_mode) { watched_file_update(&extra->priv_header, cnts->priv_header_file, cur_time); watched_file_update(&extra->priv_footer, cnts->priv_footer_file, cur_time); header = extra->priv_header.text; footer = extra->priv_footer.text; } if (!priv_mode) { if (!header || !footer) { header = ns_fancy_header; separator = ns_fancy_separator; if (copyright) footer = ns_fancy_footer_2; else footer = ns_fancy_footer; } } else { if (!header || !footer) { header = ns_fancy_priv_header; separator = ns_fancy_priv_separator; footer = ns_fancy_priv_footer; } } l10n_setlocale(phr->locale_id); ns_header(fout, header, 0, 0, 0, 0, phr->locale_id, cnts, NULL_CLIENT_KEY, _("Permission denied")); if (separator && *separator) { fprintf(fout, "%s", ns_fancy_empty_status); ns_separator(fout, separator, cnts); } fprintf(fout, "<p>%s</p>\n", _("Permission denied. The possible reasons are as follows.")); fprintf(fout, "<ul>\n"); fprintf(fout, _("<li>You have typed an invalid login (<tt>%s</tt>).</li>\n"), ARMOR(phr->login)); fprintf(fout, _("<li>You have typed an invalid password.</li>\n")); if (!priv_mode) { if (cnts) { fprintf(fout, _("<li>You are not registered for contest %s.</li>\n"), ARMOR(cnts->name)); } else { fprintf(fout, _("<li>You are not registered for contest %d.</li>\n"), phr->contest_id); } fprintf(fout, _("<li>Your registration was not confirmed.</li>\n")); fprintf(fout, _("<li>You were banned by the administrator.</li>\n")); fprintf(fout, _("<li>Your IP-address (<tt>%s</tt>) or protocol (<tt>%s</tt>) is banned for participation.</li>"), xml_unparse_ipv6(&phr->ip), ns_ssl_flag_str[phr->ssl_flag]); fprintf(fout, _("<li>The contest is closed for participation.</li>\n")); //fprintf(fout, _("<li>The server might be overloaded.</li>\n")); } else { fprintf(fout, _("<li>Your IP-address (<tt>%s</tt>) or protocol (<tt>%s</tt>) is banned for participation.</li>"), xml_unparse_ipv6(&phr->ip), ns_ssl_flag_str[phr->ssl_flag]); fprintf(fout, _("<li>You do not have permissions to login using the specified role.</li>")); } fprintf(fout, "</ul>\n"); fprintf(fout, _("<p>Note, that the exact reason is not reported due to security reasons.</p>")); fprintf(fout, "<p><big><a href=\"%s?contest_id=%d&locale_id=%d\">%s</a></big></p>", phr->self_url, phr->contest_id, phr->locale_id, _("Try again")); ns_footer(fout, footer, copyright, phr->locale_id); l10n_setlocale(0); html_armor_free(&ab); }
int main(int argc, char *argv[]) { int i = 1; char *eptr = 0; int total_clars, clar_id; struct clar_entry_v2 clar; unsigned char *text = 0; size_t size = 0; program_name = os_GetBasename(argv[0]); if (argc <= 1) die("not enough parameters"); if (!strcmp(argv[1], "--help")) { write_help(); } else if (!strcmp(argv[1], "--version")) { write_version(); } i = 1; while (i < argc) { if (!strcmp(argv[i], "-f")) { if (i + 1 >= argc) die("argument expected for `-f'"); ejudge_xml_path = argv[i + 1]; i += 2; } else if (!strcmp(argv[i], "--")) { i++; break; } else if (argv[i][0] == '-') { die("invalid option `%s'", argv[i]); } else { break; } } #if defined EJUDGE_XML_PATH if (!ejudge_xml_path) ejudge_xml_path = EJUDGE_XML_PATH; #endif /* EJUDGE_XML_PATH */ if (!ejudge_xml_path) die("ejudge.xml path is not specified"); if (!(config = ejudge_cfg_parse(ejudge_xml_path))) return 1; if (!config->contests_dir) die("<contests_dir> tag is not set!"); if (contests_set_directory(config->contests_dir) < 0) die("contests directory is invalid"); if (i >= argc) die("contest-id is expected"); if (!argv[i][0]) die("contest-id is not specified"); errno = 0; contest_id = strtol(argv[i], &eptr, 10); if (*eptr || errno || contest_id <= 0 || contest_id > EJ_MAX_CONTEST_ID) die("contest-id is invalid"); i++; if (i >= argc) die("source plugin name is expected"); src_plugin_name = argv[i]; i++; if (i >= argc) die("destination plugin name is expected"); dst_plugin_name = argv[i]; i++; if (i < argc) die("extra parameters"); if (!src_plugin_name || !*src_plugin_name) src_plugin_name = "file"; if (!dst_plugin_name || !*dst_plugin_name) dst_plugin_name = "file"; if (!strcmp(src_plugin_name, dst_plugin_name)) die("plugins are the same"); if (contests_get(contest_id, &cnts) < 0 || !cnts) die("cannot load contest %d", contest_id); if (!(src_clarlog = clar_init())) die("cannot open the source clarlog"); if (!(dst_clarlog = clar_init())) die("cannot open the destination clarlog"); if (clar_open(src_clarlog, config, cnts, 0, src_plugin_name, 0) < 0) die("cannot open the source clarlog"); if (clar_open(dst_clarlog, config, cnts, 0, dst_plugin_name, 0) < 0) die("cannot open the destination clarlog"); total_clars = clar_get_total(src_clarlog); for (clar_id = 0; clar_id < total_clars; clar_id++) { if (clar_get_record(src_clarlog, clar_id, &clar) < 0) continue; if (clar.id < 0) continue; if (!ej_uuid_is_nonempty(clar.uuid)) { ej_uuid_generate(&clar.uuid); } clar_put_record(dst_clarlog, clar_id, &clar); if (clar_get_raw_text(src_clarlog, clar_id, &text, &size) < 0) continue; clar_add_text(dst_clarlog, clar_id, &clar.uuid, text, size); xfree(text); text = 0; size = 0; } return 0; }