git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/8] imap-send: Windows support
@ 2009-10-13 19:25 Erik Faye-Lund
  2009-10-13 19:25 ` [PATCH v3 1/8] imap-send: remove useless uid code Erik Faye-Lund
  0 siblings, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


Here's the 3rd iteration of my patches for
Windows-compatibility in imap-send.

 - Patch 1-3 is about getting rid of or rewriting
   code with portability issues.
 - Patch 4 fixes a compilation error on Windows
 - Patch 5 enables compilation of imap-send
 - Patch 6-7 enables SSL-suport for mingw
 - Patch 8 enables imap-send and SSL for msvc

Changes in this iteration compared to v2 are as
follows:

 - A typo has been corrected in the commit message
   for 1/8
 - some unneeded preprocessor directives has been
   deleted from patch 4/8

Thanks to Matt Kraai for reviewing v2

P.S:
Perhaps some people are only on the msysgit mailing
list and wonders where v2 went -- I forgot to CC
you guys last round, sorry about that! If you're
interrested, you can read the discussion here:

http://thread.gmane.org/gmane.comp.version-control.git/129471

Erik Faye-Lund (6):
  imap-send: use separate read and write fds
  imap-send: use run-command API for tunneling
  imap-send: fix compilation-error on Windows
  imap-send: build imap-send on Windows
  mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle
  mingw: enable OpenSSL

Jeff King (1):
  imap-send: remove useless uid code

Marius Storm-Olsen (1):
  MSVC: Enable OpenSSL, and translate -lcrypto

 Makefile                        |    4 +-
 compat/mingw.h                  |   21 ++++
 compat/vcbuild/scripts/clink.pl |    3 +
 contrib/buildsystems/engine.pl  |    3 +
 imap-send.c                     |  226 +++++++++------------------------------
 5 files changed, 77 insertions(+), 180 deletions(-)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v3 1/8] imap-send: remove useless uid code
  2009-10-13 19:25 [PATCH v3 0/8] imap-send: Windows support Erik Faye-Lund
@ 2009-10-13 19:25 ` Erik Faye-Lund
  2009-10-13 19:25   ` [PATCH v3 2/8] imap-send: use separate read and write fds Erik Faye-Lund
  0 siblings, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Jeff King, Erik Faye-Lund


From: Jeff King <peff@peff.net>

The imap-send code is based on code from isync, a program
for syncing imap mailboxes. Because of this, it has
inherited some code that makes sense for isync, but not for
imap-send.

In particular, when storing a message, it does one of:

  - if the server supports it, note the server-assigned
    unique identifier (UID) given to each message

  - otherwise, assigned a random UID and store it in the
    message header as X-TUID

Presumably this is used in isync to be able to synchronize
mailstores multiple times without duplication. But for
imap-send, the values are useless; we never do anything
with them and simply forget them at the end of the program.

This patch removes the useless code. Not only is it nice for
maintainability to get rid of dead code, but the removed
code relied on the existence of /dev/urandom, which made it
a portability problem for non-Unix platforms.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 imap-send.c |  155 ++++------------------------------------------------------
 1 files changed, 11 insertions(+), 144 deletions(-)

diff --git a/imap-send.c b/imap-send.c
index 3847fd1..8da7a94 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -123,9 +123,6 @@ static int nfvasprintf(char **strp, const char *fmt, va_list ap)
 	return len;
 }
 
-static void arc4_init(void);
-static unsigned char arc4_getbyte(void);
-
 struct imap_server_conf {
 	char *name;
 	char *tunnel;
@@ -489,52 +486,6 @@ static int nfsnprintf(char *buf, int blen, const char *fmt, ...)
 	return ret;
 }
 
-static struct {
-	unsigned char i, j, s[256];
-} rs;
-
-static void arc4_init(void)
-{
-	int i, fd;
-	unsigned char j, si, dat[128];
-
-	if ((fd = open("/dev/urandom", O_RDONLY)) < 0 && (fd = open("/dev/random", O_RDONLY)) < 0) {
-		fprintf(stderr, "Fatal: no random number source available.\n");
-		exit(3);
-	}
-	if (read_in_full(fd, dat, 128) != 128) {
-		fprintf(stderr, "Fatal: cannot read random number source.\n");
-		exit(3);
-	}
-	close(fd);
-
-	for (i = 0; i < 256; i++)
-		rs.s[i] = i;
-	for (i = j = 0; i < 256; i++) {
-		si = rs.s[i];
-		j += si + dat[i & 127];
-		rs.s[i] = rs.s[j];
-		rs.s[j] = si;
-	}
-	rs.i = rs.j = 0;
-
-	for (i = 0; i < 256; i++)
-		arc4_getbyte();
-}
-
-static unsigned char arc4_getbyte(void)
-{
-	unsigned char si, sj;
-
-	rs.i++;
-	si = rs.s[rs.i];
-	rs.j += si;
-	sj = rs.s[rs.j];
-	rs.s[rs.i] = sj;
-	rs.s[rs.j] = si;
-	return rs.s[(si + sj) & 0xff];
-}
-
 static struct imap_cmd *v_issue_imap_cmd(struct imap_store *ctx,
 					 struct imap_cmd_cb *cb,
 					 const char *fmt, va_list ap)
@@ -1198,88 +1149,20 @@ static int imap_make_flags(int flags, char *buf)
 	return d;
 }
 
-#define TUIDL 8
-
-static int imap_store_msg(struct store *gctx, struct msg_data *data, int *uid)
+static int imap_store_msg(struct store *gctx, struct msg_data *data)
 {
 	struct imap_store *ctx = (struct imap_store *)gctx;
 	struct imap *imap = ctx->imap;
 	struct imap_cmd_cb cb;
-	char *fmap, *buf;
 	const char *prefix, *box;
-	int ret, i, j, d, len, extra, nocr;
-	int start, sbreak = 0, ebreak = 0;
-	char flagstr[128], tuid[TUIDL * 2 + 1];
+	int ret, d;
+	char flagstr[128];
 
 	memset(&cb, 0, sizeof(cb));
 
-	fmap = data->data;
-	len = data->len;
-	nocr = !data->crlf;
-	extra = 0, i = 0;
-	if (!CAP(UIDPLUS) && uid) {
-	nloop:
-		start = i;
-		while (i < len)
-			if (fmap[i++] == '\n') {
-				extra += nocr;
-				if (i - 2 + nocr == start) {
-					sbreak = ebreak = i - 2 + nocr;
-					goto mktid;
-				}
-				if (!memcmp(fmap + start, "X-TUID: ", 8)) {
-					extra -= (ebreak = i) - (sbreak = start) + nocr;
-					goto mktid;
-				}
-				goto nloop;
-			}
-		/* invalid message */
-		free(fmap);
-		return DRV_MSG_BAD;
-	mktid:
-		for (j = 0; j < TUIDL; j++)
-			sprintf(tuid + j * 2, "%02x", arc4_getbyte());
-		extra += 8 + TUIDL * 2 + 2;
-	}
-	if (nocr)
-		for (; i < len; i++)
-			if (fmap[i] == '\n')
-				extra++;
-
-	cb.dlen = len + extra;
-	buf = cb.data = xmalloc(cb.dlen);
-	i = 0;
-	if (!CAP(UIDPLUS) && uid) {
-		if (nocr) {
-			for (; i < sbreak; i++)
-				if (fmap[i] == '\n') {
-					*buf++ = '\r';
-					*buf++ = '\n';
-				} else
-					*buf++ = fmap[i];
-		} else {
-			memcpy(buf, fmap, sbreak);
-			buf += sbreak;
-		}
-		memcpy(buf, "X-TUID: ", 8);
-		buf += 8;
-		memcpy(buf, tuid, TUIDL * 2);
-		buf += TUIDL * 2;
-		*buf++ = '\r';
-		*buf++ = '\n';
-		i = ebreak;
-	}
-	if (nocr) {
-		for (; i < len; i++)
-			if (fmap[i] == '\n') {
-				*buf++ = '\r';
-				*buf++ = '\n';
-			} else
-				*buf++ = fmap[i];
-	} else
-		memcpy(buf, fmap + i, len - i);
-
-	free(fmap);
+	cb.dlen = data->len;
+	cb.data = xmalloc(cb.dlen);
+	memcpy(cb.data, data->data, data->len);
 
 	d = 0;
 	if (data->flags) {
@@ -1288,26 +1171,14 @@ static int imap_store_msg(struct store *gctx, struct msg_data *data, int *uid)
 	}
 	flagstr[d] = 0;
 
-	if (!uid) {
-		box = gctx->conf->trash;
-		prefix = ctx->prefix;
-		cb.create = 1;
-		if (ctx->trashnc)
-			imap->caps = imap->rcaps & ~(1 << LITERALPLUS);
-	} else {
-		box = gctx->name;
-		prefix = !strcmp(box, "INBOX") ? "" : ctx->prefix;
-		cb.create = 0;
-	}
-	cb.ctx = uid;
+	box = gctx->name;
+	prefix = !strcmp(box, "INBOX") ? "" : ctx->prefix;
+	cb.create = 0;
 	ret = imap_exec_m(ctx, &cb, "APPEND \"%s%s\" %s", prefix, box, flagstr);
 	imap->caps = imap->rcaps;
 	if (ret != DRV_OK)
 		return ret;
-	if (!uid)
-		ctx->trashnc = 0;
-	else
-		gctx->count++;
+	gctx->count++;
 
 	return DRV_OK;
 }
@@ -1483,7 +1354,6 @@ int main(int argc, char **argv)
 {
 	struct msg_data all_msgs, msg;
 	struct store *ctx = NULL;
-	int uid = 0;
 	int ofs = 0;
 	int r;
 	int total, n = 0;
@@ -1491,9 +1361,6 @@ int main(int argc, char **argv)
 
 	git_extract_argv0_path(argv[0]);
 
-	/* init the random number generator */
-	arc4_init();
-
 	setup_git_directory_gently(&nongit_ok);
 	git_config(git_imap_config, NULL);
 
@@ -1540,7 +1407,7 @@ int main(int argc, char **argv)
 			break;
 		if (server.use_html)
 			wrap_in_html(&msg);
-		r = imap_store_msg(ctx, &msg, &uid);
+		r = imap_store_msg(ctx, &msg);
 		if (r != DRV_OK)
 			break;
 		n++;
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 2/8] imap-send: use separate read and write fds
  2009-10-13 19:25 ` [PATCH v3 1/8] imap-send: remove useless uid code Erik Faye-Lund
@ 2009-10-13 19:25   ` Erik Faye-Lund
  2009-10-13 19:25     ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Erik Faye-Lund
  0 siblings, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


This is a patch that enables us to use the run-command
API, which is supported on Windows.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 imap-send.c |   37 +++++++++++++++++++++++--------------
 1 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/imap-send.c b/imap-send.c
index 8da7a94..7216453 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -151,7 +151,7 @@ struct imap_list {
 };
 
 struct imap_socket {
-	int fd;
+	int fd[2];
 	SSL *ssl;
 };
 
@@ -301,8 +301,12 @@ static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int ve
 		ssl_socket_perror("SSL_new");
 		return -1;
 	}
-	if (!SSL_set_fd(sock->ssl, sock->fd)) {
-		ssl_socket_perror("SSL_set_fd");
+	if (!SSL_set_rfd(sock->ssl, sock->fd[0])) {
+		ssl_socket_perror("SSL_set_rfd");
+		return -1;
+	}
+	if (!SSL_set_wfd(sock->ssl, sock->fd[1])) {
+		ssl_socket_perror("SSL_set_wfd");
 		return -1;
 	}
 
@@ -324,11 +328,12 @@ static int socket_read(struct imap_socket *sock, char *buf, int len)
 		n = SSL_read(sock->ssl, buf, len);
 	else
 #endif
-		n = xread(sock->fd, buf, len);
+		n = xread(sock->fd[0], buf, len);
 	if (n <= 0) {
 		socket_perror("read", sock, n);
-		close(sock->fd);
-		sock->fd = -1;
+		close(sock->fd[0]);
+		close(sock->fd[1]);
+		sock->fd[0] = sock->fd[1] = -1;
 	}
 	return n;
 }
@@ -341,11 +346,12 @@ static int socket_write(struct imap_socket *sock, const char *buf, int len)
 		n = SSL_write(sock->ssl, buf, len);
 	else
 #endif
-		n = write_in_full(sock->fd, buf, len);
+		n = write_in_full(sock->fd[1], buf, len);
 	if (n != len) {
 		socket_perror("write", sock, n);
-		close(sock->fd);
-		sock->fd = -1;
+		close(sock->fd[0]);
+		close(sock->fd[1]);
+		sock->fd[0] = sock->fd[1] = -1;
 	}
 	return n;
 }
@@ -358,7 +364,8 @@ static void socket_shutdown(struct imap_socket *sock)
 		SSL_free(sock->ssl);
 	}
 #endif
-	close(sock->fd);
+	close(sock->fd[0]);
+	close(sock->fd[1]);
 }
 
 /* simple line buffering */
@@ -911,7 +918,7 @@ static void imap_close_server(struct imap_store *ictx)
 {
 	struct imap *imap = ictx->imap;
 
-	if (imap->buf.sock.fd != -1) {
+	if (imap->buf.sock.fd[0] != -1) {
 		imap_exec(ictx, NULL, "LOGOUT");
 		socket_shutdown(&imap->buf.sock);
 	}
@@ -939,7 +946,7 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 	ctx = xcalloc(sizeof(*ctx), 1);
 
 	ctx->imap = imap = xcalloc(sizeof(*imap), 1);
-	imap->buf.sock.fd = -1;
+	imap->buf.sock.fd[0] = imap->buf.sock.fd[1] = -1;
 	imap->in_progress_append = &imap->in_progress;
 
 	/* open connection to IMAP server */
@@ -966,7 +973,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 
 		close(a[0]);
 
-		imap->buf.sock.fd = a[1];
+		imap->buf.sock.fd[0] = a[1];
+		imap->buf.sock.fd[1] = dup(a[1]);
 
 		imap_info("ok\n");
 	} else {
@@ -1043,7 +1051,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 			goto bail;
 		}
 
-		imap->buf.sock.fd = s;
+		imap->buf.sock.fd[0] = s;
+		imap->buf.sock.fd[1] = dup(s);
 
 		if (srvc->use_ssl &&
 		    ssl_socket_connect(&imap->buf.sock, 0, srvc->ssl_verify)) {
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 3/8] imap-send: use run-command API for tunneling
  2009-10-13 19:25   ` [PATCH v3 2/8] imap-send: use separate read and write fds Erik Faye-Lund
@ 2009-10-13 19:25     ` Erik Faye-Lund
  2009-10-13 19:25       ` [PATCH v3 4/8] imap-send: fix compilation-error on Windows Erik Faye-Lund
  2009-10-13 19:59       ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Johannes Sixt
  0 siblings, 2 replies; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 imap-send.c |   37 ++++++++++++++++---------------------
 1 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/imap-send.c b/imap-send.c
index 7216453..dc3da98 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -24,6 +24,7 @@
 
 #include "cache.h"
 #include "exec_cmd.h"
+#include "run-command.h"
 #ifdef NO_OPENSSL
 typedef void *SSL;
 #endif
@@ -940,8 +941,7 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 	struct imap_store *ctx;
 	struct imap *imap;
 	char *arg, *rsp;
-	int s = -1, a[2], preauth;
-	pid_t pid;
+	int s = -1, preauth;
 
 	ctx = xcalloc(sizeof(*ctx), 1);
 
@@ -952,29 +952,24 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 	/* open connection to IMAP server */
 
 	if (srvc->tunnel) {
-		imap_info("Starting tunnel '%s'... ", srvc->tunnel);
+		const char *argv[4];
+		struct child_process tunnel = {0};
 
-		if (socketpair(PF_UNIX, SOCK_STREAM, 0, a)) {
-			perror("socketpair");
-			exit(1);
-		}
+		imap_info("Starting tunnel '%s'... ", srvc->tunnel);
 
-		pid = fork();
-		if (pid < 0)
-			_exit(127);
-		if (!pid) {
-			if (dup2(a[0], 0) == -1 || dup2(a[0], 1) == -1)
-				_exit(127);
-			close(a[0]);
-			close(a[1]);
-			execl("/bin/sh", "sh", "-c", srvc->tunnel, NULL);
-			_exit(127);
-		}
+		argv[0] = "/bin/sh";
+		argv[1] = "-c";
+		argv[2] = srvc->tunnel;
+		argv[3] = NULL;
 
-		close(a[0]);
+		tunnel.argv = argv;
+		tunnel.in = -1;
+		tunnel.out = -1;
+		if (start_command(&tunnel))
+			die("cannot start proxy %s", argv[0]);
 
-		imap->buf.sock.fd[0] = a[1];
-		imap->buf.sock.fd[1] = dup(a[1]);
+		imap->buf.sock.fd[0] = tunnel.out;
+		imap->buf.sock.fd[1] = tunnel.in;
 
 		imap_info("ok\n");
 	} else {
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 4/8] imap-send: fix compilation-error on Windows
  2009-10-13 19:25     ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Erik Faye-Lund
@ 2009-10-13 19:25       ` Erik Faye-Lund
  2009-10-13 19:25         ` [PATCH v3 5/8] imap-send: build imap-send " Erik Faye-Lund
  2009-10-13 19:59       ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Johannes Sixt
  1 sibling, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


mmsystem.h (included from windows.h) defines DRV_OK to 1. To avoid
an error due to DRV_OK redefenition, this patch undefines the old
definition (i.e the one from mmsystem.h) before defining DRV_OK.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 imap-send.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/imap-send.c b/imap-send.c
index dc3da98..07f86ce 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -94,6 +94,7 @@ struct msg_data {
 	unsigned int crlf:1;
 };
 
+#undef DRV_OK
 #define DRV_OK          0
 #define DRV_MSG_BAD     -1
 #define DRV_BOX_BAD     -2
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 5/8] imap-send: build imap-send on Windows
  2009-10-13 19:25       ` [PATCH v3 4/8] imap-send: fix compilation-error on Windows Erik Faye-Lund
@ 2009-10-13 19:25         ` Erik Faye-Lund
  2009-10-13 19:25           ` [PATCH v3 6/8] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle Erik Faye-Lund
  2009-10-13 19:57           ` [PATCH v3 5/8] imap-send: build imap-send on Windows Johannes Sixt
  0 siblings, 2 replies; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


Since the POSIX-specific tunneling code has been replaced
by the run-command API (and a compile-error has been
cleaned away), we can now enable imap-send on Windows
builds.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 Makefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index fea237b..3ddb3b3 100644
--- a/Makefile
+++ b/Makefile
@@ -365,6 +365,7 @@ PROGRAMS += git-show-index$X
 PROGRAMS += git-unpack-file$X
 PROGRAMS += git-upload-pack$X
 PROGRAMS += git-var$X
+PROGRAMS += git-imap-send$X
 
 # List built-in command $C whose implementation cmd_$C() is not in
 # builtin-$C.o but is linked in as part of some other command.
@@ -1075,7 +1076,6 @@ EXTLIBS += -lz
 
 ifndef NO_POSIX_ONLY_PROGRAMS
 	PROGRAMS += git-daemon$X
-	PROGRAMS += git-imap-send$X
 endif
 ifndef NO_OPENSSL
 	OPENSSL_LIBSSL = -lssl
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 6/8] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle
  2009-10-13 19:25         ` [PATCH v3 5/8] imap-send: build imap-send " Erik Faye-Lund
@ 2009-10-13 19:25           ` Erik Faye-Lund
  2009-10-13 19:25             ` [PATCH v3 7/8] mingw: enable OpenSSL Erik Faye-Lund
  2009-10-13 19:57           ` [PATCH v3 5/8] imap-send: build imap-send on Windows Johannes Sixt
  1 sibling, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


SSL_set_fd (and friends) expects a OS file handle on Windows, not
a file descriptor as on UNIX(-ish).

This patch makes the Windows version of SSL_set_fd behave like the
UNIX versions, by calling _get_osfhandle on it's input.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 compat/mingw.h |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/compat/mingw.h b/compat/mingw.h
index 5b5258b..6907345 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -124,6 +124,27 @@ static inline int waitpid(pid_t pid, int *status, unsigned options)
 	return -1;
 }
 
+#ifndef NO_OPENSSL
+#include <openssl/ssl.h>
+static inline int mingw_SSL_set_fd(SSL *ssl, int fd)
+{
+	return SSL_set_fd(ssl, _get_osfhandle(fd));
+}
+#define SSL_set_fd mingw_SSL_set_fd
+
+static inline int mingw_SSL_set_rfd(SSL *ssl, int fd)
+{
+	return SSL_set_rfd(ssl, _get_osfhandle(fd));
+}
+#define SSL_set_rfd mingw_SSL_set_rfd
+
+static inline int mingw_SSL_set_wfd(SSL *ssl, int fd)
+{
+	return SSL_set_wfd(ssl, _get_osfhandle(fd));
+}
+#define SSL_set_wfd mingw_SSL_set_wfd
+#endif
+
 /*
  * implementations of missing functions
  */
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 7/8] mingw: enable OpenSSL
  2009-10-13 19:25           ` [PATCH v3 6/8] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle Erik Faye-Lund
@ 2009-10-13 19:25             ` Erik Faye-Lund
  2009-10-13 19:25               ` [PATCH v3 8/8] MSVC: Enable OpenSSL, and translate -lcrypto Erik Faye-Lund
  0 siblings, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Erik Faye-Lund


Since we have OpenSSL in msysgit now, enable it to support SSL
encryption for imap-send.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 Makefile |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index 3ddb3b3..e416fdb 100644
--- a/Makefile
+++ b/Makefile
@@ -952,7 +952,6 @@ else
 ifneq (,$(findstring MINGW,$(uname_S)))
 	pathsep = ;
 	NO_PREAD = YesPlease
-	NO_OPENSSL = YesPlease
 	NO_LIBGEN_H = YesPlease
 	NO_SYMLINK_HEAD = YesPlease
 	NO_IPV6 = YesPlease
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 8/8] MSVC: Enable OpenSSL, and translate -lcrypto
  2009-10-13 19:25             ` [PATCH v3 7/8] mingw: enable OpenSSL Erik Faye-Lund
@ 2009-10-13 19:25               ` Erik Faye-Lund
  0 siblings, 0 replies; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 19:25 UTC (permalink / raw)
  To: git; +Cc: msysgit, Marius Storm-Olsen, Erik Faye-Lund


From: Marius Storm-Olsen <mstormo@gmail.com>

We don't use crypto, but rather require libeay32 and
ssleay32. handle it in both the Makefile msvc linker
script, and the buildsystem generator.

Signed-off-by: Marius Storm-Olsen <mstormo@gmail.com>
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 Makefile                        |    1 -
 compat/vcbuild/scripts/clink.pl |    3 +++
 contrib/buildsystems/engine.pl  |    3 +++
 3 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index e416fdb..b39bed4 100644
--- a/Makefile
+++ b/Makefile
@@ -900,7 +900,6 @@ ifdef MSVC
 	GIT_VERSION := $(GIT_VERSION).MSVC
 	pathsep = ;
 	NO_PREAD = YesPlease
-	NO_OPENSSL = YesPlease
 	NO_LIBGEN_H = YesPlease
 	NO_SYMLINK_HEAD = YesPlease
 	NO_IPV6 = YesPlease
diff --git a/compat/vcbuild/scripts/clink.pl b/compat/vcbuild/scripts/clink.pl
index f9528c0..8a2112f 100644
--- a/compat/vcbuild/scripts/clink.pl
+++ b/compat/vcbuild/scripts/clink.pl
@@ -29,6 +29,9 @@ while (@ARGV) {
 		push(@args, "zlib.lib");
 	} elsif ("$arg" eq "-liconv") {
 		push(@args, "iconv.lib");
+	} elsif ("$arg" eq "-lcrypto") {
+		push(@args, "libeay32.lib");
+		push(@args, "ssleay32.lib");
 	} elsif ("$arg" =~ /^-L/ && "$arg" ne "-LTCG") {
 		$arg =~ s/^-L/-LIBPATH:/;
 		push(@args, $arg);
diff --git a/contrib/buildsystems/engine.pl b/contrib/buildsystems/engine.pl
index 20bd061..d506717 100644
--- a/contrib/buildsystems/engine.pl
+++ b/contrib/buildsystems/engine.pl
@@ -315,6 +315,9 @@ sub handleLinkLine
             $appout = shift @parts;
         } elsif ("$part" eq "-lz") {
             push(@libs, "zlib.lib");
+	} elsif ("$part" eq "-lcrypto") {
+            push(@libs, "libeay32.lib");
+            push(@libs, "ssleay32.lib");
         } elsif ($part =~ /^-/) {
             push(@lflags, $part);
         } elsif ($part =~ /\.(a|lib)$/) {
-- 
1.6.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 5/8] imap-send: build imap-send on Windows
  2009-10-13 19:25         ` [PATCH v3 5/8] imap-send: build imap-send " Erik Faye-Lund
  2009-10-13 19:25           ` [PATCH v3 6/8] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle Erik Faye-Lund
@ 2009-10-13 19:57           ` Johannes Sixt
  2009-10-13 20:16             ` Erik Faye-Lund
  1 sibling, 1 reply; 16+ messages in thread
From: Johannes Sixt @ 2009-10-13 19:57 UTC (permalink / raw)
  To: msysgit; +Cc: Erik Faye-Lund, git, Erik Faye-Lund


On Dienstag, 13. Oktober 2009, Erik Faye-Lund wrote:
>  PROGRAMS += git-unpack-file$X
>  PROGRAMS += git-upload-pack$X
>  PROGRAMS += git-var$X
> +PROGRAMS += git-imap-send$X

This list is sorted. Please keep it so.

-- Hannes

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 3/8] imap-send: use run-command API for tunneling
  2009-10-13 19:25     ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Erik Faye-Lund
  2009-10-13 19:25       ` [PATCH v3 4/8] imap-send: fix compilation-error on Windows Erik Faye-Lund
@ 2009-10-13 19:59       ` Johannes Sixt
  2009-10-13 20:27         ` Erik Faye-Lund
  1 sibling, 1 reply; 16+ messages in thread
From: Johannes Sixt @ 2009-10-13 19:59 UTC (permalink / raw)
  To: msysgit; +Cc: Erik Faye-Lund, git, Erik Faye-Lund


On Dienstag, 13. Oktober 2009, Erik Faye-Lund wrote:
> +		argv[0] = "/bin/sh";
> +		argv[1] = "-c";
> +		argv[2] = srvc->tunnel;
> +		argv[3] = NULL;

Is there a particular reason that you run "/bin/sh" with a path? I doubt that 
this works on Windows.

-- Hannes

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 5/8] imap-send: build imap-send on Windows
  2009-10-13 19:57           ` [PATCH v3 5/8] imap-send: build imap-send on Windows Johannes Sixt
@ 2009-10-13 20:16             ` Erik Faye-Lund
  2009-10-13 21:34               ` Erik Faye-Lund
  0 siblings, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 20:16 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: msysgit, git


On Tue, Oct 13, 2009 at 9:57 PM, Johannes Sixt <j6t@kdbg.org> wrote:
> On Dienstag, 13. Oktober 2009, Erik Faye-Lund wrote:
>>  PROGRAMS += git-unpack-file$X
>>  PROGRAMS += git-upload-pack$X
>>  PROGRAMS += git-var$X
>> +PROGRAMS += git-imap-send$X
>
> This list is sorted. Please keep it so.
>
> -- Hannes
>

Aha, I didn't notice! Thanks, I'll fix :)

-- 
Erik "kusma" Faye-Lund

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 3/8] imap-send: use run-command API for  tunneling
  2009-10-13 19:59       ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Johannes Sixt
@ 2009-10-13 20:27         ` Erik Faye-Lund
  2009-10-14 19:58           ` Johannes Sixt
  0 siblings, 1 reply; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 20:27 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: msysgit, git


On Tue, Oct 13, 2009 at 9:59 PM, Johannes Sixt <j6t@kdbg.org> wrote:
> On Dienstag, 13. Oktober 2009, Erik Faye-Lund wrote:
>> +             argv[0] = "/bin/sh";
>> +             argv[1] = "-c";
>> +             argv[2] = srvc->tunnel;
>> +             argv[3] = NULL;
>
> Is there a particular reason that you run "/bin/sh" with a path? I doubt that
> this works on Windows.
>
> -- Hannes
>

It doesn't - I was being conservative. Getting tunneling to work on
Windows hasn't been a part of  my priorities (even though I did
briefly test it at some point and got it working, provided a patch
that changed the path to sh to a windows-path). Changing it to "sh -c"
(as was suggested earlier) could AFAIK break something for people who
have other 'sh's in path before /bin -- not that I think it would
matter terribly much.

If I were to fix this, I'd prefer not using sh at all on Windows. I've
seen that connect.c doesn't prepend "/bin/sh -c" at all, requiring
tunnels to be self-contained scripts or native binaries, unless I'm
mistaken. I'm not sure if this works at all on Windows, though. I just
think that the assumption that sh is the shell that is going to run
the tunnel is wrong to make, especially on Windows.

I'm really unsure if it's worth the hassle.

-- 
Erik "kusma" Faye-Lund

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 5/8] imap-send: build imap-send on Windows
  2009-10-13 20:16             ` Erik Faye-Lund
@ 2009-10-13 21:34               ` Erik Faye-Lund
  0 siblings, 0 replies; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-13 21:34 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: msysgit, git


On Tue, Oct 13, 2009 at 10:16 PM, Erik Faye-Lund
<kusmabite@googlemail.com> wrote:
> On Tue, Oct 13, 2009 at 9:57 PM, Johannes Sixt <j6t@kdbg.org> wrote:
>> This list is sorted. Please keep it so.
> Aha, I didn't notice! Thanks, I'll fix :)

Here's the new (trivial) diff. I don't think it's worth a resend, at
least not yet.

---

diff --git a/Makefile b/Makefile
index fea237b..0d13af3 100644
--- a/Makefile
+++ b/Makefile
@@ -354,6 +354,7 @@ EXTRA_PROGRAMS =
 PROGRAMS += $(EXTRA_PROGRAMS)
 PROGRAMS += git-fast-import$X
 PROGRAMS += git-hash-object$X
+PROGRAMS += git-imap-send$X
 PROGRAMS += git-index-pack$X
 PROGRAMS += git-merge-index$X
 PROGRAMS += git-merge-tree$X
@@ -1075,7 +1076,6 @@ EXTLIBS += -lz

 ifndef NO_POSIX_ONLY_PROGRAMS
        PROGRAMS += git-daemon$X
-       PROGRAMS += git-imap-send$X
 endif
 ifndef NO_OPENSSL
        OPENSSL_LIBSSL = -lssl



-- 
Erik "kusma" Faye-Lund

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 3/8] imap-send: use run-command API for  tunneling
  2009-10-13 20:27         ` Erik Faye-Lund
@ 2009-10-14 19:58           ` Johannes Sixt
  2009-10-16 14:27             ` Erik Faye-Lund
  0 siblings, 1 reply; 16+ messages in thread
From: Johannes Sixt @ 2009-10-14 19:58 UTC (permalink / raw)
  To: kusmabite; +Cc: msysgit, git


On Dienstag, 13. Oktober 2009, Erik Faye-Lund wrote:
> If I were to fix this, I'd prefer not using sh at all on Windows. I've
> seen that connect.c doesn't prepend "/bin/sh -c" at all, requiring
> tunnels to be self-contained scripts or native binaries, unless I'm
> mistaken. I'm not sure if this works at all on Windows, though. I just
> think that the assumption that sh is the shell that is going to run
> the tunnel is wrong to make, especially on Windows.
>
> I'm really unsure if it's worth the hassle.

We already depend on the existence of a Bourne shell for our scripted 
commands. There are already more places in the code that run "sh" 
than "/bin/sh".

-- Hannes

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 3/8] imap-send: use run-command API for  tunneling
  2009-10-14 19:58           ` Johannes Sixt
@ 2009-10-16 14:27             ` Erik Faye-Lund
  0 siblings, 0 replies; 16+ messages in thread
From: Erik Faye-Lund @ 2009-10-16 14:27 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: msysgit, git


Sorry about the late reply, lots of things to do.
On Wed, Oct 14, 2009 at 9:58 PM, Johannes Sixt <j6t@kdbg.org> wrote:
> On Dienstag, 13. Oktober 2009, Erik Faye-Lund wrote:
>> I'm really unsure if it's worth the hassle.
>
> We already depend on the existence of a Bourne shell for our scripted
> commands. There are already more places in the code that run "sh"
> than "/bin/sh".

OK, you've got me convinced. I'll update the patch with this tweak.

-- 
Erik "kusma" Faye-Lund

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2009-10-16 14:27 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-13 19:25 [PATCH v3 0/8] imap-send: Windows support Erik Faye-Lund
2009-10-13 19:25 ` [PATCH v3 1/8] imap-send: remove useless uid code Erik Faye-Lund
2009-10-13 19:25   ` [PATCH v3 2/8] imap-send: use separate read and write fds Erik Faye-Lund
2009-10-13 19:25     ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Erik Faye-Lund
2009-10-13 19:25       ` [PATCH v3 4/8] imap-send: fix compilation-error on Windows Erik Faye-Lund
2009-10-13 19:25         ` [PATCH v3 5/8] imap-send: build imap-send " Erik Faye-Lund
2009-10-13 19:25           ` [PATCH v3 6/8] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle Erik Faye-Lund
2009-10-13 19:25             ` [PATCH v3 7/8] mingw: enable OpenSSL Erik Faye-Lund
2009-10-13 19:25               ` [PATCH v3 8/8] MSVC: Enable OpenSSL, and translate -lcrypto Erik Faye-Lund
2009-10-13 19:57           ` [PATCH v3 5/8] imap-send: build imap-send on Windows Johannes Sixt
2009-10-13 20:16             ` Erik Faye-Lund
2009-10-13 21:34               ` Erik Faye-Lund
2009-10-13 19:59       ` [PATCH v3 3/8] imap-send: use run-command API for tunneling Johannes Sixt
2009-10-13 20:27         ` Erik Faye-Lund
2009-10-14 19:58           ` Johannes Sixt
2009-10-16 14:27             ` Erik Faye-Lund

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).