Config: make parsing stricter

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2017-11-26 23:45:41 +01:00 committed by Samuel Holland
parent 14a7ada6e1
commit e421b997cd
4 changed files with 19 additions and 6 deletions

View File

@ -369,6 +369,11 @@ public class VpnService extends Service
config.setName(configName);
configs.add(config);
} catch (IllegalArgumentException | IOException e) {
try {
file.delete();
} catch (Exception e2) {
Log.w(TAG, "Could not remove " + fileName, e2);
}
Log.w(TAG, "Failed to load config from " + fileName, e);
}
}

View File

@ -17,7 +17,7 @@ enum Attribute {
LISTEN_PORT("ListenPort"),
MTU("MTU"),
PERSISTENT_KEEPALIVE("PersistentKeepalive"),
PRE_SHARED_KEY("PresharedKey"),
PRESHARED_KEY("PresharedKey"),
PRIVATE_KEY("PrivateKey"),
PUBLIC_KEY("PublicKey");

View File

@ -139,19 +139,27 @@ public class Config extends BaseObservable
new InputStreamReader(stream, StandardCharsets.UTF_8))) {
Peer currentPeer = null;
String line;
boolean inInterfaceSection = false;
while ((line = reader.readLine()) != null) {
if (line.isEmpty())
if (line.isEmpty() || line.startsWith("#"))
continue;
if ("[Interface]".equals(line)) {
currentPeer = null;
inInterfaceSection = true;
} else if ("[Peer]".equals(line)) {
currentPeer = addPeer();
} else if (currentPeer == null) {
inInterfaceSection = false;
} else if (inInterfaceSection) {
iface.parse(line);
} else {
} else if (currentPeer != null) {
currentPeer.parse(line);
} else {
throw new IllegalArgumentException("Invalid configuration line: " + line);
}
}
if (!inInterfaceSection && currentPeer == null) {
throw new IllegalArgumentException("Did not find any config information");
}
}
}

View File

@ -104,7 +104,7 @@ public class Peer extends BaseObservable implements Copyable<Peer>, Observable,
setEndpoint(key.parseFrom(line));
else if (key == Attribute.PERSISTENT_KEEPALIVE)
setPersistentKeepalive(key.parseFrom(line));
else if (key == Attribute.PRE_SHARED_KEY)
else if (key == Attribute.PRESHARED_KEY)
setPreSharedKey(key.parseFrom(line));
else if (key == Attribute.PUBLIC_KEY)
setPublicKey(key.parseFrom(line));
@ -161,7 +161,7 @@ public class Peer extends BaseObservable implements Copyable<Peer>, Observable,
if (persistentKeepalive != null)
sb.append(Attribute.PERSISTENT_KEEPALIVE.composeWith(persistentKeepalive));
if (preSharedKey != null)
sb.append(Attribute.PRE_SHARED_KEY.composeWith(preSharedKey));
sb.append(Attribute.PRESHARED_KEY.composeWith(preSharedKey));
if (publicKey != null)
sb.append(Attribute.PUBLIC_KEY.composeWith(publicKey));
return sb.toString();