summaryrefslogtreecommitdiffstats
path: root/loader2
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2008-08-08 15:41:21 -0400
committerChris Lumens <clumens@redhat.com>2008-08-08 16:08:15 -0400
commite737a594331d390394a3b64b434dac9053174620 (patch)
tree941b701dcf8b4a889efe653f40bf625d33d0e33b /loader2
parenta9e04cc7ee472112259eb0868c43d118c2f09a92 (diff)
downloadanaconda-e737a594331d390394a3b64b434dac9053174620.tar.gz
anaconda-e737a594331d390394a3b64b434dac9053174620.tar.xz
anaconda-e737a594331d390394a3b64b434dac9053174620.zip
Fix segfaults on interactive NFS installs (#458416).
Diffstat (limited to 'loader2')
-rw-r--r--loader2/net.h1
-rw-r--r--loader2/nfsinstall.c20
2 files changed, 12 insertions, 9 deletions
diff --git a/loader2/net.h b/loader2/net.h
index 82a5bf431..6bccb2871 100644
--- a/loader2/net.h
+++ b/loader2/net.h
@@ -88,7 +88,6 @@ int configureNetwork(struct networkDeviceConfig * dev);
int writeNetInfo(const char * fn, struct networkDeviceConfig * dev);
int findHostAndDomain(struct networkDeviceConfig * dev);
int writeResolvConf(struct networkDeviceConfig * net);
-int nfsGetSetup(char ** hostptr, char ** dirptr);
void initLoopback(void);
int chooseNetworkInterface(struct loaderData_s * loaderData);
void setupNetworkDeviceConfig(struct networkDeviceConfig * cfg,
diff --git a/loader2/nfsinstall.c b/loader2/nfsinstall.c
index 046f00e58..151711ec7 100644
--- a/loader2/nfsinstall.c
+++ b/loader2/nfsinstall.c
@@ -50,7 +50,7 @@
/* boot flags */
extern uint64_t flags;
-int nfsGetSetup(char ** hostptr, char ** dirptr) {
+static int nfsGetSetup(char ** hostptr, char ** dirptr) {
struct newtWinEntry entries[3];
char * buf;
char * newServer = *hostptr ? strdup(*hostptr) : NULL;
@@ -78,8 +78,11 @@ int nfsGetSetup(char ** hostptr, char ** dirptr) {
abort();
}
- rc = newtWinEntries(_("NFS Setup"), buf, 60, 5, 15,
- 24, entries, _("OK"), _("Back"), NULL);
+ do {
+ rc = newtWinEntries(_("NFS Setup"), buf, 60, 5, 15,
+ 24, entries, _("OK"), _("Back"), NULL);
+ } while (!strcmp(newServer, "") || !strcmp(newDir, ""));
+
free(buf);
free(entries[1].text);
@@ -152,16 +155,17 @@ char * mountNfsImage(struct installMethod * method,
*/
substr = strstr(directory, ".img");
if (!substr || (substr && *(substr+4) != '\0')) {
- if (asprintf(&tmp, "%s/images/stage2.img",
- directory) == -1) {
+ if (asprintf(&tmp, "nfs:%s:%s/images/stage2.img",
+ host, directory) == -1) {
logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
abort();
}
- free(((struct nfsInstallData *) loaderData->stage2Data)->directory);
- ((struct nfsInstallData *) loaderData->stage2Data)->directory = strdup(tmp);
- directory = ((struct nfsInstallData *) loaderData->stage2Data)->directory;
+ setStage2LocFromCmdline(tmp, loaderData);
+ free(host);
+ free(directory);
free(tmp);
+ continue;
}
}