Changeset 1744
- Timestamp:
- 12/01/10 11:51:26 (2 years ago)
- Location:
- branches/pdns-dns64/pdns
- Files:
-
- 2 modified
-
lua-pdns-recursor.cc (modified) (9 diffs)
-
powerdns-example-script.lua (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pdns-dns64/pdns/lua-pdns-recursor.cc
r1737 r1744 79 79 80 80 int res = sr.beginResolve(qname, QType(qtype), qclass, ret); 81 cerr<<"Result: "<<res<<endl;81 // cerr<<"Result: "<<res<<endl; 82 82 return res; 83 83 } … … 117 117 118 118 extern "C" { 119 119 #if 0 120 120 int getFakeAAAARecords(lua_State *lua) 121 121 { … … 158 158 return 2; 159 159 } 160 161 #endif 160 162 161 163 int netmaskMatchLua(lua_State *lua) … … 212 214 } 213 215 216 int getFakeAAAARecords(const std::string& qname, const std::string& prefix, vector<DNSResourceRecord>& ret) 217 { 218 int rcode=directResolve(qname, QType(QType::A), 1, ret); 219 220 ComboAddress prefixAddress(prefix); 221 222 BOOST_FOREACH(DNSResourceRecord& rr, ret) 223 { 224 if(rr.qtype.getCode() == QType::A && rr.d_place==DNSResourceRecord::ANSWER) { 225 ComboAddress ipv4(rr.content); 226 uint32_t tmp; 227 memcpy((void*)&tmp, &ipv4.sin4.sin_addr.s_addr, 4); 228 // tmp=htonl(tmp); 229 memcpy(((char*)&prefixAddress.sin6.sin6_addr.s6_addr)+12, &tmp, 4); 230 rr.content = prefixAddress.toString(); 231 rr.qtype = QType(QType::AAAA); 232 } 233 } 234 return rcode; 235 } 236 237 238 214 239 PowerDNSLua::PowerDNSLua(const std::string& fname) 215 240 { … … 232 257 lua_setglobal(d_lua, "matchnetmask"); 233 258 259 /* 234 260 lua_pushcfunction(d_lua, getFakeAAAARecords); 235 261 lua_setglobal(d_lua, "getFakeAAAARecords"); … … 237 263 lua_pushcfunction(d_lua, resolveName); 238 264 lua_setglobal(d_lua, "resolveName"); 239 265 */ 240 266 lua_pushcfunction(d_lua, logLua); 241 267 lua_setglobal(d_lua, "pdnslog"); … … 338 364 } 339 365 340 if(lua_pcall(d_lua, 3 + extraParameter, 2, 0)) {341 string error=string("lua error in '"+func+"' : ")+lua_tostring(d_lua, -1);366 if(lua_pcall(d_lua, 3 + extraParameter, 3, 0)) { 367 string error=string("lua error in '"+func+"' while processing query for '"+query+"|"+qtype.getName()+": ")+lua_tostring(d_lua, -1); 342 368 lua_pop(d_lua, 1); 343 369 throw runtime_error(error); … … 347 373 *variable |= d_variable; 348 374 375 376 if(!lua_isnumber(d_lua, 1)) { 377 string tocall = lua_tostring(d_lua,1); 378 string luaqname = lua_tostring(d_lua,2); 379 string luaprefix = lua_tostring(d_lua, 3); 380 lua_pop(d_lua, 3); 381 // cerr<<"should call '"<<tocall<<"' to finish off"<<endl; 382 ret.clear(); 383 res=getFakeAAAARecords(luaqname, luaprefix, ret); 384 return true; 385 // returned a followup 386 } 387 349 388 int newres = (int)lua_tonumber(d_lua, 1); // new rcode 350 389 if(newres < 0) { 351 390 // cerr << "handler did not handle"<<endl; 352 lua_pop(d_lua, 2);391 lua_pop(d_lua, 3); 353 392 return false; 354 393 } … … 402 441 } 403 442 404 lua_pop(d_lua, 2);443 lua_pop(d_lua, 3); 405 444 406 445 return true; -
branches/pdns-dns64/pdns/powerdns-example-script.lua
r1743 r1744 57 57 print ("nodata called for: ", remoteip, getlocaladdress(), domain, qtype) 58 58 if qtype ~= pdns.AAAA then return -1, {} end -- only AAAA records 59 for key,val in ipairs(records) 60 do 61 print(val.qtype, val.ttl) 62 end 63 64 rcode, ret=getFakeAAAARecords(domain, "fe80::21b:77ff:0:0") 59 -- for key,val in ipairs(records) 60 -- do 61 -- print(val.qtype, val.ttl) 62 -- end 63 65 64 setvariable() 66 return rcode, ret65 return "getFakeAAAARecords", domain, "fe80::21b:77ff:0:0" 67 66 end 68 67 … … 84 83 end 85 84 86 print(val.content)85 -- print(val.content) 87 86 end 88 87 return origrcode, records