2
2
PowerDNS Versatile Database Driven Nameserver
3
Copyright (C) 2002 - 2006 PowerDNS.COM BV
3
Copyright (C) 2002 - 2010 PowerDNS.COM BV
5
5
This program is free software; you can redistribute it and/or modify
6
6
it under the terms of the GNU General Public License version 2
622
622
return dom.substr(0,dom.size()-1);
626
string labelReverse(const std::string& qname)
631
bool dotName = qname.find('.') != string::npos;
633
vector<string> labels;
634
stringtok(labels, qname, ". ");
638
string ret; // vv const_reverse_iter http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11729
639
for(vector<string>::reverse_iterator iter = labels.rbegin(); iter != labels.rend(); ++iter) {
640
if(iter != labels.rbegin())
641
ret.append(1, dotName ? ' ' : '.');
647
// do NOT feed trailing dots!
648
// www.powerdns.com, powerdns.com -> www
649
string makeRelative(const std::string& fqdn, const std::string& zone)
654
return fqdn.substr(0, fqdn.size() - zone.length() - 1); // strip domain name
658
string dotConcat(const std::string& a, const std::string &b)
660
if(a.empty() || b.empty())
666
int makeIPv6sockaddr(const std::string& addr, struct sockaddr_in6* ret)
668
struct addrinfo* res;
669
struct addrinfo hints;
670
memset(&hints, 0, sizeof(hints));
672
hints.ai_family = AF_INET6;
673
hints.ai_flags = AI_NUMERICHOST;
675
if(getaddrinfo(addr.c_str(), 0, &hints, &res) < 0) {
676
perror("getaddrinfo");
680
memcpy(ret, res->ai_addr, sizeof(*ret));
686
//! read a line of text from a FILE* to a std::string, returns false on 'no data'
687
bool stringfgets(FILE* fp, std::string& line)
693
if(!fgets(buffer, sizeof(buffer), fp))
694
return !line.empty();
697
} while(!strchr(buffer, '\n'));