/// \param name Specifies the name of the object. /// \return A pointer to the object. /// \warning Do not call \c delete on this function's return value. GameObject *GameObjectManager::getObjectPointer(const std::string &name) { return getObjectPointer(getObjectID(name)); }
// Process Firewall-1 objects... void processFW1Objects(char *line, struct nipperConfig *nipper) { // Variables... struct ciscoCommand command; struct objectMember *memberPointer = 0; struct objectConfig *objectPointer = 0; struct hostInterfaces *fw1InterfacePointer = 0; struct objectListConfig *objectListPointer = 0; int tempInt = 0; // Debug output if (nipper->debugMode == true) printf("Object Line: %s\n", line); // Init... command = splitLine(line); // Process lines while ((feof(nipper->input) == 0) && (strcasecmp(command.part[0], ")") != 0)) { // Read line memset(line, 0, LINE_SIZE + 1); readLine(nipper->input, line, LINE_SIZE); // Init... command = splitLine(line); // Debug output if (nipper->debugMode == true) printf("Object Line: %s\n", line); // If it is a new object if (strcasecmp(command.part[0], ":") == 0) { // If the object list has not been created if (objectListPointer == 0) objectListPointer = getObjectListPointer(nipper, "FW1-Objects"); objectPointer = getObjectPointer(objectListPointer, command.part[1] + 1); // Process lines while ((feof(nipper->input) == 0) && (strcasecmp(command.part[0], ")") != 0)) { // Read line memset(line, 0, LINE_SIZE + 1); readLine(nipper->input, line, LINE_SIZE); // Init... command = splitLine(line); // Debug output if (nipper->debugMode == true) printf("Object Line: %s\n", line); // IP Address... if ((strcasecmp(command.part[0], ":ipaddr") == 0) || (strcasecmp(command.part[0], ":ipaddr_first") == 0)) { command.part[1][strlen(command.part[1]) -1] = 0; strncpy(objectPointer->address, command.part[1] + 1, sizeof(objectPointer->address) - 1); } // Net Mask... else if ((strcasecmp(command.part[0], ":netmask") == 0) || (strcasecmp(command.part[0], ":ipaddr_last") == 0)) { command.part[1][strlen(command.part[1]) -1] = 0; strncpy(objectPointer->netMask, command.part[1] + 1, sizeof(objectPointer->netMask) - 1); } // Firewall... else if ((strcasecmp(command.part[0], ":firewall") == 0) && (strcasecmp(command.part[1], "(installed)") == 0)) objectPointer->firewall = true; // Location... else if ((strcasecmp(command.part[0], ":location") == 0) && (strcasecmp(command.part[1], "(external)") == 0)) objectPointer->internal = false; // CP Version... else if (strcasecmp(command.part[0], ":cpver") == 0) { command.part[1][strlen(command.part[1]) -1] = 0; strncpy(objectPointer->cpVersion, command.part[1] + 1, sizeof(objectPointer->cpVersion) - 1); objectPointer->cpVersionMajor = atoi(objectPointer->cpVersion); objectPointer->cpVersionMinor = atoi(strchr(objectPointer->cpVersion, '.') + 1); } // Interfaces... else if ((strcasecmp(command.part[0], ":interfaces") == 0) && (strcasecmp(command.part[1], "()") != 0)) processFW1ObjectsInterfaces(line, nipper, objectPointer); // Management... else if ((strcasecmp(command.part[0], ":management") == 0) && (strcasecmp(command.part[1], "(true)") == 0)) objectPointer->management = true; // Type... else if (strcasecmp(command.part[0], ":type") == 0) { if (strcasecmp(command.part[1], "(host)") == 0) { nipper->fw1->hostObjectCount++; objectPointer->type = object_type_host; } else if (strcasecmp(command.part[1], "(machines_range)") == 0) { nipper->fw1->machinesRangeObjectCount++; objectPointer->type = object_type_machinesrange; } else if (strcasecmp(command.part[1], "(dynamic_net_obj)") == 0) { nipper->fw1->dynamicNetObjectCount++; objectPointer->type = object_type_dynamicnet; } else if (strcasecmp(command.part[1], "(group)") == 0) { nipper->fw1->groupObjectCount++; objectPointer->type = object_type_group; } else if (strcasecmp(command.part[1], "(network)") == 0) { nipper->fw1->networkObjectCount++; objectPointer->type = object_type_network; } else if (strcasecmp(command.part[1], "(gateway)") == 0) { nipper->fw1->gatewayObjectCount++; objectPointer->type = object_type_gateway; } else if (strcasecmp(command.part[1], "(gateway_cluster)") == 0) { nipper->fw1->gatewayClusterObjectCount++; objectPointer->type = object_type_gateway_cluster; } else if (strcasecmp(command.part[1], "(cluster_member)") == 0) { nipper->fw1->clusterMemberObjectCount++; objectPointer->type = object_type_cluster_member; } // Create a delete me object... else objectPointer->type = object_type_delete_me; } // Cluster Members... else if ((strcasecmp(command.part[0], ":cluster_members") == 0) && (strcasecmp(command.part[1], "(") == 0)) { while ((feof(nipper->input) == 0) && (strcasecmp(command.part[0], ")") != 0)) { // Read line memset(line, 0, LINE_SIZE + 1); readLine(nipper->input, line, LINE_SIZE); // Init... command = splitLine(line); // Debug output if (nipper->debugMode == true) printf("Object Line: %s\n", line); // New member... if ((command.part[0][0] == ':') && (strcasecmp(command.part[1], "(ReferenceObject") == 0)) { tempInt = atoi(command.part[0] + 1); while ((feof(nipper->input) == 0) && (strcasecmp(command.part[0], ")") != 0)) { // Read line memset(line, 0, LINE_SIZE + 1); readLine(nipper->input, line, LINE_SIZE); // Init... command = splitLine(line); // Debug output if (nipper->debugMode == true) printf("Object Line: %s\n", line); if (strcasecmp(command.part[0], ":Name") == 0) { command.part[1][strlen(command.part[1]) -1] = 0; memberPointer = getObjectMember(objectPointer, command.part[1] + 1); memberPointer->type = object_type_object; memberPointer->number = tempInt; } // Process Unknown... else processFW1Unknown(nipper, line); } command.part[0][0] = 0; } // Process Unknown... else processFW1Unknown(nipper, line); } command.part[0][0] = 0; } // Group Members... else if ((strcasecmp(command.part[0], ":") == 0) && (strcasecmp(command.part[1], "(ReferenceObject") != 0) && (strncmp(line, "\t\t\t:", 4) == 0)) { memberPointer = getObjectMember(objectPointer, command.part[1]); memberPointer->type = object_type_object; } else if ((strcasecmp(command.part[0], ":") == 0) && (strcasecmp(command.part[1], "(ReferenceObject") == 0)) { while ((feof(nipper->input) == 0) && (strcasecmp(command.part[0], ")") != 0)) { // Read line memset(line, 0, LINE_SIZE + 1); readLine(nipper->input, line, LINE_SIZE); // Init... command = splitLine(line); // Debug output if (nipper->debugMode == true) printf("Object Line: %s\n", line); // Name... if (strcasecmp(command.part[0], ":Name") == 0) { command.part[1][strlen(command.part[1]) -1] = 0; memberPointer = getObjectMember(objectPointer, command.part[1] + 1); memberPointer->type = object_type_object; } // Process Unknown... else processFW1Unknown(nipper, line); } command.part[0][0] = 0; } // Process Unknown... else processFW1Unknown(nipper, line); } // If delete me object... if (objectPointer->type == object_type_delete_me) { if (objectListPointer->object->type == object_type_delete_me) { while (objectListPointer->object->interfaces != 0) { fw1InterfacePointer = objectListPointer->object->interfaces->next; free(objectListPointer->object->interfaces); objectListPointer->object->interfaces = fw1InterfacePointer; } while (objectListPointer->object->members != 0) { memberPointer = objectListPointer->object->members->next; free(objectListPointer->object->members); objectListPointer->object->members = memberPointer; } free(objectListPointer->object); objectListPointer->object = 0; } else { objectPointer = objectListPointer->object; while (objectPointer->next->type != object_type_delete_me) objectPointer = objectPointer->next; while (objectPointer->next->interfaces != 0) { fw1InterfacePointer = objectPointer->next->interfaces->next; free(objectPointer->next->interfaces); objectPointer->next->interfaces = fw1InterfacePointer; } while (objectPointer->next->members != 0) { memberPointer = objectPointer->next->members->next; free(objectPointer->next->members); objectPointer->next->members = memberPointer; } free(objectPointer->next); objectPointer->next = 0; } } objectPointer = 0; command.part[0][0] = 0; } // Process Unknown... else processFW1Unknown(nipper, line); } }
void processSonicOSService(char *line, struct nipperConfig *nipper) { // Variables... struct objectListConfig *objectListPointer = 0; struct objectConfig *objectPointer = 0; struct ciscoCommand command; // Debug output if (nipper->debugMode == true) printf("Service Line: %s\n", line); // Init command = splitLine(line); // Service Port (start)... if (strncmp(command.part[0], "svcObjPort1_", 12) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 12); strncpy(objectPointer->address, command.part[1], sizeof(objectPointer->address) - 1); objectPointer->type = object_type_service; } else if (strncmp(command.part[0], "prefs_svcPortNum_", 17) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 17); strncpy(objectPointer->address, command.part[1], sizeof(objectPointer->address) - 1); objectPointer->type = object_type_service; } // Service Port (end)... else if (strncmp(command.part[0], "svcObjPort2_", 12) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 12); strncpy(objectPointer->netMask, command.part[1], sizeof(objectPointer->netMask) - 1); if (strcmp(objectPointer->netMask, objectPointer->address) != 0) objectPointer->type = object_type_servicerange; else if ((strcmp(objectPointer->netMask, "65535") == 0) && (strcmp(objectPointer->address, "65535") == 0)) objectPointer->type = object_type_any; } else if (strncmp(command.part[0], "prefs_svcPortEnd_", 17) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 17); strncpy(objectPointer->netMask, command.part[1], sizeof(objectPointer->netMask) - 1); if (strcmp(objectPointer->netMask, objectPointer->address) != 0) objectPointer->type = object_type_servicerange; else if ((strcmp(objectPointer->netMask, "65535") == 0) && (strcmp(objectPointer->address, "65535") == 0)) objectPointer->type = object_type_any; } // Service IP Type... else if (strncmp(command.part[0], "svcObjIpType_", 13) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 13); objectPointer->serviceType = atoi(command.part[1]); } else if (strncmp(command.part[0], "prefs_svcIPType_", 16) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 16); objectPointer->serviceType = atoi(command.part[1]); } // Service Name... else if (strncmp(command.part[0], "svcObjId_", 9) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 9); if (objectPointer->type == object_type_any) strcpy(objectPointer->comment, "Any"); else strncpy(objectPointer->comment, line + strlen(command.part[0]) + 1, sizeof(objectPointer->comment) - 1); } else if (strncmp(command.part[0], "prefs_svcName_", 14) == 0) { objectListPointer = getObjectListPointer(nipper, "SERVICES"); objectPointer = getObjectPointer(objectListPointer, command.part[0] + 14); if (objectPointer->type == object_type_any) strcpy(objectPointer->comment, "Any"); else strncpy(objectPointer->comment, line + strlen(command.part[0]) + 1, sizeof(objectPointer->comment) - 1); } }