osaf/tools/saflog/saflogger/Makefile.am  |   1 +
 osaf/tools/saflog/saflogger/saf_logger.c |  90 ++++++++++++++++++++++++++-----
 2 files changed, 75 insertions(+), 16 deletions(-)


With app stream, saflogger used app stream DN as logFileName.
With Long DN, the app stream DN could be longer than 255 characters in length.

This patch provides one new option -f <filename>.
This option is only applicable for app stream.

diff --git a/osaf/tools/saflog/saflogger/Makefile.am 
b/osaf/tools/saflog/saflogger/Makefile.am
--- a/osaf/tools/saflog/saflogger/Makefile.am
+++ b/osaf/tools/saflog/saflogger/Makefile.am
@@ -22,6 +22,7 @@ MAINTAINERCLEANFILES = Makefile.in
 bin_PROGRAMS = saflogger
 
 saflogger_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/tools/saflog/include
 
diff --git a/osaf/tools/saflog/saflogger/saf_logger.c 
b/osaf/tools/saflog/saflogger/saf_logger.c
--- a/osaf/tools/saflog/saflogger/saf_logger.c
+++ b/osaf/tools/saflog/saflogger/saf_logger.c
@@ -37,8 +37,9 @@
 #include <poll.h>
 #include <unistd.h>
 #include <limits.h>
+#include <stdbool.h>
+#include "osaf_extended_name.h"
 
-#include <saAis.h>
 #include <saLog.h>
 
 #include "saf_error.h"
@@ -83,7 +84,7 @@ static void usage(void)
        printf("\t%s - write log record to log stream\n", progname);
 
        printf("\nSYNOPSIS\n");
-       printf("\t%s [options] [message ...]\n", progname);
+       printf("\t%s [options] [-f <FILENAME>] [message ...]\n", progname);
 
        printf("\nDESCRIPTION\n");
        printf("\t%s is a SAF LOG client used to write a log record into a 
specified log stream.\n", progname);
@@ -95,11 +96,16 @@ static void usage(void)
        printf("\t-n or --notification           write to notification 
stream\n");
        printf("\t-y or --system                 write to system stream 
(default)\n");
        printf("\t-a NAME or --application=NAME  write to application stream 
NAME (create it if not exist)\n");
+       printf("\t-f FILENAME                    write log record to 
FILENAME\n");
        printf("\t-s SEV or --severity=SEV       use severity SEV, default 
INFO\n");
        printf("\t\tvalid severity names: emerg, alert, crit, error, warn, 
notice, info\n");
+       printf("\nNOTES\n");
+       printf("\t1) -f is only applicable for app stream.\n");
+       printf("\t1) <FILENAME> length must not be longer than 255 
characters.\n");
 
        printf("\nEXAMPLES\n");
        printf("\tsaflogger -a safLgStrCfg=Test \"Hello world\"\n");
+       printf("\tsaflogger -a safLgStrCfg=Test -f testLogFile \"Hello 
world\"\n");
        printf("\tsaflogger -s crit \"I am going down\"\n\n");
 }
 
@@ -230,7 +236,7 @@ static SaLogSeverityT get_severity(char 
 int main(int argc, char *argv[])
 {
        int c;
-       SaNameT logStreamName = {.length = 0 };
+       SaNameT logStreamName;
        SaLogFileCreateAttributesT_2 *logFileCreateAttributes = NULL;
        SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
        SaLogStreamOpenFlagsT logStreamOpenFlags = 0;
@@ -253,6 +259,7 @@ int main(int argc, char *argv[])
        SaLogStreamHandleT logStreamHandle;
        SaSelectionObjectT selectionObject;
        unsigned int wait_time;
+       bool is_appstream = false, f_opt = false;
 
        srandom(getpid());
 
@@ -261,11 +268,23 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
 
-       sprintf((char *)logSvcUsrName.value, "%s.%u@%s", "saflogger", getpid(), 
hostname);
-       logSvcUsrName.length = strlen((char *)logSvcUsrName.value);
+       if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0) {
+               fprintf(stderr, "Failed to enable Extended SaNameT");
+               exit(EXIT_FAILURE);
+       }
+
+       /**
+        * osaf_extended_name_init() is added in case osaf_extended_* APIs
+        * are used before saLogInitialize().
+        */
+       osaf_extended_name_init();
+
+       char svcUserName[kOsafMaxDnLength];
+       snprintf(svcUserName, sizeof(svcUserName), "%s.%u@%s", "saflogger", 
getpid(), hostname);
+       saAisNameLend(svcUserName, &logSvcUsrName);
 
        /* Setup default values */
-       strcpy((char *)logStreamName.value, SA_LOG_STREAM_SYSTEM);      /* 
system stream is default */
+       saAisNameLend(SA_LOG_STREAM_SYSTEM, &logStreamName);
        logRecord.logTimeStamp = SA_TIME_UNKNOWN;       /* LOG service should 
supply timestamp */
        logRecord.logHdrType = SA_LOG_GENERIC_HEADER;
        logRecord.logHeader.genericHdr.notificationClassId = NULL;
@@ -280,32 +299,58 @@ int main(int argc, char *argv[])
        appLogFileCreateAttributes.maxFilesRotated = DEFAULT_MAX_FILES_ROTATED;
        /* Use built-in log file format in log server for app stream */
        appLogFileCreateAttributes.logFileFmt = NULL;
+       appLogFileCreateAttributes.logFileName = NULL;
 
        while (1) {
-               c = getopt_long(argc, argv, "?hlnya:s:", long_options, NULL);
+               c = getopt_long(argc, argv, "?hlnya:s:f:", long_options, NULL);
                if (c == -1) {
                        break;
                }
                switch (c) {
                case 'l':
-                       strcpy((char *)logStreamName.value, 
SA_LOG_STREAM_ALARM);
+                       saAisNameLend(SA_LOG_STREAM_ALARM, &logStreamName);
                        logRecord.logHdrType = SA_LOG_NTF_HEADER;
                        break;
                case 'n':
-                       strcpy((char *)logStreamName.value, 
SA_LOG_STREAM_NOTIFICATION);
+                       saAisNameLend(SA_LOG_STREAM_NOTIFICATION, 
&logStreamName);
                        logRecord.logHdrType = SA_LOG_NTF_HEADER;
                        break;
                case 'y':
-                       strcpy((char *)logStreamName.value, 
SA_LOG_STREAM_SYSTEM);
+                       saAisNameLend(SA_LOG_STREAM_SYSTEM, &logStreamName);
                        break;
                case 'a':
+                       logFileCreateAttributes = &appLogFileCreateAttributes;
+                       logStreamOpenFlags = SA_LOG_STREAM_CREATE;
+
+                       char tmpDn[kOsafMaxDnLength + 8 + 1] = {0};
                        if (strstr(optarg, "safLgStr"))
-                               strcpy((char *)logStreamName.value, optarg);
+                               strncpy(tmpDn, optarg, sizeof(tmpDn) - 1);
                        else
-                               sprintf((char *)logStreamName.value, 
"safLgStr=%s", optarg);
-                       logFileCreateAttributes = &appLogFileCreateAttributes;
+                               snprintf(tmpDn, sizeof(tmpDn), "safLgStr=%s", 
optarg);
+
+                       if (strlen(tmpDn) > kOsafMaxDnLength) {
+                               fprintf(stderr, "Application stream DN is so 
long (%lu). Max: %d \n",
+                                       strlen(optarg), kOsafMaxDnLength);
+                               fprintf(stderr, "Shut down app. \n");
+                               exit(EXIT_FAILURE);
+                       }
+                       saAisNameLend(tmpDn, &logStreamName);
+                       is_appstream = true;
+                       if (f_opt == false)
+                               appLogFileCreateAttributes.logFileName = 
strdup(optarg);
+                       break;
+               case 'f':
+                       if (f_opt == true) {
+                               fprintf(stderr, "More than one option -f are 
given.\n");
+                               fprintf(stderr, "Try saflogger -h for more 
information.\n");
+                               exit(EXIT_FAILURE);
+
+                       }
+                       if (appLogFileCreateAttributes.logFileName != NULL)
+                               free(appLogFileCreateAttributes.logFileName);
+
                        appLogFileCreateAttributes.logFileName = strdup(optarg);
-                       logStreamOpenFlags = SA_LOG_STREAM_CREATE;
+                       f_opt = true;
                        break;
                case 's':
                        logRecord.logHeader.genericHdr.logSeverity = 
get_severity(optarg);
@@ -322,6 +367,21 @@ int main(int argc, char *argv[])
                }
        }
 
+       if (f_opt == true && is_appstream == false) {
+               fprintf(stderr, "Note: -f is only applicaple for app 
stream.\n");
+               fprintf(stderr, "Try saflogger -h for more information.\n");
+               exit(EXIT_FAILURE);
+       }
+
+       if (appLogFileCreateAttributes.logFileName != NULL && is_appstream == 
true) {
+               size_t len = 0;
+               if ((len = strlen(appLogFileCreateAttributes.logFileName)) > 
255) {
+                       fprintf(stderr, "FILENAME is too long (%zu) (max: 255 
characters).\n", len);
+                       fprintf(stderr, "Try saflogger -h for more 
information.\n");
+                       exit(EXIT_FAILURE);
+               }
+       }
+
        if (optind >= argc) {
                /* No body of log record */
        }
@@ -351,8 +411,6 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
 
-       logStreamName.length = strlen((char *)logStreamName.value);
-
        if (logRecord.logHdrType == SA_LOG_NTF_HEADER) {
                /* Setup some valid values */
                logRecord.logHeader.ntfHdr.notificationId = 
SA_NTF_IDENTIFIER_UNUSED;

------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to