From b8637b555460adcaf0184f28db6f2a961c8dbe24 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Tue, 3 Aug 2004 11:26:30 +0000 Subject: [PATCH] Minor changes in formating and to address_conf.c git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1506 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/lib/address_conf.c | 362 +++++++++++++++++----------------- bacula/src/lib/address_conf.h | 16 +- 2 files changed, 189 insertions(+), 189 deletions(-) diff --git a/bacula/src/lib/address_conf.c b/bacula/src/lib/address_conf.c index d978b18fc2..82a2e6efd5 100644 --- a/bacula/src/lib/address_conf.c +++ b/bacula/src/lib/address_conf.c @@ -41,7 +41,7 @@ IPADDR::IPADDR(const IPADDR &src) : type(src.type) IPADDR::IPADDR(int af) : type(R_EMPTY) { if (!(af == AF_INET6 || af == AF_INET)) { - Emsg1(M_ERROR_TERM, 0, _("Only ipv4 and ipv6 are supported(%d)\n"), af); + Emsg1(M_ERROR_TERM, 0, _("Only ipv4 and ipv6 are supported(%d)\n"), af); } saddr = &buf.dontuse; saddr4 = &buf.dontuse4; @@ -50,11 +50,11 @@ IPADDR::IPADDR(int af) : type(R_EMPTY) #endif saddr->sa_family = af; if (af == AF_INET) { - saddr4->sin_port = 0xffff; + saddr4->sin_port = 0xffff; } #ifdef HAVE_IPV6 else { - saddr6->sin6_port = 0xffff; + saddr6->sin6_port = 0xffff; } #endif #ifdef HAVE_SA_LEN @@ -64,98 +64,102 @@ IPADDR::IPADDR(int af) : type(R_EMPTY) saddr->sa_len = sizeof(sockaddr_in); #endif #endif - set_addr_any(); + set_addr_any(); } void IPADDR::set_type(i_type o) { - type = o; + type = o; } IPADDR::i_type IPADDR::get_type() const { - return type; + return type; } unsigned short IPADDR::get_port() const { - unsigned short port = 0; - if (saddr->sa_family == AF_INET) { - port = saddr4->sin_port; - } + unsigned short port = 0; + if (saddr->sa_family == AF_INET) { + port = saddr4->sin_port; + } #ifdef HAVE_IPV6 - else { - port = saddr6->sin6_port; - } + else { + port = saddr6->sin6_port; + } #endif - return port; + return port; } void IPADDR::set_port(unsigned short port) { - if (saddr->sa_family == AF_INET) { - saddr4->sin_port = port; - } + if (saddr->sa_family == AF_INET) { + saddr4->sin_port = port; + } #ifdef HAVE_IPV6 - else { - saddr6->sin6_port = port; - } + else { + saddr6->sin6_port = port; + } #endif } int IPADDR::get_family() const { - return saddr->sa_family; -} + return saddr->sa_family; +} struct sockaddr *IPADDR::get_sockaddr() { - return saddr; + return saddr; } int IPADDR::get_sockaddr_len() { - return saddr->sa_family == AF_INET ? sizeof(*saddr4) : sizeof(*saddr6); +#ifdef HAVE_IPV6 + return saddr->sa_family == AF_INET ? sizeof(*saddr4) : sizeof(*saddr6); +#else + return sizeof(*saddr4); +#endif } void IPADDR::copy_addr(IPADDR *src) { - if (saddr->sa_family == AF_INET) { - saddr4->sin_addr.s_addr = src->saddr4->sin_addr.s_addr; - } + if (saddr->sa_family == AF_INET) { + saddr4->sin_addr.s_addr = src->saddr4->sin_addr.s_addr; + } #ifdef HAVE_IPV6 - else { - saddr6->sin6_addr = src->saddr6->sin6_addr; - } + else { + saddr6->sin6_addr = src->saddr6->sin6_addr; + } #endif } void IPADDR::set_addr_any() { - if (saddr->sa_family == AF_INET) { - saddr4->sin_addr.s_addr = INADDR_ANY; - } + if (saddr->sa_family == AF_INET) { + saddr4->sin_addr.s_addr = INADDR_ANY; + } #ifdef HAVE_IPV6 - else { - saddr6->sin6_addr= in6addr_any; - } + else { + saddr6->sin6_addr= in6addr_any; + } #endif } void IPADDR::set_addr4(struct in_addr *ip4) { - if (saddr->sa_family != AF_INET) { - Emsg1(M_ERROR_TERM, 0, _("It was tried to assign a ipv6 address to a ipv4(%d)\n"), saddr->sa_family); - } - saddr4->sin_addr = *ip4; + if (saddr->sa_family != AF_INET) { + Emsg1(M_ERROR_TERM, 0, _("It was tried to assign a ipv6 address to a ipv4(%d)\n"), saddr->sa_family); + } + saddr4->sin_addr = *ip4; } #ifdef HAVE_IPV6 void IPADDR::set_addr6(struct in6_addr *ip6) { - if (saddr->sa_family != AF_INET6) { - Emsg1(M_ERROR_TERM, 0, _("It was tried to assign a ipv4 address to a ipv6(%d)\n"), saddr->sa_family); - } - saddr6->sin6_addr = *ip6; + if (saddr->sa_family != AF_INET6) { + Emsg1(M_ERROR_TERM, 0, _("It was tried to assign a ipv4 address to a ipv6(%d)\n"), saddr->sa_family); + } + saddr6->sin6_addr = *ip6; } #endif @@ -163,35 +167,41 @@ const char *IPADDR::get_address(char *outputbuf, int outlen) { outputbuf[0] = '\0'; #if defined(HAVE_INET_NTOP) && defined(HAVE_IPV6) - inet_ntop(saddr->sa_family, - saddr->sa_family == AF_INET ? - (void*)&(saddr4->sin_addr) : (void*)&(saddr6->sin6_addr), - outputbuf, - outlen); + inet_ntop(saddr->sa_family, saddr->sa_family == AF_INET ? + (void*)&(saddr4->sin_addr) : (void*)&(saddr6->sin6_addr), + outputbuf, outlen); #else - strcpy(outputbuf, inet_ntoa(saddr4->sin_addr)); + bstrncpy(outputbuf, inet_ntoa(saddr4->sin_addr), outlen); #endif return outputbuf; } +const char *IPADDR::build_address_str(char *buf, int blen) +{ + char tmp[1024]; + snprintf(buf, blen, "host[%s:%s:%hu] ", + get_family() == AF_INET ? "ipv4" : "ipv6", + get_address(tmp, sizeof(tmp) - 1), ntohs(get_port())); + return buf; +} const char *build_addresses_str(dlist *addrs, char *buf, int blen) { - if (!addrs->size()) { - bstrncpy(buf, "", blen); - return buf; - } - char *work = buf; - IPADDR *p; - foreach_dlist(p, addrs) { - char tmp[1024]; - int len = snprintf(work, blen, "%s", p->build_address_str(tmp, sizeof(tmp))); - if (len < 0) - break; - work += len; - blen -= len; - } + if (!addrs->size()) { + bstrncpy(buf, "", blen); return buf; + } + char *work = buf; + IPADDR *p; + foreach_dlist(p, addrs) { + char tmp[1024]; + int len = snprintf(work, blen, "%s", p->build_address_str(tmp, sizeof(tmp))); + if (len < 0) + break; + work += len; + blen -= len; + } + return buf; } const char *get_first_address(dlist * addrs, char *outputbuf, int outlen) @@ -226,7 +236,7 @@ void init_default_addresses(dlist ** out, int port) } int add_address(dlist ** out, IPADDR::i_type type, unsigned short defaultport, int family, - const char *hostname_str, const char *port_str, char **errstr) + const char *hostname_str, const char *port_str, char **errstr) { IPADDR *iaddr; IPADDR *jaddr; @@ -241,22 +251,22 @@ int add_address(dlist ** out, IPADDR::i_type type, unsigned short defaultport, i } type = (type == IPADDR::R_SINGLE_PORT - || type == IPADDR::R_SINGLE_ADDR) ? IPADDR::R_SINGLE : type; + || type == IPADDR::R_SINGLE_ADDR) ? IPADDR::R_SINGLE : type; if (type != IPADDR::R_DEFAULT) { IPADDR *def = 0; foreach_dlist(iaddr, addrs) { - if (iaddr->get_type() == IPADDR::R_DEFAULT) { - def = iaddr; - } else if (iaddr->get_type() != type) { - *errstr = (char *)malloc(1024); - bsnprintf(*errstr, 1023, + if (iaddr->get_type() == IPADDR::R_DEFAULT) { + def = iaddr; + } else if (iaddr->get_type() != type) { + *errstr = (char *)malloc(1024); + bsnprintf(*errstr, 1023, "the old style addresses could mixed with new style"); - return 0; - } + return 0; + } } if (def) { - addrs->remove(def); - delete def; + addrs->remove(def); + delete def; } } @@ -266,16 +276,16 @@ int add_address(dlist ** out, IPADDR::i_type type, unsigned short defaultport, i } else { int pnum = atol(port_str); if (0 < pnum && pnum < 0xffff) { - port = htons(pnum); + port = htons(pnum); } else { struct servent *s = getservbyname(port_str, "tcp"); - if (s) { - port = s->s_port; - } else { - *errstr = (char *)malloc(1024); + if (s) { + port = s->s_port; + } else { + *errstr = (char *)malloc(1024); bsnprintf(*errstr, 1023, "can't resolve service(%s)", port_str); - return 0; - } + return 0; + } } } @@ -284,45 +294,45 @@ int add_address(dlist ** out, IPADDR::i_type type, unsigned short defaultport, i if (!hostaddrs) { *errstr = (char *)malloc(1024); bsnprintf(*errstr, 1023, "can't resolve hostname(%s) %s", hostname_str, - myerrstr); + myerrstr); return 0; } if (intype == IPADDR::R_SINGLE_PORT || intype == IPADDR::R_SINGLE_ADDR) { IPADDR *addr; if (addrs->size()) { - addr = (IPADDR *) addrs->first(); + addr = (IPADDR *) addrs->first(); } else { - addr = new IPADDR(family); - addr->set_type(type); - addr->set_port(defaultport); - addr->set_addr_any(); - addrs->append(addr); + addr = new IPADDR(family); + addr->set_type(type); + addr->set_port(defaultport); + addr->set_addr_any(); + addrs->append(addr); } if (intype == IPADDR::R_SINGLE_PORT) { - addr->set_port(port); + addr->set_port(port); } if (intype == IPADDR::R_SINGLE_ADDR) { - addr->copy_addr((IPADDR *) (hostaddrs->first())); + addr->copy_addr((IPADDR *) (hostaddrs->first())); } } else { foreach_dlist(iaddr, hostaddrs) { - IPADDR *clone; - /* for duplicates */ - foreach_dlist(jaddr, addrs) { - if (iaddr->get_sockaddr_len() == jaddr->get_sockaddr_len() && + IPADDR *clone; + /* for duplicates */ + foreach_dlist(jaddr, addrs) { + if (iaddr->get_sockaddr_len() == jaddr->get_sockaddr_len() && !memcmp(iaddr->get_sockaddr(), jaddr->get_sockaddr(), iaddr->get_sockaddr_len())) - { - goto skip; /* no price */ - } - } - clone = new IPADDR(*iaddr); - clone->set_type(type); - clone->set_port(port); - addrs->append(clone); + { + goto skip; /* no price */ + } + } + clone = new IPADDR(*iaddr); + clone->set_type(type); + clone->set_port(port); + addrs->append(clone); skip: - continue; + continue; } } free_addresses(hostaddrs); @@ -340,35 +350,35 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) /* * = { [[ip|ipv4|ipv6] = { [[addr|port] = [^ ]+[\n;]+] }]+ } - * or my tests - * positiv - * = { ip = { addr = 1.2.3.4; port = 1205; } ipv4 = { addr = 1.2.3.4; port = http; } } - * = { ip = { - * addr = 1.2.3.4; port = 1205; } - * ipv4 = { - * addr = 1.2.3.4; port = http; } - * ipv6 = { - * addr = 1.2.3.4; - * port = 1205; - * } - * ip = { - * addr = 1.2.3.4 - * port = 1205 - * } - * ip = { - * addr = 1.2.3.4 - * } - * ip = { - * addr = 2001:220:222::2 - * } - * ip = { - * addr = bluedot.thun.net - ( } - * } - * negativ - * = { ip = { } } - * = { ipv4 { addr = doof.nowaytoheavenxyz.uhu; } } - * = { ipv4 { port = 4711 } } + * or my tests + * positiv + * = { ip = { addr = 1.2.3.4; port = 1205; } ipv4 = { addr = 1.2.3.4; port = http; } } + * = { ip = { + * addr = 1.2.3.4; port = 1205; } + * ipv4 = { + * addr = 1.2.3.4; port = http; } + * ipv6 = { + * addr = 1.2.3.4; + * port = 1205; + * } + * ip = { + * addr = 1.2.3.4 + * port = 1205 + * } + * ip = { + * addr = 1.2.3.4 + * } + * ip = { + * addr = 2001:220:222::2 + * } + * ip = { + * addr = bluedot.thun.net + ( } + * } + * negativ + * = { ip = { } } + * = { ipv4 { addr = doof.nowaytoheavenxyz.uhu; } } + * = { ipv4 { port = 4711 } } */ token = skip_to_next_not_eol(lc); @@ -385,11 +395,11 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) scan_err1(lc, _("Expected a string, got: %s"), lc->str); } if (!strcmp("ip", lc->str) || !strcmp("ipv4", lc->str)) { - family = AF_INET; + family = AF_INET; } #ifdef HAVE_IPV6 else if (!strcmp("ipv6", lc->str)) { - family = AF_INET6; + family = AF_INET6; } #endif else { @@ -407,50 +417,50 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) exist = EMPTYLINE; port_str[0] = hostname_str[0] = '\0'; do { - if (token != T_IDENTIFIER) { + if (token != T_IDENTIFIER) { scan_err1(lc, _("Expected a identifier [addr|port], got: %s"), lc->str); - } + } if (!strcmp("port", lc->str)) { - next_line = PORTLINE; - if (exist & PORTLINE) { + next_line = PORTLINE; + if (exist & PORTLINE) { scan_err0(lc, _("Only one port per address block")); - } - exist |= PORTLINE; + } + exist |= PORTLINE; } else if (!strcmp("addr", lc->str)) { - next_line = ADDRLINE; - if (exist & ADDRLINE) { + next_line = ADDRLINE; + if (exist & ADDRLINE) { scan_err0(lc, _("Only one addr per address block")); - } - exist |= ADDRLINE; - } else { + } + exist |= ADDRLINE; + } else { scan_err1(lc, _("Expected a identifier [addr|port], got: %s"), lc->str); - } - token = lex_get_token(lc, T_ALL); - if (token != T_EQUALS) { + } + token = lex_get_token(lc, T_ALL); + if (token != T_EQUALS) { scan_err1(lc, _("Expected a equal =, got: %s"), lc->str); - } - token = lex_get_token(lc, T_ALL); - switch (next_line) { - case PORTLINE: - if (! - (token == T_UNQUOTED_STRING || token == T_NUMBER - || token == T_IDENTIFIER)) { + } + token = lex_get_token(lc, T_ALL); + switch (next_line) { + case PORTLINE: + if (! + (token == T_UNQUOTED_STRING || token == T_NUMBER + || token == T_IDENTIFIER)) { scan_err1(lc, _("Expected a number or a string, got: %s"), lc->str); - } - bstrncpy(port_str, lc->str, sizeof(port_str)); - break; - case ADDRLINE: - if (!(token == T_UNQUOTED_STRING || token == T_IDENTIFIER)) { + } + bstrncpy(port_str, lc->str, sizeof(port_str)); + break; + case ADDRLINE: + if (!(token == T_UNQUOTED_STRING || token == T_IDENTIFIER)) { scan_err1(lc, _("Expected a ipnumber or a hostname, got: %s"), - lc->str); - } - bstrncpy(hostname_str, lc->str, sizeof(hostname_str)); - break; - case EMPTYLINE: + lc->str); + } + bstrncpy(hostname_str, lc->str, sizeof(hostname_str)); + break; + case EMPTYLINE: scan_err0(lc, _("Statemachine missmatch")); - break; - } - token = skip_to_next_not_eol(lc); + break; + } + token = skip_to_next_not_eol(lc); } while (token == T_IDENTIFIER); if (token != T_EOB) { scan_err1(lc, _("Expected a end of block }, got: %s"), lc->str); @@ -458,11 +468,11 @@ void store_addresses(LEX * lc, RES_ITEM * item, int index, int pass) char *errstr; if (!add_address - ((dlist **) (item->value), IPADDR::R_MULTIPLE, htons(item->default_value), - family, hostname_str, port_str, &errstr)) { + ((dlist **) (item->value), IPADDR::R_MULTIPLE, htons(item->default_value), + family, hostname_str, port_str, &errstr)) { scan_err3(lc, _("Can't add hostname(%s) and port(%s) to addrlist (%s)"), - hostname_str, port_str, errstr); - free(errstr); + hostname_str, port_str, errstr); + free(errstr); } token = skip_to_next_not_eol(lc); } while ((token == T_IDENTIFIER || token == T_UNQUOTED_STRING)); @@ -479,7 +489,7 @@ void store_addresses_address(LEX * lc, RES_ITEM * item, int index, int pass) } char *errstr; if (!add_address((dlist **) (item->value), IPADDR::R_SINGLE_ADDR, - htons(item->default_value), AF_INET, lc->str, 0, &errstr)) { + htons(item->default_value), AF_INET, lc->str, 0, &errstr)) { scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errstr); free(errstr); } @@ -493,7 +503,7 @@ void store_addresses_port(LEX * lc, RES_ITEM * item, int index, int pass) } char *errstr; if (!add_address((dlist **) (item->value), IPADDR::R_SINGLE_PORT, - htons(item->default_value), AF_INET, 0, lc->str, &errstr)) { + htons(item->default_value), AF_INET, 0, lc->str, &errstr)) { scan_err2(lc, _("can't add port (%s) to (%s)"), lc->str, errstr); free(errstr); } @@ -510,5 +520,3 @@ void free_addresses(dlist * addrs) } - - diff --git a/bacula/src/lib/address_conf.h b/bacula/src/lib/address_conf.h index cc148404cb..6f6c554a2f 100644 --- a/bacula/src/lib/address_conf.h +++ b/bacula/src/lib/address_conf.h @@ -29,14 +29,12 @@ class IPADDR { public: typedef enum { R_SINGLE, R_SINGLE_PORT, R_SINGLE_ADDR, R_MULTIPLE, - R_DEFAULT, R_EMPTY + R_DEFAULT, R_EMPTY } i_type; IPADDR(int af); IPADDR(const IPADDR & src); private: - IPADDR() { - /* block this construction */ - } + IPADDR() { /* block this construction */ } i_type type; union { struct sockaddr dontuse; @@ -66,13 +64,8 @@ class IPADDR { #endif const char *get_address(char *outputbuf, int outlen); - const char *build_address_str(char *buf, int blen) { - char tmp[1024]; - snprintf(buf, blen, "host[%s:%s:%hu] ", - get_family() == AF_INET ? "ipv4" : "ipv6", - get_address(tmp, sizeof(tmp) - 1), ntohs(get_port())); - return buf; - } + const char *build_address_str(char *buf, int blen); + /* private */ dlink link; }; @@ -91,4 +84,3 @@ extern const char *get_first_address(dlist * addrs, char *outputbuf, int outlen) extern int get_first_port(dlist * addrs); extern const char *build_addresses_str(dlist *addrs, char *buf, int blen); - -- 2.39.2