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