/* * Try to match a given name to localhost names (v4 and v6). * * If a match is found, the address in network byte order is copied in the * buffer thus len must match the size of the given address family and 1 is * returned. * * If NO match is found, 0 is return and buf is untouched. * * If len is the wrong size, -EINVAL is returned and buf is untouched. */ ATTR_HIDDEN int utils_localhost_resolve(const char *name, int af, void *buf, size_t len) { const char *entry; assert(name); assert(buf); if (af == AF_INET) { const in_addr_t addr = htonl(TSOCKS_LOOPBACK); entry = match_name(name, localhost_names_v4); if (entry) { if (len < sizeof(in_addr_t)) { /* Size of buffer is not large enough. */ goto error; } memcpy(buf, &addr, sizeof(addr)); goto match; } } else if (af == AF_INET6) { const uint8_t addr[] = TSOCKS_LOOPBACK6; entry = match_name(name, localhost_names_v6); if (entry) { if (len < sizeof(addr)) { /* Size of buffer is not large enough. */ goto error; } memcpy(buf, addr, sizeof(addr)); goto match; } } else { /* Unknown family type. */ assert(0); goto error; } /* No match. */ return 0; match: /* Match found. */ return 1; error: return -EINVAL; }
int device_not_found(char *dev, char* errbuf){ pcap_if_t *dev_list; if (pcap_findalldevs(&dev_list, errbuf)==-1){ printf("%s\n",errbuf); exit(1); } pcap_if_t *dev_it; for (dev_it = dev_list; dev_it != NULL; dev_it = dev_it->next) if (match_name(dev_it->name, dev)) return 0; return 1; }
String INIFile::getValue(const String& section_name, const String& key) const { if (!section_index_.has(section_name) || key.isEmpty() || !section_index_[section_name]->key_map_.has(key)) { return UNDEFINED; } // get the part of the line behind the "=" String match_name((*section_index_[section_name]->key_map_[key]).after('=', 0)); match_name.trim(); return match_name; }
unsigned as_find_containing(unsigned off, paddr_t start, paddr_t end, const char *container) { struct asinfo_entry *as; struct asinfo_entry *base; struct asinfo_entry *stop; as = base = lsp.asinfo.p; if(off != AS_NULL_OFF) { as = ((struct asinfo_entry *)((uint8_t *)as + off)) + 1; } stop = (struct asinfo_entry *)((uint8_t *)base + lsp.asinfo.size); for( ;; ) { if(as >= stop) return(AS_NULL_OFF); if(match_name(base, as, container)) { if((start >= as->start) && (start <= as->end)) break; if((end >= as->start) && (end <= as->end)) break; if((start <= as->start) && (end >= as->end)) break; } ++as; } return((uintptr_t)as - (uintptr_t)base); }
/* Callback for the partition directory */ static uint8_t pdir_refill(buffer_t* buf) { cbmdirent_t dent; buf->position = 0; /* read volume name */ while(buf->pvt.pdir.part < max_part) { if (disk_label(buf->pvt.pdir.part, dent.name)) { free_buffer(buf); return 1; } dent.blocksize = buf->pvt.pdir.part+1; if (partition[buf->pvt.pdir.part].fop == &d64ops) { /* Use the correct partition type for Dxx images */ dent.typeflags = (partition[buf->pvt.pdir.part].imagetype & D64_TYPE_MASK) + TYPE_NAT - 1; } else { /* Anything else is "native" */ dent.typeflags = TYPE_NAT; } buf->pvt.pdir.part++; /* Parse the name pattern */ if (buf->pvt.pdir.matchstr && !match_name(buf->pvt.pdir.matchstr, &dent, 0)) continue; createentry(&dent, buf, DIR_FMT_CBM); return 0; } buf->lastused = 1; buf->sendeoi = 1; memset(buf->data,0,2); return 0; }
static void select_id(expression_type parent_type, struct selection *selection, const freesasa_structure *structure, const char *id) { int count = 0, match, i; assert(id); for (i = 0; i < selection->size; ++i) { match = 0; switch(parent_type) { case E_NAME: match = match_name(structure, id, i); break; case E_SYMBOL: match = match_symbol(structure, id, i); break; case E_RESN: match = match_resn(structure, id, i); break; case E_RESI: match = match_resi(structure, id, i); break; case E_CHAIN: match = match_chain(structure, id, i); break; default: assert(0); break; } if (match) selection->atom[i] = 1; count += match; } if (count == 0) freesasa_warn("Found no matches to %s '%s', typo?", e_str(parent_type),id); }
static TTF_Font *search_font_config(astring name, bool bold, bool italic, bool underline, bool &bakedstyles) { TTF_Font *font = (TTF_Font *)NULL; FcConfig *config; FcPattern *pat; FcObjectSet *os; FcFontSet *fontset; FcValue val; config = FcConfigGetCurrent(); pat = FcPatternCreate(); os = FcObjectSetCreate(); FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *)name.cstr()); // try and get a font with the requested styles baked-in if (bold) { if (italic) { FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Bold Italic"); } else { FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Bold"); } } else if (italic) { FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Italic"); } else { FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Regular"); } FcPatternAddString(pat, FC_FONTFORMAT, (const FcChar8 *)"TrueType"); FcObjectSetAdd(os, FC_FILE); fontset = FcFontList(config, pat, os); for (int i = 0; i < fontset->nfont; i++) { if (FcPatternGet(fontset->fonts[i], FC_FILE, 0, &val) != FcResultMatch) { continue; } if (val.type != FcTypeString) { continue; } mame_printf_verbose("Matching font: %s\n", val.u.s); { astring match_name((const char*)val.u.s); font = TTF_OpenFont_Magic(match_name, POINT_SIZE); } if (font) { bakedstyles = true; break; } } // didn't get a font above? try again with no baked-in styles if (!font) { FcPatternDestroy(pat); FcFontSetDestroy(fontset); pat = FcPatternCreate(); FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *)name.cstr()); FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Regular"); FcPatternAddString(pat, FC_FONTFORMAT, (const FcChar8 *)"TrueType"); fontset = FcFontList(config, pat, os); for (int i = 0; i < fontset->nfont; i++) { if (FcPatternGet(fontset->fonts[i], FC_FILE, 0, &val) != FcResultMatch) { continue; } if (val.type != FcTypeString) { continue; } mame_printf_verbose("Matching unstyled font: %s\n", val.u.s); { astring match_name((const char*)val.u.s); font = TTF_OpenFont_Magic(match_name, POINT_SIZE); } if (font) { break; } } } FcPatternDestroy(pat); FcObjectSetDestroy(os); FcFontSetDestroy(fontset); return font; }
results_t parse_tree(std::istream* in){ auto trim = [](std::string str){ str.erase(0,str.find_first_not_of(' ')); str.erase(str.find_last_not_of(' ')+1); return str; }; if(in==nullptr) throw std::invalid_argument("Input file cannot be null pointer."); if(!in->good()) throw std::runtime_error("Input file cannot be read from."); results_t results; std::queue<std::pair<std::string,std::string>> players; std::string line; std::regex name_regex("(\\d*\\.?\\s*)?([A-Za-z \\-\\.]+)\\s*"); std::regex score_regex("(\\d)\\s*[\\-\\/]\\s*(\\d)\\s*|ret\\.?"); std::pair<std::string,std::string> opponents; bool first_opponent_set=false; bool burn_in = true; while(getline(*in,line)){ std::smatch m; if(std::regex_match(line,m,name_regex)){ // if line is a name std::string name = trim(m[2].str()); if(players.empty()){ // add to list of names if(first_opponent_set){ opponents.second = name; players.push(opponents); } else{ opponents.first = name; } first_opponent_set = !first_opponent_set; continue; } auto names = players.front(); if(!(match_name(name, names.first) || match_name(name, names.second))){ // if name is not the expected name if(burn_in){ // and we don't have full list of names yet. // add to list of names if(first_opponent_set){ opponents.second = name; players.push(opponents); } else{ opponents.first = name; } first_opponent_set = !first_opponent_set; } else{ throw std::runtime_error("Unexpected name '" + name+ "'." + "Expected '"+players.front().first+"'" + " OR '"+players.front().second+"'."); } } else{ // we have the expected name // ensure names.first is the winner if(!match_name(name,names.first)) swap(names.first,names.second); // Move forward in the list of expected players players.pop(); burn_in = false; // competitors must be known now std::string score_line; std::smatch sm; getline(*in,score_line); // Extract score from matches int score1=0,score2=0; while(std::regex_search(score_line,sm,score_regex)){ if(stoi(sm[1].str())>stoi(sm[2].str())){ score1++; } else{ score2++; } score_line=score_line.substr(sm[0].str().length()); } bool walkover=score_line=="wo"; if(score1+score2<1 && !walkover){ throw std::runtime_error("Expected score line. Got '"+score_line+"'"); } // Add outcome to list of results results.push_back(outcome_t(names.first,names.second,score1,score2,0)); // Add winner to competitors if(first_opponent_set){ opponents.second = names.first; players.push(opponents); } else{ opponents.first = names.first; } first_opponent_set = !first_opponent_set; } } else{ throw std::runtime_error("Expected name, got '"+line+"'"); } } return results; }
/******************************************************************** * FUNCTION parse_top * * Parse, and fill one val_value_t struct * * Error messages are printed by this function!! * Do not duplicate error messages upon error return * * * INPUTS: * tkc == token chain * val == value iniitalized and could be already filled in * keepvals == TRUE to save existing values in 'val', as needed * FALSE to overwrite old values in 'val', as needed * * RETURNS: * status of the operation *********************************************************************/ static status_t parse_top (tk_chain_t *tkc, val_value_t *val, boolean keepvals) { status_t res; boolean done; res = NO_ERR; /* get the container name */ done = FALSE; while (!done) { res = match_name(tkc, obj_get_name(val->obj)); if (res == ERR_NCX_EOF) { if (LOGDEBUG) { log_debug("\nconf: object '%s' not found in file '%s'", obj_get_name(val->obj), tkc->filename); } return NO_ERR; } else if (res != NO_ERR) { res = skip_object(tkc); if (res != NO_ERR) { return res; } } else { done = TRUE; } } /* get a left brace */ res = consume_tk(tkc, TK_TT_LBRACE); if (res != NO_ERR) { ncx_conf_exp_err(tkc, res, "left brace to start object"); return res; } done = FALSE; while (!done) { res = get_tk(tkc); if (res == ERR_NCX_EOF) { return NO_ERR; } else if (res != NO_ERR) { return res; } /* allow an empty parmset */ if (TK_CUR_TYP(tkc)==TK_TT_RBRACE) { done = TRUE; } else { res = parse_parm(tkc, val, keepvals); if (res != NO_ERR) { done = TRUE; } } } return res; } /* parse_top */
/** * This code analyzes a <name=value> pair within a cookie, within the * context of an HTTP request, which includes relavent information * about the host that it comes from */ void parse_http_cookie(struct TCPRECORD *sess, struct NetFrame *frame, const unsigned char *name, unsigned name_length, const unsigned char *value, unsigned value_length) { struct HTTPREQUEST *req = &sess->layer7.httpreq; unsigned char *dec; unsigned dec_length = value_length; if (dec_length > 1000) dec_length = 1000; switch (toupper(name[0])) { case 'C': /* MYSPACE COUNTRY CODE * Example: * COUNTRYCODE=MFMGCisGAQQBgjdYA%2FmgRTBDBgorBgEEAYI3WAMBoDUwMwIDAgABAgJmAwICAMAECOOUmLvDDv%2BRBBB6gRxsNuYMZ2M7SXM7N4fdBAgyFGPRkgkD7Q%3D%3D; */ if (match_name("COUNTRYCODE", name, name_length) && ends_with_t(".myspace.com", req->host)) { unsigned char *dec0; unsigned dec0_length; unsigned i; /* First, "uudecode" this */ dec0 = alloca(value_length); dec0_length = 0; for (i=0; i<value_length; i++) { if (value[i] != '%') dec0[dec0_length++] = value[i]; else { unsigned c=0; i++; if (i<value_length && isxdigit(value[i])) c = hexval(value[i++])<<4; if (i<value_length && isxdigit(value[i])) c |= hexval(value[i++]); dec0[dec0_length++] = (unsigned char)c; i--; } } /* Second, "base64 decode" this */ dec = alloca(dec0_length); dec_length = base64_decode(dec, dec_length, value, value_length); /* Third, "asn.1 decode" this */ { unsigned tag, len; const unsigned char *px = dec; unsigned offset = 0; unsigned length = dec_length; unsigned max_offset; tag = asn1_tag(px,length,&offset); len = asn1_length(frame,px,length, &offset); /* Process the big object */ if (tag == 0x30 && len != 0xFFFFFFFF) { max_offset = offset+len; tag = asn1_tag(px,max_offset,&offset); len = asn1_length(frame,px,max_offset, &offset); /* Process the OID */ if (tag == 0x06) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_OID("MySpace-CountryCode", px+offset, len), 0); } offset += len; } } } break; case 'D': /* go.com (including such properties as espn.com) put in their cookies some sort of location information. Here are some examples that were googled from the web: Z2JyO2VuZztsb25kb247YnJvYWRiYW5kOzU7NTs0Oy0xOzA1MS41MDA7LTAwMC4xMTc7ODI2OzEwMTk4OzQ3ODI7NTsK Z2JyO2VuZztsb25kb247YnJvYWRiYW5kOzU7NTs1Oy0xOzA1MS41MDA7LTAwMC4xMTc7ODI2OzEwMTk4OzQ3ODI7NTsK dXNhO21kO2NvbGxlZ2UgcGFyazt0MTs1OzQ7NDs1MTE7MDM4Ljk5NzstMDc2LjkyODs4NDA7MjE7MTU7NjsK dXNhO3R4O2RhbGxhczticm9hZGJhbmQ7NTs0OzQ7NjIzOzAzMi43ODc7LTA5Ni43OTk7ODQwOzQ0Ozc3OzY7Cg== dXNhO3R4O2RhbGxhczticm9hZGJhbmQ7NTs0OzQ7NjIzOzAzMi43ODc7LTA5Ni43OTk7ODQwOzQ0Ozc3OzY7Cg== dXNhO2dhO2F0bGFudGE7YnJvYWRiYW5kOzU7NTs1OzUyNDswMzMuNzQ5Oy0wODQuMzg4Ozg0MDsxMTszOzY7Cg== dXNhO29yO2JlYXZlcnRvbjticm9hZGJhbmQ7NTszOzM7ODIwOzA0NS40OTE7LTEyMi44MDU7ODQwOzM4OzYyOzY7Cg== dXNhO3R4O2RhbGxhczticm9hZGJhbmQ7NTs0OzQ7NjIzOzAzMi43ODc7LTA5Ni43OTk7ODQwOzQ0Ozc3OzY7Cg== dXNhO3R4O2RhbGxhczticm9hZGJhbmQ7NTs0OzM7NjIzOzAzMi43ODc7LTA5Ni43OTk7ODQwOzQ0Ozc3OzY7Cg== */ if (match_name("DE2", name, name_length) && ends_with_t(".go.com", req->host)) { dec = alloca(dec_length); dec_length = base64_decode(dec, dec_length, value, value_length); JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("GO-LOC", dec, dec_length), 0); } break; case 'E': if (starts_with("EMAIL", name, name_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("e-mail", value, value_length), 0); } if (starts_with("E-MAIL", name, name_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("e-mail", value, value_length), 0); } break; case 'G': /* d78da8e7eb998e8f571c4c641b104c60cxsAAABVUyxnYSxsYXdyZW5jZXZpbGxlLCwsLCw1MjQ= bf8e3d7c0474fa9da14b6551e6846ec7cxUAAABVUyxnYSxhdGxhbnRhLCwsLCw1MjQ= */ if (match_name("GEO", name, name_length) && ends_with_t(".youtube.com", req->host)) { unsigned i; unsigned comma_count=0; dec = alloca(dec_length); dec_length = base64_decode(dec, dec_length, value, value_length); for (i=dec_length; i>0; i--) { if (dec[i-1] == ',') { /*US,ga,lawrenceville,,,,,524*/ if (++comma_count == 7) break; } } if (i>3 && isalpha(dec[i-2]) && isalpha(dec[i-3])) { unsigned offset=i-3; while (i<dec_length && comma_count > 5) { if (dec[i] == ',') comma_count--; i++; } JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("YouTube-Loc", dec+offset, i-offset-1), 0); } } /*Example: * [email protected]/769779 */ if (match_name("GMAILCHAT", name, name_length) && ends_with_t("mail.google.com", req->host)) { unsigned j; for (j=0; j<value_length && value[j] != '/'; j++) ; JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("e-mail", value, j), 0); } break; case 'I': if (match_name("ID", name, name_length) && ends_with_t(".doubleclick.net", req->host)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("DoubleClick", value, value_length), 0); } break; case 'L': if (match_name("LOGIN", name, name_length) || match_name("LOGIN_X", name, name_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("login", value, value_length), 0); if (ends_with_t(".facebook.com", req->host)) { req->login = stringtab_lookup(sess->eng->stringtab, value, value_length); JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("Facebook-user", req->login->str, req->login->length), 0); } if (contains("@", value, value_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("e-mail", value, value_length), 0); } else if (contains("%40", value, value_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("e-mail", value, value_length), 0); } } break; case 'M': /*http://facebook.com *m_user = warnerc2%40gpc.edu%3A71101757%3ASwUchOEuvzIbYo7E*/ if (match_name("M_USER", name, name_length)) { if (ends_with_t(".facebook.com", req->host)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("e-mail", value, value_length), 0); } } /* http://login.live.com/login.srf * [email protected] */ if (match_name("MSPPRE", name, name_length)) { if (ends_with_t(".live.com", req->host)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("e-mail", value, value_length), 0); } } /* Canadian Broadcasting */ if (match_name("MyCBCSignIn", name, name_length)) { if (ends_with_t(".cbc.ca", req->host)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("e-mail", value, value_length), 0); } } if (match_name("ME", name, name_length)) { if (ends_with_t(".myspace.com", req->host)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("e-mail", value, value_length), 0); } } break; case 'P': if (starts_with("PASSWORD", name, name_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("password", value, value_length), 0); } break; case 'U': if (starts_with("USERNAME", name, name_length)) { JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_PRINT("username", value, value_length), 0); } break; case 'W': if (starts_with("WATCHED_VIDEO_ID_LIST_", name, name_length)) { size_t l = sizeof("WATCHED_VIDEO_ID_LIST_")-1; JOTDOWN(sess->eng->ferret, JOT_SRC("ID-IP", frame), JOT_URLENC("YouTube-ID", name+l, name_length-l), 0); } break; } }
int read_mountlist (char *filename) { FILE *fp; char *name, *value; int i; unsigned long ul_val; long l_val; char *errptr; /* Check if pathname is absolute, otherwise append to /sys/dev/mnt/ */ if ((fp = fopen (filename, "r")) == NULL) return -1; while (fgets (line, 256, fp) != NULL) { if (line[0] == '#') continue; name = line; if ((value = find_equals (line)) == NULL) continue; *value = '\0'; value++; name = trim_spaces (name); value = trim_spaces (value); i = match_name (name); switch (i) { case MOUNT: strlcpy (me.mount_name, value, MOUNTENVIRON_STR_MAX); break; case HANDLER: strlcpy (me.handler_name, value, MOUNTENVIRON_STR_MAX); break; case DEVICE: strlcpy (me.device_name, value, MOUNTENVIRON_STR_MAX); break; case STARTUP: strlcpy (me.startup_args, value, MOUNTENVIRON_STR_MAX); break; case HUNIT: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.handler_unit = ul_val; break; case HFLAGS: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.handler_flags = ul_val; break; case UNIT: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.device_unit = ul_val; break; case FLAGS: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.device_flags = ul_val; break; case BLOCKSIZE: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.block_size = ul_val; break; case PARTITIONSTART: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.partition_start = ul_val; break; case PARTITIONEND: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.partition_end = ul_val; break; case RESERVEDBLOCKS: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.reserved_blocks = ul_val; break; case BUFFERS: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.buffer_cnt = ul_val; break; case PRIORITY: l_val = strtol (value, &errptr, 0); if (errptr == NULL) me.boot_priority = l_val; break; case BAUD: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.baud = ul_val; break; case REMOVABLE: /* signed flag */ ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.removable = ul_val; break; case WRITABLE: /* signed flag */ ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.writable = ul_val; break; case WRITETHRUCRITICAL: /* signed flag */ l_val = strtol (value, &errptr, 0); if (errptr == NULL) me.writethru_critical = l_val; break; case WRITEBACKDELAY: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.writeback_delay = ul_val; break; case MAXTRANSFER: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.max_transfer = ul_val; break; case CONTROLFLAGS: ul_val = strtoul (value, &errptr, 0); if (errptr == NULL) me.control_flags = ul_val; break; default: printf ("Variable not recognized : %s\n", name); } } fclose (fp); return kos_mount (&me); }