2008-08-12 Dan Williams <dcbw@redhat.com>
* src/nm-device.c - (nm_device_set_ip4_config): don't touch hostnames here; distros that want to use DHCP hostnames should use dispatcher scripts for that * src/NetworkManagerSystem.h src/backends/NetworkManagerArch.c src/backends/NetworkManagerDebian.c src/backends/NetworkManagerFrugalware.c src/backends/NetworkManagerGeneric.c src/backends/NetworkManagerGeneric.h src/backends/NetworkManagerGentoo.c src/backends/NetworkManagerMandriva.c src/backends/NetworkManagerPaldo.c src/backends/NetworkManagerRedHat.c src/backends/NetworkManagerSlackware.c src/backends/NetworkManagerSuSE.c - Remove nm_system_set_hostname(), no longer used * src/backends/Makefile.am src/backends/shvar.c src/backends/shvar.h - Remove shvar.*; no longer used git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3946 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
26
ChangeLog
26
ChangeLog
@@ -1,3 +1,29 @@
|
|||||||
|
2008-08-12 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
|
* src/nm-device.c
|
||||||
|
- (nm_device_set_ip4_config): don't touch hostnames here; distros
|
||||||
|
that want to use DHCP hostnames should use dispatcher scripts
|
||||||
|
for that
|
||||||
|
|
||||||
|
* src/NetworkManagerSystem.h
|
||||||
|
src/backends/NetworkManagerArch.c
|
||||||
|
src/backends/NetworkManagerDebian.c
|
||||||
|
src/backends/NetworkManagerFrugalware.c
|
||||||
|
src/backends/NetworkManagerGeneric.c
|
||||||
|
src/backends/NetworkManagerGeneric.h
|
||||||
|
src/backends/NetworkManagerGentoo.c
|
||||||
|
src/backends/NetworkManagerMandriva.c
|
||||||
|
src/backends/NetworkManagerPaldo.c
|
||||||
|
src/backends/NetworkManagerRedHat.c
|
||||||
|
src/backends/NetworkManagerSlackware.c
|
||||||
|
src/backends/NetworkManagerSuSE.c
|
||||||
|
- Remove nm_system_set_hostname(), no longer used
|
||||||
|
|
||||||
|
* src/backends/Makefile.am
|
||||||
|
src/backends/shvar.c
|
||||||
|
src/backends/shvar.h
|
||||||
|
- Remove shvar.*; no longer used
|
||||||
|
|
||||||
2008-08-12 Dan Williams <dcbw@redhat.com>
|
2008-08-12 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
Revert most of the 'hostname' patch. Too much stuff still breaks when
|
Revert most of the 'hostname' patch. Too much stuff still breaks when
|
||||||
|
@@ -62,8 +62,6 @@ gboolean nm_system_device_set_up_down_with_iface (const char *iface, gboolean
|
|||||||
gboolean nm_system_device_is_up (NMDevice *device);
|
gboolean nm_system_device_is_up (NMDevice *device);
|
||||||
gboolean nm_system_device_is_up_with_iface (const char *iface);
|
gboolean nm_system_device_is_up_with_iface (const char *iface);
|
||||||
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config);
|
|
||||||
|
|
||||||
gboolean nm_system_device_set_mtu (const char *iface, guint32 mtu);
|
gboolean nm_system_device_set_mtu (const char *iface, guint32 mtu);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -13,21 +13,15 @@ libnmbackend_la_SOURCES = NetworkManagerGeneric.c \
|
|||||||
libnmbackend_la_LIBADD =
|
libnmbackend_la_LIBADD =
|
||||||
|
|
||||||
if TARGET_REDHAT
|
if TARGET_REDHAT
|
||||||
libnmbackend_la_SOURCES += NetworkManagerRedHat.c \
|
libnmbackend_la_SOURCES += NetworkManagerRedHat.c
|
||||||
shvar.c \
|
|
||||||
shvar.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if TARGET_SUSE
|
if TARGET_SUSE
|
||||||
libnmbackend_la_SOURCES += NetworkManagerSuSE.c \
|
libnmbackend_la_SOURCES += NetworkManagerSuSE.c
|
||||||
shvar.c \
|
|
||||||
shvar.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if TARGET_GENTOO
|
if TARGET_GENTOO
|
||||||
libnmbackend_la_SOURCES += NetworkManagerGentoo.c \
|
libnmbackend_la_SOURCES += NetworkManagerGentoo.c
|
||||||
shvar.c \
|
|
||||||
shvar.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if TARGET_DEBIAN
|
if TARGET_DEBIAN
|
||||||
@@ -52,9 +46,7 @@ libnmbackend_la_LIBADD += -lfwnetconfig -lfwutil
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if TARGET_MANDRIVA
|
if TARGET_MANDRIVA
|
||||||
libnmbackend_la_SOURCES += NetworkManagerMandriva.c \
|
libnmbackend_la_SOURCES += NetworkManagerMandriva.c
|
||||||
shvar.c \
|
|
||||||
shvar.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libnmbackend_la_LIBADD += $(DBUS_LIBS) $(GTHREAD_LIBS)
|
libnmbackend_la_LIBADD += $(DBUS_LIBS) $(GTHREAD_LIBS)
|
||||||
|
@@ -36,20 +36,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <glib/gprintf.h>
|
|
||||||
#include <glib/gfileutils.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -59,7 +51,7 @@
|
|||||||
*/
|
*/
|
||||||
void nm_system_enable_loopback (void)
|
void nm_system_enable_loopback (void)
|
||||||
{
|
{
|
||||||
nm_system_device_set_up_down_with_iface ("lo", TRUE);
|
nm_generic_enable_loopback ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -73,18 +65,6 @@ void nm_system_update_dns (void)
|
|||||||
{
|
{
|
||||||
/* Check if the daemon was already running - do not start a new instance */
|
/* Check if the daemon was already running - do not start a new instance */
|
||||||
if (g_file_test("/var/run/daemons/nscd", G_FILE_TEST_EXISTS))
|
if (g_file_test("/var/run/daemons/nscd", G_FILE_TEST_EXISTS))
|
||||||
{
|
|
||||||
nm_spawn_process ("/etc/rc.d/nscd restart");
|
nm_spawn_process ("/etc/rc.d/nscd restart");
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,17 +28,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -61,15 +56,5 @@ void nm_system_enable_loopback (void)
|
|||||||
void nm_system_update_dns (void)
|
void nm_system_update_dns (void)
|
||||||
{
|
{
|
||||||
nm_spawn_process ("/usr/sbin/invoke-rc.d nscd restart");
|
nm_spawn_process ("/usr/sbin/invoke-rc.d nscd restart");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -24,18 +24,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
|
|
||||||
// Provided by the frugalwareutils package on Frugalware
|
/* Provided by the frugalwareutils package on Frugalware */
|
||||||
#include <libfwnetconfig.h>
|
#include <libfwnetconfig.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -62,12 +56,3 @@ void nm_system_update_dns (void)
|
|||||||
/* I'm not running nscd */
|
/* I'm not running nscd */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -34,9 +34,8 @@
|
|||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
#include "nm-netlink.h"
|
#include "nm-netlink.h"
|
||||||
|
#include "nm-utils.h"
|
||||||
|
|
||||||
/* Because of a bug in libnl, rtnl.h should be included before route.h */
|
/* Because of a bug in libnl, rtnl.h should be included before route.h */
|
||||||
#include <netlink/route/rtnl.h>
|
#include <netlink/route/rtnl.h>
|
||||||
@@ -110,131 +109,3 @@ void nm_generic_update_dns (void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_generic_set_ip4_config_from_resolv_conf
|
|
||||||
*
|
|
||||||
* Add nameservers and search names from a resolv.conf format file.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_generic_set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
|
|
||||||
{
|
|
||||||
char * contents = NULL;
|
|
||||||
char ** split_contents = NULL;
|
|
||||||
int i, len;
|
|
||||||
|
|
||||||
g_return_if_fail (filename != NULL);
|
|
||||||
g_return_if_fail (ip4_config != NULL);
|
|
||||||
|
|
||||||
if (!g_file_get_contents (filename, &contents, NULL, NULL) || (contents == NULL))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!(split_contents = g_strsplit (contents, "\n", 0)))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
len = g_strv_length (split_contents);
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
char *line = split_contents[i];
|
|
||||||
|
|
||||||
/* Ignore comments */
|
|
||||||
if (!line || (line[0] == ';') || (line[0] == '#'))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
line = g_strstrip (line);
|
|
||||||
if ((strncmp (line, "search", 6) == 0) && (strlen (line) > 6))
|
|
||||||
{
|
|
||||||
char *searches = g_strdup (line + 7);
|
|
||||||
char **split_searches = NULL;
|
|
||||||
|
|
||||||
if (!searches || !strlen (searches))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Allow space-separated search domains */
|
|
||||||
if ((split_searches = g_strsplit (searches, " ", 0)))
|
|
||||||
{
|
|
||||||
int m, srch_len;
|
|
||||||
|
|
||||||
srch_len = g_strv_length (split_searches);
|
|
||||||
for (m = 0; m < srch_len; m++)
|
|
||||||
{
|
|
||||||
if (split_searches[m])
|
|
||||||
nm_ip4_config_add_domain (ip4_config, split_searches[m]);
|
|
||||||
}
|
|
||||||
g_strfreev (split_searches);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Only 1 item, add the whole line */
|
|
||||||
nm_ip4_config_add_domain (ip4_config, searches);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (searches);
|
|
||||||
}
|
|
||||||
else if ((strncmp (line, "nameserver", 10) == 0) && (strlen (line) > 10))
|
|
||||||
{
|
|
||||||
guint32 addr = (guint32) (inet_addr (line + 11));
|
|
||||||
|
|
||||||
if (addr != (guint32) -1)
|
|
||||||
nm_ip4_config_add_nameserver (ip4_config, addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strfreev (split_contents);
|
|
||||||
|
|
||||||
out:
|
|
||||||
g_free (contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_generic_device_get_system_config
|
|
||||||
*
|
|
||||||
* Retrieve any relevant configuration info for a particular device
|
|
||||||
* from the system network configuration information. Clear out existing
|
|
||||||
* info before setting stuff too.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void* nm_generic_device_get_system_config (NMDevice *dev)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_generic_device_free_system_config
|
|
||||||
*
|
|
||||||
* Free stored system config data
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_generic_device_free_system_config (NMDevice *dev, void *system_config_data)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_generic_device_get_disabled
|
|
||||||
*
|
|
||||||
* Return whether the distro-specific system config tells us to use
|
|
||||||
* dhcp for this device.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
gboolean nm_generic_device_get_disabled (NMDevice *dev)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
NMIP4Config *nm_generic_device_new_ip4_system_config (NMDevice *dev)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_generic_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_generic_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -24,32 +24,7 @@
|
|||||||
#ifndef NETWORK_MANAGER_GENERIC_H
|
#ifndef NETWORK_MANAGER_GENERIC_H
|
||||||
#define NETWORK_MANAGER_GENERIC_H
|
#define NETWORK_MANAGER_GENERIC_H
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-ip4-config.h"
|
|
||||||
#include "nm-named-manager.h"
|
|
||||||
|
|
||||||
/* Prototypes for system/distribution dependent functions,
|
|
||||||
* implemented in the backend files in backends/ directory
|
|
||||||
*/
|
|
||||||
|
|
||||||
void nm_generic_enable_loopback (void);
|
void nm_generic_enable_loopback (void);
|
||||||
void nm_generic_update_dns (void);
|
void nm_generic_update_dns (void);
|
||||||
|
|
||||||
void nm_generic_set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config);
|
|
||||||
void * nm_generic_device_get_system_config (NMDevice *dev);
|
|
||||||
void nm_generic_device_free_system_config (NMDevice *dev, void *system_config_data);
|
|
||||||
NMIP4Config * nm_generic_device_new_ip4_system_config (NMDevice *dev);
|
|
||||||
|
|
||||||
gboolean nm_generic_device_get_disabled (NMDevice *dev);
|
|
||||||
|
|
||||||
gboolean nm_generic_device_set_from_ip4_config (NMDevice *dev);
|
|
||||||
gboolean nm_generic_vpn_device_set_from_ip4_config (NMNamedManager *named, NMDevice *active_device, const char *iface, NMIP4Config *config, char **routes, int num_routes);
|
|
||||||
gboolean nm_generic_vpn_device_unset_from_ip4_config (NMNamedManager *named, NMDevice *active_device, const char *iface, NMIP4Config *config);
|
|
||||||
|
|
||||||
gboolean nm_generic_device_set_up_down (NMDevice *dev, gboolean up);
|
|
||||||
gboolean nm_generic_device_set_up_down_with_iface (NMDevice *dev, const char *iface, gboolean up);
|
|
||||||
|
|
||||||
void nm_generic_set_hostname (NMIP4Config *config);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -28,18 +28,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <arpa/inet.h>
|
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
#include "shvar.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -71,12 +65,3 @@ void nm_system_update_dns (void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -26,18 +26,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
#include "shvar.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -65,12 +59,3 @@ void nm_system_update_dns (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -27,17 +27,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <glib/gkeyfile.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -64,12 +59,3 @@ void nm_system_update_dns (void)
|
|||||||
nm_spawn_process ("/usr/sbin/nscd -i hosts");
|
nm_spawn_process ("/usr/sbin/nscd -i hosts");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -24,18 +24,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
#include "shvar.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -63,12 +57,3 @@ void nm_system_update_dns (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -25,16 +25,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
|
||||||
#include "nm-device.h"
|
|
||||||
#include "nm-utils.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -60,12 +55,3 @@ void nm_system_update_dns (void)
|
|||||||
/* I'm not running nscd */
|
/* I'm not running nscd */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -28,23 +28,13 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#include "NetworkManagerGeneric.h"
|
#include "NetworkManagerGeneric.h"
|
||||||
#include "NetworkManagerSystem.h"
|
#include "NetworkManagerSystem.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-device.h"
|
|
||||||
#include "NetworkManagerPolicy.h"
|
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
#include "shvar.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nm_system_enable_loopback
|
* nm_system_enable_loopback
|
||||||
@@ -70,64 +60,3 @@ void nm_system_update_dns (void)
|
|||||||
nm_spawn_process ("/usr/sbin/nscd -i hosts");
|
nm_spawn_process ("/usr/sbin/nscd -i hosts");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_system_set_hostname
|
|
||||||
*
|
|
||||||
* set the hostname
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void nm_system_set_hostname (NMIP4Config *config)
|
|
||||||
{
|
|
||||||
char *filename, *h_name = NULL, *buf;
|
|
||||||
shvarFile *file;
|
|
||||||
|
|
||||||
g_return_if_fail (config != NULL);
|
|
||||||
|
|
||||||
filename = g_strdup_printf (SYSCONFDIR"/sysconfig/network/dhcp");
|
|
||||||
file = svNewFile (filename);
|
|
||||||
if (!file)
|
|
||||||
goto out_gfree;
|
|
||||||
|
|
||||||
buf = svGetValue (file, "DHCLIENT_SET_HOSTNAME");
|
|
||||||
if (!buf)
|
|
||||||
goto out_close;
|
|
||||||
|
|
||||||
if (!strcmp (buf, "yes"))
|
|
||||||
{
|
|
||||||
const char *hostname;
|
|
||||||
|
|
||||||
hostname = nm_ip4_config_get_hostname (config);
|
|
||||||
if (!hostname)
|
|
||||||
{
|
|
||||||
struct in_addr temp_addr;
|
|
||||||
struct hostent *host;
|
|
||||||
const NMSettingIP4Address *ip_address;
|
|
||||||
|
|
||||||
/* try to get hostname via dns */
|
|
||||||
ip_address = nm_ip4_config_get_address (config, 0);
|
|
||||||
temp_addr.s_addr = ip_address->address;
|
|
||||||
host = gethostbyaddr ((char *) &temp_addr, sizeof (temp_addr), AF_INET);
|
|
||||||
if (host)
|
|
||||||
{
|
|
||||||
h_name = g_strdup (host->h_name);
|
|
||||||
hostname = strtok (h_name, ".");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
nm_warning ("nm_system_set_hostname(): gethostbyaddr failed, h_errno = %d", h_errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hostname)
|
|
||||||
{
|
|
||||||
nm_info ("Setting hostname to '%s'", hostname);
|
|
||||||
if (sethostname (hostname, strlen (hostname)) < 0)
|
|
||||||
nm_warning ("Could not set hostname.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (h_name);
|
|
||||||
free (buf);
|
|
||||||
out_close:
|
|
||||||
svCloseFile (file);
|
|
||||||
out_gfree:
|
|
||||||
g_free (filename);
|
|
||||||
}
|
|
||||||
|
@@ -1,399 +0,0 @@
|
|||||||
/*
|
|
||||||
* shvar.c
|
|
||||||
*
|
|
||||||
* Implementation of non-destructively reading/writing files containing
|
|
||||||
* only shell variable declarations and full-line comments.
|
|
||||||
*
|
|
||||||
* Includes explicit inheritance mechanism intended for use with
|
|
||||||
* Red Hat Linux ifcfg-* files. There is no protection against
|
|
||||||
* inheritance loops; they will generally cause stack overflows.
|
|
||||||
* Furthermore, they are only intended for one level of inheritance;
|
|
||||||
* the value setting algorithm assumes this.
|
|
||||||
*
|
|
||||||
* Copyright 1999,2000 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "shvar.h"
|
|
||||||
|
|
||||||
/* Open the file <name>, returning a shvarFile on success and NULL on failure.
|
|
||||||
Add a wrinkle to let the caller specify whether or not to create the file
|
|
||||||
(actually, return a structure anyway) if it doesn't exist. */
|
|
||||||
static shvarFile *
|
|
||||||
svOpenFile(const char *name, gboolean create)
|
|
||||||
{
|
|
||||||
shvarFile *s = NULL;
|
|
||||||
int closefd = 0;
|
|
||||||
|
|
||||||
s = g_malloc0(sizeof(shvarFile));
|
|
||||||
|
|
||||||
#if 1 /* NetworkManager local change */
|
|
||||||
s->fd = open(name, O_RDONLY); /* NOT O_CREAT */
|
|
||||||
if (s->fd != -1) closefd = 1;
|
|
||||||
#else
|
|
||||||
s->fd = open(name, O_RDWR); /* NOT O_CREAT */
|
|
||||||
if (s->fd == -1) {
|
|
||||||
/* try read-only */
|
|
||||||
s->fd = open(name, O_RDONLY); /* NOT O_CREAT */
|
|
||||||
if (s->fd != -1) closefd = 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
s->fileName = g_strdup(name);
|
|
||||||
|
|
||||||
if (s->fd != -1) {
|
|
||||||
struct stat buf;
|
|
||||||
char *p, *q;
|
|
||||||
|
|
||||||
if (fstat(s->fd, &buf) < 0) goto bail;
|
|
||||||
s->arena = g_malloc0(buf.st_size + 1);
|
|
||||||
|
|
||||||
if (read(s->fd, s->arena, buf.st_size) < 0) goto bail;
|
|
||||||
|
|
||||||
/* we'd use g_strsplit() here, but we want a list, not an array */
|
|
||||||
for(p = s->arena; (q = strchr(p, '\n')) != NULL; p = q + 1) {
|
|
||||||
s->lineList = g_list_append(s->lineList, g_strndup(p, q - p));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* closefd is set if we opened the file read-only, so go ahead and
|
|
||||||
close it, because we can't write to it anyway */
|
|
||||||
if (closefd) {
|
|
||||||
close(s->fd);
|
|
||||||
s->fd = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (create) {
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
bail:
|
|
||||||
if (s->fd != -1) close(s->fd);
|
|
||||||
if (s->arena) g_free (s->arena);
|
|
||||||
if (s->fileName) g_free (s->fileName);
|
|
||||||
g_free (s);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Open the file <name>, return shvarFile on success, NULL on failure */
|
|
||||||
shvarFile *
|
|
||||||
svNewFile(const char *name)
|
|
||||||
{
|
|
||||||
return svOpenFile(name, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create a new file structure, returning actual data if the file exists,
|
|
||||||
* and a suitable starting point if it doesn't. */
|
|
||||||
shvarFile *
|
|
||||||
svCreateFile(const char *name)
|
|
||||||
{
|
|
||||||
return svOpenFile(name, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* remove escaped characters in place */
|
|
||||||
static void
|
|
||||||
unescape(char *s) {
|
|
||||||
int len, i;
|
|
||||||
|
|
||||||
len = strlen(s);
|
|
||||||
if ((s[0] == '"' || s[0] == '\'') && s[0] == s[len-1]) {
|
|
||||||
i = len - 2;
|
|
||||||
memmove(s, s+1, i);
|
|
||||||
s[i+1] = '\0';
|
|
||||||
len = i;
|
|
||||||
}
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
if (s[i] == '\\') {
|
|
||||||
memmove(s+i, s+i+1, len-(i+1));
|
|
||||||
len--;
|
|
||||||
}
|
|
||||||
s[len] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* create a new string with all necessary characters escaped.
|
|
||||||
* caller must free returned string
|
|
||||||
*/
|
|
||||||
static const char escapees[] = "\"'\\$~`"; /* must be escaped */
|
|
||||||
static const char spaces[] = " \t|&;()<>"; /* only require "" */
|
|
||||||
static char *
|
|
||||||
escape(const char *s) {
|
|
||||||
char *new;
|
|
||||||
int i, j, mangle = 0, space = 0;
|
|
||||||
int newlen, slen;
|
|
||||||
static int esclen, splen;
|
|
||||||
|
|
||||||
if (!esclen) esclen = strlen(escapees);
|
|
||||||
if (!splen) splen = strlen(spaces);
|
|
||||||
slen = strlen(s);
|
|
||||||
|
|
||||||
for (i = 0; i < slen; i++) {
|
|
||||||
if (strchr(escapees, s[i])) mangle++;
|
|
||||||
if (strchr(spaces, s[i])) space++;
|
|
||||||
}
|
|
||||||
if (!mangle && !space) return strdup(s);
|
|
||||||
|
|
||||||
newlen = slen + mangle + 3; /* 3 is extra ""\0 */
|
|
||||||
new = g_malloc0(newlen);
|
|
||||||
if (!new) return NULL;
|
|
||||||
|
|
||||||
j = 0;
|
|
||||||
new[j++] = '"';
|
|
||||||
for (i = 0; i < slen; i++) {
|
|
||||||
if (strchr(escapees, s[i])) {
|
|
||||||
new[j++] = '\\';
|
|
||||||
}
|
|
||||||
new[j++] = s[i];
|
|
||||||
}
|
|
||||||
new[j++] = '"';
|
|
||||||
g_assert(j == slen + mangle + 2); /* j is the index of the '\0' */
|
|
||||||
|
|
||||||
return new;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the value associated with the key, and leave the current pointer
|
|
||||||
* pointing at the line containing the value. The char* returned MUST
|
|
||||||
* be freed by the caller.
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
svGetValue(shvarFile *s, const char *key)
|
|
||||||
{
|
|
||||||
char *value = NULL;
|
|
||||||
char *line;
|
|
||||||
char *keyString;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
g_assert(s);
|
|
||||||
g_assert(key);
|
|
||||||
|
|
||||||
keyString = g_malloc0(strlen(key) + 2);
|
|
||||||
strcpy(keyString, key);
|
|
||||||
keyString[strlen(key)] = '=';
|
|
||||||
len = strlen(keyString);
|
|
||||||
|
|
||||||
for (s->current = s->lineList; s->current; s->current = s->current->next) {
|
|
||||||
line = s->current->data;
|
|
||||||
if (!strncmp(keyString, line, len)) {
|
|
||||||
value = g_strdup(line + len);
|
|
||||||
unescape(value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
g_free(keyString);
|
|
||||||
|
|
||||||
if (value) {
|
|
||||||
if (value[0]) {
|
|
||||||
return value;
|
|
||||||
} else {
|
|
||||||
g_free(value);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (s->parent) value = svGetValue(s->parent, key);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* return 1 if <key> resolves to any truth value (e.g. "yes", "y", "true")
|
|
||||||
* return 0 if <key> resolves to any non-truth value (e.g. "no", "n", "false")
|
|
||||||
* return <default> otherwise
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
svTrueValue(shvarFile *s, const char *key, int def)
|
|
||||||
{
|
|
||||||
char *tmp;
|
|
||||||
int returnValue = def;
|
|
||||||
|
|
||||||
tmp = svGetValue(s, key);
|
|
||||||
if (!tmp) return returnValue;
|
|
||||||
|
|
||||||
if ( (!strcasecmp("yes", tmp)) ||
|
|
||||||
(!strcasecmp("true", tmp)) ||
|
|
||||||
(!strcasecmp("t", tmp)) ||
|
|
||||||
(!strcasecmp("y", tmp)) ) returnValue = 1;
|
|
||||||
else
|
|
||||||
if ( (!strcasecmp("no", tmp)) ||
|
|
||||||
(!strcasecmp("false", tmp)) ||
|
|
||||||
(!strcasecmp("f", tmp)) ||
|
|
||||||
(!strcasecmp("n", tmp)) ) returnValue = 0;
|
|
||||||
|
|
||||||
g_free (tmp);
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Set the variable <key> equal to the value <value>.
|
|
||||||
* If <key> does not exist, and the <current> pointer is set, append
|
|
||||||
* the key=value pair after that line. Otherwise, prepend the pair
|
|
||||||
* to the top of the file. Here's the algorithm, as the C code
|
|
||||||
* seems to be rather dense:
|
|
||||||
*
|
|
||||||
* if (value == NULL), then:
|
|
||||||
* if val2 (parent): change line to key= or append line key=
|
|
||||||
* if val1 (this) : delete line
|
|
||||||
* else noop
|
|
||||||
* else use this table:
|
|
||||||
* val2
|
|
||||||
* NULL value other
|
|
||||||
* v NULL append line noop append line
|
|
||||||
* a
|
|
||||||
* l value noop noop noop
|
|
||||||
* 1
|
|
||||||
* other change line delete line change line
|
|
||||||
*
|
|
||||||
* No changes are ever made to the parent config file, only to the
|
|
||||||
* specific file passed on the command line.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
svSetValue(shvarFile *s, const char *key, const char *value)
|
|
||||||
{
|
|
||||||
char *newval = NULL, *val1 = NULL, *val2 = NULL;
|
|
||||||
char *keyValue;
|
|
||||||
|
|
||||||
g_assert(s);
|
|
||||||
g_assert(key);
|
|
||||||
/* value may be NULL */
|
|
||||||
|
|
||||||
if (value) newval = escape(value);
|
|
||||||
keyValue = g_strdup_printf("%s=%s", key, newval ? newval : "");
|
|
||||||
|
|
||||||
val1 = svGetValue(s, key);
|
|
||||||
if (val1 && newval && !strcmp(val1, newval)) goto bail;
|
|
||||||
if (s->parent) val2 = svGetValue(s->parent, key);
|
|
||||||
|
|
||||||
if (!newval || !newval[0]) {
|
|
||||||
/* delete value somehow */
|
|
||||||
if (val2) {
|
|
||||||
/* change/append line to get key= */
|
|
||||||
if (s->current) s->current->data = keyValue;
|
|
||||||
else s->lineList = g_list_append(s->lineList, keyValue);
|
|
||||||
s->freeList = g_list_append(s->freeList, keyValue);
|
|
||||||
s->modified = 1;
|
|
||||||
} else if (val1) {
|
|
||||||
/* delete line */
|
|
||||||
s->lineList = g_list_remove_link(s->lineList, s->current);
|
|
||||||
g_list_free_1(s->current);
|
|
||||||
s->modified = 1;
|
|
||||||
goto bail; /* do not need keyValue */
|
|
||||||
}
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!val1) {
|
|
||||||
if (val2 && !strcmp(val2, newval)) goto end;
|
|
||||||
/* append line */
|
|
||||||
s->lineList = g_list_append(s->lineList, keyValue);
|
|
||||||
s->freeList = g_list_append(s->freeList, keyValue);
|
|
||||||
s->modified = 1;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* deal with a whole line of noops */
|
|
||||||
if (val1 && !strcmp(val1, newval)) goto end;
|
|
||||||
|
|
||||||
/* At this point, val1 && val1 != value */
|
|
||||||
if (val2 && !strcmp(val2, newval)) {
|
|
||||||
/* delete line */
|
|
||||||
s->lineList = g_list_remove_link(s->lineList, s->current);
|
|
||||||
g_list_free_1(s->current);
|
|
||||||
s->modified = 1;
|
|
||||||
goto bail; /* do not need keyValue */
|
|
||||||
} else {
|
|
||||||
/* change line */
|
|
||||||
if (s->current) s->current->data = keyValue;
|
|
||||||
else s->lineList = g_list_append(s->lineList, keyValue);
|
|
||||||
s->freeList = g_list_append(s->freeList, keyValue);
|
|
||||||
s->modified = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
if (newval) free(newval);
|
|
||||||
if (val1) free(val1);
|
|
||||||
if (val2) free(val2);
|
|
||||||
return;
|
|
||||||
|
|
||||||
bail:
|
|
||||||
if (keyValue) free (keyValue);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write the current contents iff modified. Returns -1 on error
|
|
||||||
* and 0 on success. Do not write if no values have been modified.
|
|
||||||
* The mode argument is only used if creating the file, not if
|
|
||||||
* re-writing an existing file, and is passed unchanged to the
|
|
||||||
* open() syscall.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
svWriteFile(shvarFile *s, int mode)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
int tmpfd;
|
|
||||||
|
|
||||||
if (s->modified) {
|
|
||||||
if (s->fd == -1)
|
|
||||||
s->fd = open(s->fileName, O_WRONLY|O_CREAT, mode);
|
|
||||||
if (s->fd == -1)
|
|
||||||
return -1;
|
|
||||||
if (ftruncate(s->fd, 0) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
tmpfd = dup(s->fd);
|
|
||||||
f = fdopen(tmpfd, "w");
|
|
||||||
fseek(f, 0, SEEK_SET);
|
|
||||||
for (s->current = s->lineList; s->current; s->current = s->current->next) {
|
|
||||||
char *line = s->current->data;
|
|
||||||
fprintf(f, "%s\n", line);
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Close the file descriptor (if open) and delete the shvarFile.
|
|
||||||
* Returns -1 on error and 0 on success.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
svCloseFile(shvarFile *s)
|
|
||||||
{
|
|
||||||
|
|
||||||
g_assert(s);
|
|
||||||
|
|
||||||
if (s->fd != -1) close(s->fd);
|
|
||||||
|
|
||||||
g_free(s->arena);
|
|
||||||
for (s->current = s->freeList; s->current; s->current = s->current->next) {
|
|
||||||
g_free(s->current->data);
|
|
||||||
}
|
|
||||||
g_free(s->fileName);
|
|
||||||
g_list_free(s->freeList);
|
|
||||||
g_list_foreach (s->lineList, (GFunc) g_free, NULL);
|
|
||||||
g_list_free(s->lineList); /* implicitly frees s->current */
|
|
||||||
g_free(s);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* shvar.h
|
|
||||||
*
|
|
||||||
* Interface for non-destructively reading/writing files containing
|
|
||||||
* only shell variable declarations and full-line comments.
|
|
||||||
*
|
|
||||||
* Includes explicit inheritance mechanism intended for use with
|
|
||||||
* Red Hat Linux ifcfg-* files. There is no protection against
|
|
||||||
* inheritance loops; they will generally cause stack overflows.
|
|
||||||
* Furthermore, they are only intended for one level of inheritance;
|
|
||||||
* the value setting algorithm assumes this.
|
|
||||||
*
|
|
||||||
* Copyright 1999 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifndef _SHVAR_H
|
|
||||||
#define _SHVAR_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
typedef struct _shvarFile shvarFile;
|
|
||||||
struct _shvarFile {
|
|
||||||
char *fileName; /* read-only */
|
|
||||||
int fd; /* read-only */
|
|
||||||
char *arena; /* ignore */
|
|
||||||
GList *lineList; /* read-only */
|
|
||||||
GList *freeList; /* ignore */
|
|
||||||
GList *current; /* set implicitly or explicitly,
|
|
||||||
points to element of lineList */
|
|
||||||
shvarFile *parent; /* set explicitly */
|
|
||||||
int modified; /* ignore */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the file <name>, return shvarFile on success, NULL on failure */
|
|
||||||
shvarFile *
|
|
||||||
svCreateFile(const char *name);
|
|
||||||
|
|
||||||
/* Open the file <name>, return shvarFile on success, NULL on failure */
|
|
||||||
shvarFile *
|
|
||||||
svNewFile(const char *name);
|
|
||||||
|
|
||||||
/* Get the value associated with the key, and leave the current pointer
|
|
||||||
* pointing at the line containing the value. The char* returned MUST
|
|
||||||
* be freed by the caller.
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
svGetValue(shvarFile *s, const char *key);
|
|
||||||
|
|
||||||
/* return 1 if <key> resolves to any truth value (e.g. "yes", "y", "true")
|
|
||||||
* return 0 if <key> resolves to any non-truth value (e.g. "no", "n", "false")
|
|
||||||
* return <def> otherwise
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
svTrueValue(shvarFile *s, const char *key, int def);
|
|
||||||
|
|
||||||
/* Set the variable <key> equal to the value <value>.
|
|
||||||
* If <key> does not exist, and the <current> pointer is set, append
|
|
||||||
* the key=value pair after that line. Otherwise, prepend the pair
|
|
||||||
* to the top of the file.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
svSetValue(shvarFile *s, const char *key, const char *value);
|
|
||||||
|
|
||||||
|
|
||||||
/* Write the current contents iff modified. Returns -1 on error
|
|
||||||
* and 0 on success. Do not write if no values have been modified.
|
|
||||||
* The mode argument is only used if creating the file, not if
|
|
||||||
* re-writing an existing file, and is passed unchanged to the
|
|
||||||
* open() syscall.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
svWriteFile(shvarFile *s, int mode);
|
|
||||||
|
|
||||||
/* Close the file descriptor (if open) and delete the shvarFile.
|
|
||||||
* Returns -1 on error and 0 on success.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
svCloseFile(shvarFile *s);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
#endif /* ! _SHVAR_H */
|
|
@@ -1754,10 +1754,8 @@ nm_device_set_ip4_config (NMDevice *self, NMIP4Config *config, NMDeviceStateReas
|
|||||||
priv->ip4_config = g_object_ref (config);
|
priv->ip4_config = g_object_ref (config);
|
||||||
|
|
||||||
success = nm_system_device_set_from_ip4_config (ip_iface, config);
|
success = nm_system_device_set_from_ip4_config (ip_iface, config);
|
||||||
if (success) {
|
if (success)
|
||||||
nm_device_update_ip4_address (self);
|
nm_device_update_ip4_address (self);
|
||||||
nm_system_set_hostname (config);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (self), NM_DEVICE_INTERFACE_IP4_CONFIG);
|
g_object_notify (G_OBJECT (self), NM_DEVICE_INTERFACE_IP4_CONFIG);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user