Commit graph

1273 commits

Author SHA1 Message Date
Thomas Haller
6689d0bf71 config: optionally let nm_config_get_plugins() return compile time default
Instead of having the caller do the fallback to the compile time default
plugins, let it be handled by nm_config_get_plugins().

The knowledge of fallback to a compile time default (and how to do that
properly) should be inside NMConfig/NMConfigData alone.

Also, as this function is only called once, let NMConfig not cache
the string list but create it once as needed.
2016-11-25 15:26:30 +01:00
Francesco Giudici
5da352c5e8 ifupdown/trivial: whitespace fixup 2016-11-24 18:31:02 +01:00
Lubomir Rintel
972e0d2803 all: rename the introspection data to use the interface paths in names
This makes it easier to install the files with proper names.
Also, it makes the makefile rules slightly simpler.

Lastly, the documentation is now generated into docs/api, which makes it
possible to get rid of the awkward relative file names in docbook.
2016-11-23 15:43:42 +01:00
Francesco Giudici
3bcca564c7 ifcfg-rh/tests: add tests for link negotiation options
Thanks to Thomas Haller for making test code much more compact taking
advantage of the nmtst_create_minimal_connection function.
2016-11-22 15:24:47 +01:00
Francesco Giudici
12b9d30ae6 ifcfg-rh: add support to 802-3.[auto-negotiate,speed,duplex] properties
NOTE: changed the default value for auto-negotiate from TRUE to FALSE.

Normalization enforces that no values for speed and duplex are there
when autonegotiation is on. This is required as autoneg on with specific
speed and duplex set means to ethtool to use autonegotiation but
advertise that specific speed and duplex only.

autoneg off, speed 0 and duplex NULL means to ignore link negotiation.
2016-11-22 15:24:47 +01:00
Francesco Giudici
de88a46775 ifcfg-rh: rework ETHTOOL_OPT parsing function
This would allow to make easier adding support to more ETHTOOL options.
2016-11-22 15:24:47 +01:00
Thomas Haller
44ecb41593 build: don't add subdirectories to include search path but require qualified include
Keep the include paths clean and separate. We use directories to group source
files together. That makes sense (I guess), but then we should use this
grouping also when including files. Thus require to #include files with their
path relative to "src/".

Also, we build various artifacts from the "src/" tree. Instead of having
individual CFLAGS for each artifact in Makefile.am, the CFLAGS should be
unified. Previously, the CFLAGS for each artifact differ and are inconsistent
in which paths they add to the search path. Fix the inconsistency by just
don't add the paths at all.
2016-11-21 14:26:37 +01:00
Thomas Haller
88e18c9de8 ifcfg-rh: improve handling of empty strings in svUnescape()
- a key
    FOO=''
  would still allocate a temporary GString and return the allocated
  empty string. Don't do that. This saves the g_free() in
  svGetValueString() for this common case. We should return
  an allocated string only if it is necessary. It is not necessary
  for the "" case, and it is inconsistent.

- when returning an empty string, always return the static string "".
  No need to seek to the end of value, and return a pointer to that
  string.
  This happens for example in the case
    FOO= # empty value, but trailing stuff
    FOO=""
    FOO=$'\Uxhallo'
2016-11-11 12:55:01 +01:00
Beniamino Galvani
9430cf3e6b ifcfg-rh: accept 802.1x connection with empty EAP-TLS identity
An identity is not needed for EAP-TLS.

https://bugzilla.redhat.com/show_bug.cgi?id=1391477
2016-11-11 11:03:57 +01:00
Lubomir Rintel
3d7931bbf6 ifcfg-rh: fix a memory leak 2016-11-09 20:34:13 +01:00
Lubomir Rintel
611870347a ifcfg: add ability to save/restore ipv6.method=shared
We use IPV6_AUTOCONF=shared for this.
2016-11-09 17:23:32 +01:00
Lubomir Rintel
2e8f40f2c9 ifcfg-rh: avoid parsing the IPV6_PRIVACY string twice
This saves a couple of CPU cycles that would be better used for
something more useful, such as looking for transmissions from aliens.
2016-11-09 15:06:20 +01:00
Lubomir Rintel
577ba42e18 ifcfg-rh: get rid of an extra unused variable
This saves a couple of bits we could instead use to save memories of the
better days.
2016-11-09 15:06:20 +01:00
Lubomir Rintel
888d8f4b10 ifcfg-rh: add parentheses
The code is now perfect.
2016-11-09 15:06:20 +01:00
Lubomir Rintel
90beb7689a ifcfg-rh: drop an unused variable
Fixes: ecda08e1d1
2016-11-09 15:06:00 +01:00
Thomas Haller
92712d3b31 ifcfg-rh: optimize checking character types during svEscape()
I don't think that the compiler is able to optimize
  strchr($SET_AS_STR, $CHAR)
Use NM_IN_SET() which expands to something that should be
easy for the compiler to optimize.
2016-11-09 12:07:35 +01:00
Thomas Haller
c5ac66d392 ifcfg-rh: restore previous behavior for svUnescape() stripping backslash from double-quoting
Now we could parse simple shell variable assignment properly, but old versions
of svEscape() wrote invalid double-quoted strings.

Add a hack to restore the broken behavior for that case only.
2016-11-09 12:07:35 +01:00
Thomas Haller
ecda08e1d1 ifcfg-rh/tests: some refactoring of tests
When introducing the macro _svGetValue_check() we replace
the call to svGetValueString() with svGetValue().

That makes a difference only when asserting against a %NULL
value. It's fair to assume that in such case we actually want
to assert that the value is unset, and not possibly empty.
2016-11-09 12:07:35 +01:00
Thomas Haller
01f0e35b69 ifcfg-rh: remove unused keyfile argument from writer_update_connection()
writer_update_connection() retrieves the keyfile name based on the ifcfg-name.
No need to pass it in separately, the argument was unused.
2016-11-09 12:07:35 +01:00
Thomas Haller
1b03b59ac0 ifcfg-rh: set errno in svGetValueInt64() in case key does not exist 2016-11-09 12:07:35 +01:00
Thomas Haller
264e519779 ifcfg-rh/tests: add test for handling multiple occurances of a variable
This tests commit "ifcfg-rh: handle multiple definitions of the same key".
2016-11-09 12:07:35 +01:00
Thomas Haller
c20b795547 ifcfg-rh: let reader create lineList in O(n) using g_list_prepend() and g_list_reverse() 2016-11-09 12:07:35 +01:00
Thomas Haller
eb307bbbb6 ifcfg-rh: let reader preserve the last line even without newline at end of file 2016-11-09 12:07:35 +01:00
Thomas Haller
82ccec22ca ifcfg-rh: modify svGetString() signature to avoid copying of temporary value
Modify the signature of svGetString() to allow getting the internal
string without cloning the string after unescaping.
2016-11-09 12:07:35 +01:00
Thomas Haller
08a22f2eea ifcfg-rh: avoid copying temporary value after unescaping
svUnescape() can return a pointer to the input argument
(if the input argument requires no unescaping or truncation).

That is actually the predominant case because most often we
store values that don't require escaping.

Optimize for that case.
2016-11-09 12:07:35 +01:00
Thomas Haller
9843da7ce5 ifcfg-rh: comment out invalid lines during svWriteFile
This is especially important because we don't support
line continuation. Thus, with

    FOO='val
      bar=3'
    wrong line
      F2=b
      F3='b
    XXX=adf'
      XXX2=val2
    '
we now write

    FOO=
    #NM: FOO='val
    bar=
    #NM:   bar=3'
    #NM: wrong line
      F2=b
    F3=
    #NM:   F3='b
    XXX=
    #NM: XXX=adf'
      XXX2=val2
    #NM: '

Basically, the writer will comment out any line that is

  - not all-whitespace
  - not a '#' comment (possibly proceeded by whitespace)
  - not a valid variable assignment

This avoids that writer writes lines that are not understood by
ifcfg-rh plugin, but interferes with initscripts. E.g.

  NAME=old-name'
  rm -rf /
  '

becomes

  NAME=new-name
  #NM: rm -rf /
  #NM: '
2016-11-09 12:07:35 +01:00
Thomas Haller
d8c465a3cd ifcfg-rh: fix svEscape() to properly handle double quoting
'\'', '~': must not be escaped with backslash.

Also, within double quotes the backslash escape character is only
removed before special caracters like '$' or '`'. Not in general.
Yes, it means that older versions of svEscape produced invalid escape
sequences that we now treat differently. But that is not realy
avoidable, it was a bug that needs to be fixed.
2016-11-09 12:07:34 +01:00
Thomas Haller
337fc582b2 ifcfg-rh: use macro _char_in_strset() for svEscape() 2016-11-09 12:07:34 +01:00
Thomas Haller
c55b7e866e ifcfg-rh: support storing newline '\n' and other ANSI control caracters
This is especially important for the team config JSON, which is expected
to contain newlines.

ANSI C quotation is bash specific, but initscripts already use #!/bin/bash.

Unfortunately, g_strescape() doesn't escape '\'' and can thus not be
used.

Also add a test that svEscape() and svUnescape() do a round-trip.

Not only consider \r and \n as candidates for ANSI C quotation, but all
ANSI control characters.
2016-11-09 12:07:34 +01:00
Thomas Haller
7b548fb9a8 ifcfg-rh: rework parsing of shell (svUnescape())
Better support parsing of shell. Now we support:

- combining values, like
    FOO=a"b"
    FOO=$'\n'b

- bash style ANSI C quotation ($''). This will allow us to properly
  handle newlines in string values.

- comments at the end of a line (after whitespace)
    FOO=val #comment
  Note that this is different from a # without space
    FOO=val#with#hashes

- trailing spaces are ignored like

    FOO=a[space]
    FOR=[space]

- history expansion via ! is not done (this is not new).

We don't support:

- line continuation like

    FOO='
    '
    FOO=a\
    b

- any form of shell expansion via $, ``.

    FOO="$a"

  Such values are recognized to name a variable FOO, but with an
  empty value, like

    FOO=%{nil}

  which is not the same as a valid empty value

    FOO=

- any other form of (unquoted) shell meta characters, like ; < > ( ).
  This especially means, that the command invocations are invalid, like

    ls -1
    LANG=C ls -1
    FOO1=a; FOO2=b

  This also means, that spaces immidiately after the assignment are invalid:

    FOO= val

Also, svUnescape() can now return %NULL to signal an invalid line like

    FOO='
2016-11-09 12:07:34 +01:00
Thomas Haller
f3c7d009b5 ifcfg-rh: handle multiple definitions of the same key
When

  - reading a key that is defined multiple times, accept
    the last occurrence.
  - when deleting such a key, delete all occurrences.
  - when overwriting such a key, overwrite the last occurrence
    and delete any previous definitions.
2016-11-09 12:07:34 +01:00
Thomas Haller
9719988674 ifcfg-rh: get rid of the internal "current" pointer
It was not used and it is bad style. Especially, because
in the next commit we want to remove multiple definitions
of a key. Thus, we usually always iterate until the end.
2016-11-09 12:07:34 +01:00
Thomas Haller
1ae62854f5 ifcfg-rh: refactor svUnescape()
Move the g_strchomp() inside svUnescape(). It is part of the
escaping process (although of course wrong to do, because
it accepts "FOO=  bar". That will be fixed later).

Thereby, change the signature to allow in the future
to do unescape without additional copy.
2016-11-09 12:07:34 +01:00
Thomas Haller
85beac6dd4 ifcfg-rh: allow leading spaces before variable names 2016-11-09 12:07:34 +01:00
Thomas Haller
afc394b969 ifcfg-rh: assert that keys are valid shell names 2016-11-09 12:07:34 +01:00
Thomas Haller
806ffbbe14 ifcfg-rh: cleanup svEscape()
Use size_t type for string length and have character sets
as #define.
2016-11-09 12:07:34 +01:00
Thomas Haller
917ab8334b ifcfg-rh/trivial: rename svGetValue() and related
svGetValue() had the meaning of returning a string, except the
empty word "" was coerced to NULL.

svGetValueFull() had the meaing of returing the value as string,
including the empty word.

Rename those functions to better express what they do.

Same for svSetValue*().
2016-11-09 12:07:34 +01:00
Thomas Haller
2a3b238d49 ifcfg-rh: add and use svSetValueBoolean() 2016-11-09 12:07:34 +01:00
Thomas Haller
b473256cfd ifcfg-rh: remove unused argument "verbatim" from shvar.h API
It is wrong to allow access to unquoted ifcfg-rh values.
All users of this ~feature~ misused it to encode meaning
in the type of quotation, which is wrong.

Also, shvar.h is not able to fully parse shell. We can improve
that, but it should be handled internally, in one place. Not by
callers applying some quirks after getting a "verbatim" value.
2016-11-09 12:07:34 +01:00
Thomas Haller
1fb3d5d794 ifcfg-rh: don't call svSetValue with verbatim=TRUE
This is at best a performance optimization. In the next step
get rid of the verbatim argument, so ensure we pass FALSE everwhere.
2016-11-09 12:07:34 +01:00
Thomas Haller
58b69e2f90 ifcfg-rh/trivial: remove unused functions utils_single_quote_string() and unquote 2016-11-09 12:07:34 +01:00
Thomas Haller
39a79b0ee7 ifcfg-rh: handle quotes of WPA_PSK key inside shvar.h
It is wrong to move the handling of quotes outside of shvar.h.
The ifcfg-rh core library (shvar.h) should handle quotation
transparently.

It is also wrong to encode meaning of the WPA_PSK depending on whether
the value is quoted or not. A psk that is 64 chars *must* be in hex
representation, and anything else is taken literal.

Also, the special handling of bash-syntax with $' was wrong. Including
the unit test "keys-test-wifi-wpa-psk-2" which contained invalid shell.
Support for $' must be done inside of shvar.h, for all properties alike
not just for WPA_PSK.
2016-11-09 12:07:34 +01:00
Thomas Haller
5a43b733b9 ifcfg-rh: change ESSID handling
Let shvar.h do the escaping/unescaping of the ESSID.
We should not treat a value differently whether it is quoted or not.

Also, cutting away double quotes and calling svUnescape() is just wrong.

Now, we write a value in hex if it contains non-printable characters
or if the reader would treat it like a hex value. Reader treats ESSID
now as hex if it starts with "0x" followed by pairs of hex digits.
2016-11-09 12:07:34 +01:00
Thomas Haller
912a866353 ifcfg-rh: read team key non-verbatim from ifcfg-rh
svUnescape() has no problem with extremely long strings.
It does not allocate any memory and has O(n) complexity.
No problem.

If somebody has a problem with extremely large files it's
shvarFile itself which caches the entire file in memory.

Also, libnm-core allows team configs to be 1 MB in size.
So, allow that here too.
2016-11-09 12:07:34 +01:00
Thomas Haller
22ef66e6bb ifcfg-rh: unescape ifcfg value for CIPHER_GROUP/CIPHER_PAIRWISE
It's not clear why we would read the CIPHER_GROUP/CIPHER_PAIRWISE
verbatim=TRUE (without shell unescaping). Especially since ifcfg-rh
writer does
  svSetValue (ifcfg, "CIPHER_PAIRWISE", str->str, FALSE);
2016-11-09 12:07:34 +01:00
Thomas Haller
8f9432327c ifcfg-rh/trivial: coding style/white-space 2016-11-09 12:07:33 +01:00
Thomas Haller
f950f7922e ifcfg-rh/tests: use cleanup macros in ifcfg-rh test 2016-11-09 12:07:33 +01:00
Thomas Haller
416164aa29 device: treat fake permanent MAC address mostly like a real one
Now that we persist the fake permanent address across
restart of NetworkManager, we want to consider fake
addresses as good enough in most cases.
2016-10-28 16:44:56 +02:00
Thomas Haller
002f17c25d src: drop generated nm-src-enum-types.h
We only needed proper glib enum types for having properties
and signal arguments. These got all converted to plain int,
so no longer generate such an enum type.
2016-10-22 17:16:17 +02:00
Thomas Haller
3bbc55fd9c core: don't use generated glib enum for platform types 2016-10-22 17:16:17 +02:00