Skip to content
Snippets Groups Projects
Commit 6449bbd2 authored by Quazgar's avatar Quazgar
Browse files

Merge branch 'f-fix-99' into 'dev'

FIX: Forcing SRID initiation also for ChecksumUpdater

See merge request caosdb/caosdb-server!50
parents e25befdc 72b76510
Branches
Tags
No related merge requests found
...@@ -56,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -56,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- #11 - pam_authentication leaks the password to unprivileged processes on the - #11 - pam_authentication leaks the password to unprivileged processes on the
same machine. same machine.
- #39 - quotes around datetimes in queries - #39 - quotes around datetimes in queries
- #99 - Checksum updating resulted in infinite loop on server.
### Security (in case of vulnerabilities) ### Security (in case of vulnerabilities)
......
...@@ -119,6 +119,7 @@ import caosdb.server.database.backend.interfaces.RetrieveUserImpl; ...@@ -119,6 +119,7 @@ import caosdb.server.database.backend.interfaces.RetrieveUserImpl;
import caosdb.server.database.backend.interfaces.RetrieveVersionHistoryImpl; import caosdb.server.database.backend.interfaces.RetrieveVersionHistoryImpl;
import caosdb.server.database.backend.interfaces.RuleLoaderImpl; import caosdb.server.database.backend.interfaces.RuleLoaderImpl;
import caosdb.server.database.backend.interfaces.SetFileCheckedTimestampImpl; import caosdb.server.database.backend.interfaces.SetFileCheckedTimestampImpl;
import caosdb.server.database.backend.interfaces.SetFileChecksumImpl;
import caosdb.server.database.backend.interfaces.SetPasswordImpl; import caosdb.server.database.backend.interfaces.SetPasswordImpl;
import caosdb.server.database.backend.interfaces.SetPermissionRulesImpl; import caosdb.server.database.backend.interfaces.SetPermissionRulesImpl;
import caosdb.server.database.backend.interfaces.SetQueryTemplateDefinitionImpl; import caosdb.server.database.backend.interfaces.SetQueryTemplateDefinitionImpl;
...@@ -209,6 +210,7 @@ public abstract class BackendTransaction implements Undoable { ...@@ -209,6 +210,7 @@ public abstract class BackendTransaction implements Undoable {
RetrieveQueryTemplateDefinitionImpl.class, MySQLRetrieveQueryTemplateDefinition.class); RetrieveQueryTemplateDefinitionImpl.class, MySQLRetrieveQueryTemplateDefinition.class);
setImpl(InsertEntityDatatypeImpl.class, MySQLInsertEntityDatatype.class); setImpl(InsertEntityDatatypeImpl.class, MySQLInsertEntityDatatype.class);
setImpl(RetrieveVersionHistoryImpl.class, MySQLRetrieveVersionHistory.class); setImpl(RetrieveVersionHistoryImpl.class, MySQLRetrieveVersionHistory.class);
setImpl(SetFileChecksumImpl.class, MySQLSetFileChecksum.class);
} }
} }
......
package caosdb.server.database;
import caosdb.server.database.access.Access;
import caosdb.server.database.backend.implementation.MySQL.ConnectionException;
import caosdb.server.database.backend.implementation.MySQL.MySQLTransaction;
import caosdb.server.database.backend.interfaces.SetFileChecksumImpl;
import caosdb.server.database.exceptions.TransactionException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class MySQLSetFileChecksum extends MySQLTransaction implements SetFileChecksumImpl {
public MySQLSetFileChecksum(Access access) {
super(access);
}
public static final String STMT_SET_CHECKSUM =
"UPDATE files SET hash = unhex(?) WHERE file_id = ?";
@Override
public void execute(Integer id, String checksum) {
try {
PreparedStatement stmt = prepareStatement(STMT_SET_CHECKSUM);
stmt.setInt(2, id);
stmt.setString(1, checksum);
stmt.execute();
} catch (SQLException | ConnectionException e) {
throw new TransactionException(e);
}
}
}
package caosdb.server.database.backend.interfaces;
public interface SetFileChecksumImpl extends BackendTransactionImpl {
void execute(Integer id, String checksum);
}
package caosdb.server.database.backend.transaction;
import caosdb.server.database.BackendTransaction;
import caosdb.server.database.backend.interfaces.SetFileChecksumImpl;
import caosdb.server.entity.EntityInterface;
public class SetFileChecksum extends BackendTransaction {
private EntityInterface entity;
public SetFileChecksum(EntityInterface entity) {
this.entity = entity;
}
@Override
protected void execute() {
RetrieveSparseEntity.removeCached(this.entity);
if (entity.hasFileProperties()) {
GetFileRecordByPath.removeCached(this.entity.getFileProperties().getPath());
final SetFileChecksumImpl t = getImplementation(SetFileChecksumImpl.class);
t.execute(this.entity.getId(), this.entity.getFileProperties().getChecksum());
}
}
}
...@@ -220,10 +220,10 @@ public class FileProperties { ...@@ -220,10 +220,10 @@ public class FileProperties {
if (file.getAbsolutePath().startsWith(FileSystem.getBasepath())) { if (file.getAbsolutePath().startsWith(FileSystem.getBasepath())) {
final Undoable d; final Undoable d;
final File parent = file.getParentFile(); final File parent = file.getParentFile();
if (file.getCanonicalPath().startsWith(FileSystem.getBasepath())) { if (FileUtils.isSymlink(file)) {
d = FileUtils.delete(file, file.isDirectory());
} else if (FileUtils.isSymlink(file)) {
d = FileUtils.unlink(file); d = FileUtils.unlink(file);
} else if (file.getCanonicalPath().startsWith(FileSystem.getBasepath())) {
d = FileUtils.delete(file, file.isDirectory());
} else { } else {
throw new CaosDBException( throw new CaosDBException(
"File is in Filesystem, but it is neither a normal file nor a symlink."); "File is in Filesystem, but it is neither a normal file nor a symlink.");
......
...@@ -27,7 +27,7 @@ import caosdb.server.database.DatabaseMonitor; ...@@ -27,7 +27,7 @@ import caosdb.server.database.DatabaseMonitor;
import caosdb.server.database.access.Access; import caosdb.server.database.access.Access;
import caosdb.server.database.backend.transaction.GetUpdateableChecksums; import caosdb.server.database.backend.transaction.GetUpdateableChecksums;
import caosdb.server.database.backend.transaction.RetrieveSparseEntity; import caosdb.server.database.backend.transaction.RetrieveSparseEntity;
import caosdb.server.database.backend.transaction.UpdateSparseEntity; import caosdb.server.database.backend.transaction.SetFileChecksum;
import caosdb.server.database.exceptions.TransactionException; import caosdb.server.database.exceptions.TransactionException;
import caosdb.server.entity.EntityInterface; import caosdb.server.entity.EntityInterface;
import caosdb.server.entity.FileProperties; import caosdb.server.entity.FileProperties;
...@@ -46,6 +46,7 @@ import java.security.NoSuchAlgorithmException; ...@@ -46,6 +46,7 @@ import java.security.NoSuchAlgorithmException;
public class ChecksumUpdater extends WriteTransaction<TransactionContainer> implements Runnable { public class ChecksumUpdater extends WriteTransaction<TransactionContainer> implements Runnable {
private Boolean running = false; private Boolean running = false;
private static final ChecksumUpdater instance = new ChecksumUpdater(); private static final ChecksumUpdater instance = new ChecksumUpdater();
private ChecksumUpdater() { private ChecksumUpdater() {
...@@ -85,7 +86,7 @@ public class ChecksumUpdater extends WriteTransaction<TransactionContainer> impl ...@@ -85,7 +86,7 @@ public class ChecksumUpdater extends WriteTransaction<TransactionContainer> impl
DatabaseMonitor.getInstance().acquireStrongAccess(this); DatabaseMonitor.getInstance().acquireStrongAccess(this);
// update // update
execute(new UpdateSparseEntity(fileEntity), strongAccess); execute(new SetFileChecksum(fileEntity), strongAccess);
strongAccess.commit(); strongAccess.commit();
} catch (final InterruptedException e) { } catch (final InterruptedException e) {
...@@ -145,6 +146,7 @@ public class ChecksumUpdater extends WriteTransaction<TransactionContainer> impl ...@@ -145,6 +146,7 @@ public class ChecksumUpdater extends WriteTransaction<TransactionContainer> impl
} }
} catch (final Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
instance.running = false;
return null; return null;
} finally { } finally {
weakAccess.release(); weakAccess.release();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment