1 /* SmoothWall setup program.
3 * This program is distributed under the terms of the GNU General Public
4 * Licence. See the file COPYING for details.
6 * (c) Lawrence Manning, 2001
7 * The big one: networking.
9 * $Id: networking.c,v 1.5.2.6 2006/02/06 22:00:13 gespinasse Exp $
17 #define DEFAULT_GATEWAY 2
18 #define DNSGATEWAY_TOTAL 3
28 #define HAS_RED (configtype == 1 || configtype == 2 || configtype == 3 || configtype == 4)
29 #define HAS_ORANGE (configtype == 2 || configtype == 4)
30 #define HAS_BLUE (configtype == 3 || configtype == 4)
31 #define RED_IS_NOT_ETH (configtype == 0)
33 //#define HAS_ORANGE (configtype == 1 || configtype == 3 || configtype == 5 || configtype == 7)
34 //#define HAS_RED (configtype == 2 || configtype == 3 || configtype == 6 || configtype == 7)
35 //#define HAS_BLUE (configtype == 4 || configtype == 5 || configtype == 6 || configtype == 7)
36 //#define RED_IS_NOT_ETH (configtype == 0 || configtype == 1 || configtype == 4 || configtype == 5)
38 extern struct nic nics
[];
39 extern struct knic knics
[];
41 /* char *configtypenames[] = {
42 "GREEN (RED is modem/ISDN)",
43 "GREEN + ORANGE (RED is modem/ISDN)",
45 "GREEN + ORANGE + RED",
46 "GREEN + BLUE (RED is modem/ISDN) ",
47 "GREEN + ORANGE + BLUE (RED is modem/ISDN)",
49 "GREEN + ORANGE + BLUE + RED",
52 char *configtypenames
[] = {
55 "GREEN + RED + ORANGE",
57 "GREEN + RED + ORANGE + BLUE",
59 int configtypecards
[] = {
62 3, // "GREEN + RED + ORANGE",
63 3, // "GREEN + RED + BLUE",
64 4 // "GREEN + RED + ORANGE + BLUE",
70 int oktoleave(char *errormessage
);
72 int configtypemenu(void);
74 int changedrivers(void);
75 int greenaddressmenu(void);
76 int addressesmenu(void);
77 int dnsgatewaymenu(void);
79 int handlenetworking(void)
84 char errormessage
[STRING_SIZE
];
88 fprintf(flog
,"Enter HandleNetworking\n"); // #### Debug ####
90 found
= scan_network_cards();
91 fprintf(flog
,"found %d cards\n",found
); // #### Debug ####
117 if (oktoleave(errormessage
))
120 errorbox(errormessage
);
130 /* Restart networking! */
131 if (netaddresschange
)
133 runcommandwithstatus("/etc/rc.d/init.d/network stop",
134 ctr
[TR_PUSHING_NETWORK_DOWN
]);
135 runcommandwithstatus("/etc/rc.d/init.d/network start",
136 ctr
[TR_PULLING_NETWORK_UP
]);
143 int oktoleave(char *errormessage
)
145 struct keyvalue
*kv
= initkeyvalues();
146 char temp
[STRING_SIZE
];
149 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
152 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
156 strcpy(temp
, "0"); findkey(kv
, "CONFIG_TYPE", temp
); configtype
= atol(temp
);
157 if (configtype
< 1 || configtype
> 4) configtype
= 0;
161 strcpy(temp
, ""); findkey(kv
, "BLUE_DEV", temp
);
164 strcpy(errormessage
, ctr
[TR_NO_BLUE_INTERFACE
]);
167 if (!(interfacecheck(kv
, "BLUE")))
169 strcpy(errormessage
, ctr
[TR_MISSING_BLUE_IP
]);
175 strcpy(temp
, ""); findkey(kv
, "ORANGE_DEV", temp
);
178 strcpy(errormessage
, ctr
[TR_NO_ORANGE_INTERFACE
]);
181 if (!(interfacecheck(kv
, "ORANGE")))
183 strcpy(errormessage
, ctr
[TR_MISSING_ORANGE_IP
]);
189 strcpy(temp
, ""); findkey(kv
, "RED_DEV", temp
);
192 strcpy(errormessage
, ctr
[TR_NO_RED_INTERFACE
]);
195 if (!(interfacecheck(kv
, "RED")))
197 strcpy(errormessage
, ctr
[TR_MISSING_RED_IP
]);
201 strcpy(errormessage
, "");
205 if (strlen(errormessage
))
212 /* Shows the main menu and a summary of the current settings. */
215 char *sections
[] = { ctr
[TR_NETWORK_CONFIGURATION_TYPE
],
216 ctr
[TR_DRIVERS_AND_CARD_ASSIGNMENTS
],
217 ctr
[TR_ADDRESS_SETTINGS
],
218 ctr
[TR_DNS_AND_GATEWAY_SETTINGS
], NULL
};
220 static int choice
= 0;
221 struct keyvalue
*kv
= initkeyvalues();
223 char temp
[STRING_SIZE
];
226 char networkrestart
[STRING_SIZE
] = "";
228 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
231 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
235 if (netaddresschange
)
236 strcpy(networkrestart
, ctr
[TR_RESTART_REQUIRED
]);
238 strcpy(temp
, ""); findkey(kv
, "CONFIG_TYPE", temp
); x
= atol(temp
);
239 if (x
< 1 || x
> 4) x
= 0;
240 /* Format heading bit. */
241 snprintf(message
, 1000, ctr
[TR_CURRENT_CONFIG
], configtypenames
[x
],
243 rc
= newtWinMenu(ctr
[TR_NETWORK_CONFIGURATION_MENU
], message
, 50, 5, 5, 6,
244 sections
, &choice
, ctr
[TR_OK
], ctr
[TR_DONE
], NULL
);
246 if (rc
== 0 || rc
== 1)
254 /* Here they choose general network config, number of nics etc. */
255 int configtypemenu(void)
257 struct keyvalue
*kv
= initkeyvalues();
258 char temp
[STRING_SIZE
] = "0";
263 fprintf(flog
,"Enter ConfigMenu\n");
265 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
268 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
272 found
= scan_network_cards();
273 fprintf(flog
,"found %d Card\'s\n", found
); // #### Debug ####
275 findkey(kv
, "CONFIG_TYPE", temp
); choise
= atol(temp
);
279 sprintf(message
, ctr
[TR_NETWORK_CONFIGURATION_TYPE_LONG
], NAME
);
280 rc
= newtWinMenu(ctr
[TR_NETWORK_CONFIGURATION_TYPE
], message
, 50, 5, 5,
281 6, configtypenames
, &choise
, ctr
[TR_OK
], ctr
[TR_CANCEL
], NULL
);
282 if ( configtypecards
[choise
] > found
) {
283 sprintf(message
, "(TR) Nicht genuegend Netzwerkkarten fuer diese Auswahl gefunden.\n\nBenoetigt: %d\nGefunden: %d\n", configtypecards
[choise
], found
);
287 while ( configtypecards
[choise
] > found
);
289 if (rc
== 0 || rc
== 1)
291 // if (automode != 0) runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange", ctr[TR_PUSHING_NON_LOCAL_NETWORK_DOWN]);
293 sprintf(temp
, "%d", choise
);
294 replacekeyvalue(kv
, "CONFIG_TYPE", temp
);
295 clear_card_entry(_RED_CARD_
);
296 clear_card_entry(_ORANGE_CARD_
);
297 clear_card_entry(_BLUE_CARD_
);
299 writekeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings");
300 netaddresschange
= 1;
307 /* Driver menu. Choose drivers.. */
310 struct keyvalue
*kv
= initkeyvalues();
311 char message
[STRING_SIZE
];
312 char temp
[STRING_SIZE
];
313 // char description[STRING_SIZE], macaddr[STRING_SIZE];
314 // struct nic *pnics = nics;
316 // struct knic *pknics = knics;
319 int rc
, kcount
= 0, neednics
; //i = 0, count = 0,
321 fprintf(flog
,"Enter driverenu\n"); // #### Debug ####
323 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
326 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
330 strcpy(temp
, "0"); findkey(kv
, "CONFIG_TYPE", temp
);
331 configtype
= atol(temp
);
333 // if (configtype == 0)
335 // freekeyvalues(kv);
336 // errorbox(ctr[TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER]);
340 strcpy(message
, ctr
[TR_CONFIGURE_NETWORK_DRIVERS
]);
342 kcount
= 0; // counter to find knowing nics.
343 neednics
= 0; // counter to use needing nics.
345 strcpy(temp
, ""); findkey(kv
, "GREEN_MACADDR", temp
);
347 strcpy(knics
[_GREEN_CARD_
].macaddr
, temp
);
348 strcpy(knics
[_GREEN_CARD_
].colour
, "GREEN");
349 findkey(kv
, "GREEN_DESCRIPTION", temp
);
350 strcpy(knics
[_GREEN_CARD_
].description
, temp
);
351 findkey(kv
, "GREEN_DRIVER", temp
);
352 strcpy(knics
[_GREEN_CARD_
].driver
, temp
);
355 strcpy(knics
[_GREEN_CARD_
].description
, ctr
[TR_UNSET
]);
357 sprintf(temp
, "GREEN: %s\n", knics
[_GREEN_CARD_
].description
);
358 strcat(message
, temp
);
359 if (strlen(knics
[_GREEN_CARD_
].macaddr
) ) {
360 sprintf(temp
, "GREEN: (%s) %s green0\n", knics
[_GREEN_CARD_
].macaddr
, ctr
[TR_AS
]);
361 strcat(message
, temp
);
366 strcpy(temp
, ""); findkey(kv
, "RED_MACADDR", temp
);
368 strcpy(knics
[_RED_CARD_
].macaddr
, temp
);
369 strcpy(knics
[_RED_CARD_
].colour
, "RED");
370 findkey(kv
, "RED_DESCRIPTION", temp
);
371 strcpy(knics
[_RED_CARD_
].description
, temp
);
372 findkey(kv
, "RED_DRIVER", temp
);
373 strcpy(knics
[_RED_CARD_
].driver
, temp
);
376 strcpy(knics
[_RED_CARD_
].description
, ctr
[TR_UNSET
]);
378 sprintf(temp
, "RED: %s\n", knics
[_RED_CARD_
].description
);
379 strcat(message
, temp
);
380 if (strlen(knics
[_RED_CARD_
].macaddr
) ) {
381 sprintf(temp
, "RED: (%s) %s red0\n", knics
[_RED_CARD_
].macaddr
, ctr
[TR_AS
]);
382 strcat(message
, temp
);
387 strcpy(temp
, ""); findkey(kv
, "ORANGE_MACADDR", temp
);
389 strcpy(knics
[_ORANGE_CARD_
].macaddr
, temp
);
390 strcpy(knics
[_ORANGE_CARD_
].colour
, "ORANGE");
391 findkey(kv
, "ORANGE_DESCRIPTION", temp
);
392 strcpy(knics
[_ORANGE_CARD_
].description
, temp
);
393 findkey(kv
, "ORANGE_DRIVER", temp
);
394 strcpy(knics
[_ORANGE_CARD_
].driver
, temp
);
397 strcpy(knics
[_ORANGE_CARD_
].description
, ctr
[TR_UNSET
]);
399 sprintf(temp
, "ORANGE: %s\n", knics
[_ORANGE_CARD_
].description
);
400 strcat(message
, temp
);
401 if ( strlen(knics
[_ORANGE_CARD_
].macaddr
) ) {
402 sprintf(temp
, "ORANGE: (%s) %s orange0\n", knics
[_ORANGE_CARD_
].macaddr
, ctr
[TR_AS
]);
403 strcat(message
, temp
);
408 strcpy(temp
, ""); findkey(kv
, "BLUE_MACADDR", temp
);
410 strcpy(knics
[_BLUE_CARD_
].macaddr
, temp
);
411 strcpy(knics
[_BLUE_CARD_
].colour
, "BLUE");
412 findkey(kv
, "BLUE_DESCRIPTION", temp
);
413 strcpy(knics
[_BLUE_CARD_
].description
, temp
);
414 findkey(kv
, "BLUE_DRIVER", temp
);
415 strcpy(knics
[_BLUE_CARD_
].driver
, temp
);
418 strcpy(knics
[_BLUE_CARD_
].description
, ctr
[TR_UNSET
]);
420 sprintf(temp
, "BLUE: %s\n", knics
[_BLUE_CARD_
].description
);
421 strcat(message
, temp
);
422 if (strlen(knics
[_BLUE_CARD_
].macaddr
)) {
423 sprintf(temp
, "BLUE: (%s) %s blue0\n", knics
[_BLUE_CARD_
].macaddr
, ctr
[TR_AS
]);
424 strcat(message
, temp
);
429 fprintf(flog
,"found %d knowing Card\'s\n", kcount
); // #### DEBUG ####
431 if (neednics
= kcount
) {
432 strcat(message
, ctr
[TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS
]);
433 rc
= newtWinChoice(ctr
[TR_DRIVERS_AND_CARD_ASSIGNMENTS
], ctr
[TR_OK
],
434 ctr
[TR_CANCEL
], message
);
435 if (rc
== 0 || rc
== 1)
437 /* Shit, got to do something.. */
441 strcat(message
, "\nEs wurden noch nicht alle Netzwerkkarten konfiguriert.\n");
442 newtWinMessage(ctr
[TR_DRIVERS_AND_CARD_ASSIGNMENTS
], ctr
[TR_OK
], message
);
443 /* Shit, got to do something.. */
451 int cardassigned(char *colour
)
453 char command
[STRING_SIZE
];
454 fprintf(flog
,"cardassigned - %s\n", colour
);
455 sprintf(command
, "grep -q %s < /etc/udev/rules.d/30-persistent-network.rules 2>/dev/null", colour
);
462 int set_menu_entry_for(int *nr
, int *card
)
467 int changedrivers(void)
469 struct keyvalue
*kv
= initkeyvalues();
470 char temp
[STRING_SIZE
], message
[STRING_SIZE
];
472 int green
= 0, red
= 0, blue
= 0, orange
= 0;
473 char MenuInhalt
[10][180];
474 char *pMenuInhalt
[10];
475 int count
= 0, choise
= 0, rc
;
478 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
481 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
484 fprintf(flog
,"stop network on red, blue and orange\n"); // #### Debug ####
485 runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange",
486 ctr
[TR_PUSHING_NON_LOCAL_NETWORK_DOWN
]);
488 findkey(kv
, "CONFIG_TYPE", temp
); configtype
= atol(temp
);
491 else if (configtype
== 1)
492 { green
= 1; red
= 1; }
493 else if (configtype
== 2)
494 { green
= 1; red
= 1; orange
= 1; }
495 else if (configtype
== 3)
496 { green
= 1; red
= 1; blue
= 1; }
497 else if (configtype
== 4)
498 { green
= 1; red
=1; orange
=1; blue
= 1; }
499 // else if (configtype == 5)
500 // { green = 1; blue = 1; orange = 1; }
501 // else if (configtype == 6)
502 // { green = 1; red = 1; blue = 1; }
503 // else if (configtype == 7)
504 // { green = 1; red = 1; blue = 1; orange = 1; }
506 fprintf(flog
,"found: g=%d r=%d o=%d b=%d\n",green
, red
, orange
, blue
); // #### Debug ####
511 strcpy(message
, "(TR) Bitte wählen Sie das Interface aus das geaendert werden soll.\n\n");
514 strcpy(MenuInhalt
[count
], "GREEN");
515 pMenuInhalt
[count
] = MenuInhalt
[count
];
516 NicEntry
[_GREEN_CARD_
] = count
;
517 sprintf(temp
, "GREEN: %s\n", knics
[_GREEN_CARD_
].description
);
518 strcat(message
, temp
);
519 if ( strlen(knics
[_GREEN_CARD_
].macaddr
) ) {
520 sprintf(temp
, "GREEN: (%s) %s green0\n", knics
[_GREEN_CARD_
].macaddr
, ctr
[TR_AS
]);
521 strcat(message
, temp
);
527 strcpy(MenuInhalt
[count
], "RED");
528 pMenuInhalt
[count
] = MenuInhalt
[count
];
529 NicEntry
[_RED_CARD_
] = count
;
530 // fprintf(flog,"found: %s as entry %d\n", MenuInhalt[count], NicEntry[count]); // #### Debug ####
531 sprintf(temp
, "RED: %s\n", knics
[_RED_CARD_
].description
);
532 strcat(message
, temp
);
533 if ( strlen(knics
[_RED_CARD_
].macaddr
) ) {
534 sprintf(temp
, "RED: (%s) %s red0\n", knics
[_RED_CARD_
].macaddr
, ctr
[TR_AS
]);
535 strcat(message
, temp
);
541 strcpy(MenuInhalt
[count
], "ORANGE");
542 pMenuInhalt
[count
] = MenuInhalt
[count
];
543 NicEntry
[_ORANGE_CARD_
] = count
;
544 // fprintf(flog,"found: %s as entry %d\n", MenuInhalt[count], NicEntry[count]); // #### Debug ####
545 sprintf(temp
, "ORANGE: %s\n", knics
[_ORANGE_CARD_
].description
);
546 strcat(message
, temp
);
547 if ( strlen(knics
[_ORANGE_CARD_
].macaddr
) ) {
548 sprintf(temp
, "ORANGE: (%s) %s orange0\n", knics
[_ORANGE_CARD_
].macaddr
, ctr
[TR_AS
]);
549 strcat(message
, temp
);
555 strcpy(MenuInhalt
[count
], "BLUE");
556 pMenuInhalt
[count
] = MenuInhalt
[count
];
557 NicEntry
[_BLUE_CARD_
] = count
;
558 // fprintf(flog,"found: %s as entry %d\n", MenuInhalt[count], NicEntry[count]); // #### Debug ####
559 sprintf(temp
, "BLUE: %s\n", knics
[_BLUE_CARD_
].description
);
560 strcat(message
, temp
);
561 if ( strlen(knics
[_BLUE_CARD_
].macaddr
) ) {
562 sprintf(temp
, "BLUE: (%s) %s blue0\n", knics
[_BLUE_CARD_
].macaddr
, ctr
[TR_AS
]);
563 strcat(message
, temp
);
567 pMenuInhalt
[count
] = NULL
;
569 rc
= newtWinMenu("(TR) Netcard Farbe", message
, 70, 5, 5, 6, pMenuInhalt
, &choise
, ctr
[TR_SELECT
], "(TR) Entfernen" , ctr
[TR_DONE
], NULL
);
571 if ( rc
== 0 || rc
== 1) {
572 // write_configs_netudev(pnics[choise].description, pnics[choise].macaddr, colour);
573 // insert nic to colourcard
574 if ((green
) && ( choise
== NicEntry
[0])) nicmenu(_GREEN_CARD_
);
575 if ((red
) && ( choise
== NicEntry
[1])) nicmenu(_RED_CARD_
);
576 if ((orange
) && ( choise
== NicEntry
[2])) nicmenu(_ORANGE_CARD_
);
577 if ((blue
) && ( choise
== NicEntry
[3])) nicmenu(_BLUE_CARD_
);
578 } else if (rc
== 2) {
579 if ((green
) && ( choise
== NicEntry
[0])) ask_clear_card_entry(_GREEN_CARD_
);
580 if ((red
) && ( choise
== NicEntry
[1])) ask_clear_card_entry(_RED_CARD_
);
581 if ((orange
) && ( choise
== NicEntry
[2])) ask_clear_card_entry(_ORANGE_CARD_
);
582 if ((blue
) && ( choise
== NicEntry
[3])) ask_clear_card_entry(_BLUE_CARD_
);
585 // errorbox("Sie haben keine Netzwerkkarte ausgewaehlt.\n");
591 // writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings");
597 // Let user change GREEN address.
598 int greenaddressmenu(void)
600 struct keyvalue
*kv
= initkeyvalues();
604 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
607 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
611 sprintf(message
, ctr
[TR_WARNING_LONG
], NAME
);
612 rc
= newtWinChoice(ctr
[TR_WARNING
], ctr
[TR_OK
], ctr
[TR_CANCEL
], message
);
614 if (rc
== 0 || rc
== 1)
616 if (changeaddress(kv
, "GREEN", 0, ""))
618 netaddresschange
= 1;
619 writekeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings");
629 // They can change BLUE, ORANGE and GREEN too :)
630 int addressesmenu(void)
632 struct keyvalue
*kv
= initkeyvalues();
633 struct keyvalue
*mainkv
= initkeyvalues();
636 char *green
= "GREEN";
637 char *orange
= "ORANGE";
641 char greenaddress
[STRING_SIZE
];
642 char oldgreenaddress
[STRING_SIZE
];
643 char temp
[STRING_SIZE
];
644 char temp2
[STRING_SIZE
];
649 char hostname
[STRING_SIZE
];
651 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
654 freekeyvalues(mainkv
);
655 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
658 if (!(readkeyvalues(mainkv
, CONFIG_ROOT
"/main/settings")))
661 freekeyvalues(mainkv
);
662 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
666 strcpy(temp
, "0"); findkey(kv
, "CONFIG_TYPE", temp
);
667 configtype
= atol(temp
);
678 sections
[c
] = orange
;
692 rc
= newtWinMenu(ctr
[TR_ADDRESS_SETTINGS
],
693 ctr
[TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE
], 50, 5,
694 5, 6, sections
, &choice
, ctr
[TR_OK
], ctr
[TR_DONE
], NULL
);
696 if (rc
== 0 || rc
== 1)
698 if (strcmp(sections
[choice
], "GREEN") == 0)
700 findkey(kv
, "GREEN_ADDRESS", oldgreenaddress
);
701 sprintf(message
, ctr
[TR_WARNING_LONG
], NAME
);
702 rc
= newtWinChoice(ctr
[TR_WARNING
], ctr
[TR_OK
], ctr
[TR_CANCEL
],
704 if (rc
== 0 || rc
== 1)
706 if (changeaddress(kv
, "GREEN", 0, ""))
708 netaddresschange
= 1;
709 writekeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings");
711 findkey(kv
, "GREEN_ADDRESS", greenaddress
);
712 snprintf(temp
, STRING_SIZE
-1, "option routers %s", oldgreenaddress
);
713 snprintf(temp2
, STRING_SIZE
-1, "option routers %s", greenaddress
);
714 replace (CONFIG_ROOT
"/dhcp/dhcpd.conf", temp
, temp2
);
715 chown (CONFIG_ROOT
"/dhcp/dhcpd.conf", 99, 99);
719 if (strcmp(sections
[choice
], "BLUE") == 0)
721 if (changeaddress(kv
, "BLUE", 0, ""))
722 netaddresschange
= 1;
724 if (strcmp(sections
[choice
], "ORANGE") == 0)
726 if (changeaddress(kv
, "ORANGE", 0, ""))
727 netaddresschange
= 1;
729 if (strcmp(sections
[choice
], "RED") == 0)
731 strcpy(hostname
, "");
732 findkey(mainkv
, "HOSTNAME", hostname
);
733 if (changeaddress(kv
, "RED", 1, hostname
))
734 netaddresschange
= 1;
741 writekeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings");
743 freekeyvalues(mainkv
);
748 /* DNS and default gateway.... */
749 int dnsgatewaymenu(void)
751 struct keyvalue
*kv
= initkeyvalues();
753 char temp
[STRING_SIZE
] = "0";
754 struct newtWinEntry entries
[DNSGATEWAY_TOTAL
+1];
755 char *values
[DNSGATEWAY_TOTAL
]; /* pointers for the values. */
760 if (!(readkeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings")))
763 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
767 /* strcpy(temp, "0"); findkey(kv, "CONFIG_TYPE", temp);
768 configtype = atol(temp);
773 errorbox(ctr[TR_DNS_GATEWAY_WITH_GREEN]);
777 entries
[DNS1
].text
= ctr
[TR_PRIMARY_DNS
];
778 strcpy(temp
, ""); findkey(kv
, "DNS1", temp
);
779 values
[DNS1
] = strdup(temp
);
780 entries
[DNS1
].value
= &values
[DNS1
];
781 entries
[DNS1
].flags
= 0;
783 entries
[DNS2
].text
= ctr
[TR_SECONDARY_DNS
];
784 strcpy(temp
, ""); findkey(kv
, "DNS2", temp
);
785 values
[DNS2
] = strdup(temp
);
786 entries
[DNS2
].value
= &values
[DNS2
];
787 entries
[DNS2
].flags
= 0;
789 entries
[DEFAULT_GATEWAY
].text
= ctr
[TR_DEFAULT_GATEWAY
];
790 strcpy(temp
, ""); findkey(kv
, "DEFAULT_GATEWAY", temp
);
791 values
[DEFAULT_GATEWAY
] = strdup(temp
);
792 entries
[DEFAULT_GATEWAY
].value
= &values
[DEFAULT_GATEWAY
];
793 entries
[DEFAULT_GATEWAY
].flags
= 0;
795 entries
[DNSGATEWAY_TOTAL
].text
= NULL
;
796 entries
[DNSGATEWAY_TOTAL
].value
= NULL
;
797 entries
[DNSGATEWAY_TOTAL
].flags
= 0;
803 rc
= newtWinEntries(ctr
[TR_DNS_AND_GATEWAY_SETTINGS
],
804 ctr
[TR_DNS_AND_GATEWAY_SETTINGS_LONG
], 50, 5, 5, 18, entries
,
805 ctr
[TR_OK
], ctr
[TR_CANCEL
], NULL
);
806 if (rc
== 0 || rc
== 1)
808 strcpy(message
, ctr
[TR_INVALID_FIELDS
]);
809 if (strlen(values
[DNS1
]))
811 if (inet_addr(values
[DNS1
]) == INADDR_NONE
)
813 strcat(message
, ctr
[TR_PRIMARY_DNS_CR
]);
817 if (strlen(values
[DNS2
]))
819 if (inet_addr(values
[DNS2
]) == INADDR_NONE
)
821 strcat(message
, ctr
[TR_SECONDARY_DNS_CR
]);
825 if (strlen(values
[DEFAULT_GATEWAY
]))
827 if (inet_addr(values
[DEFAULT_GATEWAY
]) == INADDR_NONE
)
829 strcat(message
, ctr
[TR_DEFAULT_GATEWAY_CR
]);
833 if (!strlen(values
[DNS1
]) && strlen(values
[DNS2
]))
835 strcpy(message
, ctr
[TR_SECONDARY_WITHOUT_PRIMARY_DNS
]);
843 replacekeyvalue(kv
, "DNS1", values
[DNS1
]);
844 replacekeyvalue(kv
, "DNS2", values
[DNS2
]);
845 replacekeyvalue(kv
, "DEFAULT_GATEWAY", values
[DEFAULT_GATEWAY
]);
846 netaddresschange
= 1;
849 free(values
[DEFAULT_GATEWAY
]);
850 writekeyvalues(kv
, CONFIG_ROOT
"/ethernet/settings");