dhclient support added
only invoked if dhclient is present on install image
This commit is contained in:
parent
51e81216d1
commit
cbefbdefce
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: defs.h,v 1.52 2000/03/24 21:56:04 thorpej Exp $ */
|
||||
/* $NetBSD: defs.h,v 1.53 2000/06/18 23:50:02 cyber Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997 Piermont Information Systems Inc.
|
||||
|
@ -91,6 +91,8 @@ typedef struct _partinfo {
|
|||
|
||||
/* variables */
|
||||
|
||||
EXTERN char m_continue[STRSIZE] INIT("");
|
||||
|
||||
EXTERN char rel[SSTRSIZE] INIT(REL);
|
||||
EXTERN char machine[SSTRSIZE] INIT(MACH);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: menus.mi.en,v 1.39 2000/03/14 22:42:49 fvdl Exp $ */
|
||||
/* $NetBSD: menus.mi.en,v 1.40 2000/06/18 23:50:03 cyber Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997 Piermont Information Systems Inc.
|
||||
|
@ -390,3 +390,8 @@ menu namesrv6, title " Select IPv6 DNS server";
|
|||
menu ip6autoconf, title "Perform IPv6 autoconfiguration?";
|
||||
option "Yes", exit, action {yesno = 1;};
|
||||
option "No", exit, action {yesno = 0;};
|
||||
|
||||
menu dhcpautoconf, title "Perform DHCP autoconfiguration?";
|
||||
option "Yes", exit, action {yesno = 1;};
|
||||
option "No", exit, action {yesno = 0;};
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: menus.mi.fr,v 1.27 2000/03/14 22:42:49 fvdl Exp $ */
|
||||
/* $NetBSD: menus.mi.fr,v 1.28 2000/06/18 23:50:03 cyber Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997 Piermont Information Systems Inc.
|
||||
|
@ -390,3 +390,7 @@ menu namesrv6, title " Choisissez un serveur de noms IPv6 :";
|
|||
menu ip6autoconf, title "Faire la configuration automatique IPv6 ?";
|
||||
option "Yes", exit, action {yesno = 1;};
|
||||
option "No", exit, action {yesno = 0;};
|
||||
|
||||
menu dhcpautoconf, title "Exécutez la configuration automatique de DHCP?";
|
||||
option "Yes", exit, action {yesno = 1;};
|
||||
option "No", exit, action {yesno = 0;};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: msg.mi.en,v 1.61 2000/06/17 17:40:32 hubertf Exp $ */
|
||||
/* $NetBSD: msg.mi.en,v 1.62 2000/06/18 23:50:03 cyber Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997 Piermont Information Systems Inc.
|
||||
|
@ -744,3 +744,7 @@ message upgradeparttype
|
|||
{The only suitable partition that was found for NetBSD installation is of
|
||||
the old NetBSD/386BSD/FreeBSD partition type. Do you want to change the type
|
||||
of this partition to the new NetBSD-only partition type?}
|
||||
|
||||
message continue
|
||||
{Continue?}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: msg.mi.fr,v 1.33 2000/03/14 22:42:49 fvdl Exp $ */
|
||||
/* $NetBSD: msg.mi.fr,v 1.34 2000/06/18 23:50:04 cyber Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997 Piermont Information Systems Inc.
|
||||
|
@ -770,3 +770,6 @@ message upgradeparttype
|
|||
{La seule partition disponible pour installer NetBSD est de l'ancien type
|
||||
NetBSD/386BSD/FreeBSD. Voulez-vous le changer pour le nouveau type
|
||||
dédié à NetBSD ?}
|
||||
|
||||
message continue
|
||||
{Continuez?}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: net.c,v 1.57 2000/01/05 01:50:45 itojun Exp $ */
|
||||
/* $NetBSD: net.c,v 1.58 2000/06/18 23:50:04 cyber Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1997 Piermont Information Systems Inc.
|
||||
|
@ -71,6 +71,12 @@ static void get_ifinterface_info __P((void));
|
|||
|
||||
static void write_etc_hosts(FILE *f);
|
||||
|
||||
#define DHCLIENT_EX "/sbin/dhclient"
|
||||
#include <signal.h>
|
||||
static int config_dhcp __P((char *));
|
||||
static void get_command_out __P((char *, char *, char *));
|
||||
static void get_dhcp_value __P(( char *, char *));
|
||||
|
||||
#ifdef INET6
|
||||
static int is_v6kernel __P((void));
|
||||
static void init_v6kernel __P((int));
|
||||
|
@ -245,6 +251,8 @@ get_ifinterface_info()
|
|||
int textsize;
|
||||
char *t;
|
||||
char hostname[MAXHOSTNAMELEN + 1];
|
||||
int max_len;
|
||||
char *dot;
|
||||
|
||||
/* First look to see if the selected interface is already configured. */
|
||||
textsize = collect(T_OUTPUT, &textbuf,
|
||||
|
@ -300,7 +308,22 @@ get_ifinterface_info()
|
|||
/* Check host (and domain?) name */
|
||||
if (gethostname(hostname, sizeof(hostname)) == 0) {
|
||||
hostname[sizeof(hostname) - 1] = '\0';
|
||||
strncpy(net_host, hostname, sizeof(net_host));
|
||||
/* check for a . */
|
||||
dot = strchr(hostname, '.');
|
||||
if ( dot == NULL ) {
|
||||
/* if not found its just a host, punt on domain */
|
||||
strncpy(net_host, hostname, sizeof(net_host));
|
||||
} else {
|
||||
/* split hostname into host/domain parts */
|
||||
max_len = dot - hostname;
|
||||
max_len = (sizeof(net_host)<max_len)?sizeof(net_host):max_len;
|
||||
*dot = '\0';
|
||||
dot++;
|
||||
strncpy(net_host, hostname, max_len);
|
||||
max_len = strlen(dot);
|
||||
max_len = (sizeof(net_host)<max_len)?sizeof(net_host):max_len;
|
||||
strncpy(net_domain, dot, max_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -367,7 +390,7 @@ config_network()
|
|||
{ char *tp;
|
||||
char defname[255];
|
||||
int octet0;
|
||||
int pass, needmedia, v6config;
|
||||
int pass, needmedia, v6config, dhcp_config;
|
||||
|
||||
FILE *f;
|
||||
time_t now;
|
||||
|
@ -404,17 +427,34 @@ config_network()
|
|||
/* Remove that space we added. */
|
||||
net_dev[strlen(net_dev) - 1] = 0;
|
||||
|
||||
again:
|
||||
|
||||
#ifdef INET6
|
||||
v6config = 1;
|
||||
#else
|
||||
v6config = 0;
|
||||
#endif
|
||||
|
||||
again:
|
||||
/* Preload any defaults we can find */
|
||||
dhcp_config = config_dhcp(net_dev);
|
||||
get_ifinterface_info();
|
||||
pass = strlen(net_mask) == 0 ? 0 : 1;
|
||||
needmedia = strlen(net_media) == 0 ? 0 : 1;
|
||||
if(dhcp_config) {
|
||||
/* disable ipv6 */
|
||||
v6config=0;
|
||||
/* run route show and extract data */
|
||||
get_command_out(net_defroute,"/sbin/route show 2>/dev/null","default");
|
||||
/* pull nameserver info out of /etc/resolv.conf */
|
||||
get_command_out(net_namesvr,"cat /etc/resolv.conf 2> /dev/null","nameserver");
|
||||
|
||||
/* pull domainname out of leases file */
|
||||
get_dhcp_value(net_domain,"domain-name");
|
||||
/* pull hostname out of leases file */
|
||||
get_dhcp_value(net_host,"hostname");
|
||||
|
||||
goto confirm; /* CEBXXX goto's suck */
|
||||
}
|
||||
|
||||
/* domain and host */
|
||||
msg_display(MSG_netinfo);
|
||||
|
@ -427,7 +467,6 @@ again:
|
|||
STRSIZE);
|
||||
|
||||
/* Manually configure IPv4 */
|
||||
/* XXX todo: dhcp */
|
||||
msg_prompt_add(MSG_net_ip, net_ip, net_ip, STRSIZE);
|
||||
octet0 = atoi(net_ip);
|
||||
if (!pass) {
|
||||
|
@ -444,9 +483,9 @@ again:
|
|||
|
||||
#ifdef INET6
|
||||
/* IPv6 autoconfiguration */
|
||||
if (!is_v6kernel())
|
||||
if (!is_v6kernel() )
|
||||
v6config = 0;
|
||||
else {
|
||||
else if(v6config) { /* dhcp config will disable this */
|
||||
process_menu(MENU_ip6autoconf);
|
||||
v6config = yesno ? 1 : 0;
|
||||
}
|
||||
|
@ -459,6 +498,7 @@ again:
|
|||
}
|
||||
#endif
|
||||
|
||||
confirm:
|
||||
/* confirm the setting */
|
||||
msg_display(MSG_netok, net_domain, net_host,
|
||||
*net_ip == '\0' ? "<none>" : net_ip,
|
||||
|
@ -866,3 +906,112 @@ mnt_net_config(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
config_dhcp (inter)
|
||||
char * inter;
|
||||
{
|
||||
int dhcpautoconf;
|
||||
int result;
|
||||
char *textbuf;
|
||||
int pid;
|
||||
|
||||
/* check if dhclient is running, if so, kill it */
|
||||
result = collect(T_FILE, &textbuf, "/tmp/dhclient.pid");
|
||||
if (result >=0) {
|
||||
pid = atoi(textbuf);
|
||||
if (pid > 0) {
|
||||
kill(pid,15);
|
||||
sleep(1);
|
||||
kill(pid,9);
|
||||
}
|
||||
}
|
||||
|
||||
result = run_prog(0, 0, NULL, "test %s %s", "-f", DHCLIENT_EX);
|
||||
if (result!=0) {
|
||||
return 0;
|
||||
}
|
||||
process_menu(MENU_dhcpautoconf);
|
||||
if (yesno) {
|
||||
/* spawn off dhclient and wait for parent to exit */
|
||||
dhcpautoconf = run_prog(0, 1, NULL, "%s -pf /tmp/dhclient.pid -lf /tmp/dhclient.leases %s", DHCLIENT_EX,inter);
|
||||
return dhcpautoconf?0:1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
get_command_out (targ, command, search)
|
||||
char *targ;
|
||||
char *command;
|
||||
char *search;
|
||||
{
|
||||
int textsize;
|
||||
char *textbuf;
|
||||
char *t;
|
||||
|
||||
textsize = collect(T_OUTPUT, &textbuf, command);
|
||||
if (textsize < 0) {
|
||||
if (logging)
|
||||
(void)fprintf(log, "Aborting: Could not run %s.\n", command);
|
||||
(void)fprintf(stderr, "Could not run ifconfig.");
|
||||
exit(1);
|
||||
}
|
||||
if (textsize >= 0) {
|
||||
(void)strtok(textbuf, " \t\n"); /* ignore interface name */
|
||||
while ((t = strtok(NULL, " \t\n")) != NULL) {
|
||||
if (strcmp(t, search) == 0) {
|
||||
t = strtok(NULL, " \t\n");
|
||||
if (strcmp(t, "0.0.0.0") != 0) {
|
||||
strcpy(targ, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
get_dhcp_value(targ, line)
|
||||
char *targ;
|
||||
char *line;
|
||||
{
|
||||
int textsize;
|
||||
char *textbuf;
|
||||
char *t;
|
||||
char *walk;
|
||||
|
||||
textsize = collect(T_FILE, &textbuf, "/tmp/dhclient.leases");
|
||||
if (textsize < 0) {
|
||||
if (logging)
|
||||
(void)fprintf(log, "Could not open file /tmp/dhclient.leases.\n");
|
||||
(void)fprintf(stderr, "Could not open /tmp/dhclient.leases\n");
|
||||
/* not fatal, just assume value not found */
|
||||
}
|
||||
if (textsize >=0 ) {
|
||||
(void)strtok(textbuf, " \t\n"); /* jump past 'lease' */
|
||||
while ((t=strtok(NULL, " \t\n")) !=NULL) {
|
||||
if (strcmp(t, line) == 0) {
|
||||
t = strtok(NULL, " \t\n");
|
||||
/* found the tag, extract the value */
|
||||
/* last char should be a ';' */
|
||||
walk = strrchr(t,';');
|
||||
if (walk != NULL ) {
|
||||
*walk = '\0';
|
||||
}
|
||||
/* strip any " from the string */
|
||||
walk = strrchr(t,'"');
|
||||
if (walk != NULL ) {
|
||||
*walk = '\0';
|
||||
t++;
|
||||
}
|
||||
strcpy(targ, t);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue