Re: [PATCH] resolvconf support (Re: NM 0.7 Debian Lenny - strangest issue...)
- From: Hristo Hristov <xpertbg gmail com>
- To: Alexander Sack <asac jwsdot com>
- Cc: Network-Manager <networkmanager-list gnome org>, Utopia Maintenance Team <pkg-utopia-maintainers lists alioth debian org>
- Subject: Re: [PATCH] resolvconf support (Re: NM 0.7 Debian Lenny - strangest issue...)
- Date: Tue, 8 Jul 2008 13:29:53 +0300
Hi,
Why don't you use the dispatcher? I'm not sure which is the correct
approach.
To use the dispatcher you have to send more information to it like
nameservers. I didn't have time until now to make a nice support for
it. See
http://mail.gnome.org/archives/networkmanager-list/2008-May/msg00003.html
for more information on my idea. I'll try to make something better soon.
On Tue, 8 Jul 2008 12:14:01 +0200
Alexander Sack <asac jwsdot com> wrote:
> On Mon, Jul 07, 2008 at 03:51:22PM -0400, Dan Williams wrote:
> > On Mon, 2008-07-07 at 20:26 +0200, Michael Biebl wrote:
> > >
> > > 2.) If resolvconf is installed, change NM to not
> > > manage /etc/resolv.conf itself, but only pass the dns information
> > > to resolvconf (which then will write /etc/resolv.conf).
> > > The downside is, that resolvconf might have own dns
> > > configuration. So the resulting /etc/resolv.conf might differ
> > > from what NM expects it to be.
> > >
> > > I'm leaning towards 2.), but I'm open to other suggestions and
> > > comments.
> >
> > I'm fine with #2 also; I'll take patches for this upstream.
> >
> > But I have one question that I pointed out earlier. If you install
> > resolvconf, does that _necessarily_ imply that it is turned on?
> > i.e. I can install apache, but I don't actually have to run apache
> > even if it's installed. Does resolvconf have an on/off switch
> > somewhere, or do you have to uninstall it to turn it off?
>
>
> Below a first patch introducing basic resolvconf support. I decided to
> not add/delete nameserver entries for individual NMIP4Config's, but
> instead just add/delete _one_ config named "NetworkManager", which is
> based on the merged NMIP4Config that NM uses in rewrite_resolv_conf.
>
> The code will fall back to normal resolv.conf rewriting if
> resolvconf fails. Further I guarded the new code by #ifdef
> WITH_RESOLVCONF. However, I didnt add a configure flag.
>
> Comments?
>
>
> --- src/named-manager/nm-named-manager.c 2008-06-26 19:33:13
> +0000 +++ src/named-manager/nm-named-manager.c 2008-07-08
> 10:07:08 +0000 @@ -29,25 +29,30 @@
> #include <glib.h>
>
> #include <glib/gi18n.h>
>
> #include "nm-named-manager.h"
> #include "nm-ip4-config.h"
> #include "nm-utils.h"
> #include "NetworkManagerSystem.h"
> +#include "NetworkManagerUtils.h"
>
> #ifdef HAVE_SELINUX
> #include <selinux/selinux.h>
> #endif
>
> #ifndef RESOLV_CONF
> #define RESOLV_CONF "/etc/resolv.conf"
> #endif
>
> +#ifndef RESOLV_CONF_PATH
> +#define RESOLV_CONF_PATH "/sbin/resolvconf"
> +#endif
> +
> G_DEFINE_TYPE(NMNamedManager, nm_named_manager, G_TYPE_OBJECT)
>
> #define NM_NAMED_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE
> ((o), \ NM_TYPE_NAMED_MANAGER, \
> NMNamedManagerPrivate))
>
>
> struct NMNamedManagerPrivate {
> @@ -291,23 +296,51 @@ rewrite_resolv_conf (NMNamedManager *mgr
> g_strerror (errno));
> }
> }
>
> g_free (domain);
> g_free (searches);
>
> if (*error == NULL) {
> - if (rename (tmp_resolv_conf, RESOLV_CONF) < 0) {
> + gboolean do_rewrite = TRUE;
> +
> +#ifdef WITH_RESOLVCONF
> + gint exit_code;
> + char *cmd;
> +
> + // delete NM resolvconf
> + nm_spawn_process(RESOLV_CONF_PATH " -d
> NetworkManager");
> + cmd = g_strconcat (RESOLV_CONF_PATH " -a nm1 ",
> + tmp_resolv_conf,
> + NULL);
> + if(cmd)
> + exit_code = nm_spawn_process(cmd);
> + else
> + exit_code = 1;
> +
> + if(exit_code)
> + g_warning("%s failed (%d). "
> + "updating /etc/resolv.conf
> directly.",
> + cmd,
> + exit_code);
> + else
> + do_rewrite = FALSE;
> + g_free(cmd);
> +
> +#else /* WITH_RESOLVCONF */
> + do_rewrite = TRUE;
> +#endif
> + if (do_rewrite && rename (tmp_resolv_conf,
> RESOLV_CONF) < 0) { g_set_error (error,
> NM_NAMED_MANAGER_ERROR,
> NM_NAMED_MANAGER_ERROR_SYSTEM,
> "Could not replace "
> RESOLV_CONF ": %s\n", g_strerror (errno));
> - } else {
> + } else if (do_rewrite) {
> nm_system_update_dns ();
> }
> }
>
> return *error ? FALSE : TRUE;
> }
>
> gboolean
>
>
>
>
>
>
> - Alexander
>
> _______________________________________________
> NetworkManager-list mailing list
> NetworkManager-list gnome org
> http://mail.gnome.org/mailman/listinfo/networkmanager-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]