00001 
00010 #include "ipaddr_tool.h"
00011 
00012 
00028 tList*  read_ipaddr_file(char* fn)
00029 {
00030     tList* lp;
00031     tList* lt;
00032 
00033     lp = read_tList_file(fn, 2);
00034     if (lp==NULL) return NULL;
00035 
00036     lt = to_ipaddress_list(lp);
00037     del_all_tList(&lp);
00038 
00039     return lt;
00040 }
00041 
00042 
00058 tList*  read_ipaddr_fp(FILE* fp)
00059 {
00060     tList* lp;
00061     tList* lt;
00062 
00063     lp = read_tList_fp(fp, 1);
00064     if (lp==NULL) return NULL;
00065 
00066     lt = to_ipaddress_list(lp);
00067     del_all_tList(&lp);
00068 
00069     return lt;
00070 }
00071 
00072 
00073 
00087 tList*  to_ipaddress_list(tList* lp)
00088 {
00089     unsigned char* num;
00090     char*          addr;
00091     tList* ls = NULL;
00092     tList* lt = NULL;
00093 
00094     if (lp==NULL) return NULL;
00095     if (lp->ldat.key.buf==NULL) return NULL;
00096 
00097     while (lp!=NULL) {
00098         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00099             if ((lp->ldat.key.buf)[0]!='#') {
00100                 num = to_address_num8_ipv4((char*)lp->ldat.key.buf, 1);
00101                 if (num!=NULL) {
00102                     addr = to_address_char8_ipv4(num);
00103                     free(num);
00104                     if (addr!=NULL) {
00105                         ls = add_tList_node_str(ls, addr, NULL);
00106                         free(addr);
00107                     }   
00108                 }
00109                 else {
00110                     addr = awk((char*)lp->ldat.key.buf, '/', 1);
00111                     if (addr!=NULL) {
00112                         int i = 0;
00113                         while(addr[i]!='\0' && addr[i]!=',' && addr[i]!=' ') i++;
00114                         addr[i] = '\0';
00115                         ls = add_tList_node_str(ls, addr, NULL);
00116                         free(addr);
00117                     }
00118                 }
00119                 if (lt==NULL) lt = ls;
00120             }
00121         }
00122         lp = lp->next;
00123     }
00124     
00125     return lt;
00126 }
00127 
00128 
00129 
00148 int  is_host_in_list(tList* lp, unsigned char* num, char* hname)
00149 {
00150     unsigned char* addr;
00151 
00152     if (lp==NULL) return FALSE;
00153     if (lp->ldat.key.buf==NULL) return FALSE;
00154     if (hname==NULL && num==NULL) return FALSE;
00155 
00156     while (lp!=NULL) {
00157         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00158             addr = to_address_num8_ipv4((char*)lp->ldat.key.buf, 0);
00159             if (addr==NULL && hname!=NULL) {
00160                 if (!strnrvscmp((const char*)lp->ldat.key.buf, hname, (int)strlen((const char*)lp->ldat.key.buf))) return TRUE;
00161             }
00162             else if(addr!=NULL && num!=NULL) {
00163                 if (is_same_network_num_ipv4(addr, num, &(addr[4]))) return TRUE;
00164             }
00165         }
00166         lp = lp->next;
00167     }
00168     
00169     return FALSE;
00170 }
00171 
00172 
00173 
00187 int  is_ipaddr_num_in_list(tList* lp, unsigned char* num)
00188 {
00189     unsigned char* addr;
00190 
00191     if (lp==NULL || num==NULL) return FALSE;
00192     if (lp->ldat.key.buf==NULL) return FALSE;
00193 
00194     while (lp!=NULL) {
00195         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00196             addr = to_address_num8_ipv4((char*)lp->ldat.key.buf, 1);
00197             if (addr!=NULL) {
00198                 if (is_same_network_num_ipv4(num, addr, &(addr[4]))) return TRUE;
00199             }
00200         }
00201         lp = lp->next;
00202     }
00203     
00204     return FALSE;
00205 }
00206 
00207 
00208 
00218 void  print_address_in_list(FILE* fp, tList* lp)
00219 {
00220     unsigned char* addr;
00221 
00222     while (lp!=NULL) {
00223         if (lp->ldat.key.buf!=NULL && strlen((const char*)lp->ldat.key.buf)>0) {
00224             addr = to_address_num8_ipv4((char*)lp->ldat.key.buf, 1);
00225             if (addr!=NULL) {   
00226                 fprintf(fp, "[%d.%d.%d.%d/%d.%d.%d.%d]\n", addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
00227             }
00228             else {      
00229                 fprintf(fp, "[%s]\n", lp->ldat.key.buf);
00230             }
00231         }
00232         lp = lp->next;
00233     }
00234     return;
00235 }
00236 
00237