diff options
author | Jiří Klimeš <blueowl@centrum.cz> | 2016-11-10 18:13:36 +0100 |
---|---|---|
committer | Jiří Klimeš <blueowl@centrum.cz> | 2016-11-10 20:56:44 +0100 |
commit | 79643ce28a197585299abc5c2cd1407758fd0067 (patch) | |
tree | 27c699a0320b081678735fa8c0081d7b533243d8 /contrib | |
parent | c4ed2483b2ce512c92949dc9b87a90e3bce447ac (diff) | |
download | NetworkManager-79643ce28a197585299abc5c2cd1407758fd0067.tar.gz |
nm-import-openvpn: parse quoted string as a single word
It is necessary, for example, for this to work:
verify-x509-name "C=US, L=Cambridge, CN=GNOME, emailAddress=networkmanager-list@gnome.org" subject
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/scripts/nm-import-openvpn | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/contrib/scripts/nm-import-openvpn b/contrib/scripts/nm-import-openvpn index c8af9d996e..7b8d2aa7e0 100755 --- a/contrib/scripts/nm-import-openvpn +++ b/contrib/scripts/nm-import-openvpn @@ -332,10 +332,27 @@ vpn2nm = { -- Read and convert the config into the global g_vpn_data -- ----------------------------------------------------------- function read_and_convert(in_file) - local function line_split(str) - t={}; i = 1 - for str in str:gmatch("%S+") do - t[i] = str + local function line_split(line) + local t={} + local i, idx = 1, 1 + local delim = "\"" + while true do + local a,b = line:find("%S+", idx) + if not a then break end + + local str = line:sub(a,b) + local quote = nil + if str:sub(1,1) == delim and str:sub(#str,#str) ~= delim then + quote = (line.." "):find(delim.."%s", b + 1) + end + + if quote then + t[i] = line:sub(a, quote) + idx = quote + 1 + else + t[i] = str + idx = b + 1 + end i = i + 1 end return t |