| Server IP : 182.53.201.61 / Your IP : 216.73.217.175 Web Server : Apache/2.2.15 (Fedora) System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 User : apache ( 48) PHP Version : 5.3.3 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/NetworkManager-vpnc-0.7.996/ |
Upload File : |
2009-02-13 Dan Williams <dcbw@redhat.com>
* nm-vpnc-service.conf
- Clean up dbus permissions; retain deny for compat with older dbus
2009-02-05 Dan Williams <dcbw@redhat.com>
* configure.in
- Add configure-time option for running test cases on 'make check'
* properties/pcf-file.c
properties/pcf-file.h
- (pcf_file_lookup_string, pcf_file_lookup_bool, pcf_file_lookup_int):
add helper functions to look up specific value types
* properties/nm-vpnc.c
- (import): use new value types helper functions; fix interpretation of
"EnableNat" and ensure default is Cisco NAT traversal; import
"DHGroup"
- (export): export "DHGroup" and "SaveUserPassword"; fix export of
static routes
* properties/tests/*
nm-test-helpers.h
Makefile.am
- Add testcases for .pcf file import/export
2009-02-05 Dan Williams <dcbw@redhat.com>
* properties/nm-vpnc.c
- (import): handle "SaveUserPassword" and "EnableLocalLAN"
2009-01-20 Przemysław Grzegorczyk <pgrzegorczyk@gmail.com>
* src/nm-vpnc-service.h:
* auth-dialog/gnome-two-password-dialog.c:
* auth-dialog/gnome-two-password-dialog.h: Cleared up gtk and glib includes
to use only toplevel headers. Bug #564376.
2008-12-11 Dan Williams <dcbw@redhat.com>
* Split into separate repository
2008-12-05 Dan Williams <dcbw@redhat.com>
* auth-dialog/gnome-two-password-dialog.c
auth-dialog/gnome-two-password-dialog.h
- Simplify to only what the VPN plugin actually needs
* auth-dialog/main.c
- (find_connection_path): split out into separate function
- (get_secrets): be more intelligent about requesting password when
the password type cannot be found in the VPN details; use new VPN
password dialog stuff
- (get_connection_info): rename from get_password_types(); get
connection name too
- (main): don't require a connection name too; it's pointless
* properties/nm-vpnc.c
- (init_one_pw_combo): if the password was found, but the password type
wasn't, default to saving the password in the keyring. Otherwise
if both the type and the password couldn't be found, default to
always asking for it.
- (init_plugin_ui): get VPN passwords before setting up the type combos
2008-11-14 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
properties/nm-vpnc.c
- Switch default NAT Traversal mode back to Cisco UDP until the plugin
natively supports more vendors (bgo #512675)
2008-11-14 Dan Williams <dcbw@redhat.com>
Add password types to better support OTP/token use-cases, and for people
who want to be asked every time for one or both passwords (bgo #346547).
Heavily based on a patch from Mathieu Trudel-Lapierre <mathieu.tl@gmail.com>
* common-gnome/keyring-helpers.c
common-gnome/keyring-helpers.h
- (keyring_helpers_get_one_secret): accessor to get just one secret
* auth-dialog/gnome-two-password-dialog.c
auth-dialog/gnome-two-password-dialog.h
- (gnome_two_password_dialog_focus_password,
gnome_two_password_dialog_focus_password_secondary): add functions to
focus specific password entries
* auth-dialog/Makefile.am
auth-dialog/main.c
- Retrieve password types from GConf, and handle them correctly when
asking the user for passwords
* properties/nm-vpnc-dialog.glade
properties/nm-vpnc.c
- Add combo boxes for both passwords with options for saving, asking,
or not requiring the password
- (fill_vpn_passwords): handle passwords individually
- (pw_type_changed_helper): disable the password entry when the user
picks "Not Required" or "Always Ask"
- (init_one_pw_combo, init_plugin_ui): set up password combos
- (handle_one_pw_type, update_connection): save password type
- (save_one_password): handle saving/clearing passwords based on what
each password's type is
* src/nm-vpnc-service.c
src/nm-vpnc-service.h
- (validate_one_property): ignore password type properties
- (nm_vpnc_config_write, write_one_property): don't write secrets if
they aren't used
- (real_need_secrets): only ask for secrets when needed
2008-11-03 Dan Williams <dcbw@redhat.com>
Patch from Carlos Martín Nieto <carlos@cmartin.tk> (and me) (bgo #547582)
* properties/nm-vpnc.c
- (import, fill_vpn_passwords): import passwords too
- (decrypt_cisco_key, child_stdout_data_cb, decrypt_child_finished_cb):
call out to cisco-decrypt if present to de-obfuscate the group
password
2008-10-26 Dan Williams <dcbw@redhat.com>
* properties/nm-vpnc.c
- Update for setting accessor changes
2008-10-09 Dan Williams <dcbw@redhat.com>
* properties/nm-vpnc.c
- (update_connection): only set DPD timeout if it was something other
than the default value
2008-09-09 Dan Williams <dcbw@redhat.com>
* common-gnome/keyring-helpers.c
common-gnome/keyring-helpers.h
- Add defines for secret tags in the keyring
- (keyring_helpers_delete_secret): delete a secret from the keyring for
a given connection UUID
- (keyring_helpers_save_secret): vpn service is always going to be
vpnc's
* auth-dialog/main.c
- (get_secrets): use secret tag #defines; vpn service will always be
vpnc's
* properties/nm-vpnc.c
properties/nm-vpnc.h
- (fill_vpn_passwords): fill secrets in the UI if the connection is
system-scope
- (update_connection): fill secrets if the connection is system-scope
so they can be saved with the system settings service
- (save_secrets, delete_connection): implement
2008-09-03 Dan Williams <dcbw@redhat.com>
* common-gnome/Makefile.am
common-gnome/keyring-helpers.c
common-gnome/keyring-helpers.h
Makefile.am
- Split out keyring read/write routines to common library
* configure.in
- Don't require libgnomeui anymore
* auth-dialog/main.c
- (get_secrets): use common keyring helpers
- (main): remove usage of libgnomeui
* auth-dialog/gnome-two-password-dialog.c
- (gnome_two_password_dialog_get_password,
gnome_two_password_dialog_get_password_secondary): use gnome-keyring
secure memory
* properties/nm-vpnc.c
properties/nm-vpnc-dialog.glade
properties/Makefile.am
- Grab VPN passwords from the keyring if available and allow them to
be edited
2008-08-28 Dan Williams <dcbw@redhat.com>
* auth-dialog/main.c
- (get_secrets): don't gtk_widget_show_all() because that exposes
widgets that were supposed to be hidden
- (main): don't segfault on missing passwords (like hitting Cancel)
2008-08-26 Dan Williams <dcbw@redhat.com>
* auth-dialog/main.c
- Convert to connection UUIDs (requires NM svn 4013 or later)
- General cleanups
2008-08-11 Dan Williams <dcbw@redhat.com>
Update to match NM svn3924 vpn setting changes; verify options better;
return more informative errors on VPN launch failures.
2008-08-06 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service-vpnc-helper.c
- (get_routes): fixup for NM route metric changes
* properties/nm-vpnc.c
- (get_routes, export): fixup for NM route metric changes
2008-07-27 Dan Williams <dcbw@redhat.com>
Patch from Michael Biebl <biebl@debian.org>
* Move service to $LIBEXECDIR, remove unneeded compilation flags, move
properties plugin to $LIBDIR/NetworkManager
2008-07-17 Tambet Ingo <tambet@gmail.com>
* properties/nm-vpnc.c (vpnc_plugin_ui_class_init): Don't add empty
private data to the class, it produces a runtime warning.
2008-07-07 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service-vpnc-helper.c
properties/nm-vpnc.c
- Use IPv4 address prefixes rather than netmasks (requires svn3812)
2008-07-03 Dan Williams <dcbw@redhat.com>
* nm-vpnc-service.name.in
Makefile.am
- Remove paths from .name file (requires applet r776 or later) to fix
issues with multilib and magic path substitution in glibc
2008-06-20 Dan Williams <dcbw@redhat.com>
Update for changes to the plugin API
* properties/nm-vpnc.c
properties/nm-vpnc.h
- Add error enum
- (check_validity): set the error
- (init_plugin_ui): emit the 'changed' signal whenever a UI widget
changes
- (update_connection): return validity
2008-06-17 Dan Williams <dcbw@redhat.com>
* Convert to new NM VPN UI plugin format
* Remove vpnc 0.3.x options
* Handle Dead Peer Detection option
* Handle NAT Traversal option
Requires a NetworkManager of at least the SVN revision before this commit.
2008-06-06 Dan Williams <dcbw@redhat.com>
Patch from Tambet Ingo <tambet@gmail.com>
* src/nm-vpnc-service-vpnc-helper.c
- (main, get_routes): send routes too
2008-05-22 Tambet Ingo <tambet@gmail.com>
* src/nm-vpnc-service.c (real_disconnect): If sending SIGTERM succeeds,
add a timeout to make sure it gets killed. If it fails, send SIGKILL
immediately.
2008-05-01 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- (validate_one_property): allow the 'name' property
2008-04-27 Dan Williams <dcbw@redhat.com>
* properties/Makefile.am
- Avoid versioning properties plugin (gnome.org #529836)
2008-04-10 Dan Williams <dcbw@redhat.com>
* vpn-daemons/vpnc/auth-dialog/main.c
- Fix for new location of keyring passwords
2008-04-10 Tambet Ingo <tambet@gmail.com>
* auth-dialog/main.c (main): Add the '-i' argument the applet now sends.
2008-03-06 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service-vpnc-helper.c
- (main): pass the MTU in the returned option hash table
2007-12-31 Christopher Aillon <caillon@redhat.com>
* src/nm-vpnc-service.h:
* src/nm-vpnc-service.c:
- Support Cisco UDP Encapsulation in vpnc >= 0.4 (#420925)
2007-12-11 Dan Williams <dcbw@redhat.com>
Patches from Casey Harkins <caseyharkins@gmail.com>
* properties/nm-vpnc.c
- (impl_fill_connection): duplicate hash table keys as required
2007-12-05 Dan Williams <dcbw@redhat.com>
Patch from Denis Leroy <denis@poolshark.org>
* properties/nm-vpnc.c
- (import_from_file): allow import of incomplete .pcf files
(gnome.org #498758, rh #241774)
2007-12-05 Dan Williams <dcbw@redhat.com>
* properties/nm-vpnc.c
- (impl_get_widget): be more robust about bad connections
2007-11-15 Dan Williams <dcbw@redhat.com>
* properties/nm-vpnc.c
- Fixup for NMSettingConnection 'name' -> 'id' changes
2007-11-07 Dan Williams <dcbw@redhat.com>
* auth-dialog/main.c
properties/nm-vpnc.c
src/nm-vpnc-service.c
- Fix for new NMSetting API changes
2007-10-26 Dan Williams <dcbw@redhat.com>
* properties/nm-vpnc.c
- (impl_get_object): use a glade root, and ensure widget is referenced
correctly
2007-10-10 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- (validate_one_property): print message about what properties fail
validation
- (real_connect, nm_vpnc_config_write): use default username from VPN
setting if no Xauth username is provided in custom properties
2007-09-27 Dan Williams <dcbw@redhat.com>
* auth-dialog/main.c
- Rework password storage to match the GConf semantics of nm-applet
better. Also, use generic secrets, not keyring network passwords.
Keyring network passwords are inappropriate for our usage here.
2007-09-27 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- (nm_vpnc_config_write): turn back on various options that the vpnc
plugin had before that are used with vpnc 0.3.x
2007-09-27 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service-vpnc-helper.c
- (addr_list_to_gvalue): list should contain straight guint32s, not
GValues containing guint32s
- (main): For Cisco/vpnc, the IP4 PTP address needs to be the same as
the internal IP4 address
2007-09-27 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- (real_connect): close vpnc's stdin so it can actually go ahead and
connect
2007-09-27 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service-helper.c
- (str_to_gvalue, addr_to_gvalue): ensure the GValues are zeroed when
allocated so that they can be assigned a type later
- (addr_list_to_gvalue): use a GArray rather than a GSList, dbus-glib
seems ignorant of GSLists with G_TYPE_UINT elements
2007-09-26 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- (real_need_secrets, nm_vpnc_plugin_class_init): implement need_secrets
2007-09-26 Tambet Ingo <tambet@gmail.com>
* src/nm-vpnc-service.c (real_connect): The arguments have changed, update.
2007-09-12 Tambet Ingo <tambet@gmail.com>
* src/nm-vpnc-service.[ch]: Rewrite. Derive from NMVPNPlugin.
* src/nm-vpnc-service-vpnc-helper.c: Rewrite using dbus-glib.
* auth-dialog/main.c: Populate the properties hash with the passwords.
* properties/nm-vpnc.c: The VPN connection properties are all hash tables now.
* src/nm-utils.[ch]: Remove. Use the same things from libnm-util.
* configure.in: Check libnm_glib module as well now that we use NMVPNPlugin.
2007-08-15 Tambet Ingo <tambet@gmail.com>
* nm-vpnc-service.name.in: Use upper-case macro names as that's what the
sed script from Makefile is trying to replace.
* src/Makefile.am: Link to $NM_UTILS_LIBS.
* configure.in: Update required NetworkManager version to 0.7.0.
Clean up the double-check to NetworkManager.pc.
2007-08-14 Dan Williams <dcbw@redhat.com>
* src/nm-openvpn-service.c
- Handle NM_VPN_STATE_* -> NM_VPN_SERVICE_STATE_* and NMVPNState ->
NMVPNServiceState renames
2007-07-26 Dan Williams <dcbw@redhat.com>
Patch from Andreas Hanke <andreas.hanke@gmx-topmail.de>
* configure.in
acinclude.m4
Makefile.am
- remove broken usage of AS_AC_EXPAND (#413323)
2007-06-21 Christopher Aillon <caillon@redhat.com>
* nm-vpnc-service.name.in:
Make the properties library path multilib friendly (#447577)
2007-06-11 Christopher Aillon <caillon@redhat.com>
* properties/nm-vpnc-dialog.glade:
Fix casing of the disable NAT checkbox
2007-04-04 Dan Williams <dcbw@redhat.com>
Patch from Denis Leroy <denis@poolshark.org>
* src/nm-vpnc-service.c
properties/nm-vpnc.c
properties/nm-vpnc-dialog.glade
- Add config options for NAT keepalive, NAT Traversal, and Weak DES
2007-04-02 Dan Williams <dcbw@redhat.com>
Patch from Christian Persch <chpe@gnome.org>
* properties/nm-vpnc-dialog.glade
- HIGify (gnome.org #423753)
* src/nm-vpnc.c
- Remove unused expander code too
2007-02-23 Dan Williams <dcbw@redhat.com>
Patch from Olaf Telshörner <olaf.tsc7@yahoo.de>
* src/nm-vpnc-service.c
- Add /usr/local/sbin/vpnc to the search list
2007-02-20 Dan Williams <dcbw@redhat.com>
Patch from Jon Nettleton
* properties/nm-vpnc-dialog.glade
- Reduce size of vpnc configuration dialog (Gnome.org #408819)
2007-01-30 Dan Williams <dcbw@redhat.com>
* configure.in
src/Makefile.am
- Add configure bits to pick up libnm-util
* src/nm-vpnc-service.c
- Convert to new dict-based IP4Config signal format
2006-12-07 Dan Williams <dcbw@redhat.com>
Patch from Christian Persch <chpe@gnome.org>
* auth-dialog/gnome-two-password-dialog.c
- HIG-ify (Gnome.org #383124)
2006-12-07 Dan Williams <dcbw@redhat.com>
Patch from Christian Persch <chpe@gnome.org>
* auth-dialog/main.c
- Fix memleak by unrefing the GnomeProgram instance (Gnome.org #383123)
2006-12-04 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- (nm_vpnc_config_options_validate): allow the
"NAT-Keepalive packet interval" option to pass validation
2006-10-30 Tambet Ingo <tambet@ximian.com>
* properties/Makefile.am: Include new files pcf-file.[ch] in build.
Add NetworkManager to CFLAGS and LDADD.
* properties/pcf-file.c: Implement.
* properties/pcf-file.h: Ditto.
* properties/nm-vpnc.c (import_from_file): Rewrite using new Cisco PCF
file parser instead of using GKeyFile (which has slightly different
semantics).
* src/Makefile.am: Add NetworkManager to CFLAGS and LDADD.
* src/nm-vpnc-service.c: Remove the leading NetworkManager directory
from NM includes since the NM pkg-config file already adds that.
* src/nm-vpnc-service-vpnc-helper.c: Ditto.
2006-06-19 Satoru SATOH <ss@gnome.gr.jp>
* configure.in (ALL_LINGUAS): Added ja (Japanese).
2006-05-21 Dan Williams <dcbw@redhat.com>
* src/nm-vpnc-service.c
- Better rekey patch; honor user-specified interval but default
to 2 hours if unspecified
2006-05-21 Dan Williams <dcbw@redhat.com>
* configure.in: bump version to 0.7.0 to match NM HEAD
2006-04-10 Robert Love <rml@novell.com>
* properties/nm-vpnc.c: Report error if writing out of exported
configuration fails. The silent treatment might work for me and my
wife, but not for failed I/O.
2006-03-29 Robert Love <rml@novell.com>
* src/nm-vpnc-service.c: New eigth argument to DBUS VPN method, the
per-route MSS. Cisco does not care about the MSS, so we send zero.
2006-03-20 Dan Williams <dcbw@redhat.com>
* configure.in: Bump release to 0.6
2006-03-08 Christopher Aillon <caillon@redhat.com>
* nm-vpnc.desktop.in: Use NoDisplay=true (fixes 333854)
2006-01-23 Robert Love <rml@novell.com>
* properties/nm-vpnc-dialog.glade: Add (back) 'Optional Information'
label for GtkExpander. Use new-style Glade (separate label, not a
property of the GtkExpander).
2006-01-05 Tim Niemueller <tim@niemueller.de>
* configure.in: Explicitly set AUX_DIR to . to prevent autoconf from
searching (and finding) install-sh in ../.., which lead to
problems.
2005-11-04 Robert Love <rml@novell.com>
* auth-dialog/gnome-two-password-dialog.c: Embarrassing bug! Make sure
we g_free() these things in the right order. Fix c/o JPR. (Novell
bug #121884).
2005-10-27 Christopher Aillon <caillon@redhat.com>
* src/nm-vpn-service.c: Only signal the bus that state
changed if old_state != new_state
2005-10-17 Christopher Aillon <caillon@redhat.com>
* configure.in: Bump version to 0.5.0
2005-10-12 Robert Love <rml@novell.com>
* src/nm-vpn-service.c: remove a bunch of unused variables
and labels. Also, ifdef-out a function whose only caller
is ifdef'ed out.
2005-10-07 Christopher Aillon <caillon@redhat.com>
* nm-vpnc.desktop.in: use a category for the desktop entry.
(Patch from: Rodrigo Moya <rodrigo@novell.com>)
2005-08-18 David Zeuthen <davidz@redhat.com>
* configure.in: Require NetworkManager-devel >= 0.4.1. Bump version
to 0.3.
2005-08-14 Christopher Aillon <caillon@redhat.com>
* src/nm-vpn-service.c: Use UDP Encapsulation, to allow
multiple VPN connections from the same network
2005-08-12 Robert Love <rml@novell.com>
* configure.in: add 'sv' translation
2005-06-29 David Zeuthen <davidz@redhat.com>
* configure.in: Bump version to 0.2
2005-06-29 David Zeuthen <davidz@redhat.com>
* Makefile.am: Install gnome-mime-application-x-cisco-vpn-settings.png
* gnome-mime-application-x-cisco-vpn-settings.png: New file - icon
by Diana Fong <dfong@redhat.com>
2005-06-23 David Zeuthen <davidz@redhat.com>
* src/nm-vpnc-service.c (vpnc_watch_cb): Some users report even
greater success with sleep (2) rather than sleep (1)...
2005-06-23 David Zeuthen <davidz@redhat.com>
* auth-dialog/main.c (main): Print two newlines when the passwords
are dumped and wait for the parent to tell us on stdin to die.
2005-06-23 David Zeuthen <davidz@redhat.com>
* properties/nm-vpnc.c (import_from_file): Allow "Description=" to be
the empty string (reported by Bill Moss <bmoss@clemson.edu>).
2005-06-17 David Zeuthen <davidz@redhat.com>
* configure.in, Makefile.am: Various fixes such that 'make distcheck'
actually succeeds
2005-06-17 David Zeuthen <davidz@redhat.com>
* properties/nm-vpnc.c: Add new NM_VPN_API_SUBJECT_TO_CHANGE so we
can include nm-vpn-ui-interface.h.
(import_from_file): New function
(import_button_clicked): Actually Implement this function
(impl_can_export): New function
(impl_import_file): New function
(export_to_file): New function
(impl_export): New function
(impl_get_object): Add function pointers for can_export, import_file
and export
* nm-vpnc.desktop.in: New file
* configure.in: Add AC_PROG_INTLTOOL
* Makefile.am: Add rules for building the .desktop file
2005-06-16 David Zeuthen <davidz@redhat.com>
* Makefile.am (dbusservicedir): Adjust to use $(sysconfdir)
* configure.in: Don't do the DBUS_SYS_DIR thing since it's always
at $(sysconfdir)/dbus-1/system.d
2005-06-16 David Zeuthen <davidz@redhat.com>
* properties/nm-vpnc.c: Include w_use_domain and w_domain
(impl_get_widget): Reset w_domain, w_use_domain
(impl_get_properties): Also pass Domain option if applicable
(impl_is_valid): Add validation code for Domain
(use_domain_toggled): New function
(impl_get_confirmation_details): Also put out info about Domain if
applicable
(impl_get_object): Get w_domain, w_use_domain widgets and set
up event listeners for them
* properties/nm-vpnc-dialog.glade: Added the Domain optional
setting
2005-06-12 David Zeuthen <davidz@redhat.com>
* doc/example-vpnc-system-wide-connection.sh: New file
* properties/nm-vpnc-dialog.glade: New file
* properties/nm-vpnc.c: New file
* properties/Makefile.am: New file
* auth-dialog/Makefile.am: New file
* auth-dialog/gnome-two-password-dialog.[ch]: New files, based
on gnome-password-dialog.[ch] from libgnomeui
* auth-dialog/main.c: New file
* po/POTFILES.in, po/ChangeLog, da.po: New files
* Makefile.am: Add src, auth-dialog, propertes and po
* autogen.sh: New file
* configure.in: New file
* acinclude.m4: New file
* README: New file
* NEWS: New file
* ChangeLog: New file
* AUTHORS: New file
* nm-vpnc-service.name.in: Based on nm-vpnc-service.name. Reworked
to sport multiple sections and have the paths to the auth-dialog
binary and properties shared object
* nm-vpnc-service.name: Deleted and replaced by
nm-vpnc-service.name.in
* nm-vpnc-service.conf: Rename from org.freedesktop.vpn to
org.freedesktop.NetworkManager.vpnc
* src/nm-vpnc-service.h: Rename from org.freedesktop.vpn to
org.freedesktop.NetworkManager.vpnc (New file)
* src/nm-vpnc-service.c: Use the system-installed
NetworkManager.h instead. Setup i18n. (New file)
(nm_vpnc_config_write): Rework to cope with passwords being
an array.
(nm_vpnc_config_options_validate): Add "Xauth username" to list
of allowed options
(nm_vpnc_dbus_handle_start_vpn): Passwords is now an array.
* src/nm-vpnc-service-vpnc-helper.c: Use the system-installed
NetworkManager.h instead (New file)
* nm-vpn-service.[ch], nm-vpn-service-vpnc-helper.c: Moved in src
* src/nm-utils.[ch]: For now, a local copy duplicated from utils/ in
the NM project