Skip to content

Commit

Permalink
Style: Rewrite some code to comply with guidelines
Browse files Browse the repository at this point in the history
  • Loading branch information
adrienverge committed Nov 28, 2015
1 parent 02a0a24 commit e1dffc7
Show file tree
Hide file tree
Showing 11 changed files with 151 additions and 131 deletions.
1 change: 0 additions & 1 deletion LICENSE.OpenSSL
Expand Up @@ -124,4 +124,3 @@
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/

6 changes: 3 additions & 3 deletions src/config.c
Expand Up @@ -132,7 +132,7 @@ int load_config(struct vpn_config *cfg, const char *filename)
long int port = strtol(val, NULL, 0);
if (port <= 0 || port > 65535) {
log_warn("Bad port in config file: \"%d\".\n",
port);
port);
continue;
}
cfg->gateway_port = port;
Expand All @@ -143,12 +143,12 @@ int load_config(struct vpn_config *cfg, const char *filename)
} else if (strcmp(key, "trusted-cert") == 0) {
if (strlen(val) != SHA256STRLEN - 1) {
log_warn("Bad certificate sha256 digest in "
"config file: \"%s\".\n", val);
"config file: \"%s\".\n", val);
continue;
}
if (add_trusted_cert(cfg, val))
log_warn("Could not add certificate digest to "
"whitelist.\n");
"whitelist.\n");
} else {
log_warn("Bad key in config file: \"%s\".\n", key);
goto err_free;
Expand Down
4 changes: 2 additions & 2 deletions src/hdlc.c
Expand Up @@ -85,7 +85,7 @@ static int need_flag_sequence = 1;
* if the output buffer is too small
*/
ssize_t hdlc_encode(uint8_t *frame, size_t frmsize,
uint8_t *packet, size_t pktsize)
uint8_t *packet, size_t pktsize)
{
ssize_t written = 0;
uint16_t checksum;
Expand Down Expand Up @@ -196,7 +196,7 @@ ssize_t hdlc_find_frame(uint8_t *buffer, size_t bufsize, off_t *start)
* buffer, or < 0 in case of error
*/
ssize_t hdlc_decode(uint8_t *frame, size_t frmsize,
uint8_t *packet, size_t pktsize)
uint8_t *packet, size_t pktsize)
{
off_t start = 0;
ssize_t written = 0;
Expand Down
4 changes: 2 additions & 2 deletions src/hdlc.h
Expand Up @@ -35,11 +35,11 @@
#define estimated_decoded_size(hdlc_frm_len) (hdlc_frm_len)

ssize_t hdlc_encode(uint8_t *frame, size_t frmsize,
uint8_t *packet, size_t pktsize);
uint8_t *packet, size_t pktsize);

ssize_t hdlc_find_frame(uint8_t *buffer, size_t bufsize, off_t *start);

ssize_t hdlc_decode(uint8_t *frame, size_t frmsize,
uint8_t *packet, size_t pktsize);
uint8_t *packet, size_t pktsize);

#endif
74 changes: 39 additions & 35 deletions src/http.c
Expand Up @@ -15,6 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include <string.h>

#include "http.h"
#include "xml.h"
#include "log.h"
Expand Down Expand Up @@ -48,26 +50,25 @@ int http_send(struct tunnel *tunnel, const char *request, ...)

while (n == 0)
n = safe_ssl_write(tunnel->ssl_handle, (uint8_t *) buffer,
length);
length);
if (n < 0) {
log_debug("Error writing to SSL connection (%s).\n",
err_ssl_str(n));
err_ssl_str(n));
return ERR_HTTP_SSL;
}

return 1;
}

char *
find_header (char *res, char *header)
char *find_header(char *res, char *header)
{
char *line = res;

while (memcmp (line, "\r\n", 2)) {
int line_len = (char *)memmem (line, BUFSZ, "\r\n", 2) - line;
while (memcmp(line, "\r\n", 2)) {
int line_len = (char *) memmem(line, BUFSZ, "\r\n", 2) - line;
int head_len = strlen (header);

if (line_len > head_len && !strncasecmp (line, header, head_len))
if (line_len > head_len && !strncasecmp(line, header, head_len))
return line + head_len;
line += line_len + 2;
}
Expand Down Expand Up @@ -99,34 +100,38 @@ int http_receive(struct tunnel *tunnel, char **response)

do {
n = safe_ssl_read(tunnel->ssl_handle,
(uint8_t *) buffer + bytes_read,
BUFSZ - 1 - bytes_read);
(uint8_t *) buffer + bytes_read,
BUFSZ - 1 - bytes_read);
if (n > 0) {
char *eoh;

bytes_read += n;

if (!header_size) {
/* Did we see the header end? Then get the body size. */
eoh = memmem (buffer, bytes_read, "\r\n\r\n", 4);
eoh = memmem(buffer, bytes_read, "\r\n\r\n", 4);
if (eoh) {
char *header;

header = find_header (buffer, "Content-Length: ");
header = find_header(buffer, "Content-Length: ");
header_size = eoh - buffer + 4;
if (header)
content_size = atoi(header);

if (find_header (buffer, "Transfer-Encoding: chunked"))
if (find_header(buffer,
"Transfer-Encoding: chunked"))
chunked = 1;
}
}

if (header_size) {
/* We saw the whole header, let's check if the body is done as well */
/* We saw the whole header, let's check if the
* body is done as well */
if (chunked) {
/* Last chunk terminator. Done naively. */
if (bytes_read >= 7 && !memcmp (&buffer[bytes_read - 7], "\r\n0\r\n\r\n", 7))
if (bytes_read >= 7 &&
!memcmp(&buffer[bytes_read - 7],
"\r\n0\r\n\r\n", 7))
break;
} else {
if (bytes_read >= header_size + content_size)
Expand All @@ -144,15 +149,15 @@ int http_receive(struct tunnel *tunnel, char **response)

if (!header_size) {
log_debug("Error reading from SSL connection (%s).\n",
err_ssl_str(n));
err_ssl_str(n));
free(buffer);
return ERR_HTTP_SSL;
}

if (memmem(&buffer[header_size], bytes_read - header_size,
"<!--sslvpnerrmsgkey=sslvpn_login_permission_denied-->", 53) ||
"<!--sslvpnerrmsgkey=sslvpn_login_permission_denied-->", 53) ||
memmem(buffer, header_size, "permission_denied denied", 24) ||
memmem(buffer, header_size, "Permission denied", 17)) {
memmem(buffer, header_size, "Permission denied", 17)) {
free(buffer);
return ERR_HTTP_PERMISSION;
}
Expand All @@ -174,24 +179,23 @@ int http_receive(struct tunnel *tunnel, char **response)
}

static int do_http_request(struct tunnel *tunnel, const char *method,
const char *uri, const char *data, char **response)
const char *uri, const char *data, char **response)
{
int ret;
char template[] =
"%s %s HTTP/1.1\r\n"
"Host: %s:%d\r\n"
"User-Agent: Mozilla/5.0 SV1\r\n"
"Accept: text/plain\r\n"
"Accept-Encoding: identify\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Cookie: %s\r\n"
"Content-Length: %d\r\n"
"\r\n%s";
char *template = ("%s %s HTTP/1.1\r\n"
"Host: %s:%d\r\n"
"User-Agent: Mozilla/5.0 SV1\r\n"
"Accept: text/plain\r\n"
"Accept-Encoding: identify\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Cookie: %s\r\n"
"Content-Length: %d\r\n"
"\r\n%s");

ret = http_send(tunnel, template, method, uri,
tunnel->config->gateway_host,
tunnel->config->gateway_port, tunnel->config->cookie,
strlen(data), data);
tunnel->config->gateway_host,
tunnel->config->gateway_port, tunnel->config->cookie,
strlen(data), data);
if (ret != 1)
return ret;

Expand All @@ -207,7 +211,7 @@ static int do_http_request(struct tunnel *tunnel, const char *method,
* < 0 in case of error
*/
static int http_request(struct tunnel *tunnel, const char *method,
const char *uri, const char *data, char **response)
const char *uri, const char *data, char **response)
{
int ret = do_http_request (tunnel, method, uri, data, response);

Expand Down Expand Up @@ -237,8 +241,8 @@ int auth_log_in(struct tunnel *tunnel)
tunnel->config->cookie[0] = '\0';

snprintf(data, 256, "username=%s&credential=%s&realm=&ajax=1"
"&redir=%%2Fremote%%2Findex&just_logged_in=1",
tunnel->config->username, tunnel->config->password);
"&redir=%%2Fremote%%2Findex&just_logged_in=1",
tunnel->config->username, tunnel->config->password);

ret = http_request(tunnel, "POST", "/remote/logincheck", data, &res);
if (ret != 1)
Expand All @@ -263,7 +267,7 @@ int auth_log_in(struct tunnel *tunnel)
if (end != NULL)
end[0] = '\0';
strncpy(tunnel->config->cookie, line,
COOKIE_SIZE);
COOKIE_SIZE);
ret = 1; // success
goto end;
}
Expand Down
50 changes: 27 additions & 23 deletions src/io.c
Expand Up @@ -54,7 +54,7 @@ static void init_ssl_locks()
{
int i;
lockarray = (pthread_mutex_t *) OPENSSL_malloc(CRYPTO_num_locks() *
sizeof(pthread_mutex_t));
sizeof(pthread_mutex_t));
for (i = 0; i < CRYPTO_num_locks(); i++)
pthread_mutex_init(&(lockarray[i]), NULL);
CRYPTO_set_id_callback((unsigned long (*)()) thread_id);
Expand Down Expand Up @@ -166,8 +166,8 @@ static void *pppd_read(void *arg)
}
off_w += n;

// We have data in the buffer, there may be zero, one or many packets
// inside.
// We have data in the buffer, there may be zero, one or many
// packets inside.
off_r = 0;
while (1) {
ssize_t frm_len, pktsize;
Expand All @@ -185,19 +185,20 @@ static void *pppd_read(void *arg)
}

pktsize = hdlc_decode(&buf[off_r], frm_len,
pkt_data(packet), pktsize);
pkt_data(packet), pktsize);
if (pktsize < 0) {
log_error("Failed to decode PPP packet from "
"HDLC frame (%s).\n",
(pktsize == ERR_HDLC_BAD_CHECKSUM ?
"bad checksum" :
(pktsize == ERR_HDLC_INVALID_FRAME ?
"invalid frame" : "unknown")));
"HDLC frame (%s).\n",
(pktsize == ERR_HDLC_BAD_CHECKSUM ?
"bad checksum" :
(pktsize == ERR_HDLC_INVALID_FRAME ?
"invalid frame" : "unknown")));
goto exit;
}
// Reduce the malloc'ed area now that we know the
// actual packet length
repacket = realloc(packet, sizeof(*packet) + 6 + pktsize);
repacket = realloc(packet,
sizeof(*packet) + 6 + pktsize);
if (repacket == NULL) {
free(packet);
goto exit;
Expand Down Expand Up @@ -257,26 +258,28 @@ static void *pppd_write(void *arg)
break;
}
len = hdlc_encode(hdlc_buffer, hdlc_bufsize,
pkt_data(packet), packet->len);
pkt_data(packet), packet->len);
if (len < 0) {
log_error("Failed to encode PPP packet into HDLC "
"frame.\n");
"frame.\n");
goto err_free_buf;
}

written = 0;
while (written < len) {
int sel;

sel = select(tunnel->pppd_pty + 1, NULL, &write_fd, NULL, NULL);
sel = select(tunnel->pppd_pty + 1, NULL, &write_fd,
NULL, NULL);
if (sel == -1) {
log_error("select: %s\n", strerror(errno));
break;
} else if (sel == 0) {
log_warn("select returned 0\n");
continue;
}
n = write(tunnel->pppd_pty, &hdlc_buffer[written], len - written);
n = write(tunnel->pppd_pty, &hdlc_buffer[written],
len - written);
if (n == -1) {
log_error("write: %s\n", strerror(errno));
goto err_free_buf;
Expand Down Expand Up @@ -314,7 +317,7 @@ static void *pppd_write(void *arg)
&& pkt_data(packet)[5] == 0x04)

static inline void set_tunnel_ips(struct tunnel *tunnel,
struct ppp_packet *packet)
struct ppp_packet *packet)
{
memcpy(&tunnel->ipv4.ip_addr.s_addr, &pkt_data(packet)[8],
sizeof(uint32_t));
Expand Down Expand Up @@ -375,7 +378,7 @@ static void *ssl_read(void *arg)
ret = safe_ssl_read_all(tunnel->ssl_handle, header, 6);
if (ret < 0) {
log_debug("Error reading from SSL connection (%s).\n",
err_ssl_str(ret));
err_ssl_str(ret));
goto exit;
}

Expand All @@ -397,10 +400,10 @@ static void *ssl_read(void *arg)
packet->len = size;

ret = safe_ssl_read_all(tunnel->ssl_handle, pkt_data(packet),
size);
size);
if (ret < 0) {
log_debug("Error reading from SSL connection (%s).\n",
err_ssl_str(ret));
err_ssl_str(ret));
free(packet);
goto exit;
}
Expand Down Expand Up @@ -458,12 +461,12 @@ static void *ssl_write(void *arg)
pkt_header(packet)[5] = packet->len & 0xff;

do {
ret = safe_ssl_write(tunnel->ssl_handle,
packet->content, 6 + packet->len);
ret = safe_ssl_write(tunnel->ssl_handle,
packet->content, 6 + packet->len);
} while (ret == 0);
if (ret < 0) {
log_debug("Error writing to SSL connection (%s).\n",
err_ssl_str(ret));
err_ssl_str(ret));
free(packet);
break;
}
Expand Down Expand Up @@ -497,7 +500,8 @@ static void *if_config(void *arg)
tunnel->state = STATE_UP;
break;
} else if (timeout == 0) {
log_error("Timed out waiting for the ppp interface to be UP.\n");
log_error("Timed out waiting for the ppp interface to "
"be UP.\n");
break;
}
log_debug("if_config: not ready yet...\n");
Expand Down Expand Up @@ -551,7 +555,7 @@ int io_loop(struct tunnel *tunnel)
* (with or without TCP_NODELAY)
*/
setsockopt(tunnel->ssl_socket, IPPROTO_TCP, TCP_NODELAY,
(char *) &tcp_nodelay_flag, sizeof(int));
(char *) &tcp_nodelay_flag, sizeof(int));

// Disable SIGINT for the future spawned threads
sigset_t sigset, oldset;
Expand Down

0 comments on commit e1dffc7

Please sign in to comment.