osaf/tools/safamf/amfpm/Makefile.am | 1 + osaf/tools/safamf/amfpm/amf_pm.c | 31 ++++++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/osaf/tools/safamf/amfpm/Makefile.am b/osaf/tools/safamf/amfpm/Makefile.am --- a/osaf/tools/safamf/amfpm/Makefile.am +++ b/osaf/tools/safamf/amfpm/Makefile.am @@ -21,6 +21,7 @@ MAINTAINERCLEANFILES = Makefile.in sbin_PROGRAMS = amfpm amfpm_CPPFLAGS = \ + -DSA_EXTENDED_NAME_SOURCE \ $(AM_CPPFLAGS) amfpm_SOURCES = \ diff --git a/osaf/tools/safamf/amfpm/amf_pm.c b/osaf/tools/safamf/amfpm/amf_pm.c --- a/osaf/tools/safamf/amfpm/amf_pm.c +++ b/osaf/tools/safamf/amfpm/amf_pm.c @@ -137,7 +137,7 @@ int main(int argc, char **argv) SaVersionT ver = {.releaseCode = 'B', ver.majorVersion = 0x04, ver.minorVersion = 0x01}; SaAisErrorT rc; SaAmfHandleT amf_hdl; - SaNameT compName = {0}; + SaNameT compName; char *prog = basename(argv[0]); SaUint64T processId = 0; bool start = false; @@ -157,6 +157,8 @@ int main(int argc, char **argv) char *pidfile = NULL; char *dn; SaAmfRecommendedRecoveryT recrec = SA_AMF_NO_RECOMMENDATION; + char name[2048]; + int length; while (1) { c = getopt_long(argc, argv, "af:p:hor:", long_options, NULL); @@ -193,14 +195,13 @@ int main(int argc, char **argv) /* DN specified as argument has precendence of env var */ if ((argc - optind) == 1) { - compName.length = snprintf((char*) compName.value, sizeof(compName.value), "%s", argv[optind]); - if (compName.length >= sizeof(compName.value)) { + length = snprintf((char*)name, sizeof(name), "%s", argv[optind]); + if (length >= sizeof(name)) { logerr("too long DN\n"); exit(EXIT_FAILURE); } } else if ((dn = getenv("SA_AMF_COMPONENT_NAME")) != NULL) { - compName.length = snprintf((char*) compName.value, - sizeof(compName.value), "%s", dn); + length = snprintf((char*) name, sizeof(name), "%s", dn); /* If AMF component use syslog for errors. */ usesyslog = true; @@ -228,17 +229,18 @@ int main(int argc, char **argv) ** by LSB start_daemon (and friends) using basename from DN */ if ((processId == 0) && (pidfile == NULL)) { - char basename[64]; + char basename[2048]; char *start, *stop, *p; int i; + int pidfilelen; - start = strchr((char*)compName.value, '='); + start = strchr((char*)name, '='); if (start == NULL) { logerr("invalid component DN\n"); exit(EXIT_FAILURE); } - stop = strchr((char*)compName.value, ','); + stop = strchr((char*)name, ','); if (stop == NULL) { logerr("invalid component DN\n"); exit(EXIT_FAILURE); @@ -248,9 +250,10 @@ int main(int argc, char **argv) basename[i] = *p; basename[i] = '\0'; + pidfilelen = strlen(basename) + 15; - pidfile = malloc(64); - snprintf(pidfile, 64, "/var/run/%s.pid", basename); + pidfile = malloc(pidfilelen); + snprintf(pidfile, pidfilelen, "/var/run/%s.pid", basename); } if (processId == 0) { @@ -262,7 +265,9 @@ int main(int argc, char **argv) logerr("saAmfInitialize FAILED %u\n", rc); exit(EXIT_FAILURE); } - + + // Assign the component name + saAisNameLend((char *)name, &compName); if (start) { rc = saAmfPmStart_3(amf_hdl, &compName, processId, descendentsTreeDepth, pmErr, recrec); @@ -278,6 +283,10 @@ int main(int argc, char **argv) } } + if (pidfile != NULL) { + free(pidfile); + } + (void) saAmfFinalize(amf_hdl); return 0; ------------------------------------------------------------------------------ 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