Hi Praveen, I have one minor comment:
Globally used functions should have a header (actually all functions/methods) describing what the function do, its parameters (in/out) and the return value. This is missing for the new get_long_long_digit(...) function. I know there are a lot of uncommented functions in the code which is not good but even if we cannot fix all of them we should not add more... BR Lennart > -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: den 18 september 2014 12:21 > To: Lennart Lund; [email protected] > Cc: [email protected] > Subject: [PATCH 1 of 1] tools/safntf : validate ntfsend options V2 [#1069] > > osaf/tools/safntf/include/ntfclient.h | 1 + > osaf/tools/safntf/ntfsend/ntfsend.c | 36 > ++++++++++++++++++++++++++++++++-- > osaf/tools/safntf/src/ntfclient.c | 28 +++++++++++++++++++++++++- > 3 files changed, 60 insertions(+), 5 deletions(-) > > > Added validation for notificationType also, got missed in V1. > > This patch adds validation for following attributes: > 1)probableCause, > 2)eventType > 3)perceivedSeverity/severity. > 4)eventTime. > 5)notificationType. > > Also ntfsubcribe prints event time in human readable form also. > > diff --git a/osaf/tools/safntf/include/ntfclient.h > b/osaf/tools/safntf/include/ntfclient.h > --- a/osaf/tools/safntf/include/ntfclient.h > +++ b/osaf/tools/safntf/include/ntfclient.h > @@ -130,5 +130,6 @@ typedef SaUint16T saNotificationFlagsT; > /* used by ntfread and ntfsend */ > void getVendorId(SaNtfClassIdT *notificationClassId); > int get_long_digit(char *str, long *val); > +int get_long_long_digit(char *str, long long *val); > > #endif > diff --git a/osaf/tools/safntf/ntfsend/ntfsend.c > b/osaf/tools/safntf/ntfsend/ntfsend.c > --- a/osaf/tools/safntf/ntfsend/ntfsend.c > +++ b/osaf/tools/safntf/ntfsend/ntfsend.c > @@ -773,6 +773,7 @@ sendNotification(const saNotificationAll > int main(int argc, char *argv[]) > { > long value; > + long long valuell; > char *endptr; > int current_option; > SaBoolT optionFlag = SA_FALSE; > @@ -849,12 +850,28 @@ int main(int argc, char *argv[]) > myNotificationParams.eventType = > (SaNtfEventTypeT)atoi(optarg); > /* No default value */ > myNotificationFlags = 0x0000; > + if ((myNotificationParams.eventType < > SA_NTF_ALARM_NOTIFICATIONS_START) || > + > (myNotificationParams.eventType > > SA_NTF_ALARM_ENVIRONMENT)) { > + fprintf(stderr,"invalid value for > eventType\n"); > + exit(EXIT_FAILURE); > + } > + > break; > case 'E': > - myNotificationParams.eventTime = > (SaTimeT)atoll(optarg); > + if (get_long_long_digit(optarg, &valuell)) { > + myNotificationParams.eventTime = > valuell; > + } else { > + fprintf(stderr,"invalid input for > time\n"); > + exit(EXIT_FAILURE); > + } > break; > case 'p': > myNotificationParams.probableCause = > (SaNtfProbableCauseT)atoi(optarg); > + if ((myNotificationParams.probableCause < > SA_NTF_ADAPTER_ERROR) || > + > (myNotificationParams.probableCause > > SA_NTF_UNSPECIFIED_REASON)) { > + fprintf(stderr,"invalid value for > probableCause\n"); > + exit(EXIT_FAILURE); > + } > break; > case 'r': > if (get_long_digit(optarg, &value)) { > @@ -871,10 +888,23 @@ int main(int argc, char *argv[]) > case 's': > myNotificationParams.perceivedSeverity = > (SaNtfSeverityT)atoi(optarg); > myNotificationParams.severity = > (SaNtfSeverityT)atoi(optarg); > + if ((myNotificationParams.severity < > SA_NTF_SEVERITY_CLEARED) || > + > (myNotificationParams.severity > SA_NTF_SEVERITY_CRITICAL)) { > + fprintf(stderr,"invalid value for > perceivedSeverity/severity\n"); > + exit(EXIT_FAILURE); > + } > break; > case 'T': > - value = strtol(optarg, &endptr, 16); > - myNotificationParams.notificationType = > (SaNtfNotificationTypeT)value; > + value = > (SaNtfNotificationTypeT)strtol(optarg, &endptr, 16); > + if ((value != > SA_NTF_TYPE_OBJECT_CREATE_DELETE) && > + (value != > SA_NTF_TYPE_ATTRIBUTE_CHANGE) && > + (value != > SA_NTF_TYPE_STATE_CHANGE) && > + (value != > SA_NTF_TYPE_ALARM) && > + (value != > SA_NTF_TYPE_SECURITY_ALARM)) { > + fprintf(stderr,"invalid value for > notificationType\n"); > + exit(EXIT_FAILURE); > + } > + myNotificationParams.notificationType = > value; > break; > case ':': > (void)printf("Option -%c requires an > argument!!!!\n", optopt); > diff --git a/osaf/tools/safntf/src/ntfclient.c > b/osaf/tools/safntf/src/ntfclient.c > --- a/osaf/tools/safntf/src/ntfclient.c > +++ b/osaf/tools/safntf/src/ntfclient.c > @@ -634,6 +634,7 @@ static void print_header(const SaNtfNoti > SaNtfSubscriptionIdT subscriptionId, > SaNtfNotificationTypeT notificationType) > { > + static char time[32]; > if (verbose) { > printf("notificationID = %d\n", > (int)*(notificationHeader->notificationId)); > @@ -675,8 +676,12 @@ static void print_header(const SaNtfNoti > notificationHeader->notificationClassId->minorId); > } > > - if (verbose) > - printf("eventTime = %lld\n", *notificationHeader- > >eventTime); > + if (verbose) { > + time_t time_in_secs = *notificationHeader- > >eventTime/SA_TIME_ONE_SECOND; > + /*Print time in human readable form also .*/ > + (void)strftime(time, sizeof(time), "%a %b %d %T %Z %Y", > localtime(&time_in_secs)); > + printf("eventTime = %lld (%s)\n",*notificationHeader- > >eventTime, time); > + } > > if (notificationHeader->lengthAdditionalText > 0) > printf("additionalText = \"%s\"\n", > @@ -1010,3 +1015,22 @@ void getVendorId(SaNtfClassIdT * notific > } > free(p); > } > + > +int get_long_long_digit(char *str, long long *val) > +{ > + char *endptr; > + errno = 0; > + *val = strtoll(str, &endptr, 0); > + > + if ((errno == ERANGE ) || (errno != 0 && *val == 0)) { > + perror("strtoll"); > + return 0; > + } > + if (endptr == str) { > + fprintf(stderr, "No digits were found\n"); > + return 0; > + } > + if (*endptr != '\0') /* other chars than digits */ > + return 0; > + return 1; > +} ------------------------------------------------------------------------------ Want excitement? Manually upgrade your production database. When you want reliability, choose Perforce Perforce version control. Predictably reliable. http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
