// default initialisation procedure int DMPlugin::init(void* args) { bool lastplugin = *((bool*)args); if (!lastplugin) { // compile regex for matching supported user agents String r(cv["useragentregexp"]); if (r.length() > 0) { #ifdef DGDEBUG std::cout<<"useragent regexp: "<<r<<std::endl; #endif ua_match.comp(r.toCharArray()); } else { // no useragent regex? then default to .* #ifdef DGDEBUG std::cout<<"no useragent regular expression; defaulting to .*"<<std::endl; #endif alwaysmatchua = true; } if (!readStandardLists()) return -1; } #ifdef DGDEBUG else std::cout<<"Fallback DM plugin; no matching options loaded"<<std::endl; #endif return 0; }
// start the plugin - i.e. read in the configuration int CSPlugin::init(void* args) { if (!readStandardLists()) { //always return DGCS_ERROR; //include } // these return DGCS_OK; }
// start the plugin - i.e. read in the configuration int CSPlugin::init(void *args) { if (cv["scanpost"] == "on") scanpost = true; else scanpost = false; if (!readStandardLists()) { //always return DGCS_ERROR; //include } // these return DGCS_OK; }
// initialise the plugin - determine icap ip, port & url int icapinstance::init(void* args) { // always include these lists if (!readStandardLists()) { return DGCS_ERROR; } icapurl = cv["icapurl"]; // format: icap://icapserver:1344/avscan if (icapurl.length() < 3) { if (!is_daemonised) std::cerr << "Error reading icapurl option." << std::endl; syslog(LOG_ERR, "Error reading icapurl option."); return DGCS_ERROR; // it would be far better to do a test connection } icaphost = icapurl.after("//"); icapport = icaphost.after(":").before("/").toInteger(); if (icapport == 0) { icapport = 1344; } icaphost = icaphost.before("/"); if (icaphost.contains(":")) { icaphost = icaphost.before(":"); } struct hostent *host; if ((host = gethostbyname(icaphost.toCharArray())) == 0) { if (!is_daemonised) std::cerr << "Error resolving icap host address." << std::endl; syslog(LOG_ERR, "Error resolving icap host address."); return DGCS_ERROR; } icapip = inet_ntoa(*(struct in_addr *) host->h_addr_list[0]); #ifdef DGDEBUG std::cerr << "ICAP server address:" << icapip << std::endl; #endif // try to connect to the ICAP server and perform an OPTIONS request Socket icapsock; try { if (icapsock.connect(icapip.toCharArray(), icapport) < 0) { throw std::runtime_error("Could not connect to server"); } String line("OPTIONS " + icapurl + " ICAP/1.0\r\nHost: " + icaphost + "\r\n\r\n"); icapsock.writeString(line.toCharArray()); // parse the response char buff[8192]; // first line - look for 200 OK icapsock.getLine(buff, 8192, o.content_scanner_timeout); line = buff; #ifdef DGDEBUG std::cout << "ICAP/1.0 OPTIONS response:" << std::endl << line << std::endl; #endif if (line.after(" ").before(" ") != "200") { if (!is_daemonised) std::cerr << "ICAP response not 200 OK" << std::endl; syslog(LOG_ERR, "ICAP response not 200 OK"); return DGCS_WARNING; //throw std::runtime_error("Response not 200 OK"); } while (icapsock.getLine(buff, 8192, o.content_scanner_timeout) > 0) { line = buff; #ifdef DGDEBUG std::cout << line << std::endl; #endif if (line.startsWith("\r")) { break; } else if (line.startsWith("Preview:")) { usepreviews = true; previewsize = line.after(": ").toInteger(); } else if (line.startsWith("Server:")) { if (line.contains("AntiVir-WebGate")) { needsBody = true; } } else if (line.startsWith("X-Allow-Out:")) { if (line.contains("X-Infection-Found")) { supportsXIF = true; } } } icapsock.close(); } catch(std::exception& e) { if (!is_daemonised) std::cerr << "ICAP server did not respond to OPTIONS request: " << e.what() << std::endl; syslog(LOG_ERR, "ICAP server did not respond to OPTIONS request: %s", e.what()); return DGCS_ERROR; } #ifdef DGDEBUG if (usepreviews) std::cout << "Message previews enabled; size: " << previewsize << std::endl; else std::cout << "Message previews disabled" << std::endl; #endif return DGCS_OK; }