/// \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));
}
Exemplo n.º 2
0
// 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);
	}
}
Exemplo n.º 3
0
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);
    }
}