From: Timo Sirainen Date: Fri, 28 Jan 2011 17:41:03 +0000 (+0200) Subject: script utility now supports the script using stdio/stdout for communication. X-Git-Tag: 2.1.alpha1~399 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd4cc8e98cc894d716942ec3173bc4d237dc43b1;p=thirdparty%2Fdovecot%2Fcore.git script utility now supports the script using stdio/stdout for communication. --- diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index 00b4ec8d7e..c3f11161f4 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -1015,7 +1015,7 @@ static void quota_warning_execute(struct quota_root *root, const char *cmd) } str = t_str_new(1024); - str_append(str, "VERSION\tscript\t1\t0\n"); + str_append(str, "VERSION\tscript\t2\t0\n"); for (; *args != NULL; args++) { str_append(str, *args); str_append_c(str, '\n'); diff --git a/src/util/script.c b/src/util/script.c index d5455ab328..c53828c684 100644 --- a/src/util/script.c +++ b/src/util/script.c @@ -11,7 +11,7 @@ #include #include -#define SCRIPT_MAJOR_VERSION 1 +#define SCRIPT_MAJOR_VERSION 2 #define SCRIPT_READ_TIMEOUT_SECS 10 static ARRAY_TYPE(const_string) exec_args; @@ -44,7 +44,9 @@ static void client_connected(struct master_service_connection *conn) arg 1 arg 2 ... - */ + + [data] + */ alarm(SCRIPT_READ_TIMEOUT_SECS); do { prev_size = input->used; @@ -82,6 +84,13 @@ static void client_connected(struct master_service_connection *conn) } if (close(MASTER_STATUS_FD) < 0) i_error("close(status) failed: %m"); + + if (write(conn->fd, "1\n", 2) != 2) + i_error("write() failed: %m"); + + if (dup2(conn->fd, STDIN_FILENO) < 0 || + dup2(conn->fd, STDOUT_FILENO) < 0) + i_error("dup2() failed: %m"); if (close(conn->fd) < 0) i_error("close() failed: %m");