Mercurial Hosting > luan
changeset 1690:973d3039c421
backup server checks client domain
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 12 Jun 2022 20:13:24 -0600 |
parents | af22d6c120e4 |
children | 8d4152398825 |
files | src/goodjava/lucene/backup/BackupIndexWriter.java src/goodjava/lucene/backup/BackupServer.java src/goodjava/rpc/RpcCon.java src/luan/modules/lucene/LuceneIndex.java |
diffstat | 4 files changed, 36 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/goodjava/lucene/backup/BackupIndexWriter.java Sun Jun 12 18:48:01 2022 -0600 +++ b/src/goodjava/lucene/backup/BackupIndexWriter.java Sun Jun 12 20:13:24 2022 -0600 @@ -32,20 +32,22 @@ public final class BackupIndexWriter extends LoggingIndexWriter { private static final Logger logger = LoggerFactory.getLogger(BackupIndexWriter.class); public static String[] backupDomains; + private final String domain; private final String name; private final File dir; private boolean isSyncPending = false; private final ExecutorService exec = Executors.newSingleThreadExecutor(); - public BackupIndexWriter(LuceneIndexWriter indexWriter,File logDir,long logTime,String name) + public BackupIndexWriter(LuceneIndexWriter indexWriter,File logDir,long logTime,String domain,String name) throws IOException { super(indexWriter,logDir,logTime); if( backupDomains == null ) throw new RuntimeException("must set backupDomains"); + this.domain = domain; this.name = name; File f = new File(System.getProperty("java.io.tmpdir")); - dir = new File(f,"goodjava.lucene/"+name); + dir = new File(f,"goodjava.lucene/"+domain+"~"+name); IoUtils.mkdirs(dir); } @@ -140,7 +142,7 @@ for( String backupDomain : backupDomains ) { RpcClient rpc = BackupServer.rpcClient(backupDomain); try { - RpcCall call = new RpcCall("login",name); + RpcCall call = new RpcCall("login",domain,name); rpc.write(call); rpc.read(); call = new RpcCall("check",logInfo); @@ -186,7 +188,7 @@ } } - public static BackupIndexWriter newWithRestore(LuceneIndexWriter indexWriter,File logDir,long logTime,String name) + public static BackupIndexWriter newWithRestore(LuceneIndexWriter indexWriter,File logDir,long logTime,String domain,String name) throws IOException { if( !logDir.exists() ) { @@ -194,7 +196,7 @@ try { RpcCall call; RpcResult result; - call = new RpcCall("exists",name); + call = new RpcCall("exists",domain,name); rpc.write(call); result = rpc.read(); boolean exists = (Boolean)result.returnValues[0]; @@ -202,7 +204,7 @@ logger.error("restoring "+logDir+" from backup"); File zip = File.createTempFile("luan_",".zip"); IoUtils.delete(zip); - call = new RpcCall("login",name); + call = new RpcCall("login",domain,name); rpc.write(call); rpc.read(); call = new RpcCall("zip"); @@ -222,7 +224,7 @@ } rpc.close(); } - return new BackupIndexWriter(indexWriter,logDir,logTime,name); + return new BackupIndexWriter(indexWriter,logDir,logTime,domain,name); } }
--- a/src/goodjava/lucene/backup/BackupServer.java Sun Jun 12 18:48:01 2022 -0600 +++ b/src/goodjava/lucene/backup/BackupServer.java Sun Jun 12 20:13:24 2022 -0600 @@ -3,8 +3,10 @@ import java.io.File; import java.io.IOException; import java.util.Map; +import java.net.InetAddress; import java.net.Socket; import java.net.ServerSocket; +import java.net.UnknownHostException; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import javax.net.ssl.SSLSocket; @@ -71,6 +73,25 @@ logger.info("started server on port "+port); } + private static String getName(RpcServer rpc,Object[] args) { + String domain = (String)args[0]; + InetAddress addr; + try { + addr = InetAddress.getByName(domain); + } catch(UnknownHostException e) { + rpc.write( new RpcException("domain lookup failed") ); + rpc.close(); + return null; + } + if( !rpc.socket.getInetAddress().equals(addr) ) { + rpc.write( new RpcException("domain doesn't match client") ); + rpc.close(); + return null; + } + String name = (String)args[1]; + return name==null ? domain : domain + "~" + name; + } + private void handle(Socket socket) { RpcServer rpc = new RpcServer(socket); Backup backup = null; @@ -79,10 +100,12 @@ if( call == null ) break; if( call.cmd.equals("exists") ) { - String name = (String)call.args[0]; + String name = getName(rpc,call.args); + if( name==null ) return; rpc.write( new RpcResult(new Object[]{new File(backupDir,name).exists()}) ); } else if( call.cmd.equals("login") ) { - String name = (String)call.args[0]; + String name = getName(rpc,call.args); + if( name==null ) return; synchronized(backups) { backup = backups.get(name); if( backup == null ) {
--- a/src/goodjava/rpc/RpcCon.java Sun Jun 12 18:48:01 2022 -0600 +++ b/src/goodjava/rpc/RpcCon.java Sun Jun 12 20:13:24 2022 -0600 @@ -16,7 +16,7 @@ public class RpcCon { - private final Socket socket; + public final Socket socket; private final DataInputStream in; private final DataOutputStream out; InputStream inBinary = null;
--- a/src/luan/modules/lucene/LuceneIndex.java Sun Jun 12 18:48:01 2022 -0600 +++ b/src/luan/modules/lucene/LuceneIndex.java Sun Jun 12 20:13:24 2022 -0600 @@ -209,10 +209,7 @@ if( BackupIndexWriter.backupDomains == null ) { writer = new LoggingIndexWriter((LuceneIndexWriter)writer,logDir,logTime); } else { - String name = this.domain; - if( this.name != null ) - name += "~" + this.name; - writer = BackupIndexWriter.newWithRestore((LuceneIndexWriter)writer,logDir,logTime,name); + writer = BackupIndexWriter.newWithRestore((LuceneIndexWriter)writer,logDir,logTime,domain,name); } } reader = DirectoryReader.open(fsDir);