Hi Lennart,

Could you please try to apply the patch on top of #1466 one? Thanks.

Regards,
Vu


>-----Original Message-----
>From: Lennart Lund [mailto:[email protected]]
>Sent: Tuesday, October 13, 2015 3:15 PM
>To: Vu Nguyen M; [email protected]; Giang Do T
>Cc: [email protected]
>Subject: RE: [PATCH 1 of 1] log: incorrect verification the string length
of
>saLogStreamFileName value [#1493]
>
>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

Reply via email to