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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel