PUBLIC int mprRun(MprDispatcher *dispatcher, cchar *command, cchar *input, char **output, char **error, MprTicks timeout) { MprCmd *cmd; cmd = mprCreateCmd(dispatcher); return mprRunCmd(cmd, command, NULL, input, output, error, timeout, MPR_CMD_IN | MPR_CMD_OUT | MPR_CMD_ERR); }
PUBLIC int runCmd(cchar *command, char *input, char **output, char **error, MprTime timeout, int flags) { MprCmd *cmd; cmd = mprCreateCmd(getDispatcher()); return mprRunCmd(cmd, command, NULL, input, output, error, timeout, MPR_CMD_IN | MPR_CMD_OUT | MPR_CMD_ERR | flags); }
static bool run(cchar *fmt, ...) { va_list args; MprCmd *cmd; char *out, *err; int rc; va_start(args, fmt); app->command = sfmtv(fmt, args); mprLog(1, "Run: %s", app->command); cmd = mprCreateCmd(NULL); rc = mprRunCmd(cmd, app->command, &out, &err, MANAGE_TIMEOUT, 0); app->error = sclone(err); app->output = sclone(out); mprDestroyCmd(cmd); va_end(args); return (rc != 0) ? 0 : 1; }
static int runCommand(HttpConn *conn, cchar *command, cchar *csource, cchar *module) { EspReq *req; EspRoute *eroute; MprCmd *cmd; char *err, *out; req = conn->data; eroute = req->route->eroute; cmd = mprCreateCmd(conn->dispatcher); if ((req->commandLine = espExpandCommand(command, csource, module)) == 0) { httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Missing EspCompile directive for %s", csource); return MPR_ERR_CANT_READ; } mprLog(4, "ESP command: %s\n", req->commandLine); if (eroute->env) { mprAddNullItem(eroute->env); mprSetCmdDefaultEnv(cmd, (cchar**) &eroute->env->items[0]); } if (eroute->searchPath) { mprSetCmdSearchPath(cmd, eroute->searchPath); } // WARNING: GC will run here if (mprRunCmd(cmd, req->commandLine, &out, &err, -1, 0) != 0) { if (err == 0 || *err == '\0') { /* Windows puts errors to stdout Ugh! */ err = out; } if (eroute->showErrors) { httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Can't run command %s, error %s", req->commandLine, err); } else { mprError("ESP: Can't run command %s, error %s", req->commandLine, err); httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Can't compile view"); } return MPR_ERR_CANT_COMPLETE; } return 0; }
PUBLIC int espEmail(HttpConn *conn, cchar *to, cchar *from, cchar *subject, MprTime date, cchar *mime, cchar *message, MprList *files) { MprList *lines; MprCmd *cmd; cchar *body, *boundary, *contents, *encoded, *file; char *out, *err; ssize length; int i, next, status; if (!from || !*from) { from = "anonymous"; } if (!subject || !*subject) { subject = "Mail message"; } if (!mime || !*mime) { mime = "text/plain"; } if (!date) { date = mprGetTime(); } boundary = sjoin("esp.mail=", mprGetMD5("BOUNDARY"), NULL); lines = mprCreateList(0, 0); mprAddItem(lines, sfmt("To: %s", to)); mprAddItem(lines, sfmt("From: %s", from)); mprAddItem(lines, sfmt("Date: %s", mprFormatLocalTime(0, date))); mprAddItem(lines, sfmt("Subject: %s", subject)); mprAddItem(lines, "MIME-Version: 1.0"); mprAddItem(lines, sfmt("Content-Type: multipart/mixed; boundary=%s", boundary)); mprAddItem(lines, ""); boundary = sjoin("--", boundary, NULL); mprAddItem(lines, boundary); mprAddItem(lines, sfmt("Content-Type: %s", mime)); mprAddItem(lines, ""); mprAddItem(lines, ""); mprAddItem(lines, message); for (ITERATE_ITEMS(files, file, next)) { mprAddItem(lines, boundary); if ((mime = mprLookupMime(NULL, file)) == 0) { mime = "application/octet-stream"; } mprAddItem(lines, "Content-Transfer-Encoding: base64"); mprAddItem(lines, sfmt("Content-Disposition: inline; filename=\"%s\"", mprGetPathBase(file))); mprAddItem(lines, sfmt("Content-Type: %s; name=\"%s\"", mime, mprGetPathBase(file))); mprAddItem(lines, ""); contents = mprReadPathContents(file, &length); encoded = mprEncode64Block(contents, length); for (i = 0; i < length; i += 76) { mprAddItem(lines, snclone(&encoded[i], i + 76)); } } mprAddItem(lines, sfmt("%s--", boundary)); body = mprListToString(lines, "\n"); httpTraceContent(conn, "esp.email", "context", body, slen(body), 0); cmd = mprCreateCmd(conn->dispatcher); if (mprRunCmd(cmd, "sendmail -t", NULL, body, &out, &err, -1, 0) < 0) { mprDestroyCmd(cmd); return MPR_ERR_CANT_OPEN; } if (mprWaitForCmd(cmd, ME_ESP_EMAIL_TIMEOUT) < 0) { httpTrace(conn, "esp.email.error", "error", "msg=\"Timeout waiting for command to complete\", timeout=%d, command=\"%s\"", ME_ESP_EMAIL_TIMEOUT, cmd->argv[0]); mprDestroyCmd(cmd); return MPR_ERR_CANT_COMPLETE; } if ((status = mprGetCmdExitStatus(cmd)) != 0) { httpTrace(conn, "esp.email.error", "error", "msg=\"Sendmail failed\", status=%d, error=\"%s\"", status, err); mprDestroyCmd(cmd); return MPR_ERR_CANT_WRITE; } mprDestroyCmd(cmd); return 0; }