Hello community,
here is the log from the commit of package linuxrc for openSUSE:Factory checked in at 2014-07-18 06:39:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/linuxrc (Old)
and /work/SRC/openSUSE:Factory/.linuxrc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "linuxrc"
Changes:
--------
--- /work/SRC/openSUSE:Factory/linuxrc/linuxrc.changes 2014-07-13 17:16:44.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.linuxrc.new/linuxrc.changes 2014-07-18 06:40:28.000000000 +0200
@@ -1,0 +2,16 @@
+Thu Jul 17 10:52:53 CEST 2014 - snwint@suse.de
+
+- fix proxy handling in linuxrc
+- 5.0.0
+
+-------------------------------------------------------------------
+Wed Jul 16 16:32:51 CEST 2014 - snwint@suse.de
+
+- avoid server name resolution
+- don't resolve proxy name
+- enable ipv6 by default
+- clean up cifs and nfs code
+- fix segfault and accept ipv6 netmasks (bnc 887501)
+- 4.2.45
+
+-------------------------------------------------------------------
Old:
----
linuxrc-4.2.44.tar.xz
New:
----
linuxrc-5.0.0.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ linuxrc.spec ++++++
--- /var/tmp/diff_new_pack.l08Vdd/_old 2014-07-18 06:40:29.000000000 +0200
+++ /var/tmp/diff_new_pack.l08Vdd/_new 2014-07-18 06:40:29.000000000 +0200
@@ -25,9 +25,9 @@
Summary: SUSE Installation Program
License: GPL-3.0+
Group: System/Boot
-Version: 4.2.44
+Version: 5.0.0
Release: 0
-Source: linuxrc-4.2.44.tar.xz
+Source: linuxrc-5.0.0.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
++++++ linuxrc-4.2.44.tar.xz -> linuxrc-5.0.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/VERSION new/linuxrc-5.0.0/VERSION
--- old/linuxrc-4.2.44/VERSION 2014-07-10 11:33:37.000000000 +0200
+++ new/linuxrc-5.0.0/VERSION 2014-07-17 10:52:44.000000000 +0200
@@ -1 +1 @@
-4.2.44
+5.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/changelog new/linuxrc-5.0.0/changelog
--- old/linuxrc-4.2.44/changelog 2014-07-10 11:33:40.000000000 +0200
+++ new/linuxrc-5.0.0/changelog 2014-07-17 10:52:46.000000000 +0200
@@ -1,4 +1,15 @@
-2014-07-10: HEAD
+2014-07-17: 5.0.0
+ - fix proxy handling in linuxrc
+
+2014-07-16: 4.2.45
+ - avoid server name resolution
+ - don't resolve proxy name
+ - enable ipv6 by default
+ - clean up cifs and nfs code
+ - fix segfault and accept ipv6 netmasks (bnc 887501)
+ - clean up nfs code
+
+2014-07-10: 4.2.44
- added 'defaultrepo' option to specify the repos to try if there's no 'install' option given
- rewrote ibft parser
- bot options: make plymouth.enable an alias to plymouth (bnc #886136)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/file.c new/linuxrc-5.0.0/file.c
--- old/linuxrc-4.2.44/file.c 2014-07-10 10:59:52.000000000 +0200
+++ new/linuxrc-5.0.0/file.c 2014-07-17 10:51:20.000000000 +0200
@@ -1942,14 +1942,7 @@
}
- if(config.url.proxy) {
- if(config.url.proxy->used.server.ok) {
- file_write_inet2(f, key_proxy, &config.url.proxy->used.server, INET_WRITE_NAME_OR_IP);
- }
- if(config.url.proxy->port) fprintf(f, "ProxyPort: %u\n", config.url.proxy->port);
- fprintf(f, "ProxyProto: http\n");
- fprintf(f, "ProxyURL: %s\n", url_print(config.url.proxy, 1));
- }
+ if(config.url.proxy) fprintf(f, "ProxyURL: %s\n", url_print(config.url.proxy, 1));
file_write_modparms(f);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/linuxrc.c new/linuxrc-5.0.0/linuxrc.c
--- old/linuxrc-4.2.44/linuxrc.c 2014-07-10 11:28:00.000000000 +0200
+++ new/linuxrc-5.0.0/linuxrc.c 2014-07-16 16:00:50.000000000 +0200
@@ -763,6 +763,7 @@
config.net.tftp_timeout = 10;
config.net.ifconfig = 1;
config.net.ipv4 = 1;
+ config.net.ipv6 = 1;
config.net.setup = NS_DEFAULT;
config.net.nameservers = 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/module.c new/linuxrc-5.0.0/module.c
--- old/linuxrc-4.2.44/module.c 2014-05-21 11:30:38.000000000 +0200
+++ new/linuxrc-5.0.0/module.c 2014-07-16 15:36:38.000000000 +0200
@@ -653,7 +653,7 @@
param = sl->value;
}
- if(config.debug) fprintf(stderr, "mod_insmod(\"%s\", \"%s\")\n", module, param);
+ if(config.debug) fprintf(stderr, "mod_insmod(%s, %s)\n", module, param ?: "");
if(!module || config.test) return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/net.c new/linuxrc-5.0.0/net.c
--- old/linuxrc-4.2.44/net.c 2014-07-09 16:16:21.000000000 +0200
+++ new/linuxrc-5.0.0/net.c 2014-07-16 15:53:05.000000000 +0200
@@ -34,17 +34,7 @@
#include
#include
#include
-#include
#include
-#include "nfs_mount4.h"
-
-/* this is probably the wrong solution... */
-#ifndef NFS_FHSIZE
-#define NFS_FHSIZE 32
-#endif
-#ifndef NFS_PORT
-#define NFS_PORT 2049
-#endif
#include
@@ -58,12 +48,6 @@
#include "url.h"
#include "auto2.h"
-#define NFS_PROGRAM 100003
-#define NFS_VERSION 2
-
-#if !defined(NETWORK_CONFIG)
-# define NETWORK_CONFIG 1
-#endif
static int net_activate4(void);
static int net_activate6(void);
@@ -73,11 +57,8 @@
#endif
static void net_setup_nameserver(void);
-#if NETWORK_CONFIG
static int net_choose_device(void);
static int net_input_data(void);
-#endif
-static int _net_mount_nfs(char *mountpoint, inet_t *server, char *hostdir, unsigned port, int flags);
static int wlan_auth_cb(dia_item_t di);
@@ -85,6 +66,7 @@
static int parse_leaseinfo(char *file);
static int net_wicked_dhcp(void);
+static void net_cifs_build_options(char **options, char *user, char *password, char *workgroup);
static void net_ask_domain(void);
static int ifcfg_write2(char *device, ifcfg_t *ifcfg, int initial);
static int ifcfg_write(char *device, ifcfg_t *ifcfg);
@@ -187,7 +169,6 @@
int net_config()
{
int rc = 0;
-#if NETWORK_CONFIG
char buf[256];
if(!config.win && !config.manual && config.ifcfg.if_up) return 0;
@@ -246,8 +227,6 @@
if(!config.test) return rc = -1;
}
-#endif
-
return rc;
}
@@ -933,25 +912,19 @@
/*
* Build mount option suitable for muont.cifs.
*/
-void net_smb_get_mount_options(char *options, inet_t *server, char *user, char *password, char *workgroup)
+void net_cifs_build_options(char **options, char *user, char *password, char *workgroup)
{
if(!options) return;
- *options = 0;
- if(!server) return;
- sprintf(options,"ip=%s", inet_ntoa(server->ip));
+ str_copy(options, "ro");
if(user) {
- strcat(options, ",username=");
- strcat(options, user);
- strcat(options, ",password=");
- strcat(options, password ?: "");
+ strprintf(options, "%s,username=%s,password=%s", *options, user, password ?: "");
if(workgroup) {
- strcat(options, ",workgroup=");
- strcat(options, workgroup);
+ strprintf(options, "%s,workgroup=%s", *options, workgroup);
}
} else {
- strcat(options, ",guest");
+ strprintf(options, "%s,guest", *options);
}
}
@@ -971,9 +944,6 @@
* password: password (NULL: no password)
* workgroup: workgroup (NULL: no workgroup)
*
- */
-
-/*
* depending on guest login
* options += "guest"
* resp.
@@ -984,176 +954,108 @@
* options += ",ip=" + SERVER_IP falls SERVER_IP gesetzt ist
* " mount -t smbfs" + device + " " + mountpoint + " " + options
*/
-int net_mount_smb(char *mountpoint, inet_t *server, char *share, char *user, char *password, char *workgroup)
+int net_mount_cifs(char *mountpoint, inet_t *server, char *share, char *user, char *password, char *workgroup, char *options)
{
- char tmp[1024];
- char mount_options[256];
+ char *cmd = NULL;
+ char *real_options = NULL;
+ int err;
- if(!config.net.cifs.binary) return -2;
+ if(!config.net.cifs.binary || !server->name) return -2;
- if(net_check_address(server, 1)) return -3;
+ mod_modprobe(config.net.cifs.module, NULL);
if(!share) share = "";
if(!mountpoint || !*mountpoint) mountpoint = "/";
- net_smb_get_mount_options(mount_options, server, user, password, workgroup);
-
- sprintf(tmp,
- "%s //%s/%s %s -o ro,%s >&2",
- config.net.cifs.binary, server->name, share, mountpoint, mount_options
- );
-
- mod_modprobe(config.net.cifs.module, NULL);
-
- fprintf(stderr, "%s\n", tmp);
-
- if(system(tmp)) return -1;
-
- return 0;
-}
-
-
-int xdr_dirpath (XDR *xdrs, dirpath *objp)
- {
- if (!xdr_string(xdrs, objp, MNTPATHLEN))
- return (FALSE);
- else
- return (TRUE);
- }
-
+ net_cifs_build_options(&real_options, user, password, workgroup);
-int xdr_fhandle (XDR *xdrs, fhandle objp)
- {
- if (!xdr_opaque(xdrs, objp, FHSIZE))
- return (FALSE);
- else
- return (TRUE);
+ if(options) {
+ if(*options == '-') {
+ str_copy(&real_options, options + 1);
}
-
-
-int xdr_fhstatus (XDR *xdrs, fhstatus *objp)
- {
- if (!xdr_u_int(xdrs, &objp->fhs_status))
- return (FALSE);
-
- if (!objp->fhs_status)
- if (!xdr_fhandle(xdrs, objp->fhstatus_u.fhs_fhandle))
- return (FALSE);
-
- return (TRUE);
+ else {
+ strprintf(&real_options, "%s,%s", real_options, options);
}
+ }
+ strprintf(&cmd, "%s '//%s/%s' '%s' -o '%s' >&2", config.net.cifs.binary, server->name, share, mountpoint, real_options);
-/*
- * Mount NFS volume.
- *
- * Tries v3 first, then v2.
- *
- * mountpoint: mount point
- * server: server address
- * hostdir: directory on server
- *
- * config.net.nfs: nfs options
- *
- * return:
- * 0: ok
- * != 0: error code
- *
- */
-int net_mount_nfs(char *mountpoint, inet_t *server, char *hostdir, unsigned port)
-{
- int err, flags = NFS_MOUNT_NONLM;
+ fprintf(stderr, "%s\n", cmd);
- if(!config.net.nfs.udp) flags |= NFS_MOUNT_TCP;
- if(config.net.nfs.vers != 2) flags |= NFS_MOUNT_VER3;
+ err = system(cmd);
- /* first, v3 with tcp */
- err = _net_mount_nfs(mountpoint, server, hostdir, port, flags);
+ str_copy(&cmd, NULL);
+ str_copy(&real_options, NULL);
- /* if that doesn't work, try v2, with udp */
- if(err == EPROTONOSUPPORT) {
- err = _net_mount_nfs(mountpoint, server, hostdir, port, NFS_MOUNT_NONLM);
- }
-
- return err;
+ return err ? -1 : 0;
}
/*
* Mount NFS volume.
*
- * Similar to net_mount_nfs() but lets you specify NFS mount flags.
- *
* mountpoint: mount point
* server: server address
* hostdir: directory on server
- * flags: NFS mount flags
+ * options: NFS mount options
+ *
+ * config.net.nfs: nfs options if options == NULL
*
- * config.net.nfs: nfs options
+ * options are added to any options linuxrc uses unless it is prefixed with '-'.
*
* return:
* 0: ok
* != 0: error code
*
*/
-int _net_mount_nfs(char *mountpoint, inet_t *server, char *hostdir, unsigned port, int flags)
+int net_mount_nfs(char *mountpoint, inet_t *server, char *hostdir, unsigned port, char *options)
{
- int i = 0;
- char addr[INET6_ADDRSTRLEN];
- char *args[6];
- char *path;
- char options[4096];
- int err, len = 0;
+ char *path = NULL;
+ char *real_options = NULL;
pid_t mount_pid;
- if(net_check_address(server, 1)) return -2;
+ if(!server->name) return -2;
if(!hostdir) hostdir = "/";
if(!mountpoint || !*mountpoint) mountpoint = "/";
mount_pid = fork();
- if (mount_pid < 0) {
+ if(mount_pid < 0) {
perror("fork");
+
return mount_pid;
- } else if (mount_pid > 0) {
+ }
+ else if(mount_pid > 0) {
int err;
pid_t pid;
while((pid = waitpid(-1, &err, 0)) && pid != mount_pid);
+
return WEXITSTATUS(err);
}
- if (server->ipv4)
- err = asprintf(&path, "%s:%s",
- inet_ntop(AF_INET, &server->ip.s_addr, addr,
- INET_ADDRSTRLEN), hostdir);
- else
- err = asprintf(&path, "[%s]:%s",
- inet_ntop(AF_INET6, &server->ip6.s6_addr, addr,
- INET6_ADDRSTRLEN), hostdir);
- if (err < 0) {
- perror("asprintf");
- return err;
- }
-
- len = snprintf(options, sizeof(options), "%s%s%sretrans=%d,timeo=%d",
- flags & NFS_MOUNT_TCP ? "tcp," : "",
- flags & NFS_MOUNT_VER3 ? "vers=3," : "",
- flags & NFS_MOUNT_NONLM ? "nolock," : "",
- 3, 7);
-
- if (config.net.nfs.rsize && len < sizeof(options))
- len += snprintf(options, sizeof(options) - len,
- ",rsize=%d", config.net.nfs.rsize);
- if (config.net.nfs.wsize && len < sizeof(options))
- len += snprintf(options, sizeof(options) - len,
- ",wsize=%d", config.net.nfs.wsize);
-
- args[i++] = "mount";
- args[i++] = "-o";
- args[i++] = options;
- args[i++] = path;
- args[i++] = mountpoint;
- args[i++] = NULL;
+ if(strchr(server->name, ':')) {
+ strprintf(&path, "[%s]:%s", server->name, hostdir);
+ }
+ else {
+ strprintf(&path, "%s:%s", server->name, hostdir);
+ }
+
+ str_copy(&real_options, "nolock");
+
+ if(!options) options = config.net.nfs.opts;
+
+ if(options) {
+ if(*options == '-') {
+ str_copy(&real_options, options + 1);
+ }
+ else {
+ strprintf(&real_options, "%s,%s", real_options, options);
+ }
+ }
+
+ if(config.debug) fprintf(stderr, "mount -o '%s' '%s' '%s'\n", real_options, path, mountpoint);
+
+ char *args[6] = { "mount", "-o", real_options, path, mountpoint /*, NULL */ };
signal(SIGUSR1, SIG_IGN);
execvp("mount", args);
@@ -1162,7 +1064,6 @@
}
-#if NETWORK_CONFIG
/*
* Let user select a network interface.
*
@@ -1408,7 +1309,6 @@
return choice > 0 ? 0 : -1;
}
-#endif
/*
@@ -1467,7 +1367,6 @@
}
-#if NETWORK_CONFIG
/*
* Let user enter some network config data.
*
@@ -1563,7 +1462,6 @@
return 0;
}
-#endif
/*
@@ -2717,6 +2615,7 @@
if(!config.ifcfg.list) return;
update_device_list(0);
+ // list of network cards (this will exclude, e.g., 'lo')
net_list = hd_list(config.hd_data, hw_network_ctrl, 0, NULL);
// 1st, all explicitly named interfaces
@@ -2849,14 +2748,8 @@
config.net.netmask.ok &&
config.net.netmask.ip.s_addr
) {
- int i = 1;
- uint32_t u = ntohl(config.net.netmask.ip.s_addr);
-
- while(u <<= 1) i++;
-
- if(config.debug) fprintf(stderr, "netmask to prefix: %d\n", i);
-
- config.net.hostname.prefix4 = i;
+ int i = netmask_to_prefix(config.net.netmask.name);
+ if(i >= 0) config.net.hostname.prefix4 = i;
}
}
@@ -2932,17 +2825,17 @@
str_copy(&sl->value, device);
}
- sl0 = slist_split(' ', ifcfg->ip);
-
- if(!sl0->next) {
- sl = slist_append_str(&sl_ifcfg, "IPADDR");
- str_copy(&sl->value, sl0->key);
- }
- else {
- for(i = 0, sl1 = sl0; sl1; sl1 = sl1->next) {
- sl = slist_append(&sl_ifcfg, slist_new());
- strprintf(&sl->key, "IPADDR_%d", ++i);
- str_copy(&sl->value, sl1->key);
+ if((sl0 = slist_split(' ', ifcfg->ip))) {
+ if(!sl0->next) {
+ sl = slist_append_str(&sl_ifcfg, "IPADDR");
+ str_copy(&sl->value, sl0->key);
+ }
+ else {
+ for(i = 0, sl1 = sl0; sl1; sl1 = sl1->next) {
+ sl = slist_append(&sl_ifcfg, slist_new());
+ strprintf(&sl->key, "IPADDR_%d", ++i);
+ str_copy(&sl->value, sl1->key);
+ }
}
}
@@ -3269,3 +3162,48 @@
str_copy(&buf, NULL);
}
+
+/*
+ * Convert netmask string to network prefix bits.
+ * Both ipv4 and ipv6 forms are allowed.
+ *
+ * Return -1 if it fails.
+ */
+int netmask_to_prefix(char *netmask)
+{
+ int prefix = -1;
+ uint32_t u;
+ struct in_addr ip4;
+ struct in6_addr ip6;
+
+ if(netmask) {
+ if(strchr(netmask, ':')) {
+ if(inet_pton(AF_INET6, netmask, &ip6) > 0) {
+ prefix = 0;
+ for(u = 0; u < 16 && ip6.s6_addr[u] == 0xff; u++) {
+ prefix += 8;
+ }
+ if(u < 16) {
+ for(u = ip6.s6_addr[u]; u & 0x80; u <<= 1, prefix++);
+ }
+ }
+ }
+ else {
+ if(inet_pton(AF_INET, netmask, &ip4) > 0) {
+ u = ntohl(ip4.s_addr);
+ if(u == 0) {
+ prefix = 0;
+ }
+ else {
+ prefix = 1;
+ while(u <<= 1) prefix++;
+ }
+ }
+ }
+ }
+
+ if(config.debug) fprintf(stderr, "netmask -> prefix: %s -> %d\n", netmask, prefix);
+
+ return prefix;
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/net.h new/linuxrc-5.0.0/net.h
--- old/linuxrc-4.2.44/net.h 2014-07-08 14:12:11.000000000 +0200
+++ new/linuxrc-5.0.0/net.h 2014-07-16 15:34:06.000000000 +0200
@@ -9,9 +9,8 @@
int net_config(void);
int net_config2(int type);
void net_ask_password(void);
-int net_mount_nfs(char *mountpoint, inet_t *server, char *hostdir, unsigned port);
-int net_mount_smb(char *mountpoint, inet_t *server, char *hostdir, char *user, char *password, char *workgroup);
-void net_smb_get_mount_options(char *options, inet_t *server, char *user, char *password, char *workgroup);
+int net_mount_nfs(char *mountpoint, inet_t *server, char *hostdir, unsigned port, char *options);
+int net_mount_cifs(char *mountpoint, inet_t *server, char *hostdir, char *user, char *password, char *workgroup, char *options);
void net_stop(void);
int net_check_address(inet_t *inet, int do_dns);
int net_activate_ns(void);
@@ -30,3 +29,4 @@
void net_update_state(void);
void net_wicked_up(char *ifname);
void net_wicked_down(char *ifname);
+int netmask_to_prefix(char *netmask);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/url.c new/linuxrc-5.0.0/url.c
--- old/linuxrc-4.2.44/url.c 2014-07-09 15:41:13.000000000 +0200
+++ new/linuxrc-5.0.0/url.c 2014-07-17 10:38:29.000000000 +0200
@@ -99,28 +99,17 @@
curl_easy_setopt(c_handle, CURLOPT_PROGRESSDATA, url_data);
curl_easy_setopt(c_handle, CURLOPT_NOPROGRESS, 0);
- if(config.net.ipv6) {
- curl_easy_setopt(c_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
- }
-
url_data->err = curl_easy_setopt(c_handle, CURLOPT_URL, url_data->url->str);
- // fprintf(stderr, "curl opt url = %d\n", url_data->err);
+ if(config.debug >= 2) fprintf(stderr, "curl opt url = %d (%s)\n", url_data->err, url_data->curl_err_buf);
if(config.debug >= 2) fprintf(stderr, "url_read(%s)\n", url_data->url->str);
str_copy(&proxy_url, url_print(config.url.proxy, 1));
if(proxy_url) {
if(config.debug >= 2) fprintf(stderr, "using proxy %s\n", proxy_url);
name2inet(&config.url.proxy->used.server, config.url.proxy->server);
- if(net_check_address(&config.url.proxy->used.server, 1)) {
- snprintf(url_data->err_buf, url_data->err_buf_len, "invalid proxy address: %s", config.url.proxy->used.server.name);
- fprintf(stderr, "%s\n", url_data->err_buf);
- url_data->err = 105;
- }
- else {
- curl_easy_setopt(c_handle, CURLOPT_PROXY, proxy_url);
- if(config.debug >= 2) fprintf(stderr, "proxy: %s\n", proxy_url);
- }
+ curl_easy_setopt(c_handle, CURLOPT_PROXY, proxy_url);
+ if(config.debug >= 2) fprintf(stderr, "proxy: %s\n", proxy_url);
}
if(url_data->progress) url_data->progress(url_data, 0);
@@ -135,7 +124,7 @@
url_write_cb(NULL, 0, 0, url_data);
}
- // fprintf(stderr, "curl perform = %d (%s)\n", url_data->err, url_data->err_buf);
+ if(config.debug >= 2) fprintf(stderr, "curl perform = %d (%s)\n", url_data->err, url_data->curl_err_buf);
if(url_data->f) {
i = url_data->pipe_fd >= 0 ? pclose(url_data->f) : fclose(url_data->f);
@@ -339,7 +328,7 @@
/*
* scheme://domain;user:password@server:port/path?query
*
- * smb: path = share/path
+ * cifs: path = share/path
* disk: path = [device/]path
*/
@@ -449,7 +438,7 @@
tmp = NULL;
}
- /* smb: first path element is share */
+ /* cifs: first path element is share */
if(url->scheme == inst_smb && url->path) {
url->share = url->path;
url->path = NULL;
@@ -815,6 +804,21 @@
}
}
+ if(
+ config.url.proxy &&
+ config.url.proxy->server && (
+ url->scheme == inst_http ||
+ url->scheme == inst_https ||
+ url->scheme == inst_ftp ||
+ url->scheme == inst_tftp
+ )
+ ) {
+ strprintf(&buf, "%s%cproxy=%s", buf, q++ ? '&' : '?', config.url.proxy->server);
+ if(config.url.proxy->port) strprintf(&buf, "%s%cproxyport=%u", buf, q++ ? '&' : '?', config.url.proxy->port);
+ if(config.url.proxy->user) strprintf(&buf, "%s%cproxyuser=%s", buf, q++ ? '&' : '?', config.url.proxy->user);
+ if(config.url.proxy->password) strprintf(&buf, "%s%cproxypass=%s", buf, q++ ? '&' : '?', config.url.proxy->password);
+ }
+
if(url->is.file && file) {
strprintf(&buf, "iso:/?iso=%s&url=%s", file, buf);
}
@@ -1157,6 +1161,9 @@
else {
/* network device */
+ slist_t *options_sl = slist_getentry(url->query, "options");
+ char *options = options_sl ? options_sl->value : NULL;
+
switch(url->scheme) {
case inst_nfs:
str_copy(&url->mount, dir ?: new_mountpoint());
@@ -1164,7 +1171,7 @@
if(config.debug) fprintf(stderr, "[server = %s]\n", inet2print(&url->used.server));
if(!url->is.file) {
- err = net_mount_nfs(url->mount, &url->used.server, url->path, url->port);
+ err = net_mount_nfs(url->mount, &url->used.server, url->path, url->port, options);
fprintf(stderr, "nfs: %s -> %s (%d)\n", url->path, url->mount, err);
}
else {
@@ -1181,7 +1188,7 @@
if(config.debug) fprintf(stderr, "[server = %s]\n", inet2print(&url->used.server));
- err = net_mount_nfs(url->tmp_mount, &url->used.server, buf, url->port);
+ err = net_mount_nfs(url->tmp_mount, &url->used.server, buf, url->port, options);
fprintf(stderr, "nfs: %s -> %s (%d)\n", buf, url->tmp_mount, err);
if(err) {
@@ -1212,8 +1219,8 @@
if(config.debug) fprintf(stderr, "[server = %s]\n", inet2print(&url->used.server));
- err = net_mount_smb(s, &url->used.server, url->share, url->user, url->password, url->domain);
- fprintf(stderr, "smb: %s -> %s (%d)\n", url->share, s, err);
+ err = net_mount_cifs(s, &url->used.server, url->share, url->user, url->password, url->domain, options);
+ fprintf(stderr, "cifs: %s -> %s (%d)\n", url->share, s, err);
if(err) {
str_copy(&url->tmp_mount, NULL);
str_copy(&url->mount, NULL);
@@ -2246,17 +2253,7 @@
}
else {
ok = url_setup_interface(url);
-
- if(ok) {
- name2inet(&url->used.server, url->server);
-
- if(net_check_address(&url->used.server, 1)) {
- fprintf(stderr, "invalid server address: %s\n", url->used.server.name);
- config.net.configured = nc_none;
-
- ok = 0;
- }
- }
+ if(ok) name2inet(&url->used.server, url->server);
}
return ok;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-4.2.44/util.c new/linuxrc-5.0.0/util.c
--- old/linuxrc-4.2.44/util.c 2014-07-10 11:00:16.000000000 +0200
+++ new/linuxrc-5.0.0/util.c 2014-07-16 14:05:38.000000000 +0200
@@ -4359,26 +4359,15 @@
strprintf(&attr, "%s/subnet-mask", sysfs_ibft);
s = util_get_attr(attr);
fprintf(stderr, "ibft: subnet-mask = %s\n", s);
-
- if(*s) {
- inet_t netmask = {};
- int i = 1;
- uint32_t u;
-
- name2inet(&netmask, s);
- net_check_address(&netmask, 0);
- if(netmask.ok && netmask.ip.s_addr) {
- u = ntohl(netmask.ip.s_addr);
- while(u <<= 1) i++;
- prefix = i;
- }
- }
+ prefix = netmask_to_prefix(s);
strprintf(&attr, "%s/ip-addr", sysfs_ibft);
s = util_get_attr(attr);
- fprintf(stderr, "ibft: ip-addr = %s/%d\n", s, prefix);
-
- if(*s && prefix > 0) str_copy(&ifcfg->ip, s);
+ if(*s) {
+ str_copy(&ifcfg->ip, s);
+ if(prefix > 0) strprintf(&ifcfg->ip, "%s/%d", ifcfg->ip, prefix);
+ }
+ fprintf(stderr, "ibft: ip-addr = %s\n", ifcfg->ip ?: "");
strprintf(&attr, "%s/gateway", sysfs_ibft);
s = util_get_attr(attr);
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org