|
|
1.1 ! root 1: /* ! 2: ****************************************************************************** ! 3: * ! 4: * Module: bb_ip.c ! 5: * ! 6: * Functions: ! 7: * bb_get_ip_lines() - Interpret a string to contain IP addresses. ! 8: * - Place the addresses in the IP array and ! 9: * - return the number found and index of first. ! 10: * bb_check_ip() - Check if the IP address of the caller is ! 11: * - in the IP list of his specified id name. ! 12: * ! 13: * ! 14: ****************************************************************************** ! 15: */ ! 16: ! 17: /* ! 18: ****************************************************************************** ! 19: * Include Files ! 20: ****************************************************************************** ! 21: */ ! 22: #include <stdio.h> ! 23: #include <rpc/rpc.h> ! 24: #include "common.h" ! 25: #include "protocol.h" ! 26: #include "server.h" ! 27: ! 28: char *strtok(); ! 29: void bb_get_ip(); ! 30: ! 31: ! 32: ! 33: /************************************************************************* ! 34: ** ** ! 35: ** get_ip_lines() - Interpret the input 'line' to be a list of internet** ! 36: ** addresses. Place them in the internet table and return the starting** ! 37: ** index of this block as well as the number of addresses in the block.** ! 38: ** ** ! 39: *************************************************************************/ ! 40: BB_ip bb_ips[BB_MAX_IP]; /* IP Address array. */ ! 41: int bb_ip_count; /* The number of IP's in array. */ ! 42: ! 43: void ! 44: bb_get_ip_lines( line, p_count, p_index) ! 45: char *line; /* The input line of IP address tokens. */ ! 46: int *p_count; /* Output number of IP addresses in the block. */ ! 47: int *p_index; /* The starting index of the block of IP addrs. */ ! 48: { ! 49: char *ip_addr; /* Points to ip address string. */ ! 50: ! 51: /* ! 52: ** The index of this block of ip addresses is equal to the count. ! 53: */ ! 54: *p_index = bb_ip_count; ! 55: *p_count = 0; ! 56: ! 57: ! 58: if ( (ip_addr = strtok( line, BB_IP_SEPARATOR)) == NULL ) ! 59: { ! 60: fprintf( stderr, "ERROR: Null IP address list in data file.\n"); ! 61: } ! 62: ! 63: do ! 64: { ! 65: strncpy( bb_ips[bb_ip_count++], ip_addr, BB_IP_ADDR_LEN); ! 66: (*p_count)++; ! 67: } ! 68: while ( (ip_addr = strtok( NULL, BB_IP_SEPARATOR)) != NULL ); ! 69: ! 70: /* ! 71: ** Strtok() leaves the \n on the last IP addres, take it off. ! 72: */ ! 73: bb_ips[bb_ip_count -1][strlen(bb_ips[bb_ip_count-1])-1] = NUL; ! 74: } ! 75: ! 76: ! 77: /************************************************************************* ! 78: ** ** ! 79: ** bb_check_ip() - This function checks to see if the client has an ** ! 80: ** entry in the ip list which matches the ip address of this call. ** ! 81: ** ** ! 82: *************************************************************************/ ! 83: int ! 84: bb_check_ip( client) ! 85: BB_id client; /* The clients identifier. */ ! 86: { ! 87: int client_id; /* The index of the client. */ ! 88: BB_co_data codata; /* The company data of the client. */ ! 89: int i; /* Nice loop variable name. */ ! 90: BB_ip ip; /* The ip address of the caller. */ ! 91: ! 92: /* ! 93: ** Get the client's id. ! 94: */ ! 95: if ( (client_id = bb_get_hash( client)) == BB_HASH_ID_NOT_FOUND ) ! 96: { ! 97: return BB_BAD_CLIENT; ! 98: } ! 99: ! 100: /* ! 101: ** Get the company data of the client. ! 102: */ ! 103: if ( bb_get_codata( client_id, &codata) != BB_SUCCESS ) ! 104: { ! 105: return BB_BAD_CLIENT; ! 106: } ! 107: ! 108: /* ! 109: ** Get the ip address of the caller and check it agains the ! 110: ** clients list of ip addresses. ! 111: */ ! 112: bb_get_ip( ip); ! 113: for( i = codata.ip_idx; i < codata.ip_idx + codata.ip_cnt; i++ ) ! 114: { ! 115: if ( strncmp( bb_ips[i], ip, BB_IP_ADDR_LEN) == 0 ) ! 116: { ! 117: return BB_SUCCESS; ! 118: } ! 119: } ! 120: ! 121: return BB_FAILURE; ! 122: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.