Changeset e249b22


Ignore:
Timestamp:
Sep 14, 2011 12:58:46 PM (8 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
c54dd79
Parents:
667b6b69
Message:
  • Console: Verify valid host/IP before saving on net config form
File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java

    r667b6b69 re249b22  
    11package net.i2p.router.web;
     2
     3import java.net.InetAddress;
     4import java.net.UnknownHostException;
    25
    36import net.i2p.router.Router;
    47import net.i2p.router.transport.FIFOBandwidthRefiller;
     8import net.i2p.router.transport.TransportImpl;
    59import net.i2p.router.transport.TransportManager;
    610import net.i2p.router.transport.udp.UDPTransport;
     
    145149                }
    146150                _context.router().setConfigSetting(UDPTransport.PROP_SOURCES, _udpAutoIP);
    147                 // Todo: Catch local IPs right here rather than complaining later
    148                 if (uhost.length() > 0)
    149                     _context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_HOST, uhost);
    150                 else
     151                boolean valid = true;
     152                if (uhost.length() > 0) {
     153                    valid = verifyAddress(uhost);
     154                    if (valid) {
     155                        _context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_HOST, uhost);
     156                    }
     157                } else {
    151158                    _context.router().removeConfigSetting(UDPTransport.PROP_EXTERNAL_HOST);
    152                 if ((!oldUdp.equals(_udpAutoIP)) || (!oldUHost.equals(uhost))) {
     159                }
     160                if (valid && ((!oldUdp.equals(_udpAutoIP)) || (!oldUHost.equals(uhost)))) {
    153161                   addFormNotice(_("Updating IP address"));
    154162                   restartRequired = true;
     
    168176
    169177            if ((!oldAutoHost.equals(_ntcpAutoIP)) || ! oldNHost.equalsIgnoreCase(_ntcpHostname)) {
     178                boolean valid = true;
    170179                if ("disabled".equals(_ntcpAutoIP)) {
    171180                    addFormNotice(_("Disabling TCP completely"));
    172181                } else if ("false".equals(_ntcpAutoIP) && _ntcpHostname.length() > 0) {
    173                     // Todo: Catch local IPs right here rather than complaining later
    174                     _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME, _ntcpHostname);
    175                     addFormNotice(_("Updating inbound TCP address to") + " " + _ntcpHostname);
     182                    valid = verifyAddress(_ntcpHostname);
     183                    if (valid) {
     184                        _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME, _ntcpHostname);
     185                        addFormNotice(_("Updating inbound TCP address to") + " " + _ntcpHostname);
     186                    }
    176187                } else {
    177188                    _context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME);
     
    181192                        addFormNotice(_("Updating inbound TCP address to auto")); // true or always
    182193                }
    183                 _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, _ntcpAutoIP);
    184                 _context.router().setConfigSetting(TransportManager.PROP_ENABLE_NTCP, "" + !"disabled".equals(_ntcpAutoIP));
    185                 restartRequired = true;
     194                if (valid) {
     195                    _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, _ntcpAutoIP);
     196                    _context.router().setConfigSetting(TransportManager.PROP_ENABLE_NTCP, "" + !"disabled".equals(_ntcpAutoIP));
     197                    restartRequired = true;
     198                }
    186199            }
    187200            if (oldAutoPort != _ntcpAutoPort || ! oldNPort.equals(_ntcpPort)) {
     
    296309    }
    297310
     311    /**
     312     *  Do basic verification of address here to prevent problems later
     313     *  @return valid
     314     *  @since 0.8.9
     315     */
     316    private boolean verifyAddress(String addr) {
     317        if (addr == null || addr.length() <= 0)
     318            return false;
     319        try {
     320            InetAddress ia = InetAddress.getByName(addr);
     321            byte[] iab = ia.getAddress();
     322            boolean rv = TransportImpl.isPubliclyRoutable(iab);
     323            if (!rv)
     324                addFormError(_("The hostname or IP {0} is not publicly routable", addr));
     325            return rv;
     326        } catch (UnknownHostException uhe) {
     327            addFormError(_("The hostname or IP {0} is invalid", addr) + ": " + uhe);
     328            return false;
     329        }
     330    }
     331
    298332    private void hiddenSwitch() {
    299333        // Full restart required to generate new keys
Note: See TracChangeset for help on using the changeset viewer.