From 96378dfa82bdfc717439d9fcc9033b61bc508759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Thu, 16 Feb 2012 12:20:37 +0100 Subject: [PATCH] backends: add a function reading systemwide IPv6 Privacy Extensions configuration It is distro-specific, but mostly it's net.ipv6.conf.default.use_tempaddr in /etc/sysctl.conf --- src/backends/NetworkManagerArch.c | 7 +++- src/backends/NetworkManagerDebian.c | 7 +++- src/backends/NetworkManagerExherbo.c | 7 +++- src/backends/NetworkManagerFrugalware.c | 5 +++ src/backends/NetworkManagerGeneric.c | 52 ++++++++++++++++++++++++- src/backends/NetworkManagerGeneric.h | 3 +- src/backends/NetworkManagerGentoo.c | 7 +++- src/backends/NetworkManagerLinexa.c | 6 ++- src/backends/NetworkManagerMandriva.c | 7 +++- src/backends/NetworkManagerPaldo.c | 7 +++- src/backends/NetworkManagerPardus.c | 7 +++- src/backends/NetworkManagerRedHat.c | 7 +++- src/backends/NetworkManagerSlackware.c | 7 +++- src/backends/NetworkManagerSuSE.c | 7 +++- src/backends/nm-backend.h | 3 +- 15 files changed, 125 insertions(+), 14 deletions(-) diff --git a/src/backends/NetworkManagerArch.c b/src/backends/NetworkManagerArch.c index e3394dd9c3..7e25ee37a4 100644 --- a/src/backends/NetworkManagerArch.c +++ b/src/backends/NetworkManagerArch.c @@ -28,7 +28,7 @@ * * (C) Copyright 2004 Tom Parker * (C) Copyright 2004 Matthew Garrett - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. */ #ifdef HAVE_CONFIG_H @@ -53,3 +53,8 @@ void nm_backend_update_dns (void) nm_spawn_process ("/etc/rc.d/nscd restart"); } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerDebian.c b/src/backends/NetworkManagerDebian.c index bb1909583b..ed29dd3a07 100644 --- a/src/backends/NetworkManagerDebian.c +++ b/src/backends/NetworkManagerDebian.c @@ -21,7 +21,7 @@ * * (C) Copyright 2004 Tom Parker * (C) Copyright 2004 Matthew Garrett - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. */ #ifdef HAVE_CONFIG_H @@ -50,3 +50,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerExherbo.c b/src/backends/NetworkManagerExherbo.c index 20bf320be2..d02778969d 100644 --- a/src/backends/NetworkManagerExherbo.c +++ b/src/backends/NetworkManagerExherbo.c @@ -18,7 +18,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. * (C) Copyright 2004 Dan Willemsen * (C) Copyright 2004 Robert Paskowitz */ @@ -47,3 +47,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerFrugalware.c b/src/backends/NetworkManagerFrugalware.c index 1ae391eb1c..301751e907 100644 --- a/src/backends/NetworkManagerFrugalware.c +++ b/src/backends/NetworkManagerFrugalware.c @@ -36,3 +36,8 @@ void nm_backend_update_dns (void) /* I'm not running nscd */ } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerGeneric.c b/src/backends/NetworkManagerGeneric.c index 614460f80a..eae6f733d8 100644 --- a/src/backends/NetworkManagerGeneric.c +++ b/src/backends/NetworkManagerGeneric.c @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 - 2010 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. * (C) Copyright 2006 Timothee Lecomte */ @@ -113,6 +113,51 @@ void nm_generic_update_dns (void) { } +/* + * nm_generic_ipv6_use_tempaddr + * + * Get net.ipv6.conf.default.use_tempaddr value from /etc/sysctl.conf or + * /lib/sysctl.d/sysctl.conf + * + */ +int nm_generic_ipv6_use_tempaddr (void) +{ + char *contents = NULL; + gsize len = 0; + const char *group_name = "[forged_group]\n"; + char *sysctl_data = NULL; + GKeyFile *keyfile; + GError *error = NULL; + int tmp, ret = -1; + + /* Read file contents to a string. */ + if (!g_file_get_contents ("/etc/sysctl.conf", &contents, &len, NULL)) + if (!g_file_get_contents ("/lib/sysctl.d/sysctl.conf", &contents, &len, NULL)) + return -1; + + /* Prepend a group so that we can use GKeyFile parser. */ + sysctl_data = g_strdup_printf ("%s%s", group_name, contents); + + keyfile = g_key_file_new (); + if (keyfile == NULL) + goto done; + + if (!g_key_file_load_from_data (keyfile, sysctl_data, len + strlen (group_name), G_KEY_FILE_NONE, NULL)) + goto done; + + tmp = g_key_file_get_integer (keyfile, "forged_group", "net.ipv6.conf.default.use_tempaddr", &error); + if (error == NULL) + ret = tmp; + +done: + g_free (contents); + g_free (sysctl_data); + g_clear_error (&error); + g_key_file_free (keyfile); + + return ret; +} + #ifdef TARGET_GENERIC void nm_backend_enable_loopback (void) { @@ -123,5 +168,10 @@ void nm_backend_update_dns (void) { nm_generic_update_dns (); } + +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} #endif diff --git a/src/backends/NetworkManagerGeneric.h b/src/backends/NetworkManagerGeneric.h index 7a403f109a..3d4017e45e 100644 --- a/src/backends/NetworkManagerGeneric.h +++ b/src/backends/NetworkManagerGeneric.h @@ -18,7 +18,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 - 2011 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. */ #ifndef NM_GENERIC_H @@ -28,5 +28,6 @@ void nm_generic_enable_loopback (void); void nm_generic_update_dns (void); +int nm_generic_ipv6_use_tempaddr (void); #endif /* NM_GENERIC_H */ diff --git a/src/backends/NetworkManagerGentoo.c b/src/backends/NetworkManagerGentoo.c index f5ceaaf3b2..7370645a44 100644 --- a/src/backends/NetworkManagerGentoo.c +++ b/src/backends/NetworkManagerGentoo.c @@ -18,7 +18,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. * (C) Copyright 2004 Dan Willemsen * (C) Copyright 2004 Robert Paskowitz */ @@ -75,3 +75,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerLinexa.c b/src/backends/NetworkManagerLinexa.c index e42a3ef76b..34fed3bbbc 100644 --- a/src/backends/NetworkManagerLinexa.c +++ b/src/backends/NetworkManagerLinexa.c @@ -21,7 +21,7 @@ * * (C) Copyright 2004 Tom Parker * (C) Copyright 2004 Matthew Garrett - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. */ #ifdef HAVE_CONFIG_H @@ -46,4 +46,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} diff --git a/src/backends/NetworkManagerMandriva.c b/src/backends/NetworkManagerMandriva.c index ede0396391..f059beb65e 100644 --- a/src/backends/NetworkManagerMandriva.c +++ b/src/backends/NetworkManagerMandriva.c @@ -17,7 +17,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. * (C) Copyright 2008 Per Øyvind Karlsen */ @@ -42,3 +42,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerPaldo.c b/src/backends/NetworkManagerPaldo.c index d0b6d166e2..2d01d8577a 100644 --- a/src/backends/NetworkManagerPaldo.c +++ b/src/backends/NetworkManagerPaldo.c @@ -18,7 +18,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. * (C) Copyright 2006 Jürg Billeter */ @@ -44,3 +44,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerPardus.c b/src/backends/NetworkManagerPardus.c index 18873ffc33..acfeaed385 100644 --- a/src/backends/NetworkManagerPardus.c +++ b/src/backends/NetworkManagerPardus.c @@ -16,7 +16,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 RedHat, Inc. + * (C) Copyright 2004 - 2012 RedHat, Inc. * (C) Copyright 2009 TUBITAK/UEKAE */ @@ -35,3 +35,8 @@ void nm_backend_update_dns (void) { } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerRedHat.c b/src/backends/NetworkManagerRedHat.c index f87a0e4b3a..c14eb837aa 100644 --- a/src/backends/NetworkManagerRedHat.c +++ b/src/backends/NetworkManagerRedHat.c @@ -16,7 +16,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 - 2011 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. */ #ifdef HAVE_CONFIG_H @@ -40,3 +40,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerSlackware.c b/src/backends/NetworkManagerSlackware.c index e8e522d8e9..cdd2dfb077 100644 --- a/src/backends/NetworkManagerSlackware.c +++ b/src/backends/NetworkManagerSlackware.c @@ -16,7 +16,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 RedHat, Inc. + * (C) Copyright 2004 - 2012 RedHat, Inc. * (C) Copyright 2004 Narayan Newton */ @@ -35,3 +35,8 @@ void nm_backend_update_dns (void) { } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/NetworkManagerSuSE.c b/src/backends/NetworkManagerSuSE.c index 13ef0cd79b..1261853206 100644 --- a/src/backends/NetworkManagerSuSE.c +++ b/src/backends/NetworkManagerSuSE.c @@ -19,7 +19,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2004 Red Hat, Inc. + * (C) Copyright 2004 - 2012 Red Hat, Inc. * (C) Copyright 2005-2006 SuSE GmbH */ @@ -45,3 +45,8 @@ void nm_backend_update_dns (void) } } +int nm_backend_ipv6_use_tempaddr (void) +{ + return nm_generic_ipv6_use_tempaddr (); +} + diff --git a/src/backends/nm-backend.h b/src/backends/nm-backend.h index a6c21f16f8..17d1ff6490 100644 --- a/src/backends/nm-backend.h +++ b/src/backends/nm-backend.h @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * Copyright (C) 2011 Red Hat, Inc. + * Copyright (C) 2011 - 2012 Red Hat, Inc. */ #ifndef NM_BACKEND_H @@ -25,5 +25,6 @@ void nm_backend_enable_loopback (void); void nm_backend_update_dns (void); +int nm_backend_ipv6_use_tempaddr (void); #endif /* NM_BACKEND_H */