static void word_hash_config( StringList *sl, WORD_HASH_TABLE *table_ptr ) { int i; if (sl->n < 2) progerr("%s: requires at least one value", sl->word[0]); if (lstrstr(sl->word[1], "SwishDefault")) progwarn("SwishDefault is obsolete. See the CHANGES file."); if (lstrstr(sl->word[1], "File:")) { if (sl->n == 3) { normalize_path( sl->word[2] ); readwordsfile(table_ptr, sl->word[2]); return; } else progerr("IgnoreWords File: requires path"); } for (i = 1; i < sl->n; i++) add_word_to_hash_table( table_ptr, strtolower(sl->word[i]), HASHSIZE); }
DWORD WINAPI ShowLogThread(LPVOID param) { char sendbuf[IRCLINE]; int entries = LOGSIZE, tmp = 0; SHOWLOG showlog = *((SHOWLOG *)param); SHOWLOG *showlogp = (SHOWLOG *)param; showlogp->gotinfo = TRUE; if (!showlog.silent) irc_privmsg(showlog.sock,showlog.chan,"-\x03\x34\2log\2\x03- list starting",showlog.notice); if (showlog.filter[0] != '\0') { if ((tmp = atoi(showlog.filter)) != 0) entries = tmp; } for (int i = 0, j = 0; i < LOGSIZE && j < entries; i++, j++) if (log[i][0] != '\0') { if (showlog.filter[0] == '\0' || tmp != 0) irc_privmsg(showlog.sock, showlog.chan, log[i], showlog.notice, TRUE); else if (lstrstr(log[i], showlog.filter)) irc_privmsg(showlog.sock, showlog.chan, log[i], showlog.notice, TRUE); } sprintf(sendbuf,"-\x03\x34\2log\2\x03- list complete"); if (!showlog.silent) irc_privmsg(showlog.sock,showlog.chan,sendbuf,showlog.notice); addlog(sendbuf); clearthread(showlog.threadnum); ExitThread(0); }
BOOL searchlog(char *filter) { for (int i = 0; i < LOGSIZE; i++) if (log[i][0] != '\0') { if (lstrstr(log[i], filter)) return TRUE; } return FALSE; }
BOOL searchlog(char *filter, BOOL checkcase) { for (int i = 0; i < LOGSIZE; i++) if (log[i][0] != '\0') { if (checkcase) { if (strstr(log[i], filter)) return TRUE; } else { if (lstrstr(log[i], filter)) return TRUE; } } return FALSE; }
void showlog(SOCKET sock, char *chan, BOOL notice, BOOL silent, char *filter) { int entries = LOGSIZE, tmp = 0; if (!silent) irc_privmsg(sock, chan, "-\x03\x34\2log\2\x03-", notice); if (filter) { if ((tmp = atoi(filter)) != 0) entries = tmp; } for (int i = 0, j = 0; i < LOGSIZE && j < entries; i++, j++) if (log[i][0] != '\0') { if (!filter || tmp != 0) irc_privmsg(sock, chan, log[i], notice, TRUE); else if (lstrstr(log[i], filter)) irc_privmsg(sock, chan, log[i], notice, TRUE); } return; }
int main(int argc, char *argv[]) { char buffer[1024]; unsigned char mac[MD5_DIGEST_LENGTH]; unsigned char buf[MD5_DIGEST_STRING_LENGTH]; MD5_CTX ctx; int ret; if (argc != 2) { printf("Usage: %s <mac>\n", *argv); return 1; } ret = read(0, buffer, 1024); if (ret == -1) return 1; printf("User message = [%s]\n", buffer); printf("User mac = [%s]\n", argv[1]); MD5Init(&ctx); MD5Update(&ctx, (const u_int8_t *) SECRET, strlen(SECRET)); MD5Update(&ctx, (const u_int8_t *) buffer, ret); MD5Final(mac, &ctx); shexdigest(buf, mac); printf("[Hint] Expected mac = [%s]\n", buf); if (!strcmp((char *)buf, argv[1]) && !lstrstr(buffer, ret, "flag", 4)) printf("Good!\n"); else printf("Nope\n"); return 0; }
int countwords_HTML(SWISH *sw, FileProp *fprop, FileRec *fi, char *buffer) { int ftotalwords; int *metaID; int metaIDlen; int position; /* Position of word in file */ int currentmetanames; char *p, *newp, *tag, *endtag; int structure; FileRec *thisFileEntry = fi; struct metaEntry *metaNameEntry; IndexFILE *indexf = sw->indexlist; struct MOD_Index *idx = sw->Index; char *Content = NULL, *Name = NULL, *summary = NULL; char *title = (char *)sw_ConvHTMLEntities2ISO(sw, (unsigned char *)parseHTMLtitle(sw, buffer)); if (!isoktitle(sw, title)) return -2; if (fprop->stordesc) summary = parseHtmlSummary(buffer, fprop->stordesc->field, fprop->stordesc->size, sw); addCommonProperties( sw, fprop, fi, title, summary, 0 ); /* Init meta info */ metaID = (int *) Mem_ZoneAlloc(sw->Index->perDocTmpZone,(metaIDlen = 16) * sizeof(int)); currentmetanames = 0; ftotalwords = 0; structure = IN_FILE; metaID[0] = 1; position = 1; for (p = buffer; p && *p;) { /* Look for non escaped '<' */ if ((tag = strchr(p, '<')) && ((tag == p) || (*(tag - 1) != '\\'))) { /* Index up to the tag */ *tag++ = '\0'; newp = (char *)sw_ConvHTMLEntities2ISO(sw, (unsigned char *)p); if ( ! currentmetanames ) currentmetanames++; ftotalwords += indexstring(sw, newp, idx->filenum, structure, currentmetanames, metaID, &position); /* Now let us look for a not escaped '>' */ for (endtag = tag;;) if ((endtag = strchr(endtag, '>'))) { if (*(endtag - 1) != '\\') break; else endtag++; } else break; if (endtag) { *endtag++ = '\0'; if ((tag[0] == '!') && lstrstr(tag, "META") && (lstrstr(tag, "START") || lstrstr(tag, "END"))) { /* Check for META TAG TYPE 1 */ structure |= IN_META; if (lstrstr(tag, "START")) { char *parsed_tag; if ( (metaNameEntry = getHTMLMeta(indexf, tag, sw, NULL, &parsed_tag, fprop->real_path))) { /* realloc memory if needed */ if (currentmetanames == metaIDlen) { int *newbuf = (int *)Mem_ZoneAlloc(sw->Index->perDocTmpZone, metaIDlen * 2 * sizeof(int)); memcpy((char *)newbuf,(char *)metaID,metaIDlen * sizeof(int)); metaID = newbuf; metaIDlen *= 2; } /* add metaname to array of current metanames */ metaID[currentmetanames] = metaNameEntry->metaID; /* Bump position for all metanames unless metaname in dontbumppositionOnmetatags */ if (!isDontBumpMetaName(sw->dontbumpstarttagslist, metaNameEntry->metaName)) position++; currentmetanames++; p = endtag; /* If it is also a property store it until a < is found */ if ((metaNameEntry = getPropNameByName(&indexf->header, parsed_tag))) { if ((endtag = strchr(p, '<'))) *endtag = '\0'; p = (char *)sw_ConvHTMLEntities2ISO(sw, (unsigned char *)p); remove_newlines(p); /** why isn't this just done for the entire doc? */ if (!addDocProperty(&thisFileEntry->docProperties, metaNameEntry, (unsigned char *)p, strlen(p), 0)) progwarn("property '%s' not added for document '%s'\n", metaNameEntry->metaName, fprop->real_path); if (endtag) *endtag = '<'; continue; } } } else if (lstrstr(tag, "END")) { /* this will close the last metaname */ if (currentmetanames) { currentmetanames--; if (!currentmetanames) metaID[0] = 1; } } p = endtag; } /* Check for META TAG TYPE 2 */ else if ((tag[0] != '!') && lstrstr(tag, "META") && (Name = lstrstr(tag, "NAME")) && (Content = lstrstr(tag, "CONTENT"))) { ftotalwords += parseMetaData(sw, indexf, tag, idx->filenum, structure, Name, Content, thisFileEntry, &position, fprop->real_path); p = endtag; } /* Check for COMMENT */ else if ((tag[0] == '!') && sw->indexComments) { ftotalwords += parsecomment(sw, tag, idx->filenum, structure, 1, &position); p = endtag; } /* Default: Continue */ else { structure = getstructure(tag, structure); p = endtag; } } else p = tag; /* tag not closed: continue */ } else { /* No more '<' */ newp = (char *)sw_ConvHTMLEntities2ISO(sw, (unsigned char *)p); if ( ! currentmetanames ) currentmetanames++; ftotalwords += indexstring(sw, newp, idx->filenum, structure, currentmetanames, metaID, &position); p = NULL; } } return ftotalwords; }
static struct metaEntry *getHTMLMeta(IndexFILE * indexf, char *tag, SWISH *sw, char *name, char **parsed_tag, char *filename) { char *temp; int lenword = 0; char *word = NULL; char buffer[MAXSTRLEN + 1]; int i; struct metaEntry *e = NULL; word = buffer; lenword = sizeof(buffer) - 1; if (!name) { if (!(temp = (char *) lstrstr((char *) tag, (char *) "NAME"))) return NULL; } else temp = name; temp += 4; /* strlen("NAME") */ /* Get to the '=' sign disreguarding any other char */ while (*temp) { if (*temp && (*temp != '=')) /* TAB */ temp++; else { temp++; break; } } /* Get to the beginning of the word disreguarding blanks and quotes */ /* TAB */ while (*temp) { if (*temp == ' ' || *temp == '"') temp++; else break; } /* Copy the word and convert to lowercase */ /* TAB */ /* while (temp !=NULL && strncmp(temp," ",1) */ /* && strncmp(temp,"\"",1) && i<= MAXWORDLEN ) { */ /* and the above <= was wrong, should be < which caused the null insertion below to be off by two bytes */ for (i = 0; temp != NULL && *temp && *temp != ' ' && *temp != '"';) { if (i == lenword) { lenword *= 2; if(word == buffer) { word = (char *) emalloc(lenword + 1); memcpy(word,buffer,sizeof(buffer)); } else word = (char *) erealloc(word, lenword + 1); } word[i] = *temp++; i++; } if (i == lenword) { lenword *= 2; word = (char *) erealloc(word, lenword + 1); } word[i] = '\0'; /* Use Rainer's routine */ strtolower(word); *parsed_tag = word; if ((e = getMetaNameByName(&indexf->header, word))) return e; if ( (sw->UndefinedMetaTags == UNDEF_META_AUTO) && word && *word) { if (sw->verbose) printf("Adding automatic MetaName '%s' found in file '%s'\n", word, filename); return addMetaEntry(&indexf->header, word, META_INDEX, 0); } /* If it is ok not to have the name listed, just index as no-name */ if (sw->UndefinedMetaTags == UNDEF_META_ERROR) progerr("UndefinedMetaNames=error. Found meta name '%s' in file '%s', not listed as a MetaNames in config", word, filename); if(word != buffer) efree(word); return NULL; }
static char *parseHtmlSummary(char *buffer, char *field, int size, SWISH * sw) { char *p, *q, *tag, *endtag, c = '\0'; char *summary, *beginsum, *endsum, *tmp, *tmp2, *tmp3; int found, lensummary; /* Get the summary if no metaname/field is given */ if (!field && size) { /* Jump title if it exists */ if ((p = lstrstr(buffer, "</title>"))) { p += 8; } else p = buffer; /* Let us try to find <body> */ if ((q = lstrstr(p, "<body"))) { q = strchr(q, '>'); } else q = p; summary = (char *) Mem_ZoneAlloc(sw->Index->perDocTmpZone,strlen(p)+1); strcpy(summary,p); remove_newlines(summary); //$$$$ Todo: remove tag and content of scripts, css, java, embeddedobjects, comments, etc remove_tags(summary); summary = (char *)sw_ConvHTMLEntities2ISO(sw, (unsigned char *)summary); /* use only the required memory -save those not used */ /* 2001-03-13 rasc copy only <size> bytes of string */ if((int) strlen(summary) > size) summary[size]='\0'; return summary; } for (p = buffer, summary = NULL, found = 0, beginsum = NULL, endsum = NULL; p && *p;) { if ((tag = strchr(p, '<')) && ((tag == p) || (*(tag - 1) != '\\'))) { /* Look for non escaped '<' */ tag++; for (endtag = tag;;) if ((endtag = strchr(endtag, '>'))) { if (*(endtag - 1) != '\\') break; else endtag++; } else break; if (endtag) { c = *endtag; *endtag++ = '\0'; if ((tag[0] == '!') && lstrstr(tag, "META") && (lstrstr(tag, "START") || lstrstr(tag, "END"))) { /* Check for META TAG TYPE 1 */ if (lstrstr(tag, "START")) { if ((tmp = lstrstr(tag, "NAME"))) { tmp += 4; if (lstrstr(tmp, field)) { beginsum = endtag; found = 1; } p = endtag; } else p = endtag; } else if (lstrstr(tag, "END")) { if (!found) { p = endtag; } else { endsum = tag - 1; *(endtag - 1) = c; break; } } } /* Check for META TAG TYPE 2 */ else if ((tag[0] != '!') && lstrstr(tag, "META") && (tmp = lstrstr(tag, "NAME")) && (tmp2 = lstrstr(tag, "CONTENT"))) { tmp += 4; tmp3 = lstrstr(tmp, field); if (tmp3 && tmp3 < tmp2) { tmp2 += 7; if ((tmp = strchr(tmp2, '='))) { for (++tmp; isspace((int) ((unsigned char) *tmp)); tmp++); if (*tmp == '\"') { beginsum = tmp + 1; for (tmp = endtag - 1; tmp > beginsum; tmp--) if (*tmp == '\"') break; if (tmp == beginsum) endsum = endtag - 1; else endsum = tmp; } else { beginsum = tmp; endsum = endtag - 1; } found = 1; *(endtag - 1) = c; break; } } p = endtag; } /* Default: Continue */ else { p = endtag; } } else p = NULL; /* tag not closed ->END */ if (endtag) *(endtag - 1) = c; } else { /* No more '<' */ p = NULL; } } if (found && beginsum && endsum && endsum > beginsum) { lensummary = endsum - beginsum; summary = (char *)Mem_ZoneAlloc(sw->Index->perDocTmpZone, lensummary + 1); memcpy(summary, beginsum, lensummary); summary[lensummary] = '\0'; } /* If field is set an no metaname is found, let us search */ /* for something like <field>bla bla </field> */ if (!summary && field) { summary = parsetag(sw, field, buffer, 0, CASE_SENSITIVE_OFF); } /* Finally check for something after title (if exists) and */ /* after <body> (if exists) */ if (!summary) { /* Jump title if it exists */ if ((p = lstrstr(buffer, "</title>"))) { p += 8; } else p = buffer; /* Let us try to find <body> */ if ((q = lstrstr(p, "<body"))) { q = strchr(q, '>'); } else q = p; summary = (char *)Mem_ZoneAlloc(sw->Index->perDocTmpZone,strlen(q) + 1); strcpy(summary,q); } if (summary) { remove_newlines(summary); remove_tags(summary); summary = (char *)sw_ConvHTMLEntities2ISO(sw, (unsigned char *)summary); } if (summary && size && ((int) strlen(summary)) > size) summary[size] = '\0'; return summary; }