aboutsummaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2013-12-03 16:48:56 +0000
committerMichael Brown <mcb30@ipxe.org>2013-12-05 00:37:02 +0000
commit22001cb206c1320aee27f679a63d2171d35e99c5 (patch)
treea972bb914371a68d4925dcc007238dcb836546ba /src/net
parenta2638a8edd28e15d90435a0b1aed9b3215666aa4 (diff)
downloadipxe-22001cb206c1320aee27f679a63d2171d35e99c5.tar.gz
[settings] Explicitly separate the concept of a completed fetched setting
The fetch_setting() family of functions may currently modify the definition of the specified setting (e.g. to add missing type information). Clean up this interface by requiring callers to provide an explicit buffer to contain the completed definition of the fetched setting, if required. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net')
-rw-r--r--src/net/80211/net80211.c6
-rw-r--r--src/net/80211/wep.c8
-rw-r--r--src/net/dhcppkt.c4
-rw-r--r--src/net/fakedhcp.c18
-rw-r--r--src/net/ipv4.c6
-rw-r--r--src/net/ipv6.c6
-rw-r--r--src/net/netdev_settings.c15
-rw-r--r--src/net/tcp/iscsi.c61
-rw-r--r--src/net/tcp/oncrpc.c4
-rw-r--r--src/net/tcp/syslogs.c10
-rw-r--r--src/net/udp/dhcp.c44
-rw-r--r--src/net/udp/dhcpv6.c6
-rw-r--r--src/net/udp/dns.c8
-rw-r--r--src/net/udp/syslog.c14
-rw-r--r--src/net/validator.c12
15 files changed, 88 insertions, 134 deletions
diff --git a/src/net/80211/net80211.c b/src/net/80211/net80211.c
index 3893f652c..db4dc1168 100644
--- a/src/net/80211/net80211.c
+++ b/src/net/80211/net80211.c
@@ -204,7 +204,7 @@ struct settings_applicator net80211_applicator __settings_applicator = {
* If this is blank, we scan for all networks and use the one with the
* greatest signal strength.
*/
-struct setting net80211_ssid_setting __setting ( SETTING_NETDEV_EXTRA ) = {
+const struct setting net80211_ssid_setting __setting ( SETTING_NETDEV_EXTRA ) = {
.name = "ssid",
.description = "Wireless SSID",
.type = &setting_type_string,
@@ -216,7 +216,7 @@ struct setting net80211_ssid_setting __setting ( SETTING_NETDEV_EXTRA ) = {
* active scan (send probe packets). If this setting is nonzero, an
* active scan on the 2.4GHz band will be used to associate.
*/
-struct setting net80211_active_setting __setting ( SETTING_NETDEV_EXTRA ) = {
+const struct setting net80211_active_setting __setting ( SETTING_NETDEV_EXTRA ) = {
.name = "active-scan",
.description = "Actively scan for wireless networks",
.type = &setting_type_int8,
@@ -228,7 +228,7 @@ struct setting net80211_active_setting __setting ( SETTING_NETDEV_EXTRA ) = {
* normal iPXE method for entering hex settings; an ASCII string of
* hex characters will not behave as expected.
*/
-struct setting net80211_key_setting __setting ( SETTING_NETDEV_EXTRA ) = {
+const struct setting net80211_key_setting __setting ( SETTING_NETDEV_EXTRA ) = {
.name = "key",
.description = "Wireless encryption key",
.type = &setting_type_string,
diff --git a/src/net/80211/wep.c b/src/net/80211/wep.c
index 37b27f71a..e22ac8998 100644
--- a/src/net/80211/wep.c
+++ b/src/net/80211/wep.c
@@ -236,8 +236,8 @@ static int trivial_init ( struct net80211_device *dev )
dev->associating->crypto == NET80211_CRYPT_NONE )
return 0; /* no crypto? OK. */
- len = fetch_setting ( netdev_settings ( dev->netdev ),
- &net80211_key_setting, key, WEP_MAX_KEY );
+ len = fetch_raw_setting ( netdev_settings ( dev->netdev ),
+ &net80211_key_setting, key, WEP_MAX_KEY );
if ( len <= 0 ) {
DBGC ( dev, "802.11 %p cannot do WEP without a key\n", dev );
@@ -278,8 +278,8 @@ static int trivial_change_key ( struct net80211_device *dev )
if ( ! dev->crypto || ( dev->crypto->init != wep_init ) )
change ^= 1;
- len = fetch_setting ( netdev_settings ( dev->netdev ),
- &net80211_key_setting, key, WEP_MAX_KEY );
+ len = fetch_raw_setting ( netdev_settings ( dev->netdev ),
+ &net80211_key_setting, key, WEP_MAX_KEY );
if ( len <= 0 )
change ^= 1;
diff --git a/src/net/dhcppkt.c b/src/net/dhcppkt.c
index 3722c09e1..a9a6d3a94 100644
--- a/src/net/dhcppkt.c
+++ b/src/net/dhcppkt.c
@@ -226,7 +226,7 @@ int dhcppkt_fetch ( struct dhcp_packet *dhcppkt, unsigned int tag,
* @ret applies Setting applies within this settings block
*/
static int dhcppkt_settings_applies ( struct settings *settings,
- struct setting *setting ) {
+ const struct setting *setting ) {
struct dhcp_packet *dhcppkt =
container_of ( settings, struct dhcp_packet, settings );
@@ -244,7 +244,7 @@ static int dhcppkt_settings_applies ( struct settings *settings,
* @ret rc Return status code
*/
static int dhcppkt_settings_store ( struct settings *settings,
- struct setting *setting,
+ const struct setting *setting,
const void *data, size_t len ) {
struct dhcp_packet *dhcppkt =
container_of ( settings, struct dhcp_packet, settings );
diff --git a/src/net/fakedhcp.c b/src/net/fakedhcp.c
index d67501ed3..3dec88b11 100644
--- a/src/net/fakedhcp.c
+++ b/src/net/fakedhcp.c
@@ -49,8 +49,8 @@ static int copy_encap_settings ( struct dhcp_packet *dest,
struct setting setting = { .name = "" };
unsigned int subtag;
unsigned int tag;
+ void *data;
int len;
- int check_len;
int rc;
for ( subtag = DHCP_MIN_OPTION; subtag <= DHCP_MAX_OPTION; subtag++ ) {
@@ -66,17 +66,11 @@ static int copy_encap_settings ( struct dhcp_packet *dest,
default:
/* Copy setting, if present */
setting.tag = tag;
- len = fetch_setting_len ( source, &setting );
- if ( len < 0 )
- break;
- {
- char buf[len];
-
- check_len = fetch_setting ( source, &setting,
- buf, sizeof (buf));
- assert ( check_len == len );
- if ( ( rc = dhcppkt_store ( dest, tag, buf,
- sizeof(buf) )) !=0)
+ len = fetch_raw_setting_copy ( source, &setting, &data);
+ if ( len >= 0 ) {
+ rc = dhcppkt_store ( dest, tag, data, len );
+ free ( data );
+ if ( rc != 0 )
return rc;
}
break;
diff --git a/src/net/ipv4.c b/src/net/ipv4.c
index 438fe9ac5..f0a2e4d65 100644
--- a/src/net/ipv4.c
+++ b/src/net/ipv4.c
@@ -591,7 +591,7 @@ struct sockaddr_converter ipv4_sockaddr_converter __sockaddr_converter = {
*/
/** IPv4 address setting */
-struct setting ip_setting __setting ( SETTING_IPv4 ) = {
+const struct setting ip_setting __setting ( SETTING_IPv4 ) = {
.name = "ip",
.description = "IP address",
.tag = DHCP_EB_YIADDR,
@@ -599,7 +599,7 @@ struct setting ip_setting __setting ( SETTING_IPv4 ) = {
};
/** IPv4 subnet mask setting */
-struct setting netmask_setting __setting ( SETTING_IPv4 ) = {
+const struct setting netmask_setting __setting ( SETTING_IPv4 ) = {
.name = "netmask",
.description = "Subnet mask",
.tag = DHCP_SUBNET_MASK,
@@ -607,7 +607,7 @@ struct setting netmask_setting __setting ( SETTING_IPv4 ) = {
};
/** Default gateway setting */
-struct setting gateway_setting __setting ( SETTING_IPv4 ) = {
+const struct setting gateway_setting __setting ( SETTING_IPv4 ) = {
.name = "gateway",
.description = "Default gateway",
.tag = DHCP_ROUTERS,
diff --git a/src/net/ipv6.c b/src/net/ipv6.c
index b4f33f0d0..68a0c89bf 100644
--- a/src/net/ipv6.c
+++ b/src/net/ipv6.c
@@ -954,7 +954,7 @@ struct sockaddr_converter ipv6_sockaddr_converter __sockaddr_converter = {
* @v len Length of buffer
* @ret len Length of raw value, or negative error
*/
-static int parse_ipv6_setting ( struct setting_type *type __unused,
+static int parse_ipv6_setting ( const struct setting_type *type __unused,
const char *value, void *buf, size_t len ) {
struct in6_addr ipv6;
int rc;
@@ -981,7 +981,7 @@ static int parse_ipv6_setting ( struct setting_type *type __unused,
* @v len Length of buffer
* @ret len Length of formatted value, or negative error
*/
-static int format_ipv6_setting ( struct setting_type *type __unused,
+static int format_ipv6_setting ( const struct setting_type *type __unused,
const void *raw, size_t raw_len, char *buf,
size_t len ) {
const struct in6_addr *ipv6 = raw;
@@ -992,7 +992,7 @@ static int format_ipv6_setting ( struct setting_type *type __unused,
}
/** An IPv6 address setting type */
-struct setting_type setting_type_ipv6 __setting_type = {
+const struct setting_type setting_type_ipv6 __setting_type = {
.name = "ipv6",
.parse = parse_ipv6_setting,
.format = format_ipv6_setting,
diff --git a/src/net/netdev_settings.c b/src/net/netdev_settings.c
index 994e0506f..cfadd9e4e 100644
--- a/src/net/netdev_settings.c
+++ b/src/net/netdev_settings.c
@@ -36,27 +36,27 @@ FILE_LICENCE ( GPL2_OR_LATER );
*/
/** Network device predefined settings */
-struct setting mac_setting __setting ( SETTING_NETDEV ) = {
+const struct setting mac_setting __setting ( SETTING_NETDEV ) = {
.name = "mac",
.description = "MAC address",
.type = &setting_type_hex,
};
-struct setting bustype_setting __setting ( SETTING_NETDEV ) = {
+const struct setting bustype_setting __setting ( SETTING_NETDEV ) = {
.name = "bustype",
.description = "Bus type",
.type = &setting_type_string,
};
-struct setting busloc_setting __setting ( SETTING_NETDEV ) = {
+const struct setting busloc_setting __setting ( SETTING_NETDEV ) = {
.name = "busloc",
.description = "Bus location",
.type = &setting_type_uint32,
};
-struct setting busid_setting __setting ( SETTING_NETDEV ) = {
+const struct setting busid_setting __setting ( SETTING_NETDEV ) = {
.name = "busid",
.description = "Bus ID",
.type = &setting_type_hex,
};
-struct setting chip_setting __setting ( SETTING_NETDEV ) = {
+const struct setting chip_setting __setting ( SETTING_NETDEV ) = {
.name = "chip",
.description = "Chip",
.type = &setting_type_string,
@@ -194,7 +194,7 @@ static int netdev_fetch_chip ( struct net_device *netdev, void *data,
/** A network device setting operation */
struct netdev_setting_operation {
/** Setting */
- struct setting *setting;
+ const struct setting *setting;
/** Store setting (or NULL if not supported)
*
* @v netdev Network device
@@ -232,7 +232,8 @@ static struct netdev_setting_operation netdev_setting_operations[] = {
* @v len Length of setting data
* @ret rc Return status code
*/
-static int netdev_store ( struct settings *settings, struct setting *setting,
+static int netdev_store ( struct settings *settings,
+ const struct setting *setting,
const void *data, size_t len ) {
struct net_device *netdev = container_of ( settings, struct net_device,
settings.settings );
diff --git a/src/net/tcp/iscsi.c b/src/net/tcp/iscsi.c
index c9daf1ff4..197069cc3 100644
--- a/src/net/tcp/iscsi.c
+++ b/src/net/tcp/iscsi.c
@@ -1860,7 +1860,7 @@ enum iscsi_root_path_component {
};
/** iSCSI initiator IQN setting */
-struct setting initiator_iqn_setting __setting ( SETTING_SANBOOT_EXTRA ) = {
+const struct setting initiator_iqn_setting __setting ( SETTING_SANBOOT_EXTRA ) = {
.name = "initiator-iqn",
.description = "iSCSI initiator name",
.tag = DHCP_ISCSI_INITIATOR_IQN,
@@ -1868,7 +1868,7 @@ struct setting initiator_iqn_setting __setting ( SETTING_SANBOOT_EXTRA ) = {
};
/** iSCSI reverse username setting */
-struct setting reverse_username_setting __setting ( SETTING_AUTH_EXTRA ) = {
+const struct setting reverse_username_setting __setting ( SETTING_AUTH_EXTRA ) = {
.name = "reverse-username",
.description = "Reverse user name",
.tag = DHCP_EB_REVERSE_USERNAME,
@@ -1876,7 +1876,7 @@ struct setting reverse_username_setting __setting ( SETTING_AUTH_EXTRA ) = {
};
/** iSCSI reverse password setting */
-struct setting reverse_password_setting __setting ( SETTING_AUTH_EXTRA ) = {
+const struct setting reverse_password_setting __setting ( SETTING_AUTH_EXTRA ) = {
.name = "reverse-password",
.description = "Reverse password",
.tag = DHCP_EB_REVERSE_PASSWORD,
@@ -1947,46 +1947,23 @@ static int iscsi_fetch_settings ( struct iscsi_session *iscsi ) {
/* Fetch relevant settings. Don't worry about freeing on
* error, since iscsi_free() will take care of that anyway.
*/
- if ( ( len = fetch_string_setting_copy ( NULL, &username_setting,
- &iscsi->initiator_username ) ) < 0 ) {
- DBGC ( iscsi, "iSCSI %p could not fetch username: %s\n",
- iscsi, strerror ( len ) );
- return len;
- }
- if ( ( len = fetch_string_setting_copy ( NULL, &password_setting,
- &iscsi->initiator_password ) ) < 0 ) {
- DBGC ( iscsi, "iSCSI %p could not fetch password: %s\n",
- iscsi, strerror ( len ) );
- return len;
- }
- if ( ( len = fetch_string_setting_copy( NULL, &reverse_username_setting,
- &iscsi->target_username ) ) < 0 ) {
- DBGC ( iscsi, "iSCSI %p could not fetch reverse username: %s\n",
- iscsi, strerror ( len ) );
- return len;
- }
- if ( ( len = fetch_string_setting_copy( NULL, &reverse_password_setting,
- &iscsi->target_password ) ) < 0 ) {
- DBGC ( iscsi, "iSCSI %p could not fetch reverse password: %s\n",
- iscsi, strerror ( len ) );
- return len;
- }
-
- /* Find a suitable initiator name */
- if ( ( len = fetch_string_setting_copy ( NULL, &initiator_iqn_setting,
- &iscsi->initiator_iqn ) ) < 0 ) {
- DBGC ( iscsi, "iSCSI %p could not fetch initiator IQN: %s\n",
- iscsi, strerror ( len ) );
- return len;
- }
+ fetch_string_setting_copy ( NULL, &username_setting,
+ &iscsi->initiator_username );
+ fetch_string_setting_copy ( NULL, &password_setting,
+ &iscsi->initiator_password );
+ fetch_string_setting_copy ( NULL, &reverse_username_setting,
+ &iscsi->target_username );
+ fetch_string_setting_copy ( NULL, &reverse_password_setting,
+ &iscsi->target_password );
+
+ /* Use explicit initiator IQN if provided */
+ fetch_string_setting_copy ( NULL, &initiator_iqn_setting,
+ &iscsi->initiator_iqn );
if ( iscsi->initiator_iqn )
return 0;
- if ( ( len = fetch_string_setting_copy ( NULL, &hostname_setting,
- &hostname ) ) < 0 ) {
- DBGC ( iscsi, "iSCSI %p could not fetch hostname: %s\n",
- iscsi, strerror ( len ) );
- return len;
- }
+
+ /* Otherwise, try to construct an initiator IQN from the hostname */
+ fetch_string_setting_copy ( NULL, &hostname_setting, &hostname );
if ( hostname ) {
len = asprintf ( &iscsi->initiator_iqn,
ISCSI_DEFAULT_IQN_PREFIX ":%s", hostname );
@@ -1999,6 +1976,8 @@ static int iscsi_fetch_settings ( struct iscsi_session *iscsi ) {
assert ( iscsi->initiator_iqn );
return 0;
}
+
+ /* Otherwise, try to construct an initiator IQN from the UUID */
if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting, &uuid ) ) < 0 ) {
DBGC ( iscsi, "iSCSI %p has no suitable initiator IQN\n",
iscsi );
diff --git a/src/net/tcp/oncrpc.c b/src/net/tcp/oncrpc.c
index 819d31794..0a3b38580 100644
--- a/src/net/tcp/oncrpc.c
+++ b/src/net/tcp/oncrpc.c
@@ -58,14 +58,14 @@ struct oncrpc_cred oncrpc_auth_none = {
.length = 0
};
-struct setting uid_setting __setting ( SETTING_AUTH ) = {
+const struct setting uid_setting __setting ( SETTING_AUTH ) = {
.name = "uid",
.description = "User ID",
.tag = DHCP_EB_UID,
.type = &setting_type_uint32
};
-struct setting gid_setting __setting ( SETTING_AUTH ) = {
+const struct setting gid_setting __setting ( SETTING_AUTH ) = {
.name = "gid",
.description = "Group ID",
.tag = DHCP_EB_GID,
diff --git a/src/net/tcp/syslogs.c b/src/net/tcp/syslogs.c
index bcda8b45c..503ed177a 100644
--- a/src/net/tcp/syslogs.c
+++ b/src/net/tcp/syslogs.c
@@ -190,7 +190,7 @@ struct console_driver syslogs_console __console_driver = {
*/
/** Encrypted syslog server setting */
-struct setting syslogs_setting __setting ( SETTING_MISC ) = {
+const struct setting syslogs_setting __setting ( SETTING_MISC ) = {
.name = "syslogs",
.description = "Encrypted syslog server",
.tag = DHCP_EB_SYSLOGS_SERVER,
@@ -206,15 +206,10 @@ static int apply_syslogs_settings ( void ) {
static char *old_server;
char *server;
struct interface *socket;
- int len;
int rc;
/* Fetch log server */
- len = fetch_string_setting_copy ( NULL, &syslogs_setting, &server );
- if ( len < 0 ) {
- rc = len;
- goto err_fetch_server;
- }
+ fetch_string_setting_copy ( NULL, &syslogs_setting, &server );
/* Do nothing unless log server has changed */
if ( ( ( server == NULL ) && ( old_server == NULL ) ) ||
@@ -266,7 +261,6 @@ static int apply_syslogs_settings ( void ) {
out_no_server:
out_no_change:
free ( server );
- err_fetch_server:
return rc;
}
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c
index 66bcc83ae..3163f39c7 100644
--- a/src/net/udp/dhcp.c
+++ b/src/net/udp/dhcp.c
@@ -92,7 +92,7 @@ static uint8_t dhcp_request_options_data[] = {
};
/** DHCP server address setting */
-struct setting dhcp_server_setting __setting ( SETTING_MISC ) = {
+const struct setting dhcp_server_setting __setting ( SETTING_MISC ) = {
.name = "dhcp-server",
.description = "DHCP server",
.tag = DHCP_SERVER_IDENTIFIER,
@@ -975,6 +975,7 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
uint8_t *dhcp_features;
size_t dhcp_features_len;
size_t ll_addr_len;
+ void *user_class;
ssize_t len;
int rc;
@@ -985,7 +986,7 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
data, max_len ) ) != 0 ) {
DBG ( "DHCP could not create DHCP packet: %s\n",
strerror ( rc ) );
- return rc;
+ goto err_create_packet;
}
/* Set client IP address */
@@ -998,17 +999,17 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
dhcp_features_len ) ) != 0 ) {
DBG ( "DHCP could not set features list option: %s\n",
strerror ( rc ) );
- return rc;
+ goto err_store_features;
}
/* Add options to identify the network device */
- fetch_setting ( &netdev->settings.settings, &busid_setting, &dhcp_desc,
- sizeof ( dhcp_desc ) );
+ fetch_raw_setting ( netdev_settings ( netdev ), &busid_setting,
+ &dhcp_desc, sizeof ( dhcp_desc ) );
if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_EB_BUS_ID, &dhcp_desc,
sizeof ( dhcp_desc ) ) ) != 0 ) {
DBG ( "DHCP could not set bus ID option: %s\n",
strerror ( rc ) );
- return rc;
+ goto err_store_busid;
}
/* Add DHCP client identifier. Required for Infiniband, and
@@ -1022,7 +1023,7 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
( ll_addr_len + 1 ) ) ) != 0 ) {
DBG ( "DHCP could not set client ID: %s\n",
strerror ( rc ) );
- return rc;
+ goto err_store_client_id;
}
/* Add client UUID, if we have one. Required for PXE. The
@@ -1039,25 +1040,29 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
sizeof ( client_uuid ) ) ) != 0 ) {
DBG ( "DHCP could not set client UUID: %s\n",
strerror ( rc ) );
- return rc;
+ goto err_store_client_uuid;
}
}
/* Add user class, if we have one. */
- if ( ( len = fetch_setting_len ( NULL, &user_class_setting ) ) >= 0 ) {
- char user_class[len];
- fetch_setting ( NULL, &user_class_setting, user_class,
- sizeof ( user_class ) );
+ if ( ( len = fetch_raw_setting_copy ( NULL, &user_class_setting,
+ &user_class ) ) >= 0 ) {
if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_USER_CLASS_ID,
- &user_class,
- sizeof ( user_class ) ) ) != 0 ) {
+ user_class, len ) ) != 0 ) {
DBG ( "DHCP could not set user class: %s\n",
strerror ( rc ) );
- return rc;
+ goto err_store_user_class;
}
}
- return 0;
+ err_store_user_class:
+ free ( user_class );
+ err_store_client_uuid:
+ err_store_client_id:
+ err_store_busid:
+ err_store_features:
+ err_create_packet:
+ return rc;
}
/****************************************************************************
@@ -1384,7 +1389,8 @@ int start_pxebs ( struct interface *job, struct net_device *netdev,
int rc;
/* Get upper bound for PXE boot server IP address list */
- pxebs_list_len = fetch_setting_len ( NULL, &pxe_boot_servers_setting );
+ pxebs_list_len = fetch_raw_setting ( NULL, &pxe_boot_servers_setting,
+ NULL, 0 );
if ( pxebs_list_len < 0 )
pxebs_list_len = 0;
@@ -1422,8 +1428,8 @@ int start_pxebs ( struct interface *job, struct net_device *netdev,
if ( pxebs_list_len ) {
uint8_t buf[pxebs_list_len];
- fetch_setting ( NULL, &pxe_boot_servers_setting,
- buf, sizeof ( buf ) );
+ fetch_raw_setting ( NULL, &pxe_boot_servers_setting,
+ buf, sizeof ( buf ) );
pxebs_list ( dhcp, buf, sizeof ( buf ), ip );
}
if ( ! dhcp->pxe_attempt->s_addr ) {
diff --git a/src/net/udp/dhcpv6.c b/src/net/udp/dhcpv6.c
index 42d11194f..7bed83d92 100644
--- a/src/net/udp/dhcpv6.c
+++ b/src/net/udp/dhcpv6.c
@@ -256,7 +256,7 @@ static int dhcpv6_iaaddr ( struct dhcpv6_option_list *options, uint32_t iaid,
*/
/** DHCPv6 settings scope */
-static struct settings_scope dhcpv6_settings_scope;
+static const struct settings_scope dhcpv6_settings_scope;
/** A DHCPv6 settings block */
struct dhcpv6_settings {
@@ -276,7 +276,7 @@ struct dhcpv6_settings {
* @ret applies Setting applies within this settings block
*/
static int dhcpv6_applies ( struct settings *settings __unused,
- struct setting *setting ) {
+ const struct setting *setting ) {
return ( setting->scope == &dhcpv6_settings_scope );
}
@@ -543,7 +543,7 @@ static size_t dhcpv6_user_class ( void *data, size_t len ) {
int actual_len;
/* Fetch user-class setting, if defined */
- actual_len = fetch_setting ( NULL, &user_class_setting, data, len );
+ actual_len = fetch_raw_setting ( NULL, &user_class_setting, data, len );
if ( actual_len >= 0 )
return actual_len;
diff --git a/src/net/udp/dns.c b/src/net/udp/dns.c
index 45f0f07c1..447da8afd 100644
--- a/src/net/udp/dns.c
+++ b/src/net/udp/dns.c
@@ -594,7 +594,7 @@ struct resolver dns_resolver __resolver ( RESOLV_NORMAL ) = {
*/
/** DNS server setting */
-struct setting dns_setting __setting ( SETTING_IPv4_EXTRA ) = {
+const struct setting dns_setting __setting ( SETTING_IPv4_EXTRA ) = {
.name = "dns",
.description = "DNS server",
.tag = DHCP_DNS_SERVERS,
@@ -622,11 +622,7 @@ static int apply_dns_settings ( void ) {
/* Get local domain DHCP option */
free ( localdomain );
- if ( ( len = fetch_string_setting_copy ( NULL, &domain_setting,
- &localdomain ) ) < 0 ) {
- DBG ( "DNS could not fetch local domain: %s\n",
- strerror ( len ) );
- }
+ fetch_string_setting_copy ( NULL, &domain_setting, &localdomain );
if ( localdomain )
DBG ( "DNS local domain %s\n", localdomain );
diff --git a/src/net/udp/syslog.c b/src/net/udp/syslog.c
index 4210083d2..6554ab9bf 100644
--- a/src/net/udp/syslog.c
+++ b/src/net/udp/syslog.c
@@ -188,7 +188,7 @@ struct console_driver syslog_console __console_driver = {
*/
/** Syslog server setting */
-struct setting syslog_setting __setting ( SETTING_MISC ) = {
+const struct setting syslog_setting __setting ( SETTING_MISC ) = {
.name = "syslog",
.description = "Syslog server",
.tag = DHCP_LOG_SERVERS,
@@ -209,17 +209,9 @@ static int apply_syslog_settings ( void ) {
/* Fetch hostname and domain name */
free ( syslog_hostname );
- if ( ( len = fetch_string_setting_copy ( NULL, &hostname_setting,
- &syslog_hostname ) ) < 0 ) {
- rc = len;
- DBG ( "SYSLOG could not fetch hostname: %s\n", strerror ( rc ));
- }
+ fetch_string_setting_copy ( NULL, &hostname_setting, &syslog_hostname );
free ( syslog_domain );
- if ( ( len = fetch_string_setting_copy ( NULL, &domain_setting,
- &syslog_domain ) ) < 0 ) {
- rc = len;
- DBG ( "SYSLOG could not fetch domain: %s\n", strerror ( rc ) );
- }
+ fetch_string_setting_copy ( NULL, &domain_setting, &syslog_domain );
/* Fetch log server */
syslog_console.disabled = CONSOLE_DISABLED;
diff --git a/src/net/validator.c b/src/net/validator.c
index d61cb92f4..56eebe3d6 100644
--- a/src/net/validator.c
+++ b/src/net/validator.c
@@ -121,7 +121,7 @@ static struct interface_descriptor validator_job_desc =
*/
/** Cross-signed certificate source setting */
-struct setting crosscert_setting __setting ( SETTING_CRYPTO ) = {
+const struct setting crosscert_setting __setting ( SETTING_CRYPTO ) = {
.name = "crosscert",
.description = "Cross-signed certificate source",
.tag = DHCP_EB_CROSS_CERT,
@@ -232,14 +232,7 @@ static int validator_start_download ( struct validator *validator,
int rc;
/* Determine cross-signed certificate source */
- len = fetch_string_setting_copy ( NULL, &crosscert_setting,
- &crosscert_copy );
- if ( len < 0 ) {
- rc = len;
- DBGC ( validator, "VALIDATOR %p could not fetch crosscert "
- "setting: %s\n", validator, strerror ( rc ) );
- goto err_fetch_crosscert;
- }
+ fetch_string_setting_copy ( NULL, &crosscert_setting, &crosscert_copy );
crosscert = ( crosscert_copy ? crosscert_copy : crosscert_default );
/* Allocate URI string */
@@ -279,7 +272,6 @@ static int validator_start_download ( struct validator *validator,
free ( uri_string );
err_alloc_uri_string:
free ( crosscert_copy );
- err_fetch_crosscert:
return rc;
}