Changeset a8378d0


Ignore:
Timestamp:
Jul 17, 2011 4:38:02 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
127aebe
Parents:
7fbb3b1
Message:
  • I2PTunnel: Rename privkey file when deleting tunnel to prevent inadvertent reuse
File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java

    r7fbb3b1 ra8378d0  
    99 */
    1010
     11import java.io.File;
    1112import java.io.IOException;
    1213import java.util.ArrayList;
     
    3132import net.i2p.i2ptunnel.TunnelControllerGroup;
    3233import net.i2p.util.ConcurrentHashSet;
     34import net.i2p.util.FileUtil;
    3335import net.i2p.util.Log;
    3436
     
    4143 */
    4244public class IndexBean {
    43     protected I2PAppContext _context;
    44     protected Log _log;
    45     protected TunnelControllerGroup _group;
     45    protected final I2PAppContext _context;
     46    protected final Log _log;
     47    protected final TunnelControllerGroup _group;
    4648    private String _action;
    4749    private int _tunnel;
     
    7577    private boolean _privKeyGenerate;
    7678    private boolean _removeConfirmed;
    77     private Set<String> _booleanOptions;
    78     private Map<String, String> _otherOptions;
     79    private final Set<String> _booleanOptions;
     80    private final Map<String, String> _otherOptions;
    7981    private int _hashCashValue;
    8082    private int _certType;
     
    199201    private String stopAll() {
    200202        if (_group == null) return "";
    201         List msgs = _group.stopAllControllers();
     203        List<String> msgs = _group.stopAllControllers();
    202204        return getMessages(msgs);
    203205    }
    204206    private String startAll() {
    205207        if (_group == null) return "";
    206         List msgs = _group.startAllControllers();
     208        List<String> msgs = _group.startAllControllers();
    207209        return getMessages(msgs);
    208210    }
    209211    private String restartAll() {
    210212        if (_group == null) return "";
    211         List msgs = _group.restartAllControllers();
     213        List<String> msgs = _group.restartAllControllers();
    212214        return getMessages(msgs);
    213215    }
     
    317319    }
    318320
     321    /**
     322     *  Stop the tunnel, delete from config,
     323     *  rename the private key file if in the default directory
     324     */
    319325    private String deleteTunnel() {
    320326        if (!_removeConfirmed)
     
    325331            return "Invalid tunnel number";
    326332       
    327         List msgs = _group.removeController(cur);
     333        List<String> msgs = _group.removeController(cur);
    328334        msgs.addAll(doSave());
     335
     336        // Rename private key file if it was a default name in
     337        // the default directory, so it doesn't get reused when a new
     338        // tunnel is created.
     339        // Use configured file name if available, not the one from the form.
     340        String pk = cur.getPrivKeyFile();
     341        if (pk == null)
     342            pk = _privKeyFile;
     343        if (pk != null && pk.startsWith("i2ptunnel") && pk.endsWith("-privKeys.dat")) {
     344            File pkf = new File(_context.getConfigDir(), pk);
     345            if (pkf.exists()) {
     346                String name = cur.getName();
     347                if (name == null) {
     348                    name = cur.getDescription();
     349                    if (name == null) {
     350                        name = cur.getType();
     351                        if (name == null)
     352                            name = Long.toString(_context.clock().now());
     353                    }
     354                }
     355                name = "i2ptunnel-deleted-" + name.replace(' ', '_') + "-privkeys.dat";
     356                File to = new File(_context.getConfigDir(), name);
     357                if (to.exists())
     358                    to = new File(_context.getConfigDir(), name + '-' + _context.clock().now());
     359                boolean success = FileUtil.rename(pkf, to);
     360                if (success)
     361                    msgs.add("Private key file " + pkf.getAbsolutePath() +
     362                             " renamed to " + to.getAbsolutePath());
     363            }
     364        }
    329365        return getMessages(msgs);
    330366    }
Note: See TracChangeset for help on using the changeset viewer.