Re: [devel] [PATCH 1/1] amf: check null before access to config objects [#3055]

2019-07-01 Thread Gary Lee

Hi Thang

ack (review only)

Thanks

Gary

On 2/7/19 12:25 pm, thang.d.nguyen wrote:

During controller goes up, it creats config object from IMM.
In case the object was deleted but comming up amfd still
receives ccb object delete callback. And it validates and
crash due to access to null pointer.
---
  src/amf/amfd/app.cc  | 17 ++---
  src/amf/amfd/apptype.cc  | 13 +++--
  src/amf/amfd/comptype.cc | 10 +-
  3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/amf/amfd/app.cc b/src/amf/amfd/app.cc
index 424d828..67e5e3e 100644
--- a/src/amf/amfd/app.cc
+++ b/src/amf/amfd/app.cc
@@ -319,13 +319,16 @@ static void app_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
  }
  case CCBUTIL_DELETE:
app = app_db->find(Amf::to_string(>objectName));
-  /* by this time all the SGs and SIs under this
-   * app object should have been *DELETED* just
-   * do a sanity check here
-   */
-  osafassert(app->list_of_sg == nullptr);
-  osafassert(app->list_of_si == nullptr);
-  avd_app_delete(app);
+  if ((app != nullptr) || (avd_cb->is_active() == true)) {
+/* by this time all the SGs and SIs under this
+ * app object should have been *DELETED* just
+ * do a sanity check here
+ */
+osafassert(app);
+osafassert(app->list_of_sg == nullptr);
+osafassert(app->list_of_si == nullptr);
+avd_app_delete(app);
+  }
break;
  default:
osafassert(0);
diff --git a/src/amf/amfd/apptype.cc b/src/amf/amfd/apptype.cc
index c22147f..20c94cb 100644
--- a/src/amf/amfd/apptype.cc
+++ b/src/amf/amfd/apptype.cc
@@ -155,6 +155,12 @@ static SaAisErrorT 
apptype_ccb_completed_cb(CcbUtilOperationData_t *opdata) {
break;
  case CCBUTIL_DELETE:
app_type = avd_apptype_get(object_name);
+  if (app_type == nullptr && avd_cb->is_active() == false) {
+opdata->userData = nullptr;
+rc = SA_AIS_OK;
+break;
+  }
+  osafassert(app_type);
if (nullptr != app_type->list_of_app) {
  /* check whether there exists a delete operation for
   * each of the App in the app_type list in the current CCB
@@ -201,8 +207,11 @@ static void apptype_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
apptype_add_to_model(app_type);
break;
  case CCBUTIL_DELETE:
-  app_type = static_cast(opdata->userData);
-  apptype_delete(_type);
+  if ((opdata->userData != nullptr) || (avd_cb->is_active() == true)) {
+app_type = static_cast(opdata->userData);
+osafassert(app_type);
+apptype_delete(_type);
+  }
break;
  default:
osafassert(0);
diff --git a/src/amf/amfd/comptype.cc b/src/amf/amfd/comptype.cc
index 38582cc..48a333e 100644
--- a/src/amf/amfd/comptype.cc
+++ b/src/amf/amfd/comptype.cc
@@ -630,7 +630,9 @@ static void comptype_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
comptype_db_add(comp_type);
break;
  case CCBUTIL_DELETE:
-  comptype_delete(static_cast(opdata->userData));
+  if ((opdata->userData != nullptr) || (avd_cb->is_active() == true)) {
+comptype_delete(static_cast(opdata->userData));
+  }
break;
  case CCBUTIL_MODIFY:
ccb_apply_modify_hdlr(opdata);
@@ -802,6 +804,12 @@ static SaAisErrorT 
comptype_ccb_completed_cb(CcbUtilOperationData_t *opdata) {
break;
  case CCBUTIL_DELETE:
comp_type = comptype_db->find(Amf::to_string(>objectName));
+  if (comp_type == nullptr && avd_cb->is_active() == false) {
+rc = SA_AIS_OK;
+opdata->userData = nullptr;
+break;
+  }
+  osafassert(comp_type);
if (nullptr != comp_type->list_of_comp) {
  /* check whether there exists a delete operation for
   * each of the Comp in the comp_type list in the current CCB



___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


[devel] [PATCH 1/1] amf: check null before access to config objects [#3055]

2019-07-01 Thread thang.d.nguyen
During controller goes up, it creats config object from IMM.
In case the object was deleted but comming up amfd still
receives ccb object delete callback. And it validates and
crash due to access to null pointer.
---
 src/amf/amfd/app.cc  | 17 ++---
 src/amf/amfd/apptype.cc  | 13 +++--
 src/amf/amfd/comptype.cc | 10 +-
 3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/amf/amfd/app.cc b/src/amf/amfd/app.cc
index 424d828..67e5e3e 100644
--- a/src/amf/amfd/app.cc
+++ b/src/amf/amfd/app.cc
@@ -319,13 +319,16 @@ static void app_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
 }
 case CCBUTIL_DELETE:
   app = app_db->find(Amf::to_string(>objectName));
-  /* by this time all the SGs and SIs under this
-   * app object should have been *DELETED* just
-   * do a sanity check here
-   */
-  osafassert(app->list_of_sg == nullptr);
-  osafassert(app->list_of_si == nullptr);
-  avd_app_delete(app);
+  if ((app != nullptr) || (avd_cb->is_active() == true)) {
+/* by this time all the SGs and SIs under this
+ * app object should have been *DELETED* just
+ * do a sanity check here
+ */
+osafassert(app);
+osafassert(app->list_of_sg == nullptr);
+osafassert(app->list_of_si == nullptr);
+avd_app_delete(app);
+  }
   break;
 default:
   osafassert(0);
diff --git a/src/amf/amfd/apptype.cc b/src/amf/amfd/apptype.cc
index c22147f..20c94cb 100644
--- a/src/amf/amfd/apptype.cc
+++ b/src/amf/amfd/apptype.cc
@@ -155,6 +155,12 @@ static SaAisErrorT 
apptype_ccb_completed_cb(CcbUtilOperationData_t *opdata) {
   break;
 case CCBUTIL_DELETE:
   app_type = avd_apptype_get(object_name);
+  if (app_type == nullptr && avd_cb->is_active() == false) {
+opdata->userData = nullptr;
+rc = SA_AIS_OK;
+break;
+  }
+  osafassert(app_type);
   if (nullptr != app_type->list_of_app) {
 /* check whether there exists a delete operation for
  * each of the App in the app_type list in the current CCB
@@ -201,8 +207,11 @@ static void apptype_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
   apptype_add_to_model(app_type);
   break;
 case CCBUTIL_DELETE:
-  app_type = static_cast(opdata->userData);
-  apptype_delete(_type);
+  if ((opdata->userData != nullptr) || (avd_cb->is_active() == true)) {
+app_type = static_cast(opdata->userData);
+osafassert(app_type);
+apptype_delete(_type);
+  }
   break;
 default:
   osafassert(0);
diff --git a/src/amf/amfd/comptype.cc b/src/amf/amfd/comptype.cc
index 38582cc..48a333e 100644
--- a/src/amf/amfd/comptype.cc
+++ b/src/amf/amfd/comptype.cc
@@ -630,7 +630,9 @@ static void comptype_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
   comptype_db_add(comp_type);
   break;
 case CCBUTIL_DELETE:
-  comptype_delete(static_cast(opdata->userData));
+  if ((opdata->userData != nullptr) || (avd_cb->is_active() == true)) {
+comptype_delete(static_cast(opdata->userData));
+  }
   break;
 case CCBUTIL_MODIFY:
   ccb_apply_modify_hdlr(opdata);
@@ -802,6 +804,12 @@ static SaAisErrorT 
comptype_ccb_completed_cb(CcbUtilOperationData_t *opdata) {
   break;
 case CCBUTIL_DELETE:
   comp_type = comptype_db->find(Amf::to_string(>objectName));
+  if (comp_type == nullptr && avd_cb->is_active() == false) {
+rc = SA_AIS_OK;
+opdata->userData = nullptr;
+break;
+  }
+  osafassert(comp_type);
   if (nullptr != comp_type->list_of_comp) {
 /* check whether there exists a delete operation for
  * each of the Comp in the comp_type list in the current CCB
-- 
2.7.4



___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


[devel] [PATCH 0/1] Review Request for amf: check null before access to config objects [#3055] V2

2019-07-01 Thread thang.d.nguyen
Summary: amf: check null before access to config objects [#3055]
Review request for Ticket(s): 3055
Peer Reviewer(s): Gary, Minh
Pull request to: Minh
Affected branch(es): develop
Development branch: ticket-3055
Base revision: 7e70f1db1a8bfaf5a9abe7e5286a5b59e0bf5334
Personal repository: git://git.code.sf.net/u/thangng/review


Impacted area   Impact y/n

 Docsn
 Build systemn
 RPM/packaging   n
 Configuration files n
 Startup scripts n
 SAF servicesy
 OpenSAF servicesn
 Core libraries  n
 Samples n
 Tests   n
 Other   n


Comments (indicate scope for each "y" above):
-

revision 24da64783b5c3b61200fab6845c9343de89f85a4
Author: thang.d.nguyen 
Date:   Tue, 2 Jul 2019 08:31:14 +0700

amf: check null before access to config objects [#3055]

During controller goes up, it creats config object from IMM.
In case the object was deleted but comming up amfd still
receives ccb object delete callback. And it validates and
crash due to access to null pointer.



Complete diffstat:
--
 src/amf/amfd/app.cc  | 17 ++---
 src/amf/amfd/apptype.cc  | 13 +++--
 src/amf/amfd/comptype.cc | 10 +-
 3 files changed, 30 insertions(+), 10 deletions(-)


Testing Commands:
-
N/A

Testing, Expected Results:
--
N/A

Conditions of Submission:
-
Acked from reviewer

Arch  Built StartedLinux distro
---
mipsn  n
mips64  n  n
x86 n  n
x86_64  y  y
powerpc n  n
powerpc64   n  n


Reviewer Checklist:
---
[Submitters: make sure that your review doesn't trigger any checkmarks!]


Your checkin has not passed review because (see checked entries):

___ Your RR template is generally incomplete; it has too many blank entries
that need proper data filled in.

___ You have failed to nominate the proper persons for review and push.

___ Your patches do not have proper short+long header

___ You have grammar/spelling in your header that is unacceptable.

___ You have exceeded a sensible line length in your headers/comments/text.

___ You have failed to put in a proper Trac Ticket # into your commits.

___ You have incorrectly put/left internal data in your comments/files
(i.e. internal bug tracking tool IDs, product names etc)

___ You have not given any evidence of testing beyond basic build tests.
Demonstrate some level of runtime or other sanity testing.

___ You have ^M present in some of your files. These have to be removed.

___ You have needlessly changed whitespace or added whitespace crimes
like trailing spaces, or spaces before tabs.

___ You have mixed real technical changes with whitespace and other
cosmetic code cleanup changes. These have to be separate commits.

___ You need to refactor your submission into logical chunks; there is
too much content into a single commit.

___ You have extraneous garbage in your review (merge commits etc)

___ You have giant attachments which should never have been sent;
Instead you should place your content in a public tree to be pulled.

___ You have too many commits attached to an e-mail; resend as threaded
commits, or place in a public tree for a pull.

___ You have resent this content multiple times without a clear indication
of what has changed between each re-send.

___ You have failed to adequately and individually address all of the
comments and change requests that were proposed in the initial review.

___ You have a misconfigured ~/.gitconfig file (i.e. user.name, user.email etc)

___ Your computer have a badly configured date and time; confusing the
the threaded patch review.

___ Your changes affect IPC mechanism, and you don't present any results
for in-service upgradability test.

___ Your changes affect user manual and documentation, your patch series
do not contain the patch that updates the Doxygen manual.



___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


Re: [devel] [PATCH 0/1] Review Request for log: Update the try again for admin operation [#3056]

2019-07-01 Thread Canh Van Truong
Hi Lennart

 

I updated your comment. And sent for new version

 

while (!osaf_is_timeout(_time)) {

//[Lennart] Avoid using "while (!osaf_is_timeout(_time))""
constructions

// instead use "while (osaf_is_timeout(_time) == false)"

// The reason is for documentation purpose. Faster and easier to read.

[Canh] Done

 

char command1[MAX_DATA], command2[MAX_DATA];

// [Lennart] Why not give each command a descriptive name?

// Also each command should have its own variable. Anonymous

// variables that change meaning makes the code unnessecary hard to

[Canh] Done

 

 

// [Lennart] This command does not count the number of log/cfg files

// but I don't know exactly what this command is actually doing (hard to
analyze).

// Give this command a descriptive name as in example above and if that is
not

// enough then also wright a comment that describes what it is actually
doing.

sprintf(command1, "find %s -type f -mmin -1 "

  "| egrep
'%s.*\\.[log$\\|cfg$]' "

  "| wc -l | awk '{printf
$1}'",

  log_root_path,
"verRotatedFile");

 

[Canh] This command counts number of cfg and log files. I update the
description:

+ // Find cfg/log files and count number of files

+ // Step 1: Find all that files's data were last modified 1
minutes ago

+ // Step 2: Filter all 'verRotatedFile*.log' and
'verRotatedFile*.cfg'

+ // Step 3: Count number of files at step 2

+ char count_number_of_log_cfg_files[MAX_DATA];

+ sprintf(count_number_of_log_cfg_files,

+ "find %s -type f -mmin -1 "

+ "| egrep '%s.*\\.[log$\\|cfg$]' "

+ "| wc -l | awk '{printf $1}'",

+ log_root_path, "verRotatedFile");

 

(find /srv/shared/saflog -type f -mmin -1 | egrep
'verRotatedFile.*\.[log$\|cfg$]' | wc -l | awk '{printf $1}')

 

Regards

Canh

 

 

 

From: Lennart Lund  
Sent: Friday, June 28, 2019 10:26 PM
To: Canh Van Truong ; Vu Minh Nguyen

Cc: opensaf-devel@lists.sourceforge.net
Subject: Sv: [PATCH 0/1] Review Request for log: Update the try again for
admin operation [#3056]

 

Hi Canh,

 

See comments tagged [Lennart] in the attached file.

 

Thanks

Lennart

 

  _  

Från: Canh Van Truong mailto:canh.v.tru...@dektech.com.au> >
Skickat: den 27 juni 2019 09:20
Till: Lennart Lund; Vu Minh Nguyen
Kopia: opensaf-devel@lists.sourceforge.net
 ; Canh Van Truong
Ämne: [PATCH 0/1] Review Request for log: Update the try again for admin
operation [#3056] 

 

Summary: log: Update the try again for admin operation [#3056]
Review request for Ticket(s): 3056
Peer Reviewer(s): Vu, Lennart
Pull request to: *** LIST THE PERSON WITH PUSH ACCESS HERE ***
Affected branch(es): develop
Development branch: ticket-3056
Base revision: 97e375ff571bbdb163e6846b90e2f2da58394cbb
Personal repository: git://git.code.sf.net/u/canht32/review


Impacted area   Impact y/n

 Docsn
 Build systemn
 RPM/packaging   n
 Configuration files n
 Startup scripts n
 SAF servicesn
 OpenSAF servicesn
 Core libraries  n
 Samples n
 Tests   y
 Other   n


Comments (indicate scope for each "y" above):
-
*** EXPLAIN/COMMENT THE PATCH SERIES HERE ***

revision 7659200d2bd20d96d0dbfff6f583be478f9a6429
Author: Canh Van Truong mailto:canh.v.tru...@dektech.com.au> >
Date:   Thu, 27 Jun 2019 13:19:48 +0700

log: Update the try again for admin operation [#3056]

The logtest 6 49 and logtest 6 50 failed because the admin
operation fail due to closing log file timeout.

Update to try again the command admin operation in test cases



Complete diffstat:
--
 src/log/apitest/tet_LogOiOps.c | 54
++
 1 file changed, 34 insertions(+), 20 deletions(-)


Testing Commands:
-
*** LIST THE COMMAND LINE TOOLS/STEPS TO TEST YOUR CHANGES ***


Testing, Expected Results:
--
*** PASTE COMMAND OUTPUTS / TEST RESULTS ***


Conditions of Submission:
-
*** HOW MANY DAYS BEFORE PUSHING, CONSENSUS ETC ***


Arch  Built StartedLinux distro
---
mipsn  n
mips64  n  n
x86 n  n
x86_64  n  n
powerpc n  n
powerpc64   n  n


Reviewer Checklist:
---
[Submitters: make sure that your review doesn't trigger any checkmarks!]


Your checkin has not passed review because (see checked entries):

___ Your RR template is generally incomplete; it 

[devel] [PATCH 0/1] Review Request for log: Update the try again for admin operation [#3056] V2

2019-07-01 Thread Canh Van Truong
Summary: log: Update the try again for admin operation [#3056]
Review request for Ticket(s): 3056
Peer Reviewer(s): Lennart, Vu
Pull request to: *** LIST THE PERSON WITH PUSH ACCESS HERE ***
Affected branch(es): develop
Development branch: ticket-3056
Base revision: 97e375ff571bbdb163e6846b90e2f2da58394cbb
Personal repository: git://git.code.sf.net/u/canht32/review


Impacted area   Impact y/n

 Docsn
 Build systemn
 RPM/packaging   n
 Configuration files n
 Startup scripts n
 SAF servicesn
 OpenSAF servicesn
 Core libraries  n
 Samples n
 Tests   y
 Other   n


Comments (indicate scope for each "y" above):
-
*** EXPLAIN/COMMENT THE PATCH SERIES HERE ***

revision 9bcab8d44653a03463d9c32f3df20390709415aa
Author: Canh Van Truong 
Date:   Mon, 1 Jul 2019 16:36:49 +0700

log: Update the try again for admin operation [#3056]

The logtest 6 49 and logtest 6 50 failed because the admin
operation fail due to closing log file timeout.

Update to try again the command admin operation in test cases



Complete diffstat:
--
 src/log/apitest/tet_LogOiOps.c | 176 +++--
 1 file changed, 101 insertions(+), 75 deletions(-)


Testing Commands:
-
*** LIST THE COMMAND LINE TOOLS/STEPS TO TEST YOUR CHANGES ***


Testing, Expected Results:
--
*** PASTE COMMAND OUTPUTS / TEST RESULTS ***


Conditions of Submission:
-
*** HOW MANY DAYS BEFORE PUSHING, CONSENSUS ETC ***


Arch  Built StartedLinux distro
---
mipsn  n
mips64  n  n
x86 n  n
x86_64  n  n
powerpc n  n
powerpc64   n  n


Reviewer Checklist:
---
[Submitters: make sure that your review doesn't trigger any checkmarks!]


Your checkin has not passed review because (see checked entries):

___ Your RR template is generally incomplete; it has too many blank entries
that need proper data filled in.

___ You have failed to nominate the proper persons for review and push.

___ Your patches do not have proper short+long header

___ You have grammar/spelling in your header that is unacceptable.

___ You have exceeded a sensible line length in your headers/comments/text.

___ You have failed to put in a proper Trac Ticket # into your commits.

___ You have incorrectly put/left internal data in your comments/files
(i.e. internal bug tracking tool IDs, product names etc)

___ You have not given any evidence of testing beyond basic build tests.
Demonstrate some level of runtime or other sanity testing.

___ You have ^M present in some of your files. These have to be removed.

___ You have needlessly changed whitespace or added whitespace crimes
like trailing spaces, or spaces before tabs.

___ You have mixed real technical changes with whitespace and other
cosmetic code cleanup changes. These have to be separate commits.

___ You need to refactor your submission into logical chunks; there is
too much content into a single commit.

___ You have extraneous garbage in your review (merge commits etc)

___ You have giant attachments which should never have been sent;
Instead you should place your content in a public tree to be pulled.

___ You have too many commits attached to an e-mail; resend as threaded
commits, or place in a public tree for a pull.

___ You have resent this content multiple times without a clear indication
of what has changed between each re-send.

___ You have failed to adequately and individually address all of the
comments and change requests that were proposed in the initial review.

___ You have a misconfigured ~/.gitconfig file (i.e. user.name, user.email etc)

___ Your computer have a badly configured date and time; confusing the
the threaded patch review.

___ Your changes affect IPC mechanism, and you don't present any results
for in-service upgradability test.

___ Your changes affect user manual and documentation, your patch series
do not contain the patch that updates the Doxygen manual.



___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


[devel] [PATCH 1/1] log: Update the try again for admin operation [#3056]

2019-07-01 Thread Canh Van Truong
The logtest 6 49 and logtest 6 50 failed because the admin
operation fail due to closing log file timeout.

Update to try again the command admin operation in test cases
---
 src/log/apitest/tet_LogOiOps.c | 176 +++--
 1 file changed, 101 insertions(+), 75 deletions(-)

diff --git a/src/log/apitest/tet_LogOiOps.c b/src/log/apitest/tet_LogOiOps.c
index 25f53d3a2..f771bea76 100644
--- a/src/log/apitest/tet_LogOiOps.c
+++ b/src/log/apitest/tet_LogOiOps.c
@@ -5479,18 +5479,32 @@ done:
   _saLogStreamFixedLogRecordSize, SA_IMM_ATTR_SAUINT32T);
 }
 
+// Execute admin operation command and retry if it failed
+int execute_admin_operation_and_retries(const char *command)
+{
+   int rc = 0;
+   const uint64_t kWaitTime10s = 10 * 1000;
+   struct timespec timeout_time;
+   osaf_set_millis_timeout(kWaitTime10s, _time);
+   while (osaf_is_timeout(_time) == false) {
+   // Do the retries in case rotate/delete file fail due to
+   // filesystem issue
+   rc = systemCall(command);
+   if (rc == 0) break;
+   osaf_nanosleep();
+   }
+   return rc;
+}
+
 //
 // Test case for verifying the admin operation rotates log file is accepted
 // Steps:
 // 1. Create configuration app stream
 // 2. Verify command admin operation rotate log file is ok
 // 3. Delete configuration app stream
-//
 void admin_rotate_log_file(void)
 {
-   int rc = 0;
char command[MAX_DATA];
-   const uint64_t kWaitTime10s = 10 * 1000;
const char *object_dn =
"safLgStrCfg=admin_rotate_file,safApp=safLogService";
 
@@ -5498,19 +5512,11 @@ void admin_rotate_log_file(void)
sprintf(command, "immcfg -c SaLogStreamConfig %s "
"-a saLogStreamPathName=. "
"-a saLogStreamFileName=admin_rotate_file ", object_dn);
-   rc = systemCall(command);
+   int rc = systemCall(command);
if (rc == 0) {
// Admin operation rotate log file
sprintf(command, "immadm -o 2 %s", object_dn);
-   struct timespec timeout_time;
-   osaf_set_millis_timeout(kWaitTime10s, _time);
-   do {
-   // Do the retries in case rotate file fail due to
-   // filesystem issue
-   osaf_nanosleep();
-   rc = systemCall(command);
-   } while (rc != 0 && !osaf_is_timeout(_time));
-
+   rc = execute_admin_operation_and_retries(command);
rc_validate(rc, 0);
 
// Delete object
@@ -5529,29 +5535,29 @@ void admin_rotate_log_file(void)
 // Step2: Verify that total is 4 cfg and log files (2 log files and 2 cfg 
files)
 void verRotatedLogCfgFile(void)
 {
-   char command1[MAX_DATA], command2[MAX_DATA];
const char *object_dn =
"safLgStrCfg=verRotatedFile,safApp=safLogService";
const int max_file = 2;
-   char num_files_c[10];
-   uint32_t num_files = 0;
 
// Command to create configuration application stream
-   sprintf(command1, "immcfg -c SaLogStreamConfig %s "
- "-a saLogStreamPathName=. "
- "-a saLogStreamFileName=verRotatedFile"
- " -a saLogStreamMaxFilesRotated=%d",
- object_dn, max_file);
+   char create_cfg_application_stream[MAX_DATA];
+   sprintf(create_cfg_application_stream,
+   "immcfg -c SaLogStreamConfig %s "
+   "-a saLogStreamPathName=. "
+   "-a saLogStreamFileName=verRotatedFile1"
+   " -a saLogStreamMaxFilesRotated=%d",
+   object_dn, max_file);
// Command to delete configuration application stream
-   sprintf(command2, "immcfg -d %s", object_dn);
+   char delete_cfg_application_stream[MAX_DATA];
+   sprintf(delete_cfg_application_stream, "immcfg -d %s", object_dn);
 
// Create and delete the app stream 4 times.
// Log/cfg are created during creating stream.
for (int i = 0; i < max_file + 1; ++i) {
-   int rc = systemCall(command1);
+   int rc = systemCall(create_cfg_application_stream);
if (rc == 0) {
osaf_nanosleep();
-   rc = systemCall(command2);
+   rc = systemCall(delete_cfg_application_stream);
osaf_nanosleep();
}
if (rc != 0) {
@@ -5559,21 +5565,28 @@ void verRotatedLogCfgFile(void)
return;
}
}
-   // Command to count number of log/cfg files on disk
-   sprintf(command1, "find %s -type f -mmin -1 "
- "| egrep '%s.*\\.[log$\\|cfg$]' "
- "| wc -l | awk '{printf $1}'",
-