Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 21:11:46 +0000 (18:11 -0300)]
Rewrite POP nethook as a connection layer.
It seemed the most simple thing to do so we could drop the nethook
interface entirely.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 18:35:34 +0000 (15:35 -0300)]
Remove dependency on nethook and null hook.
With SSL as a connection layer, it's very simple to implement a
reverse pass-through proxy simply plugging the two connections.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 19:58:27 +0000 (16:58 -0300)]
Close the other end of the connection too.
When the proxy is the one to close the connection, it should close both
ends, since there will be no event indicating one of the ends was
closed.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 17:28:32 +0000 (14:28 -0300)]
Handle close event in SSL layer watch.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 17:26:47 +0000 (14:26 -0300)]
Check for driver methods before calling them and reset them on close.
This may avoid some hickups when methods are improperly called.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 17:25:21 +0000 (14:25 -0300)]
Use close instead of shutdown.
The difference is that close will push the remaining data to be sent
before closing the connection.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 17:24:26 +0000 (14:24 -0300)]
Handle other socket events and push them forward.
Handle HUP event and the case where the other end has closed the
connection and read returns 0.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 05:45:24 +0000 (02:45 -0300)]
Only start logging after successfully starting server.
User GLib log messages instead of printing to stderr, but only set log
handler to syslog after successfully start waiting for connections.
Then, the user will get proper error messages at the console if proxy
cannot be started.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 05:27:16 +0000 (02:27 -0300)]
Add option to make program run in foreground.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 05:14:52 +0000 (02:14 -0300)]
Added some comments and reminders in connection system.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 05:09:34 +0000 (02:09 -0300)]
Update documentation to popproxy, instead of improxy.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 04:59:54 +0000 (01:59 -0300)]
Implement server port support and update copyright year and style.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 04:53:21 +0000 (01:53 -0300)]
Remove the ssl hook files, since we don't need them any more.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 04:51:22 +0000 (01:51 -0300)]
Use the null hook instead of the ssl hook.
This will allow us to remove the ssl hook entirely, since it's repeating
code from the ssl connection driver and complicates things more than
necessary.
We lose server port configuration now, but it should be plain easy to
get it back.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 04:49:54 +0000 (01:49 -0300)]
Make null hook use SSL connection driver and pop3s port by default.
This null hook should get parameters for both the port and SSL support.
Using URIs would be the best way to do it.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 04:45:46 +0000 (01:45 -0300)]
Export ssl connection driver in header and reorganize Makefile.am.
This includes hcconn_ssl.c effectively into the building system and
headers, allowing it to be used by other modules.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 22:07:09 +0000 (19:07 -0300)]
Added SSL client layer.
This layer should be easily migrated into a server layer too. It should
make things easier when communicating with SSL peers, since it's pretty
transparent to the peer proxy connection.
Thadeu Lima de Souza Cascardo [Fri, 3 Jul 2009 01:40:05 +0000 (22:40 -0300)]
Fix memory leak: destroy channel layer when closing.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 23:47:16 +0000 (20:47 -0300)]
Separate iochannel implementation from HCConn interface.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 23:06:49 +0000 (20:06 -0300)]
Split copyright years in different lines.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 23:05:23 +0000 (20:05 -0300)]
Remove watch before closing connection.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 20:13:46 +0000 (17:13 -0300)]
Allow server to reuse bound address.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 20:04:26 +0000 (17:04 -0300)]
Split internal details of HCConn into header to allow other layers.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 18:56:19 +0000 (15:56 -0300)]
Remove unneeded server name information in ssl status.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 18:45:22 +0000 (15:45 -0300)]
Rename iochannel to hcconn.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 18:40:41 +0000 (15:40 -0300)]
BUG: write call was replaced by a read call
Instead of writing, we were reading from the socket. Fix it.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 18:36:24 +0000 (15:36 -0300)]
Only set socket as non blocking after sending connection notice.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 18:35:49 +0000 (15:35 -0300)]
Do not consider handshaking done if some error was returned.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 18:00:07 +0000 (15:00 -0300)]
Remove the write hook.
We never needed this and we shall never need it. As long as connection
system is able to buffer writes, we are OK.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 17:59:08 +0000 (14:59 -0300)]
Dispatch connect event.
The connect event is needed to do TLS handshaking. This is not the best
implementation, since we don't do async connections right now.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 17:49:13 +0000 (14:49 -0300)]
Change from GNet to HCConn.
Now, we use our own implementation of TCP connection and server, instead
of using GNet. There is some missing pieces and it doesn't work right
now, but it's easier to hack on and we don't depend on this library
anymore.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 17:47:56 +0000 (14:47 -0300)]
Let user set HCConn callback function and data.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 16:55:29 +0000 (13:55 -0300)]
Added connection structure to replace GNet.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 16:08:06 +0000 (13:08 -0300)]
Added watch for server connections.
Register a callback to be called when a server socket receives a
connection.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 15:37:55 +0000 (12:37 -0300)]
Added support for creating a TCP server.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 04:47:14 +0000 (01:47 -0300)]
Make some internal functions static.
Thadeu Lima de Souza Cascardo [Thu, 2 Jul 2009 04:46:28 +0000 (01:46 -0300)]
Added library to do a TCP connection.
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 21:53:39 +0000 (18:53 -0300)]
Really remove unused files for popproxy
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 19:19:03 +0000 (16:19 -0300)]
Make server port configurable
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 17:35:37 +0000 (14:35 -0300)]
Tell automake to include the configuration file in distribution
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 17:31:33 +0000 (14:31 -0300)]
Remove protocol detection altogether
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 17:30:10 +0000 (14:30 -0300)]
Do not require jabber headers
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 17:29:13 +0000 (14:29 -0300)]
Remove jabber files from Makefile too
Thadeu Lima de Souza Cascardo [Wed, 1 Jul 2009 17:23:41 +0000 (14:23 -0300)]
Remove unneeded libraries for popproxy
Thadeu Lima de Souza Cascardo [Mon, 22 Jun 2009 15:21:14 +0000 (12:21 -0300)]
Stop leaking connections to the server when denying access.
Thadeu Lima de Souza Cascardo [Mon, 22 Jun 2009 14:22:08 +0000 (11:22 -0300)]
Close databases for every query to avoid concurrency.
This allows to manipulate the database while proxy is running. This also
solves the problem when a database exists but is empty. In this case,
consider as if it does not exist.
Thadeu Lima de Souza Cascardo [Mon, 22 Jun 2009 14:21:38 +0000 (11:21 -0300)]
Implement database listing.
Thadeu Lima de Souza Cascardo [Sat, 20 Jun 2009 02:29:29 +0000 (23:29 -0300)]
Destroy SSL connection properly.
Thadeu Lima de Souza Cascardo [Sat, 20 Jun 2009 02:27:24 +0000 (23:27 -0300)]
Added a manager that adds and removes users from allow and deny tables.
Thadeu Lima de Souza Cascardo [Sat, 20 Jun 2009 01:51:33 +0000 (22:51 -0300)]
Deny map is deny.db, not allow.db.
Thadeu Lima de Souza Cascardo [Sat, 20 Jun 2009 01:31:14 +0000 (22:31 -0300)]
Use QDBM to look up for user access permission.
Thadeu Lima de Souza Cascardo [Fri, 19 Jun 2009 22:24:13 +0000 (19:24 -0300)]
Added stub support for access control, with deny by default.
Thadeu Lima de Souza Cascardo [Thu, 11 Jun 2009 00:00:28 +0000 (21:00 -0300)]
Check for the user trying to authenticate.
Thadeu Lima de Souza Cascardo [Wed, 10 Jun 2009 23:22:36 +0000 (20:22 -0300)]
Read line by line from client and write it to server.
Now, it is possible to look at a whole line in case we receive only part
of it in a given TCP segment.
Thadeu Lima de Souza Cascardo [Wed, 10 Jun 2009 23:01:05 +0000 (20:01 -0300)]
Added buffer so we can buffer entire lines in a later patch.
Thadeu Lima de Souza Cascardo [Wed, 10 Jun 2009 17:31:56 +0000 (14:31 -0300)]
Added a hook on top of the SSL layer, allowing to filter data.
Thadeu Lima de Souza Cascardo [Wed, 10 Jun 2009 17:13:04 +0000 (14:13 -0300)]
Split SSL server support from SSL client support.
Thadeu Lima de Souza Cascardo [Sun, 7 Jun 2009 16:55:10 +0000 (13:55 -0300)]
Use configuration default values.
When there is no value for a given configuration key, use default
values.
Thadeu Lima de Souza Cascardo [Sun, 7 Jun 2009 16:54:50 +0000 (13:54 -0300)]
Free strings allocated from reading the configuration file.
Thadeu Lima de Souza Cascardo [Sun, 7 Jun 2009 15:40:48 +0000 (12:40 -0300)]
Exit if not able to read and parse the configuration file.
Thadeu Lima de Souza Cascardo [Sun, 7 Jun 2009 15:35:20 +0000 (12:35 -0300)]
Exit if not able to create server.
If we cannot bind to the address, exit. Only log the listen address if
it is successfull.
Thadeu Lima de Souza Cascardo [Sat, 6 Jun 2009 22:32:15 +0000 (19:32 -0300)]
Added support for SSL when connecting to server.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 15:10:24 +0000 (12:10 -0300)]
Initialize and deinitialize gnutls in main program.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 15:03:10 +0000 (12:03 -0300)]
Detects GNUTLS and build with it.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 14:53:40 +0000 (11:53 -0300)]
Added .gitignore to ignore built files.
This ignore built files, including files that were built using autoconf
and automake.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 14:50:02 +0000 (11:50 -0300)]
Implement pretty simple bypass client-server hook.
We no longer do any protocol detection. Instead, we assume that we have
a POP3 connection. We may use different server sockets for different
protocols in the future. This simple null hook always connect to a given
server and passes all bytes from one connection to the other.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 14:10:51 +0000 (11:10 -0300)]
Changed some references from improxy to popproxy.
Since this is now a project about a POP3 proxy, and not a IM/XMPP proxy,
the project and program name, as well as the configuration filename, the
default port and the log init function name have been changed.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 14:14:06 +0000 (11:14 -0300)]
Git works better when changes are not made when renaming.
This commit will not build, but it will allow us to track the history of
some renamed files better.
Thadeu Lima de Souza Cascardo [Thu, 4 Jun 2009 14:05:03 +0000 (11:05 -0300)]
Only daemonize right before running loop.
If we daemonize prematurely, the user may not see messages produced by
the options parser, for example. Now, --help works as intended.
Thadeu Lima de Souza Cascardo [Fri, 8 Dec 2006 20:07:22 +0000 (20:07 +0000)]
Changed private data for jabber connection to include SASL context
The private hook data for jabber connections, which consisted solely
of the iksemel (XML) parser, now includes GNU SASL context and
client/server sessions. Functions for creating and destroying the data
are provided.
Thadeu Lima de Souza Cascardo [Fri, 8 Dec 2006 20:03:18 +0000 (20:03 +0000)]
Detects GNU SASL
Detects GNU SASL using autoconf and builds with it.
Thadeu Lima de Souza Cascardo [Mon, 22 Sep 2008 18:31:34 +0000 (15:31 -0300)]
Removed autogenerated/copied file by automake
INSTALL file is copied/linked from automake. Since this is
autogenerated, it is not that interesting to keep it version-controlled.
Removing it.
Thadeu Lima de Souza Cascardo [Sat, 9 Dec 2006 02:48:52 +0000 (02:48 +0000)]
Identifies user authentication ID using SASL PLAIN mechanism
Identifies user authentication ID when user authenticates using SASL
PLAIN mechanism. It simply base64 decodes the first SASL message sent
by client.
Thadeu Lima de Souza Cascardo [Sat, 9 Dec 2006 01:33:11 +0000 (01:33 +0000)]
proxy advertises only SASL PLAIN mechanism if it is supported by server
If server supports SASL PLAIN mechanism, instead of advertising all
supported mechanisms to client, the proxy advertises only PLAIN. This
way, client is forced to use PLAIN. If server does not support or
allow use of PLAIN mechanism, proxy announces all of them. In the
future, it will announce only PLAIN and use whichever mechanism is
safer in the path from proxy to server.
Thadeu Lima de Souza Cascardo [Thu, 30 Nov 2006 23:23:22 +0000 (23:23 +0000)]
Fixed warning with a missing function declaration
jabber_new_start is used in two files and was not declared in a
header.
Thadeu Lima de Souza Cascardo [Fri, 20 Oct 2006 15:55:45 +0000 (15:55 +0000)]
Filter TLS support from server
TLS support from server is not communicated to the client. Then,
clients requesting TLS will not try to stablish a chypered connection,
which the proxy wouldn't be able to filter.
Thadeu Lima de Souza Cascardo [Fri, 20 Oct 2006 15:27:00 +0000 (15:27 +0000)]
Removed unused variable
Removed unused variable in function jabber_new_start.
Thadeu Lima de Souza Cascardo [Fri, 20 Oct 2006 01:56:12 +0000 (01:56 +0000)]
Fixed leaks when a connection was closed
When one side of the connection was closed, the other side would still
be connected and no memory would be released. To avoid loops,
deadlocks or leaks, the peer reference should be to the hook and not
to the connection/socket only.
Thadeu Lima de Souza Cascardo [Fri, 20 Oct 2006 01:49:18 +0000 (01:49 +0000)]
Server side connection parses xml using a new written handler
A new handler similar to iks_stream was written, because iks_stream
handles SASL itself, blocking the parser when fed with server-side
xml.
The server-side connection parses its xml too now, given opportunity
for filters for data that comes from the server.
Thadeu Lima de Souza Cascardo [Tue, 17 Oct 2006 23:09:01 +0000 (23:09 +0000)]
Update TODO
Added item for TODO about how to deal with TLS and some clients.
Thadeu Lima de Souza Cascardo [Wed, 27 Sep 2006 00:28:26 +0000 (00:28 +0000)]
Documentation files
Usual documentation files for every software release, including TODO.
Thadeu Lima de Souza Cascardo [Wed, 27 Sep 2006 00:10:13 +0000 (00:10 +0000)]
Daemonized improxy
First thing improxy does is to detach from its controlling terminal,
going into daemon mode. Since there is no portable way to do that
(using GLib would be very nice), it calls the libc daemon function.
Thadeu Lima de Souza Cascardo [Sat, 23 Sep 2006 16:18:39 +0000 (16:18 +0000)]
Described program in README
Software description is in README.
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 22:16:27 +0000 (22:16 +0000)]
Removed some dispensable log messages
Every write and read to/from the server was being logged. Removed
those.
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 21:34:38 +0000 (21:34 +0000)]
Do not connect to server when new stream is sent
When a new stream is sent by the client due to SASL authentication or
TLS (although TLS is not dealt with right now), do not connect to the
server again. The new stream is sent to the server, anyway.
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 21:12:55 +0000 (21:12 +0000)]
Accept XML text declaration for Jabber initiating data
For the purpose of protocol detection, accepts XML text declaration as
indication of the Jabber protocol. Gaim, for example, uses that, and
XMPP Core recommends its use (SHOULD).
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 19:47:21 +0000 (19:47 +0000)]
Recognizes jabber server, connects to it and proxies data
The jabber server the client is connecting to is identified in the
data sent by it. It connects to this server and sends all data from
client to the server and all data from server to the client.
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 19:38:17 +0000 (19:38 +0000)]
Build with iksemel
iksemel will be used as XML parser and we will have to link to
it. Thence, we check for its presence, using pkg-config with autoconf.
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 19:35:20 +0000 (19:35 +0000)]
Autogenerated files by autoconf/automake/aclocal are precious
Files that are generated by autoconf, automake and aclocal should be
considered precious, not source. The other files required in a tree by
automake will, eventually, be included in the source (when they have
content).
Thadeu Lima de Souza Cascardo [Fri, 22 Sep 2006 18:31:29 +0000 (18:31 +0000)]
Keep reading from connection after read event
When read event of some connection is dispatched, request new reading.
Thadeu Lima de Souza Cascardo [Thu, 14 Sep 2006 16:49:03 +0000 (16:49 +0000)]
Applied the GPL to all source files
Applied the GPL to all C source files, including headers. Added
license as COPYING file.
Thadeu Lima de Souza Cascardo [Thu, 14 Sep 2006 15:52:58 +0000 (15:52 +0000)]
Detects Jabber protocol and hook to it
XMPP Stream is detected and another hook gets to handle the
connection, which will parse the protocol and connect to the
appropriate server.
Thadeu Lima de Souza Cascardo [Thu, 14 Sep 2006 15:17:28 +0000 (15:17 +0000)]
Connection events are handled by hooks
Every connection event (connect, close, read, write) is handled by a
hook, so we can plugin hooks for every protocol, including protocol
detection.
Thadeu Lima de Souza Cascardo [Wed, 13 Sep 2006 00:02:43 +0000 (00:02 +0000)]
Changed configuration file default path
Configuration filename default path is defined by configure script
prefix and sysconfdir, while building.
Thadeu Lima de Souza Cascardo [Wed, 13 Sep 2006 00:01:05 +0000 (00:01 +0000)]
Autoconfiscated
Autoconf and automake files. Only those files needed to generate the
other ones using aclocal, autoconf and automake.
Thadeu Lima de Souza Cascardo [Tue, 12 Sep 2006 23:54:26 +0000 (23:54 +0000)]
Configuration file may be specified in command line
The configuration filename may be specified in command line, which is
parsed using GOptionContext.
Thadeu Lima de Souza Cascardo [Tue, 12 Sep 2006 21:39:40 +0000 (21:39 +0000)]
Program messages are logged to syslog
Program messages are sent to syslog with LOG_DAEMON facility. They are
generated using GLib log support with a custom handler.
Thadeu Lima de Souza Cascardo [Tue, 12 Sep 2006 21:17:27 +0000 (21:17 +0000)]
Use GLib log facility instead of printf
printf and fprintf calls were replaced by g_log calls so log level is
used and we can get to use a handler that sends to syslog later.
Thadeu Lima de Souza Cascardo [Tue, 12 Sep 2006 19:16:40 +0000 (19:16 +0000)]
Fixed configuration file name
Fixed configuration file name in code to match previous renaming.
Thadeu Lima de Souza Cascardo [Tue, 12 Sep 2006 19:15:40 +0000 (19:15 +0000)]
Fixed memory leak for closed connections
Unrefs connections and close the other end when one end closes the
connection.