Skip to content

Commit a3116f4

Browse files
authored
Fix initial old password not encrypted & bump TsFile Version (apache#16557)
* Fix that the oldPassword of initial users not ecrypted * bump tsfile version
1 parent a7e042f commit a3116f4

File tree

10 files changed

+188
-97
lines changed

10 files changed

+188
-97
lines changed

integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.apache.iotdb.db.it.auth;
2121

2222
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
23+
import org.apache.iotdb.commons.conf.CommonDescriptor;
2324
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
2425
import org.apache.iotdb.commons.utils.AuthUtils;
2526
import org.apache.iotdb.db.it.utils.TestUtils;
@@ -1508,6 +1509,7 @@ public void testStrongPassword() throws SQLException {
15081509
public void testPasswordHistory() {
15091510
try (Connection connection = EnvFactory.getEnv().getConnection();
15101511
Statement statement = connection.createStatement()) {
1512+
testPasswordHistoryEncrypted(statement);
15111513
testPasswordHistoryCreateAndDrop(statement);
15121514
testPasswordHistoryAlter(statement);
15131515
} catch (SQLException e) {
@@ -1516,6 +1518,18 @@ public void testPasswordHistory() {
15161518
}
15171519
}
15181520

1521+
public void testPasswordHistoryEncrypted(Statement statement) throws SQLException {
1522+
ResultSet resultSet =
1523+
statement.executeQuery("SELECT password,oldPassword from root.__audit.password_history._0");
1524+
assertTrue(resultSet.next());
1525+
assertEquals(
1526+
AuthUtils.encryptPassword(CommonDescriptor.getInstance().getConfig().getAdminPassword()),
1527+
resultSet.getString("root.__audit.password_history._0.password"));
1528+
assertEquals(
1529+
AuthUtils.encryptPassword(CommonDescriptor.getInstance().getConfig().getAdminPassword()),
1530+
resultSet.getString("root.__audit.password_history._0.oldPassword"));
1531+
}
1532+
15191533
public void testPasswordHistoryCreateAndDrop(Statement statement) throws SQLException {
15201534
statement.execute("create user userA 'abcdef123456'");
15211535

integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/tablemodel/manual/enhanced/IoTDBPipeTypeConversionISessionIT.java

Lines changed: 63 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -367,71 +367,83 @@ private List<List<Object>> generateTabletResultSetForTable(
367367
switch (sourceType) {
368368
case INT64:
369369
case TIMESTAMP:
370-
value =
371-
ValueConverter.convert(
372-
sourceType,
373-
targetType,
374-
tablet.getBitMaps()[j].isMarked(i) ? null : ((long[]) values[j])[i]);
375-
insertRecord.add(convert(value, targetType));
370+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((long[]) values[j])[i];
371+
if (targetType.isCompatible(sourceType)) {
372+
value = targetType.castFromSingleValue(sourceType, value);
373+
} else {
374+
value = ValueConverter.convert(sourceType, targetType, value);
375+
value = convert(value, targetType);
376+
}
377+
insertRecord.add(value);
376378
break;
377379
case INT32:
378-
value =
379-
ValueConverter.convert(
380-
sourceType,
381-
targetType,
382-
tablet.getBitMaps()[j].isMarked(i) ? null : ((int[]) values[j])[i]);
383-
insertRecord.add(convert(value, targetType));
380+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((int[]) values[j])[i];
381+
if (targetType.isCompatible(sourceType)) {
382+
value = targetType.castFromSingleValue(sourceType, value);
383+
} else {
384+
value = ValueConverter.convert(sourceType, targetType, value);
385+
value = convert(value, targetType);
386+
}
387+
insertRecord.add(value);
384388
break;
385389
case DOUBLE:
386-
value =
387-
ValueConverter.convert(
388-
sourceType,
389-
targetType,
390-
tablet.getBitMaps()[j].isMarked(i) ? null : ((double[]) values[j])[i]);
391-
insertRecord.add(convert(value, targetType));
390+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((double[]) values[j])[i];
391+
if (targetType.isCompatible(sourceType)) {
392+
value = targetType.castFromSingleValue(sourceType, value);
393+
} else {
394+
value = ValueConverter.convert(sourceType, targetType, value);
395+
value = convert(value, targetType);
396+
}
397+
insertRecord.add(value);
392398
break;
393399
case FLOAT:
394-
value =
395-
ValueConverter.convert(
396-
sourceType,
397-
targetType,
398-
tablet.getBitMaps()[j].isMarked(i) ? null : ((float[]) values[j])[i]);
399-
insertRecord.add(convert(value, targetType));
400+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((float[]) values[j])[i];
401+
if (targetType.isCompatible(sourceType)) {
402+
value = targetType.castFromSingleValue(sourceType, value);
403+
} else {
404+
value = ValueConverter.convert(sourceType, targetType, value);
405+
value = convert(value, targetType);
406+
}
407+
insertRecord.add(value);
400408
break;
401409
case DATE:
402-
value =
403-
ValueConverter.convert(
404-
sourceType,
405-
targetType,
406-
tablet.getBitMaps()[j].isMarked(i)
407-
? null
408-
: DateUtils.parseDateExpressionToInt(((LocalDate[]) values[j])[i]));
409-
insertRecord.add(convert(value, targetType));
410+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((LocalDate[]) values[j])[i];
411+
if (targetType == TSDataType.DATE) {
412+
insertRecord.add(value);
413+
break;
414+
}
415+
if (value != null) {
416+
value = DateUtils.parseDateExpressionToInt((LocalDate) value);
417+
}
418+
if (targetType.isCompatible(sourceType)) {
419+
value = targetType.castFromSingleValue(sourceType, value);
420+
} else {
421+
value = ValueConverter.convert(sourceType, targetType, value);
422+
value = convert(value, targetType);
423+
}
424+
insertRecord.add(value);
410425
break;
411426
case TEXT:
412427
case STRING:
413-
value =
414-
ValueConverter.convert(
415-
sourceType,
416-
targetType,
417-
tablet.getBitMaps()[j].isMarked(i) ? null : ((Binary[]) values[j])[i]);
418-
insertRecord.add(convert(value, targetType));
419-
break;
420428
case BLOB:
421-
value =
422-
ValueConverter.convert(
423-
sourceType,
424-
targetType,
425-
tablet.getBitMaps()[j].isMarked(i) ? null : ((Binary[]) values[j])[i]);
426-
insertRecord.add(convert(value, targetType));
429+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((Binary[]) values[j])[i];
430+
if (targetType.isCompatible(sourceType)) {
431+
value = targetType.castFromSingleValue(sourceType, value);
432+
} else {
433+
value = ValueConverter.convert(sourceType, targetType, value);
434+
value = convert(value, targetType);
435+
}
436+
insertRecord.add(value);
427437
break;
428438
case BOOLEAN:
429-
value =
430-
ValueConverter.convert(
431-
sourceType,
432-
targetType,
433-
tablet.getBitMaps()[j].isMarked(i) ? null : ((boolean[]) values[j])[i]);
434-
insertRecord.add(convert(value, targetType));
439+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((boolean[]) values[j])[i];
440+
if (targetType.isCompatible(sourceType)) {
441+
value = targetType.castFromSingleValue(sourceType, value);
442+
} else {
443+
value = ValueConverter.convert(sourceType, targetType, value);
444+
value = convert(value, targetType);
445+
}
446+
insertRecord.add(value);
435447
break;
436448
}
437449
}

integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipeTypeConversionISessionIT.java

Lines changed: 69 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,11 @@ private void validateResultSet(
434434
break;
435435
case TEXT:
436436
case STRING:
437-
assertEquals(field.getStringValue(), rowValues.get(i));
437+
if (rowValues.get(i) instanceof Binary) {
438+
assertEquals(field.getStringValue(), rowValues.get(i).toString());
439+
} else {
440+
assertEquals(field.getStringValue(), rowValues.get(i));
441+
}
438442
break;
439443
case INT32:
440444
assertEquals(field.getIntV(), (int) rowValues.get(i));
@@ -602,44 +606,87 @@ private List<List<Object>> generateTabletResultSetForTable(
602606
switch (sourceType) {
603607
case INT64:
604608
case TIMESTAMP:
605-
value = ValueConverter.convert(sourceType, targetType, ((long[]) values[j])[i]);
606-
insertRecord.add(convert(value, targetType));
609+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((long[]) values[j])[i];
610+
if (targetType.isCompatible(sourceType)) {
611+
value = targetType.castFromSingleValue(sourceType, value);
612+
} else {
613+
value = ValueConverter.convert(sourceType, targetType, value);
614+
value = convert(value, targetType);
615+
}
616+
insertRecord.add(value);
607617
break;
608618
case INT32:
609-
value = ValueConverter.convert(sourceType, targetType, ((int[]) values[j])[i]);
610-
insertRecord.add(convert(value, targetType));
619+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((int[]) values[j])[i];
620+
if (targetType.isCompatible(sourceType)) {
621+
value = targetType.castFromSingleValue(sourceType, value);
622+
} else {
623+
value = ValueConverter.convert(sourceType, targetType, value);
624+
value = convert(value, targetType);
625+
}
626+
insertRecord.add(value);
611627
break;
612628
case DOUBLE:
613-
value = ValueConverter.convert(sourceType, targetType, ((double[]) values[j])[i]);
614-
insertRecord.add(convert(value, targetType));
629+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((double[]) values[j])[i];
630+
if (targetType.isCompatible(sourceType)) {
631+
value = targetType.castFromSingleValue(sourceType, value);
632+
} else {
633+
value = ValueConverter.convert(sourceType, targetType, value);
634+
value = convert(value, targetType);
635+
}
636+
insertRecord.add(value);
615637
break;
616638
case FLOAT:
617-
value = ValueConverter.convert(sourceType, targetType, ((float[]) values[j])[i]);
618-
insertRecord.add(convert(value, targetType));
639+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((float[]) values[j])[i];
640+
if (targetType.isCompatible(sourceType)) {
641+
value = targetType.castFromSingleValue(sourceType, value);
642+
} else {
643+
value = ValueConverter.convert(sourceType, targetType, value);
644+
value = convert(value, targetType);
645+
}
646+
insertRecord.add(value);
619647
break;
620648
case DATE:
621-
value =
622-
ValueConverter.convert(
623-
sourceType,
624-
targetType,
625-
DateUtils.parseDateExpressionToInt(((LocalDate[]) values[j])[i]));
626-
insertRecord.add(convert(value, targetType));
649+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((LocalDate[]) values[j])[i];
650+
if (targetType == TSDataType.DATE) {
651+
insertRecord.add(value);
652+
break;
653+
}
654+
if (value != null) {
655+
value = DateUtils.parseDateExpressionToInt((LocalDate) value);
656+
}
657+
if (targetType.isCompatible(sourceType)) {
658+
value = targetType.castFromSingleValue(sourceType, value);
659+
} else {
660+
value = ValueConverter.convert(sourceType, targetType, value);
661+
value = convert(value, targetType);
662+
}
663+
insertRecord.add(value);
627664
break;
628665
case TEXT:
629666
case STRING:
630-
value = ValueConverter.convert(sourceType, targetType, ((Binary[]) values[j])[i]);
631-
insertRecord.add(convert(value, targetType));
632-
break;
633667
case BLOB:
634-
value = ValueConverter.convert(sourceType, targetType, ((Binary[]) values[j])[i]);
635-
insertRecord.add(convert(value, targetType));
668+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((Binary[]) values[j])[i];
669+
if (targetType.isCompatible(sourceType)) {
670+
value = targetType.castFromSingleValue(sourceType, value);
671+
} else {
672+
value = ValueConverter.convert(sourceType, targetType, value);
673+
value = convert(value, targetType);
674+
}
675+
insertRecord.add(value);
636676
break;
637677
case BOOLEAN:
638-
value = ValueConverter.convert(sourceType, targetType, ((boolean[]) values[j])[i]);
639-
insertRecord.add(convert(value, targetType));
678+
value = tablet.getBitMaps()[j].isMarked(i) ? null : ((boolean[]) values[j])[i];
679+
if (targetType.isCompatible(sourceType)) {
680+
value = targetType.castFromSingleValue(sourceType, value);
681+
} else {
682+
value = ValueConverter.convert(sourceType, targetType, value);
683+
value = convert(value, targetType);
684+
}
685+
insertRecord.add(value);
640686
break;
641687
}
642688
}
689+
insertRecord.add(tablet.getTimestamp(i));
643690
insertRecords.add(insertRecord);
644691
}
645692

integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,12 +1452,22 @@ private void testOneCastWithTablet(
14521452
rec = dataSet.next();
14531453
assertEquals(1, rec.getFields().get(0).getLongV());
14541454
assertEquals("d1", rec.getFields().get(1).toString());
1455-
if (to == TSDataType.BLOB) {
1456-
assertEquals(genValue(to, 1), rec.getFields().get(2).getBinaryV());
1457-
} else if (to == TSDataType.DATE) {
1458-
assertEquals(genValue(to, 1), rec.getFields().get(2).getDateV());
1459-
} else {
1460-
assertEquals(genValue(to, 1).toString(), rec.getFields().get(2).toString());
1455+
1456+
switch (to) {
1457+
case BLOB:
1458+
assertEquals(genValue(to, 1), rec.getFields().get(2).getBinaryV());
1459+
break;
1460+
case DATE:
1461+
assertEquals(genValue(to, 1), rec.getFields().get(2).getDateV());
1462+
break;
1463+
case FLOAT:
1464+
assertEquals(genValue(to, 1), rec.getFields().get(2).getFloatV());
1465+
break;
1466+
case DOUBLE:
1467+
assertEquals(genValue(to, 1), rec.getFields().get(2).getDoubleV());
1468+
break;
1469+
default:
1470+
assertEquals(String.valueOf(genValue(from, 1)), rec.getFields().get(2).toString());
14611471
}
14621472
assertFalse(dataSet.hasNext());
14631473
} else {
@@ -1621,17 +1631,19 @@ public void insertRelationalTabletWithAutoCastTest()
16211631
dataTypes.remove(TSDataType.VECTOR);
16221632
dataTypes.remove(TSDataType.UNKNOWN);
16231633

1624-
for (TSDataType from : dataTypes) {
1625-
for (TSDataType to : dataTypes) {
1626-
System.out.println("from: " + from + ", to: " + to);
1627-
testOneCastWithTablet(from, to, testNum, false);
1628-
System.out.println("partial insert");
1629-
testOneCastWithTablet(from, to, testNum, true);
1634+
try {
1635+
for (TSDataType from : dataTypes) {
1636+
for (TSDataType to : dataTypes) {
1637+
System.out.println("from: " + from + ", to: " + to);
1638+
testOneCastWithTablet(from, to, testNum, false);
1639+
System.out.println("partial insert");
1640+
testOneCastWithTablet(from, to, testNum, true);
1641+
}
1642+
}
1643+
} finally {
1644+
try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
1645+
session.executeNonQueryStatement("SET CONFIGURATION \"enable_partial_insert\"=\"true\"");
16301646
}
1631-
}
1632-
1633-
try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
1634-
session.executeNonQueryStatement("SET CONFIGURATION \"enable_partial_insert\"=\"true\"");
16351647
}
16361648
}
16371649

integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSchemaTemplateIT.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,10 +498,6 @@ public void testHybridAutoExtendSchemaTemplate()
498498
e.getMessage()
499499
.contains(
500500
"data type of root.db.v4.d2.b is not consistent, registered type FLOAT, inserting type DOUBLE"));
501-
Assert.assertTrue(
502-
e.getMessage()
503-
.contains(
504-
"data type of root.db.v4.d2.c is not consistent, registered type TEXT, inserting type INT32"));
505501
}
506502
}
507503
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.iotdb.commons.service.metric.MetricService;
3232
import org.apache.iotdb.commons.service.metric.enums.Metric;
3333
import org.apache.iotdb.commons.service.metric.enums.Tag;
34+
import org.apache.iotdb.commons.utils.AuthUtils;
3435
import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
3536
import org.apache.iotdb.db.audit.DNAuditLogger;
3637
import org.apache.iotdb.db.auth.AuthorityChecker;
@@ -175,7 +176,8 @@ public BasicOpenSessionResp login(
175176
username);
176177
long currentTime = CommonDateTimeUtils.currentTime();
177178
TSStatus tsStatus =
178-
DataNodeAuthUtils.recordPasswordHistory(userId, password, password, currentTime);
179+
DataNodeAuthUtils.recordPasswordHistory(
180+
userId, password, AuthUtils.encryptPassword(password), currentTime);
179181
if (tsStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
180182
openSessionResp
181183
.sessionId(-1)

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ public boolean isModified() {
210210
return false;
211211
}
212212

213+
@Override
214+
public void setModified(boolean modified) {}
215+
213216
@Override
214217
public void initTsBlockBuilder(List<TSDataType> dataTypes) {
215218
builder = new TsBlockBuilder(dataTypes);

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,9 @@ public boolean isModified() {
225225
return false;
226226
}
227227

228+
@Override
229+
public void setModified(boolean modified) {}
230+
228231
@Override
229232
public void initTsBlockBuilder(List<TSDataType> dataTypes) {
230233
// non-aligned page reader don't need to init TsBlockBuilder at the very beginning

0 commit comments

Comments
 (0)