Acked and tested from me.

Best Regards,
Giang Do

On 16/09/2015 11:01, Vu Minh Nguyen wrote:
>   osaf/libs/agents/saf/lga/lga_api.c    |   10 ++-
>   osaf/services/saf/logsv/lgs/lgs_evt.c |    9 ++
>   tests/logsv/tet_LogOiOps.c            |   23 +++++++
>   tests/logsv/tet_saLogStreamOpen_2.c   |  103 
> ++++++++++++++++++++++++++++++++++
>   4 files changed, 144 insertions(+), 1 deletions(-)
>
>
> Log agent and logsv do not validate this input when openning stream using LOG 
> API.
>
> Fix this defect by adding validation in the log agent as well as logsv.
>
> 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
> @@ -536,7 +536,15 @@ static SaAisErrorT validate_open_params(
>                       if(logFileCreateAttributes->maxLogRecordSize > 
> logFileCreateAttributes->maxLogFileSize){
>                                   TRACE("maxLogRecordSize is greater than the 
> maxLogFileSize");
>                                   return SA_AIS_ERR_INVALID_PARAM;
> -                        }
> +                     }
> +
> +                     /* Validate maxFilesRotated just in case of 
> SA_LOG_FILE_FULL_ACTION_ROTATE type */
> +                     if ((logFileCreateAttributes->logFileFullAction == 
> SA_LOG_FILE_FULL_ACTION_ROTATE) &&
> +                             ((logFileCreateAttributes->maxFilesRotated < 1) 
> ||
> +                              (logFileCreateAttributes->maxFilesRotated > 
> 127))) {
> +                             TRACE("Invalid maxFilesRotated. Valid range = 
> [1-127]");
> +                             return SA_AIS_ERR_INVALID_PARAM;
> +                     }
>               }
>
>               *header_type = (uint32_t)SA_LOG_GENERIC_HEADER;
> diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.c 
> b/osaf/services/saf/logsv/lgs/lgs_evt.c
> --- a/osaf/services/saf/logsv/lgs/lgs_evt.c
> +++ b/osaf/services/saf/logsv/lgs/lgs_evt.c
> @@ -797,6 +797,15 @@ static SaAisErrorT create_new_app_stream
>               goto done;
>       }
>
> +     /* Validate maxFilesRotated just in case of 
> SA_LOG_FILE_FULL_ACTION_ROTATE type */
> +     if ((open_sync_param->logFileFullAction == 
> SA_LOG_FILE_FULL_ACTION_ROTATE) &&
> +             ((open_sync_param->maxFilesRotated < 1) ||
> +              (open_sync_param->maxFilesRotated > 127))) {
> +             TRACE("Invalid maxFilesRotated. Valid Range = [1-127]");
> +             rc = SA_AIS_ERR_INVALID_PARAM;
> +             goto done;
> +     }
> +
>       if (open_sync_param->logFileFmt == NULL) {
>               TRACE("logFileFmt is NULL, use default one");
>               const char* logFileFormat = (char *) 
> lgs_cfg_get(LGS_IMM_LOG_STREAM_FILE_FORMAT);
> 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
> @@ -3108,6 +3108,27 @@ done:
>       rc = system(command);
>   }
>
> +/**
> + * Add test case for ticket #1399:
> + * logsv gets stuck in while loop when setting maxFilesRotated=0
> + *
> + * This test case verifies logsv returns error if
> + * setting 0 to saLogStreamMaxFilesRotated attribute.
> + */
> +void verMaxFilesRotated(void)
> +{
> +    int rc;
> +    char command[256];
> +
> +     /* Expect getting exist code = 1 as saLogStreamMaxFilesRotated=0 */
> +    strcpy(command, "immcfg -c SaLogStreamConfig 
> safLgStrCfg=verMaxFilesRotated,safApp=safLogService "
> +                "-a saLogStreamFileName=str6file -a saLogStreamPathName=. -a 
> saLogStreamMaxFilesRotated=0 "
> +                "2> /dev/null");
> +    rc = system(command);
> +    rc_validate(WEXITSTATUS(rc), 1);
> +}
> +
> +
>   __attribute__ ((constructor)) static void saOiOperations_constructor(void)
>   {
>       /* Stream objects */
> @@ -3220,6 +3241,8 @@ done:
>       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, verMaxFilesRotated, "Create: 
> saLogStreamMaxFilesRotated = 0, ERR");
> +
>       /* Tests for modify */
>       test_case_add(6, saLogOi_100, "Modify: saLogStreamSeverityFilter < 
> 0x7f, Ok");
>       test_case_add(6, saLogOi_101, "Modify: saLogStreamSeverityFilter >= 
> 0x7f, ERR");
> 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
> @@ -328,6 +328,107 @@ void saLogStreamOpen_2_23(void)
>       test_validate(rc_17, SA_AIS_ERR_INVALID_PARAM);
>   }
>
> +/**
> + * Added test cases to verify ticket #1399:
> + * logsv gets stuck in while loop if setting maxFilesRotated = 0.
> + *
> + * This test case verifies logsv returns error if
> + * setting 0 to saLogStreamMaxFilesRotated attribute.
> + */
> +void saLogStreamOpen_2_46(void)
> +{
> +    SaAisErrorT rc = SA_AIS_OK;
> +    SaNameT logStreamName = {.length = 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 = "appstream";
> +    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 = 0;
> +    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);
> +    }
> +}
> +
> +/**
> + * Verify that setting saLogStreamMaxFilesRotated > 127 is not allowed.
> + * Valid range is in [1 - 127]
> + */
> +void saLogStreamOpen_2_47(void)
> +{
> +    SaAisErrorT rc = SA_AIS_OK;
> +    SaNameT logStreamName = {.length = 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 = "appstream";
> +    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);
> @@ -402,5 +503,7 @@ extern void saLogStreamClose_01(void);
>       test_case_add(2, saLogWriteLogCallbackT_02, "saLogWriteLogCallbackT() 
> SA_DISPATCH_ALL");
>       test_case_add(2, saLogFilterSetCallbackT_01, "saLogFilterSetCallbackT 
> OK");
>       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");
>   }
>
>

------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to