MCPcopy Create free account
hub / github.com/3proxy/3proxy / scanipl

Function scanipl

src/conf.c:758–798  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

756}
757
758int scanipl(unsigned char *arg, struct iplist *dst){
759#ifndef NOIPV6
760 struct sockaddr_in6 sa;
761#else
762 struct sockaddr_in sa;
763#endif
764 char * slash, *dash;
765 int masklen, addrlen;
766 if((slash = strchr((char *)arg, '/'))) *slash = 0;
767 if((dash = strchr((char *)arg,'-'))) *dash = 0;
768
769 if(!getip46(46, arg, (struct sockaddr *)&sa)) return 1;
770 memcpy(&dst->ip_from, SAADDR(&sa), SAADDRLEN(&sa));
771 dst->family = *SAFAMILY(&sa);
772 if(dash){
773 if(!getip46(46, (unsigned char *)dash+1, (struct sockaddr *)&sa)) return 2;
774 memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa));
775 if(*SAFAMILY(&sa) != dst->family || memcmp(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)) < 0) return 3;
776 return 0;
777 }
778 memcpy(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa));
779 if(slash){
780 addrlen = SAADDRLEN(&sa);
781 masklen = atoi(slash+1);
782 if(masklen < 0 || masklen > (addrlen*8)) return 4;
783 else {
784 int i, nbytes = masklen / 8, nbits = (8 - (masklen % 8)) % 8;
785
786 for(i = addrlen; i>(nbytes + (nbits > 0)); i--){
787 ((unsigned char *)&dst->ip_from)[i-1] = 0x00;
788 ((unsigned char *)&dst->ip_to)[i-1] = 0xff;
789 }
790 for(;nbits;nbits--){
791 ((unsigned char *)&dst->ip_from)[nbytes] &= ~(0x01<<(nbits-1));
792 ((unsigned char *)&dst->ip_to)[nbytes] |= (0x01<<(nbits-1));
793 }
794 return 0;
795 }
796 }
797 return 0;
798}
799
800struct ace * make_ace (int argc, unsigned char ** argv){
801 struct ace * acl;

Callers 1

make_aceFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected