/* create and start update server instance */
if (tst == 0) {
- char argsBuf[AFSDIR_PATH_MAX], *args;
- size_t argsLen = 0;
+ char *args = NULL;
+ int r;
if (exportClear != NULL && *exportClear != '\0') {
- argsLen += strlen("-clear ") + strlen(exportClear) + 1;
- }
- if (exportCrypt != NULL && *exportCrypt != '\0') {
- argsLen += strlen("-crypt ") + strlen(exportCrypt) + 1;
- }
-
- if (argsLen == 0) {
- args = NULL;
- } else {
- if (argsLen <= AFSDIR_PATH_MAX) {
- args = argsBuf;
+ if (exportCrypt != NULL && *exportCrypt != '\0') {
+ r = asprintf(&args, "-clear %s -crypt %s",
+ exportClear, exportCrypt);
} else {
- args = malloc(argsLen);
+ r = asprintf(&args, "-clear %s", exportClear);
}
-
- if (args == NULL) {
- tst = ADMNOMEM;
+ } else {
+ if (exportCrypt != NULL && *exportCrypt != '\0') {
+ r = asprintf(&args, "-crypt %s", exportCrypt);
} else {
- if (exportClear == NULL) {
- sprintf(args, "-crypt %s", exportCrypt);
- } else if (exportCrypt == NULL) {
- sprintf(args, "-clear %s", exportClear);
- } else {
- sprintf(args, "-clear %s -crypt %s", exportClear,
- exportCrypt);
- }
+ args = NULL;
+ r = 0;
}
}
+ if (r < 0) {
+ tst = ADMNOMEM;
+ args = NULL;
+ }
if (tst == 0) {
if (!SimpleProcessStart
args, &tst2)) {
tst = tst2;
}
-
- if (args != NULL && args != argsBuf) {
- free(args);
- }
}
+ free(args);
}
if (tst != 0) {
/* create and start update client instance */
if (tst == 0) {
- char argsBuf[AFSDIR_PATH_MAX], *args;
- size_t argsLen = 0;
-
- argsLen += strlen(upserver) + 1;
-
- if (crypt) {
- argsLen += strlen("-crypt ");
- } else {
- argsLen += strlen("-clear ");
- }
+ char *args = NULL;
+ int r;
- if (frequency != 0) {
- argsLen += strlen("-t ") + 10 /* max uint */ + 1;
- }
-
- argsLen += strlen(import) + 1;
-
- if (argsLen <= AFSDIR_PATH_MAX) {
- args = argsBuf;
- } else {
- args = malloc(argsLen);
- }
+ if (frequency != 0)
+ r = asprintf(&args, "%s %s -t %u %s", upserver,
+ crypt ? "-crypt" : "-clear", frequency, import);
+ else
+ r = asprintf(&args, "%s %s %s", upserver,
+ crypt ? "-crypt" : "-clear", import);
- if (args == NULL) {
+ if (r < 0) {
tst = ADMNOMEM;
+ args = NULL;
} else {
- /* set up argument buffer */
- if (crypt) {
- sprintf(args, "%s -crypt ", upserver);
- } else {
- sprintf(args, "%s -clear ", upserver);
- }
- if (frequency != 0) {
- char *strp = args + strlen(args);
- sprintf(strp, "-t %u ", frequency);
- }
- strcat(args, import);
-
/* create and start instance */
if (!SimpleProcessStart
(cfg_host->bosHandle, upclientInstance, UPCLIENT_EXEPATH,
args, &tst2)) {
tst = tst2;
}
-
- if (args != argsBuf) {
- free(args);
- }
}
+ free(args);
}
if (tst != 0) {
{
int rc = 1;
afs_status_t tst2, tst = 0;
- char cmdBuf[AFSDIR_PATH_MAX], *cmd;
- size_t cmdLen;
+ char *cmd;
- cmdLen = strlen(executable) + 1 + (args == NULL ? 0 : (strlen(args) + 1));
-
- if (cmdLen <= AFSDIR_PATH_MAX) {
- cmd = cmdBuf;
+ if (args == NULL) {
+ cmd = strdup(executable);
} else {
- cmd = malloc(cmdLen);
+ if (asprintf(&cmd, "%s %s", executable, args) < 0)
+ cmd = NULL;
}
if (cmd == NULL) {
tst = ADMNOMEM;
} else {
- if (args == NULL) {
- strcpy(cmd, executable);
- } else {
- sprintf(cmd, "%s %s", executable, args);
- }
-
if (!bos_ProcessCreate
(bosHandle, (char *)instance, BOS_PROCESS_SIMPLE, cmd, NULL, NULL, &tst2)
&& tst2 != BZEXISTS) {
/* failed to set instance state to running */
tst = tst2;
}
-
- if (cmd != cmdBuf) {
- free(cmd);
- }
+ free(cmd);
}
if (tst != 0) {