Changeset 102

Show
Ignore:
Timestamp:
01/20/08 14:32:03 (10 months ago)
Author:
cordney
Message:

[fix] firewall not accepting new tcp|udp only redirects (#25)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/0_9_1/changelog.txt

    r101 r102  
     1Q-0.9.1d102 
     2[fix] firewall not accepting new tcp|udp only redirects (#25) 
     3 
    14Q-0.9.1d101 
    25[fix] include network cards bios in .app (#74) 
  • branches/0_9_1/qcontrol/cocoaControlEditPC.m

    r93 r102  
    11171117    [self saveFirewallPortList]; 
    11181118    [[thisPC objectForKey:@"Arguments"] appendFormat:@"%@",[self constructFirewallArguments]]; 
    1119  
     1119     
     1120     
    11201121    /* qemu arguments */ 
    11211122    if ([[textFieldArguments stringValue] length] > 0)  
     
    12031204- (void)initFirewallSettings 
    12041205{ 
     1206    //NSLog(@"cocoaControlEditPC: initFirewallSettings"); 
    12051207    firewallPortTableEnabled = YES; 
    12061208    if(firewallPortList == nil) { 
     
    12551257- (IBAction) startShowNewPort:(id)sender 
    12561258{ 
     1259    //NSLog(@"cocoaControlEditPC: startShowNewPort"); 
     1260 
    12571261    [self startEditPort:YES]; 
    12581262} 
    12591263- (IBAction) startShowEditPort:(id)sender 
    12601264{ 
     1265    //NSLog(@"cocoaControlEditPC: startShowEditPort"); 
     1266 
    12611267    int restrictedPort = 0; 
    12621268    NSArray * additionalPorts = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"fw-additionals" ofType:@"plist"]]; 
     
    12991305- (void) startEditPort:(BOOL)newPort 
    13001306 
     1307    //NSLog(@"cocoaControlEditPC: startEditPort"); 
     1308 
    13011309    /*[firewallPortPanel setFrame:NSMakeRect( 
    13021310        [firewallPortPanel frame].origin.x, 
     
    13511359- (IBAction) deletePort:(id)sender 
    13521360{ 
     1361    //NSLog(@"cocoaControlEditPC: deletePort"); 
     1362 
    13531363    // check if port is a default port 
    13541364    if([firewallPortTable selectedRow] >= 0 && [firewallPortTable selectedRow] < [[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"fw-defaults" ofType:@"plist"]] count]) { 
     
    13691379- (IBAction) setAdditionalPort:(id)sender 
    13701380{ 
     1381    //NSLog(@"cocoaControlEditPC: setAdditionalPort"); 
     1382 
    13711383    // load data from fw-additionals.plist 
    13721384    if ([popUpButtonFirewallAdditionalPorts indexOfSelectedItem] <= ([popUpButtonFirewallAdditionalPorts numberOfItems] - 3)) { 
     
    14131425- (IBAction) saveNewPort:(id)sender 
    14141426{ 
     1427    //NSLog(@"cocoaControlEditPC: saveNewPort"); 
     1428 
    14151429    if([self checkPort:YES] == YES) { 
    14161430        NSMutableDictionary * portDict; 
     
    14271441            [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"TCP-Ports-Host"]; 
    14281442            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"TCP-Ports-Guest"]; 
     1443            [portDict setObject: @"" forKey:@"UDP-Ports-Host"]; 
     1444            [portDict setObject: @"" forKey:@"UDP-Ports-Guest"]; 
    14291445        } else if([popUpButtonFirewallServiceType indexOfSelectedItem] == 1) { 
    14301446            // udp only 
     1447            [portDict setObject: @"" forKey:@"TCP-Ports-Host"]; 
     1448            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"TCP-Ports-Guest"]; 
     1449            [portDict setObject: @"" forKey:@"UDP-Ports-Host"]; 
     1450            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"UDP-Ports-Guest"]; 
     1451        } else if([popUpButtonFirewallServiceType indexOfSelectedItem] == 2) { 
     1452            // tcp and udp 
     1453            [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"TCP-Ports-Host"]; 
     1454            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"TCP-Ports-Guest"]; 
     1455            [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"UDP-Ports-Host"]; 
     1456            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"UDP-Ports-Guest"]; 
     1457        } 
     1458        } // end predefined/custom check 
     1459        // set enabled key 
     1460        [portDict setObject:[NSNumber numberWithBool:YES] forKey:@"Enabled"]; 
     1461        // add to list 
     1462        [firewallPortList addObject:portDict]; 
     1463        [self endEditPort:self]; 
     1464    } 
     1465} 
     1466 
     1467- (IBAction) saveEditPort:(id)sender 
     1468{ 
     1469    //NSLog(@"cocoaControlEditPC: saveEditPort"); 
     1470 
     1471    if([self checkPort:NO] == YES) { 
     1472        // save to edited port 
     1473        int selectedPort = [firewallPortTable selectedRow]; 
     1474 
     1475        NSMutableDictionary * portDict = [NSMutableDictionary dictionaryWithCapacity:5]; 
     1476        [portDict setObject:[textFieldFirewallPortName stringValue] forKey:@"Name"]; 
     1477        if([popUpButtonFirewallServiceType indexOfSelectedItem] == 0) { 
     1478            // tcp only 
     1479            [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"TCP-Ports-Host"]; 
     1480            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"TCP-Ports-Guest"]; 
     1481            [portDict setObject: @"" forKey:@"UDP-Ports-Host"]; 
     1482            [portDict setObject: @"" forKey:@"UDP-Ports-Guest"]; 
     1483        } else if([popUpButtonFirewallServiceType indexOfSelectedItem] == 1) { 
     1484            // udp only 
     1485            [portDict setObject: @"" forKey:@"TCP-Ports-Host"]; 
     1486            [portDict setObject: @"" forKey:@"TCP-Ports-Guest"]; 
    14311487            [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"UDP-Ports-Host"]; 
    14321488            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"UDP-Ports-Guest"]; 
     
    14381494            [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"UDP-Ports-Guest"]; 
    14391495        } 
    1440         } // end predefined/custom check 
    1441         // set enabled key 
    1442         [portDict setObject:[NSNumber numberWithBool:YES] forKey:@"Enabled"]; 
    1443         // add to list 
    1444         [firewallPortList addObject:portDict]; 
    1445         [self endEditPort:self]; 
    1446     } 
    1447 } 
    1448  
    1449 - (IBAction) saveEditPort:(id)sender 
    1450 { 
    1451     if([self checkPort:NO] == YES) { 
    1452         // save to edited port 
    1453         int selectedPort = [firewallPortTable selectedRow]; 
    1454  
    1455         NSMutableDictionary * portDict = [NSMutableDictionary dictionaryWithCapacity:5]; 
    1456         [portDict setObject:[textFieldFirewallPortName stringValue] forKey:@"Name"]; 
    1457         if([popUpButtonFirewallServiceType indexOfSelectedItem] == 0) { 
    1458             // tcp only 
    1459             [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"TCP-Ports-Host"]; 
    1460             [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"TCP-Ports-Guest"]; 
    1461         } else if([popUpButtonFirewallServiceType indexOfSelectedItem] == 1) { 
    1462             // udp only 
    1463             [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"UDP-Ports-Host"]; 
    1464             [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"UDP-Ports-Guest"]; 
    1465         } else if([popUpButtonFirewallServiceType indexOfSelectedItem] == 2) { 
    1466             // tcp and udp 
    1467             [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"TCP-Ports-Host"]; 
    1468             [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"TCP-Ports-Guest"]; 
    1469             [portDict setObject:[textFieldFirewallPortHostPorts stringValue] forKey:@"UDP-Ports-Host"]; 
    1470             [portDict setObject:[textFieldFirewallPortGuestPorts stringValue] forKey:@"UDP-Ports-Guest"]; 
    1471         } 
    14721496        // set enabled/disabled key 
    14731497        [portDict setObject:[[firewallPortList objectAtIndex:selectedPort] objectForKey:@"Enabled"] forKey:@"Enabled"]; 
     
    14801504- (BOOL) checkPort:(BOOL)newPort 
    14811505{ 
     1506    //NSLog(@"cocoaControlEditPC: checkPort"); 
     1507 
    14821508    if([[textFieldFirewallPortName stringValue] isEqualToString:@""]) { 
    14831509        // name empty 
     
    15621588- (IBAction) endEditPort:(id)sender 
    15631589{ 
     1590    //NSLog(@"cocoaControlEditPC: endEditPort"); 
     1591 
    15641592    // reset 
    15651593    [textFieldFirewallPortName setStringValue:@""]; 
     
    15831611- (void) saveFirewallPortList 
    15841612{ 
     1613    //NSLog(@"cocoaControlEditPC: saveFirewallPortList"); 
     1614 
    15851615    // save the ports in configuration.plist 
    15861616    // enumerate through entries and check for defaults, when enabled => save 
    15871617    NSArray * firewallDefaults = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"fw-defaults" ofType:@"plist"]]; 
    1588     NSMutableArray * customPorts = [NSMutableArray arrayWithCapacity:10]; 
     1618    NSMutableArray * customPorts = [[NSMutableArray arrayWithCapacity:10] retain]; 
    15891619    int i; 
    15901620    int ii; 
     
    16031633        if(found == 0) { 
    16041634            // port is not default port, save to conf.plist regardless of Enabled 
    1605             [customPorts addObject:[firewallPortList objectAtIndex:i]]; 
     1635            if ([firewallPortList count] > i) 
     1636                [customPorts addObject:[firewallPortList objectAtIndex:i]]; 
     1637            else 
     1638                NSLog(@"Index overflow: %d out of bounds (%d)", i, [firewallPortList count]); 
    16061639        } 
    16071640        found = 0; 
    16081641    } 
    1609     [thisPC setObject:[NSDictionary dictionaryWithObject:customPorts forKey:@"Redirect"] forKey:@"Network"]; 
     1642    if([customPorts count] > 0) 
     1643        [thisPC setObject: [NSDictionary dictionaryWithObject: customPorts forKey:@"Redirect"] forKey:@"Network"]; 
     1644    else 
     1645        NSLog(@"Index overflow: out of bounds (%d)", [customPorts count]); 
    16101646} 
    16111647 
    16121648- (NSString *) constructFirewallArguments 
    16131649{ 
     1650    //NSLog(@"cocoaControlEditPC: constructFirewallArguments"); 
     1651     
    16141652    NSArray * portlist = [[thisPC objectForKey:@"Network"] objectForKey:@"Redirect"]; 
    16151653    NSMutableString * arguments = [NSMutableString stringWithCapacity:10]; 
     
    16341672            for(ii=0; ii<[seperatedA count]; ii++) { 
    16351673            // tcp/udp 
     1674                         
    16361675            id tp = [typeA objectAtIndex:ii]; 
    1637             id hc = [[seperatedA objectAtIndex:ii] objectAtIndex:0]; 
    1638             id hh = [[seperatedA objectAtIndex:ii] objectAtIndex:1]; 
    1639             id gc = [[seperatedA objectAtIndex:ii] objectAtIndex:2]; 
    1640             id gh = [[seperatedA objectAtIndex:ii] objectAtIndex:3]; 
    1641  
    1642  
     1676            id hc = ([[seperatedA objectAtIndex:ii] objectAtIndex:0] != nil) ? [[seperatedA objectAtIndex:ii] objectAtIndex:0] : [NSArray array]; 
     1677            id hh = ([[seperatedA objectAtIndex:ii] objectAtIndex:1] != nil) ? [[seperatedA objectAtIndex:ii] objectAtIndex:1] : [NSArray array]; 
     1678            id gc = ([[seperatedA objectAtIndex:ii] objectAtIndex:2] != nil) ? [[seperatedA objectAtIndex:ii] objectAtIndex:2] : [NSArray array]; 
     1679            id gh = ([[seperatedA objectAtIndex:ii] objectAtIndex:3] != nil) ? [[seperatedA objectAtIndex:ii] objectAtIndex:3] : [NSArray array]; 
     1680     
    16431681            /* comma code */ 
    16441682            if([hc count] > 1 && [gc count] > 1) { 
     
    16721710                    } 
    16731711            } 
    1674  
     1712             
    16751713            /* haifin code */ 
    16761714            if([hh count] > 1 && [gh count] > 1) { 
     
    17011739                    } 
    17021740            } 
    1703  
     1741             
    17041742            /* only one=>one port code */ 
    17051743            // check also for empty port ranges, because componentsSeperatedByString: returns count 1 even from an empty string