Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
NetworkManager
nm-dhcp-send-system-hostname.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nm-dhcp-send-system-hostname.patch of Package NetworkManager
commit dfa447091272de6d1a7d8cd99bf7b9c0d714d299 Author: Tambet Ingo <tambet@gmail.com> Date: Tue Jan 13 16:12:50 2009 +0200 Implement sending system hostname with DHCP client. diff --git a/libnm-util/nm-setting-ip4-config.h b/libnm-util/nm-setting-ip4-config.h index f02afb6..8626f3d 100644 --- a/libnm-util/nm-setting-ip4-config.h +++ b/libnm-util/nm-setting-ip4-config.h @@ -68,6 +68,7 @@ GQuark nm_setting_ip4_config_error_quark (void); #define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual" #define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared" +#define NM_SETTING_IP4_CONFIG_DHCP_USE_SYSTEM_HOSTNAME "system-hostname" typedef struct NMIP4Address NMIP4Address; diff --git a/src/NetworkManager.c b/src/NetworkManager.c index 5ac2e95..eb3c082 100644 --- a/src/NetworkManager.c +++ b/src/NetworkManager.c @@ -376,6 +376,8 @@ main (int argc, char *argv[]) goto done; } + nm_dhcp_manager_set_hostname_provider (dhcp_mgr, G_OBJECT (manager)); + /* Start our DBus service */ if (!nm_dbus_manager_start_service (dbus_mgr)) { nm_warning ("Failed to start the dbus manager."); diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c index be9c9c2..675c95e 100644 --- a/src/dhcp-manager/nm-dhcp-manager.c +++ b/src/dhcp-manager/nm-dhcp-manager.c @@ -50,6 +50,7 @@ typedef struct { NMDBusManager * dbus_mgr; GHashTable * devices; DBusGProxy * proxy; + GObject * hostname_provider; } NMDHCPManagerPrivate; @@ -69,6 +70,8 @@ static NMDHCPManager *nm_dhcp_manager_new (void); static void nm_dhcp_manager_cancel_transaction_real (NMDHCPDevice *device); +static void hostname_provider_destroyed (gpointer data, GObject *destroyed_object); + NMDHCPManager * nm_dhcp_manager_get (void) { @@ -93,6 +96,11 @@ finalize (GObject *object) { NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object); + if (priv->hostname_provider) { + g_object_weak_unref (priv->hostname_provider, hostname_provider_destroyed, object); + priv->hostname_provider = NULL; + } + g_hash_table_destroy (priv->devices); g_object_unref (priv->proxy); g_object_unref (priv->dbus_mgr); @@ -581,6 +589,7 @@ nm_dhcp_manager_begin_transaction (NMDHCPManager *manager, { NMDHCPManagerPrivate *priv; NMDHCPDevice *device; + gboolean hostname_modified = FALSE; g_return_val_if_fail (NM_IS_DHCP_MANAGER (manager), FALSE); g_return_val_if_fail (iface != NULL, FALSE); @@ -606,7 +615,32 @@ nm_dhcp_manager_begin_transaction (NMDHCPManager *manager, nm_dhcp_manager_handle_timeout, device); + if (s_ip4 && priv->hostname_provider) { + const char *dhcp_hostname; + + dhcp_hostname = nm_setting_ip4_config_get_dhcp_hostname (s_ip4); + if (dhcp_hostname && !strcmp (dhcp_hostname, NM_SETTING_IP4_CONFIG_DHCP_USE_SYSTEM_HOSTNAME)) { + char *system_hostname; + + g_object_get (priv->hostname_provider, "hostname", &system_hostname, NULL); + if (system_hostname) { + hostname_modified = TRUE; + g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, system_hostname, NULL); + g_free (system_hostname); + } + } + } + nm_dhcp_client_start (device, s_ip4); + + if (hostname_modified) { + /* Restore the saved hostname */ + g_object_set (G_OBJECT (s_ip4), + NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, + NM_SETTING_IP4_CONFIG_DHCP_USE_SYSTEM_HOSTNAME, + NULL); + } + device->watch_id = g_child_watch_add (device->pid, (GChildWatchFunc) dhcp_watch_cb, device); @@ -976,3 +1010,28 @@ nm_dhcp_manager_set_dhcp4_config (NMDHCPManager *self, return TRUE; } +static void +hostname_provider_destroyed (gpointer data, GObject *destroyed_object) +{ + NM_DHCP_MANAGER_GET_PRIVATE (data)->hostname_provider = NULL; +} + +void +nm_dhcp_manager_set_hostname_provider (NMDHCPManager *manager, GObject *provider) +{ + NMDHCPManagerPrivate *priv; + + g_return_if_fail (NM_IS_DHCP_MANAGER (manager)); + + priv = NM_DHCP_MANAGER_GET_PRIVATE (manager); + + if (priv->hostname_provider) { + g_object_weak_unref (priv->hostname_provider, hostname_provider_destroyed, manager); + priv->hostname_provider = NULL; + } + + if (G_IS_OBJECT (provider)) { + priv->hostname_provider = provider; + g_object_weak_ref (provider, hostname_provider_destroyed, manager); + } +} diff --git a/src/dhcp-manager/nm-dhcp-manager.h b/src/dhcp-manager/nm-dhcp-manager.h index 291e1b0..67cea30 100644 --- a/src/dhcp-manager/nm-dhcp-manager.h +++ b/src/dhcp-manager/nm-dhcp-manager.h @@ -105,4 +105,6 @@ gboolean nm_dhcp_manager_process_signal (NMDHCPManager *manager, DBu gboolean nm_dhcp_client_start (NMDHCPDevice *device, NMSettingIP4Config *s_ip4); void nm_dhcp_client_stop (const char *iface, pid_t pid); +void nm_dhcp_manager_set_hostname_provider (NMDHCPManager *manager, GObject *provider); + #endif /* NM_DHCP_MANAGER_H */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor