STDVAL str_parse_standard_value(CSTR value) { STDVAL result = STDVAL_UNK; if (IS_NOT_NULL(value)) { if (str_equals_nocase(value, s_YES)) result = STDVAL_YES; else if (str_equals_nocase(value, s_NO)) result = STDVAL_NO; else if (str_equals_nocase(value, s_ON)) result = STDVAL_ON; else if (str_equals_nocase(value, s_OFF)) result = STDVAL_OFF; else if (str_equals_nocase(value, s_ENABLE)) result = STDVAL_ENABLE; else if (str_equals_nocase(value, s_DISABLE)) result = STDVAL_DISABLE; else if (str_equals_nocase(value, s_ENABLED)) result = STDVAL_ENABLED; else if (str_equals_nocase(value, s_DISABLED)) result = STDVAL_DISABLED; } return result; }
int is_exon(GFF_Feature *feat, List *l) { int i; for (i = 0; i < lst_size(l); i++) if (str_equals_nocase(feat->feature, (String*)lst_get_ptr(l, i))) return 1; return 0; }
/* Main HelpServ routine. */ void helpserv(const char *source, User *callerUser, char *buf) { TRACE_MAIN_FCLT(FACILITY_HELPSERV); if (IS_NULL(buf) || IS_EMPTY_STR(buf)) send_notice_lang_to_user(s_HelpServ, callerUser, GetCallerLang(), ERROR_ACCESS_DENIED); else if (buf[0] == '\001') { if (IS_EMPTY_STR(buf + 1)) LOG_SNOOP(s_HelpServ, "Invalid CTCP from \2%s\2", source); else if (str_equals_nocase(buf + 1, "PING")) { send_notice_to_user(s_HelpServ, callerUser, "\1%s", buf + 1); LOG_SNOOP(s_HelpServ, "CTCP: PING from \2%s\2", source); } else { if (buf[str_len(buf) - 1] == '\001') buf[str_len(buf) - 1] = '\0'; LOG_SNOOP(s_HelpServ, "CTCP: %s from \2%s\2", buf + 1, source); } } else { ServiceCommandData data; data.commandName = buf; data.userLevel = ULEVEL_NOACCESS; data.operMatch = TRUE; data.operName = NULL; data.agent = &a_HelpServ; handle_help(source, callerUser, &data); } }
void handle_help(CSTR source, User *callerUser, ServiceCommandData *data) { FILE *f; struct stat st; char path[MAX_PATH]; char *topic, *ptr = path; if (data->commandName[0] == 'O') { /* OHELP */ ptr += str_copy_checked(HELPSERV_OPER_DIR, path, sizeof(path)); topic = strtok(NULL, s_NULL); } else if (data->commandName[1] == 'H') { /* HHELP */ ptr += str_copy_checked(HELPSERV_OPER_DIR, path, sizeof(path)); topic = data->commandName; } else if (data->commandName[0] == 'H') { /* HELP */ ptr += str_copy_checked(HELPSERV_DIR, path, sizeof(path)); topic = strtok(NULL, s_NULL); } else { /* HelpServ commands. */ ptr += str_copy_checked(HELPSERV_DIR, path, sizeof(path)); topic = data->commandName; } *ptr++ = c_SPACE; /* Verra' poi sostituito da un '/' */ /* Cartella della lingua. */ ptr += str_append_checked(lang_get_shortname(GetCallerLang()), path, sizeof(path) - (ptr - path)); *ptr++ = c_SPACE; /* Verra' poi sostituito da un '/' */ /* Cartella dell'Agent. */ ptr += str_append_checked(data->agent->nick, path, sizeof(path) - (ptr - path)); /* Argomento specifico richiesto. */ if (IS_NOT_NULL(topic)) { *ptr++ = c_SPACE; /* Verra' poi sostituito da un '/' */ ptr += str_append_checked(topic, path, sizeof(path) - (ptr - path)); /* Get rid of the extra spaces at the end, if any. */ while (*(ptr - 1) == c_SPACE) --ptr; } *ptr = '\0'; str_tolower(path); /* Eliminazione caratteri non validi. */ ptr = path; while (*ptr) { switch (*ptr) { case '.': case '/': *ptr = '_'; break; case ' ': *ptr = c_SLASH; break; } ++ptr; } /* If we end up at a directory, go for an "index" file/dir if possible. */ while (((ptr - path) < (int)sizeof(path) - 1) && (stat(path, &st) == 0) && S_ISDIR(st.st_mode)) { *ptr++ = c_SLASH; str_copy_checked("index", ptr, sizeof(path) - (ptr - path)); ptr += str_len(ptr); } /* Send the file, if it exists. */ if (!(f = fopen(path, "r"))) { LOG_DEBUG("debug: Cannot open help file %s", path); send_notice_lang_to_user(data->agent->nick, callerUser, GetCallerLang(), ERROR_UNKNOWN_COMMAND, topic); send_notice_lang_to_user(data->agent->nick, callerUser, GetCallerLang(), GET_SERVICE_COMMAND_LIST_MSG, data->agent->nick); return; } while (fgets(path, sizeof(path), f)) { ptr = strtok(path, "\r\n"); /* Use this odd construction to prevent any %'s in the text from doing weird stuff to the output. Also replace blank lines by spaces or the ircd will block it. */ send_notice_to_user(data->agent->nick, callerUser, "%s", IS_NOT_NULL(ptr) ? ptr : s_SPACE); } fclose(f); if (data->agent->agentID == AGENTID_CHANSERV) { if (IS_NULL(topic) || str_equals_nocase(topic, "REGISTER")) send_notice_lang_to_user(data->agent->nick, callerUser, GetCallerLang(), CS_CHAN_EXPIRE, CONF_CHANNEL_EXPIRE); } else if (data->agent->agentID == AGENTID_NICKSERV) { if (IS_NULL(topic) || str_equals_nocase(topic, "REGISTER")) send_notice_lang_to_user(data->agent->nick, callerUser, GetCallerLang(), NS_NICK_EXPIRE, CONF_NICK_EXPIRE); } }