APETAG::APETAG(const sp<DataSource> &source) : mIsValid(false), mData(NULL), mSize(0), mFirstFrameOffset(0) { mIsValid = parsetag(source); }
char *parseHTMLtitle(SWISH *sw, char *buffer) { char *title; char *empty_title; empty_title = (char *)Mem_ZoneAlloc(sw->Index->perDocTmpZone,1); *empty_title = '\0'; if (!buffer) return empty_title; if ((title = parsetag(sw, "title", buffer, TITLETOPLINES, CASE_SENSITIVE_OFF))) return title; return empty_title; }
int main (int argc, char *argv[]) { dki_t *data = NULL; dki_t *dkp; int c; int opt_index; int action; const char *file; const char *defconfname = NULL; char *p; char str[254+1]; const char *keyname = NULL; int searchtag; zconf_t *config; progname = *argv; if ( (p = strrchr (progname, '/')) ) progname = ++p; view = getnameappendix (progname, "dnssec-zkt"); defconfname = getdefconfname (view); config = loadconfig ("", (zconf_t *)NULL); /* load built in config */ if ( fileexist (defconfname) ) /* load default config file */ config = loadconfig (defconfname, config); if ( config == NULL ) fatal ("Out of memory\n"); setglobalflags (config); opterr = 0; opt_index = 0; action = 0; #if defined(HAVE_GETOPT_LONG) && HAVE_GETOPT_LONG while ( (c = getopt_long (argc, argv, short_options, long_options, &opt_index)) != -1 ) #else while ( (c = getopt (argc, argv, short_options)) != -1 ) #endif { switch ( c ) { case '9': /* ksk rollover help */ ksk_roll ("help", c - '0', NULL, NULL); exit (1); case '1': /* ksk rollover: create new key */ case '2': /* ksk rollover: publish DS */ case '3': /* ksk rollover: delete old key */ case '0': /* ksk rollover: show current status */ action = c; if ( !optarg ) usage ("ksk rollover requires an domain argument", config); kskdomain = domain_canonicdup (optarg); break; case 'h': case 'K': case 'Z': action = c; break; case 'C': pathflag = !pathflag; /* fall through */ case 'P': case 'S': case 'A': case 'D': case 'R': case 's': case 19: case 20: if ( (keyname = parsetag (optarg, &searchtag)) != NULL ) keyname = domain_canonicdup (keyname); action = c; break; case 'F': /* set key lifetime */ lifetime = atoi (optarg); action = c; break; case 'V': /* view name */ view = optarg; defconfname = getdefconfname (view); if ( fileexist (defconfname) ) /* load default config file */ config = loadconfig (defconfname, config); if ( config == NULL ) fatal ("Out of memory\n"); setglobalflags (config); break; case 'c': config = loadconfig (optarg, config); setglobalflags (config); checkconfig (config); break; case 'O': /* read option from commandline */ config = loadconfig_fromstr (optarg, config); setglobalflags (config); checkconfig (config); break; case 'd': /* ignore directory arg */ dirflag = 1; break; case 'k': /* ksk only */ zskflag = 0; break; case 'r': /* switch recursive flag */ recflag = !recflag; break; case 'z': /* zsk only */ kskflag = 0; break; case ':': snprintf (str, sizeof(str), "option \"-%c\" requires an argument.\n", optopt); usage (str, config); break; case '?': if ( isprint (optopt) ) snprintf (str, sizeof(str), "Unknown option \"-%c\".\n", optopt); else snprintf (str, sizeof (str), "Unknown option char \\x%x.\n", optopt); usage (str, config); break; default: abort(); } } if ( kskflag == 0 && zskflag == 0 ) kskflag = zskflag = 1; c = optind; do { if ( c >= argc ) /* no args left */ file = config->zonedir; /* use default directory */ else file = argv[c++]; if ( is_directory (file) ) parsedirectory (file, &data); else parsefile (file, &data); } while ( c < argc ); /* for all arguments */ switch ( action ) { case 'h': usage ("", config); case 'C': createkey (keyname, data, config); break; case 'P': case 'S': case 'A': case 'D': if ( (dkp = (dki_t*)zkt_search (data, searchtag, keyname)) == NULL ) fatal ("Key with tag %u not found\n", searchtag); else if ( dkp == (void *) 01 ) fatal ("Key with tag %u found multiple times\n", searchtag); if ( (c = dki_setstatus_preservetime (dkp, action)) != 0 ) fatal ("Couldn't change status of key %u: %d\n", searchtag, c); break; case 19: /* remove (rename) key file */ if ( (dkp = (dki_t *)zkt_search (data, searchtag, keyname)) == NULL ) fatal ("Key with tag %u not found\n", searchtag); else if ( dkp == (void *) 01 ) fatal ("Key with tag %u found multiple times\n", searchtag); dki_remove (dkp); break; case 20: /* destroy the key (remove the files!) */ if ( (dkp = (dki_t *)zkt_search (data, searchtag, keyname)) == NULL ) fatal ("Key with tag %u not found\n", searchtag); else if ( dkp == (void *) 01 ) fatal ("Key with tag %u found multiple times\n", searchtag); dki_destroy (dkp); break; case 'R': if ( (dkp = (dki_t *)zkt_search (data, searchtag, keyname)) == NULL ) fatal ("Key with tag %u not found\n", searchtag); else if ( dkp == (void *) 01 ) fatal ("Key with tag %u found multiple times\n", searchtag); if ( (c = dki_setstatus (dkp, action)) != 0 ) fatal ("Couldn't change status of key %u: %d\n", searchtag, c); break; case '1': /* ksk rollover new key */ case '2': /* ksk rollover publish DS */ case '3': /* ksk rollover delete old key */ case '0': /* ksk rollover status */ ksk_roll (kskdomain, action - '0', data, config); break; case 'F': zkt_setkeylifetime (data); /* fall through */ default: zkt_list_keys (data); } return 0; }
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; }