Commit graph

15936 commits

Author SHA1 Message Date
Thomas Haller e95090d303 settings/build: add linker version script for settings plugins 2016-10-13 21:33:33 +02:00
Thomas Haller b171fbc9ca build: explicitly whitelist symbols in NetworkManager binary
- this allows the linker to drop unused symbols via link-time optimization
  or with --gc-sections:

    git clean -fdx
    ./autogen.sh --enable-ld-gc --enable-ifcfg-rh --enable-ifupdown \
        --enable-ifnet --enable-ibft --enable-teamdctl --enable-wifi \
        --with-modem-manager-1 --with-ofono --with-more-asserts \
        --with-more-logging
    make -j20
    strip ./src/NetworkManager

  gives 2822840 vs. 2625960 bytes (-7%).

- this also gives more control over the symbols that are used by the
  plugins. Yes, it means if you modify a plugin to use a new symbols,
  you have to extend NetworkManager.ver file.
  You can run the script to create the version file:

    $ ./tools/create-exports-NetworkManager.sh update

  but be sure that your current configuration enables all plugins
  and debugging options to actually use all symbols that are in use.

- If you compile with certain plugins enabled, you could theoretically
  re-compile NetworkManager to expose less symbols. Try:

    $ ./tools/create-exports-NetworkManager.sh build

- note that we have `make check` tests to ensure that all used
  symbols of the plugins can be found. So, it should not be possible
  to accidentally forget to expose a symbol.
2016-10-13 21:33:33 +02:00
Thomas Haller 76a057b4ec build: always include subdir wifi/tests regardless of ENABLE_TESTS
Like done for all other device plugins.
2016-10-13 21:33:33 +02:00
Thomas Haller 9f5b80d215 build: don't guard check-local with "if ENABLE_TESTS"
We should enable tests by default, probably we even should drop
the configure flags to enable tests and just always build them.

Anyway, at this point there is no use in guarding check-local
with a check for ENABLE_TESTS. A user who does't want to run
the tests, should just not call `make check`.
2016-10-13 21:33:33 +02:00
Thomas Haller 38d669d5ee build: move check_so_symbols for settings plugins to parent makefile
Like for the device plugins, check_so_symbols is called from the
Makefile of the plugin itself, not from tests/Makefile.am.

Just keep it consistent.
2016-10-13 21:33:33 +02:00
Thomas Haller cc78d89796 build: fix check_local for wifi plugin 2016-10-13 21:33:33 +02:00
Beniamino Galvani 034f07787d pacrunner: accept NULL interface name
Pacrunner uses the interface information to implement a myIpAddress()
function which returns the first IPv4 address of the interface
associated to a proxy. That function doesn't deal with multiple
addresses per interface, and so in case of a VPN which configures
addresses on the parent interface (e.g. IPsec), we currently pass a
NULL interface. That is correct, but triggers the following assertion:

GLib-CRITICAL **: g_variant_new_variant: assertion 'value != NULL' failed
 #0  g_logv () from target:/lib64/libglib-2.0.so.0
 #1  g_log () from target:/lib64/libglib-2.0.so.0
 #2  g_variant_new_string () from target:/lib64/libglib-2.0.so.0
 #3  nm_pacrunner_manager_send (self=0xab3230, iface=iface@entry=0x0, proxy_config=proxy_config@entry=0xc83470, ip4_config=ip4_config@entry=0x7f66b4002710, ip6_config=ip6_config@entry=0x0) at nm-pacrunner-manager.c:334
 #4  _set_vpn_state (self=self@entry=0xd0c120, vpn_state=vpn_state@entry=STATE_ACTIVATED, reason=reason@entry=NM_VPN_CONNECTION_STATE_REASON_NONE, quitting=quitting@entry=0) at vpn-manager/nm-vpn-connection.c:571
 #5  dispatcher_pre_up_done (call_id=<optimized out>, user_data=<optimized out>) at vpn-manager/nm-vpn-connection.c:460
 #6  dispatcher_done_cb (proxy=0x988870, result=<optimized out>, user_data=0xae1740) at nm-dispatcher.c:444

Ignore the interface parameter when it's NULL.
2016-10-13 17:39:56 +02:00
Beniamino Galvani db9589f0ce session-monitor: fix parsing of ConsoleKit database
The section name is "Session", not "CkSession".  Restore the correct
value, changed by commit 0de60b300e ("session: merge
nm-session-monitor-* modules").

Fixes: 0de60b300e

https://bugzilla.gnome.org/show_bug.cgi?id=772640
2016-10-13 09:40:36 +02:00
Beniamino Galvani 0e7f834a6f session-monitor: use logging macros
Use logging macros and also, print the session tracking method during
startup for debugging purposes.
2016-10-13 09:40:14 +02:00
Thomas Haller 45c0518a5e cli: fix synopsis for hotspot arguments for nmcli device wifi --help 2016-10-12 15:15:19 +02:00
Beniamino Galvani 21358edc54 core: introduce and use nm_utils_file_set_contents()
In some places we use g_file_set_contents() after a umask() to limit
the permissions of the created file. Unfortunately if the containing
directory has a default ACL the umask will be ignored and the new file
will have a mode equal to the default ACL (since g_file_set_contents()
opens the file with mode 0666).

Calling a chmod() after the file gets created is insecure (see commit
60b7ed3bdc) and so the only solution seems to be to reimplement
g_file_set_contents() and accept a mode as parameter.

We already had similar functions in the tree, consolidate them into a
new generic utility function.

https://bugzilla.gnome.org/show_bug.cgi?id=769702
2016-10-12 14:54:57 +02:00
Thomas Haller a4110d6d4d build: drop deleted nm-atm-manager.h header file from Makefile.am
Fixes: 4d37f7a1e9
2016-10-12 11:59:04 +02:00
Thomas Haller 814b1aec53 libnm/tests: fix bug in test
Fixes: 6b904a51ee
2016-10-11 14:08:36 +02:00
Thomas Haller 6b904a51ee shared: re-define _G_BOOLEAN_EXPR() to allow nesting g_assert()
g_assert() uses G_LIKELY(), which in turn uses _G_BOOLEAN_EXPR().
As glib's version of _G_BOOLEAN_EXPR() uses a local variable
_g_boolean_var_, we cannot nest a G_LIKELY() inside a G_LIKELY(),
or inside a g_assert(), or a g_assert() inside a g_assert().

Workaround that, by redefining the macro.

I already encountered this problem before, when having a nm_assert()
inside a ({...}) block, inside a g_assert(). Then I just avoided that
combination, but this situation is quite easy to encounter.
2016-10-11 13:14:43 +02:00
Thomas Haller 97d3b07753 ifcfg-rh/build: fix build error due to line-break in Makefile.am
Fixes: dd4ce10c92
2016-10-11 12:12:25 +02:00
Thomas Haller 6ee7f429aa device: merge branch 'th/device-factory-bgo772579'
https://bugzilla.gnome.org/show_bug.cgi?id=772579
2016-10-11 12:00:05 +02:00
Thomas Haller 2c26e3e7f9 device: make registration of internal device-factories more explicit
Internal device types are a static thing. Let's not do a
constructor function to register the device factory.

This gets rid of all attribute((constructor)) functions inside
NetworkManager core. That is desired, because we don't want to
run code before main(). For example, at that point logging is
not yet initialized, but with code that runs before main() it
is hard to ensure that we don't log anything yet.
2016-10-11 11:57:43 +02:00
Thomas Haller 92b7cb2161 device: rename internal device factories
Instead of NMBondFactory, call it NMBondDeviceFactory.
2016-10-11 11:46:30 +02:00
Thomas Haller 18660604aa device: make NMDeviceFactory a class instead of an interface
An interface would make sense to allow the actual device-factory to inherit
from another type.

However, glib interfaces make code much harder to follow and less
efficient. The device factory shall be a very simple type with meta data
about supported device types and the ability to create device instances.
There is no need to make this an interface implementation, instead just
let the factories inherit from NM_TYPE_DEVICE_FACTORY directly.
2016-10-11 11:45:14 +02:00
Thomas Haller 05e6d155ba device: minor cleanup of nm-device-factory.c 2016-10-11 11:43:16 +02:00
Thomas Haller 85fe39e549 settings: merge branch 'th/settings-plugins-cleanup-bgo772561'
https://bugzilla.gnome.org/show_bug.cgi?id=772561
2016-10-11 11:37:53 +02:00
Thomas Haller 051bcd9f1c ifcfg-rh: hide shvarFile struct 2016-10-11 11:37:46 +02:00
Thomas Haller 29f7688da5 ifcfg-rh: avoid copying and unescaping current line when unsetting value 2016-10-11 11:37:46 +02:00
Thomas Haller b00ee52ab3 ifcfg-rh/trivial: move code in shvar.c 2016-10-11 11:37:46 +02:00
Thomas Haller 96846352de ifcfg-rh: minor cleanups in writer 2016-10-11 11:37:46 +02:00
Thomas Haller 0ed009f236 ifcfg-rh: use svUnsetValue()
sed 's/^\(\t\+\)svSetValue (\([a-z]\+\), \("[^"]*"\|[*a-z_0-9A-Z]\+\(\(->\|.\)[a-z0-9A-Z_]\+\)\), NULL, \(FALSE\|TRUE\));$/\1svUnsetValue (\2, \3);/g' src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c -i
2016-10-11 11:37:46 +02:00
Thomas Haller 491b6027ba ifcfg-rh: add svUnsetValue() 2016-10-11 11:37:46 +02:00
Thomas Haller b3b0cb0b17 ifupdown: rename files to "nms-ifupdown-*" 2016-10-11 11:37:46 +02:00
Thomas Haller 1eac4f3e60 ifnet: rename files to "nms-ifnet-*" 2016-10-11 11:37:46 +02:00
Thomas Haller dd4ce10c92 settings/build: build and use libnms-*-core.la library
Don't have the test recompile parts of the settings plugin.
Instead, build one core library that is used both by the test
and the settings plugin.

Advantage: might save some compilation time, but more importantly: the
test use the same object code then NetworkManager itself, avoiding
different behavior due to compilation flags.
2016-10-11 11:37:46 +02:00
Thomas Haller eab8b06d8b ifcfg-rh/tests: merge test-ifcfg-rh-utils into test-ifcfg-rh
We don't need need separate unit tests for basic tests that can
just run in the same test-run. If you really need to run only
a particular set of tests, try
  ./src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh -p /settings/plugins/ifcfg-rh/utils

Results in less compilation (time), and less binaries to test during
`make check`.
2016-10-11 11:37:46 +02:00
Thomas Haller 254f892c9c ifcfg-rh: rename files 2016-10-11 11:37:46 +02:00
Thomas Haller d18e71f35a ibft/build: cleanup Makefile.am to build one core library from ibft plugin
Instead of having the tests re-compile "nms-ibft-reader.c".
2016-10-11 11:37:46 +02:00
Thomas Haller 68f33a846e ibft: rename function names for ibft plugin 2016-10-11 11:37:46 +02:00
Thomas Haller 912526f543 ibft: rename files to "nms-ibft-*" 2016-10-11 11:37:46 +02:00
Thomas Haller 33d05f5295 keyfile/build: set LDFLAGS for buiding keyfile tests 2016-10-11 11:37:46 +02:00
Thomas Haller 9ff1fa4ae1 shared: add NM_DECIMAL_STR_MAX() macro 2016-10-11 11:37:46 +02:00
Thomas Haller c5f4e36fd9 shared: assert against buffer length in nm_sprintf_buf() 2016-10-11 11:37:46 +02:00
Thomas Haller ed93c168cf logging,config: merge branch 'th/logging-alloc-bgo772516'
https://bugzilla.gnome.org/show_bug.cgi?id=772516
2016-10-11 11:29:58 +02:00
Thomas Haller 78d34d7c2e config: fix printing default values for missing sections
Previously, the default values were only printed if the corresponding
section was already present. Fix that.

Also, we call nm_config_data_log() also to dump the configuration
into the logfile. In that case (!stream), exclude the default values.
2016-10-11 11:29:52 +02:00
Thomas Haller 8bca7704c9 config: print default value for logging.audit 2016-10-11 11:29:52 +02:00
Thomas Haller 64e02a0ac7 logging: protect VPN_PLUGIN logging domain
VPN_PLUGIN is special. With
  # nmcli general logging level TRACE domains ALL
the logging verbosity of VPN_PLUGIN domain should not be set higher then
info. The user has to explicitly set it via:
  # nmcli general logging level TRACE domains ALL,VPN_PLUGIN:TRACE

This was not the case for
  # nmcli general logging level TRACE

Fix that.
2016-10-11 11:29:52 +02:00
Thomas Haller 64951f07fb logging: remove LOGD_HW alias for LOGD_PLATFORM
Since commit 1495853e01, LOGD_HW is renamed to
LOGD_PLATFORM. Remove the internal usage of the deprecated name.
2016-10-11 11:29:52 +02:00
Thomas Haller f43b21b71d logging: avoid some heap allocations constructing journal logging data 2016-10-11 11:29:52 +02:00
Thomas Haller 7f478f86ca logging: avoid copy of logging message fo syslog and glib logging backend
As both syslog() and g_log() accept a format string, we should not
create fullmsg ahead. This saves an additional clone of the message.
2016-10-11 11:29:52 +02:00
Lubomir Rintel 1c0e9ae7d6 logging: fix a warning when built without journald
nm-logging.c:213:1: error: ‘syslog_identifier_full’ defined but not used [-Werror=unused-function]
 syslog_identifier_full (const struct Global *gl)
 ^

Fixes: fd12aa1b20
2016-10-11 10:42:22 +02:00
Lubomir Rintel 5d155987dc dispatcher: add the proxy parameters
Fixes: 86d4573baa
2016-10-11 10:36:15 +02:00
Lubomir Rintel bcb685c4cb config: allow fallback to fake permanent address for default wired connections
The default wired connection is already generated allowing the use of a fake
address, but for the state file and the device matching specs only non-fake
addresses are used. Let's allow fake addresses consistently, so that default
wired connections work properly in containers (where the veth address is
considered fake) as well.

Also, it would really be a better idea to use ifnames everywhere instead, but
that would change the format of the state file.
2016-10-11 10:36:15 +02:00
Lubomir Rintel afe123c3a1 ethernet: don't assert there's the udev device for an ethernet device
We could be running in a container.
2016-10-11 10:36:15 +02:00
Lubomir Rintel 15a26d6192 platform/tests: skip root tests when we can't mount /sys/devices 2016-10-11 10:36:15 +02:00