Hi Vu, The patch cannot be applied. Something wrong when merging test code
Thanks Lennart > -----Original Message----- > From: Vu Minh Nguyen [mailto:[email protected]] > Sent: den 9 oktober 2015 10:32 > To: [email protected]; Lennart Lund; Giang Do T > Cc: [email protected] > Subject: [PATCH 1 of 1] log: incorrect verification the string length of > saLogStreamFileName value [#1493] > > osaf/libs/agents/saf/lga/lga_api.c | 2 +- > osaf/libs/common/logsv/include/lgsv_defs.h | 10 +++++ > osaf/services/saf/logsv/lgs/lgs_imm.c | 22 +++++++++++- > tests/logsv/tet_LogOiOps.c | 47 +++++++++++++++++++++++++- > tests/logsv/tet_saLogStreamOpen_2.c | 54 > ++++++++++++++++++++++++++++++ > 5 files changed, 131 insertions(+), 4 deletions(-) > > > Correct the verification rule for the filename length. > > diff --git a/osaf/libs/agents/saf/lga/lga_api.c > b/osaf/libs/agents/saf/lga/lga_api.c > --- a/osaf/libs/agents/saf/lga/lga_api.c > +++ b/osaf/libs/agents/saf/lga/lga_api.c > @@ -561,7 +561,7 @@ static SaAisErrorT validate_open_params( > /* Check implementation specific string length */ > if (NULL != logFileCreateAttributes) { > len = strlen(logFileCreateAttributes- > >logFileName); > - if ((len == 0) || (len > NAME_MAX)) { > + if ((len == 0) || (len > LOG_NAME_MAX)) { > TRACE("logFileName"); > return > SA_AIS_ERR_INVALID_PARAM; > } > diff --git a/osaf/libs/common/logsv/include/lgsv_defs.h > b/osaf/libs/common/logsv/include/lgsv_defs.h > --- a/osaf/libs/common/logsv/include/lgsv_defs.h > +++ b/osaf/libs/common/logsv/include/lgsv_defs.h > @@ -25,4 +25,14 @@ > // Waiting time in library for sync send, unit 10ms > #define LGS_WAIT_TIME 1000 > > +// The length of '_yyyymmdd_hhmmss_yyyymmdd_hhmmss.log' including > null-termination char > +#define LOG_TAIL_MAX 37 > + > +/** The log file name format: <filename>_<createtime>_<closetime>.log > + * '_<createtime>_<closetime>.log' part is appended by logsv and has > above format, > + * and '<filename>' part can set by user. Therefore, limit the length of > <filename> from user, > + * to make sure the log file name does not exceed the maximum length > (NAME_MAX). > + */ > +#define LOG_NAME_MAX (NAME_MAX - LOG_TAIL_MAX) > + > #endif /* LGSV_DEFS_H */ > diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.c > b/osaf/services/saf/logsv/lgs/lgs_imm.c > --- a/osaf/services/saf/logsv/lgs/lgs_imm.c > +++ b/osaf/services/saf/logsv/lgs/lgs_imm.c > @@ -1429,7 +1429,16 @@ static SaAisErrorT check_attr_validity(S > TRACE("NULL > pointer to saLogStreamPathName"); > goto done; > } > - > + > + if (strlen(i_pathName) > > PATH_MAX) { > + /* Path name is too > long */ > + rc = > SA_AIS_ERR_BAD_OPERATION; > + > report_oi_error(immOiHandle, opdata->ccbId, > + > "saLogStreamPathName is so long"); > + > TRACE("saLogStreamPathName is so long (max: %d)", > PATH_MAX); > + goto done; > + } > + > if > (lgs_relative_path_check_ts(i_pathName) == true) { > > report_oi_error(immOiHandle, opdata->ccbId, > > "Path %s not valid", i_pathName); > @@ -1453,7 +1462,16 @@ static SaAisErrorT check_attr_validity(S > TRACE("NULL > pointer to saLogStreamFileName"); > goto done; > } > - > + > + if (strlen(i_fileName) > > LOG_NAME_MAX) { > + /* File name is too > long */ > + rc = > SA_AIS_ERR_BAD_OPERATION; > + > report_oi_error(immOiHandle, opdata->ccbId, > + > "saLogStreamFileName is so long"); > + > TRACE("saLogStreamFileName is so long (max: %d)", > LOG_NAME_MAX); > + goto done; > + } > + > if > (chk_filepath_stream_exist(i_fileName, i_pathName, > > stream, opdata->operationType)) { > > report_oi_error(immOiHandle, opdata->ccbId, > diff --git a/tests/logsv/tet_LogOiOps.c b/tests/logsv/tet_LogOiOps.c > --- a/tests/logsv/tet_LogOiOps.c > +++ b/tests/logsv/tet_LogOiOps.c > @@ -3318,6 +3318,50 @@ void verFixLogRec_Min(void) > rc_validate(WEXITSTATUS(rc), 1); > } > > + > +/** > + * Test cases to verify #1493 > + */ > + > +/* Verify that it is not allowed to pass a string value to > + * saLogStreamFileName which its length is larger than 218. > + */ > +void verFilenameLength_01(void) > +{ > + int rc; > + char command[500]; > + char fileName[220]; > + > + /* Create a string with 218 characters */ > + memset(fileName, 'A', 218); > + fileName[219] = '\0'; > + > + /* Create an configurable obj class with invalid filename length > */ > + sprintf(command, "immcfg -c SaLogStreamConfig safLgStrCfg=TestLength > " > + "-a saLogStreamFileName=\"%s\" -a > saLogStreamPathName=. " > + "2> /dev/null", fileName); > + rc = system(command); > + rc_validate(WEXITSTATUS(rc), 1); > +} > + > +/* Modify an existing value */ > +void verFilenameLength_02(void) > +{ > + int rc; > + char command[500]; > + char fileName[220]; > + > + /* Create a string with 218 characters */ > + memset(fileName, 'A', 218); > + fileName[219] = '\0'; > + > + /* Create an configurable obj class with invalid filename length > */ > + sprintf(command, "immcfg -a saLogStreamFileName=. -a > saLogStreamPathName=\"%s\" %s " > + "2> /dev/null", fileName, > SA_LOG_STREAM_ALARM); > + rc = system(command); > + rc_validate(WEXITSTATUS(rc), 1); > +} > + > __attribute__ ((constructor)) static void saOiOperations_constructor(void) > { > /* Stream objects */ > @@ -3419,7 +3463,6 @@ void verFixLogRec_Min(void) > test_case_add(5, verCCBWithValidValues, "CCB Object Modify > many attributes with valid values, OK"); > test_case_add(5, verCCBWithInvalidValues, "CCB Object > Modify many attributes with one invalid values, ERR"); > > - > /* Stream configuration object */ > /* Tests for create */ > test_suite_add(6, "LOG OI tests, Stream configuration object > attribute validation"); > @@ -3437,6 +3480,7 @@ void verFixLogRec_Min(void) > test_case_add(6, saLogOi_76, "Create: > saLogStreamMaxFilesRotated < 128, Ok"); > test_case_add(6, saLogOi_77, "Create: > saLogStreamMaxFilesRotated > 128, ERR"); > test_case_add(6, saLogOi_78, "Create: > saLogStreamMaxFilesRotated == 128, ERR"); > + test_case_add(6, verFilenameLength_01, "Create: > saLogStreamFileName > 218 characters, ERR"); > test_case_add(6, verMaxFilesRotated, "Create: > saLogStreamMaxFilesRotated = 0, ERR"); > test_case_add(6, verAdminOpOnConfClass, "Perform admin > op on configurable obj class, ERR"); > > @@ -3461,6 +3505,7 @@ void verFixLogRec_Min(void) > test_case_add(6, saLogOi_113, "Modify: > saLogStreamMaxFilesRotated < 128, Ok"); > test_case_add(6, saLogOi_114, "Modify: > saLogStreamMaxFilesRotated > 128, ERR"); > test_case_add(6, saLogOi_115, "Modify: > saLogStreamMaxFilesRotated == 128, ERR"); > + test_case_add(6, verFilenameLength_02, "Modify: > saLogStreamFileName > 218 characters, ERR"); > > /* Add test cases to test #1288 */ > test_case_add(6, verMaxLogRecord_01, "Modify: > saLogStreamFixedLogRecordSize == 0, write a record = 65535 bytes, OK"); > diff --git a/tests/logsv/tet_saLogStreamOpen_2.c > b/tests/logsv/tet_saLogStreamOpen_2.c > --- a/tests/logsv/tet_saLogStreamOpen_2.c > +++ b/tests/logsv/tet_saLogStreamOpen_2.c > @@ -531,6 +531,58 @@ done: > } > } > > +/** > + * Verify that logFileName length > 218 characters is not allowed. > + */ > +void saLogStreamOpen_2_48(void) > +{ > + SaAisErrorT rc = SA_AIS_OK; > + SaNameT logStreamName = {.length = 0 }; > + char fileName[220]; > + > + memset(fileName, 'A', 218); > + fileName[219] = '\0'; > + > + strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1); > + logStreamName.length = strlen((char *)logStreamName.value); > + > + SaLogFileCreateAttributesT_2 appLogFileCreateAttributes; > + > + /* App stream information */ > + appLogFileCreateAttributes.logFilePathName = "appstream"; > + appLogFileCreateAttributes.logFileName = fileName; > + appLogFileCreateAttributes.maxLogFileSize = > DEFAULT_APP_LOG_FILE_SIZE; > + appLogFileCreateAttributes.maxLogRecordSize = > DEFAULT_APP_LOG_REC_SIZE; > + appLogFileCreateAttributes.haProperty = SA_TRUE; > + appLogFileCreateAttributes.logFileFullAction = > SA_LOG_FILE_FULL_ACTION_ROTATE; > + appLogFileCreateAttributes.maxFilesRotated = 128; > + appLogFileCreateAttributes.logFileFmt = NULL; > + > + rc = saLogInitialize(&logHandle, &logCallbacks, &logVersion); > + if (rc != SA_AIS_OK) { > + fprintf(stderr, "Failed at saLogInitialize: %d\n ", (int)rc); > + test_validate(rc, SA_AIS_OK); > + return; > + } > + > + rc = saLogSelectionObjectGet(logHandle, &selectionObject); > + if (rc != SA_AIS_OK) { > + fprintf(stderr, "Failed at saLogSelectionObjectGet: %d \n ", > (int)rc); > + test_validate(rc, SA_AIS_OK); > + goto done; > + } > + > + rc = saLogStreamOpen_2(logHandle, &logStreamName, > &appLogFileCreateAttributes, > + SA_LOG_STREAM_CREATE, SA_TIME_ONE_SECOND, > &logStreamHandle); > + test_validate(rc, SA_AIS_ERR_INVALID_PARAM); > + > +done: > + rc = saLogFinalize(logHandle); > + if (rc != SA_AIS_OK) { > + fprintf(stderr, "Failed to call salogFinalize: %d\n", (int) rc); > + } > +} > + > extern void saLogStreamOpenAsync_2_01(void); > extern void saLogStreamOpenCallbackT_01(void); > extern void saLogWriteLog_01(void); > @@ -607,6 +659,8 @@ extern void saLogStreamClose_01(void); > test_case_add(2, saLogStreamClose_01, "saLogStreamClose OK"); > test_case_add(2, saLogStreamOpen_2_46, "saLogStreamOpen_2 with > maxFilesRotated = 0, ERR"); > test_case_add(2, saLogStreamOpen_2_47, "saLogStreamOpen_2 with > maxFilesRotated = 128, ERR"); > + test_case_add(2, saLogStreamOpen_2_48, "saLogStreamOpen_2 with > logFileName > 218 characters, ERR"); > + > test_case_add(2, verFixLogRec_Max_Err, "saLogStreamOpen_2 with > maxLogRecordSize > MAX_RECSIZE, ERR"); > test_case_add(2, verFixLogRec_Min_Err, "saLogStreamOpen_2 with > maxLogRecordSize < 150, ERR"); > } ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
