~ubuntu-branches/ubuntu/vivid/sslh/vivid-proposed

« back to all changes in this revision

Viewing changes to common.h

  • Committer: Package Import Robot
  • Author(s): Guillaume Delacour
  • Date: 2014-08-07 00:06:06 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20140807000606-y1tg7j8i5t7d4drr
Tags: 1.16-1
* New upstream release: fix some startup problem when interfaces are not
  ready at boot time (IP_FREEBIND support when available) and can use libcap
  for transparent mode
* Enable libcap and libwrap support at build time
* Enable dpkg-buildflags: Drop hardening-wrapper Build-Depends and use
  DEB_BUILD_HARDENING instead of DEB_BUILD_MAINT_OPTIONS
* Remove old .gitignore as upstream has one too
* debian/sslh.tmpfile: Create /run/sslh for systemd as root because sslh
  write its pid before dropping privileges (Closes: #740560)
* debian/patches/disable_ip_freebind_test.diff: Remove "Can't bind address"
  upstream test because IP_FREEBIND is now enabled upstream
* debian/docs: upstream README is now README.md
* debian/rules:
  + use DESTDIR in addition of PREFIX as upstream change Makefile
* Refresh debian/patches/disable_valgrind_launch.diff due to upstream
  changes
* Stop service in case of purge (to be able to remove the user too)
* Use DEB_BUILD_OPTIONS to speed the build
* debian/patches/fixed_version.diff: Fix the version of binaries based on
  debian/changelog (instead of relying on git)
* Update Description as sslh is not only a ssl/ssh multiplexer but a
  protocol multiplexer

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
#include <time.h>
29
29
#include <getopt.h>
30
30
 
31
 
#ifndef VERSION
32
 
#define VERSION "v?"
 
31
#ifdef LIBCAP
 
32
#include <sys/prctl.h>
 
33
#include <sys/capability.h>
33
34
#endif
34
35
 
 
36
#include "version.h"
 
37
 
35
38
#define CHECK_RES_DIE(res, str) \
36
39
    if (res == -1) {    \
37
40
       perror(str);     \
52
55
#define TRACE
53
56
#endif
54
57
 
 
58
#ifndef IP_FREEBIND
 
59
#define IP_FREEBIND 0
 
60
#endif
 
61
 
55
62
enum connection_state {
56
63
    ST_PROBING=1,    /* Waiting for timeout to find where to forward */
57
64
    ST_SHOVELING   /* Connexion is established */
61
68
#define PROT_SHIFT 1000  /* protocol options will be 1000, 1001, etc */
62
69
 
63
70
/* A 'queue' is composed of a file descriptor (which can be read from or
64
 
 * written to), and a queue for defered write data */
 
71
 * written to), and a queue for deferred write data */
65
72
struct queue {
66
73
    int fd;
67
 
    void *begin_defered_data;
68
 
    void *defered_data;
69
 
    int defered_data_size;
 
74
    void *begin_deferred_data;
 
75
    void *deferred_data;
 
76
    int deferred_data_size;
70
77
};
71
78
 
72
79
struct connection {
73
80
    enum connection_state state;
74
81
    time_t probe_timeout;
 
82
    struct proto *proto;
75
83
 
76
84
    /* q[0]: queue for external connection (client);
77
85
     * q[1]: queue for internal connection (httpd or sshd);
86
94
 
87
95
/* common.c */
88
96
void init_cnx(struct connection *cnx);
89
 
int connect_addr(struct addrinfo *addr, int fd_from, const char* cnx_name);
 
97
int connect_addr(struct connection *cnx, int fd_from);
90
98
int fd2fd(struct queue *target, struct queue *from);
91
99
char* sprintaddr(char* buf, size_t size, struct addrinfo *a);
92
100
void resolve_name(struct addrinfo **out, char* fullname);
93
 
struct proto* probe_client_protocol(struct connection *cnx);
94
101
void log_connection(struct connection *cnx);
95
102
int check_access_rights(int in_socket, const char* service);
96
103
void setup_signals(void);
104
111
int start_listen_sockets(int *sockfd[], struct addrinfo *addr_list);
105
112
 
106
113
int defer_write(struct queue *q, void* data, int data_size);
107
 
int flush_defered(struct queue *q);
 
114
int flush_deferred(struct queue *q);
108
115
 
109
116
extern int probing_timeout, verbose, inetd, foreground, 
110
117
       background, transparent, numeric;