aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2006-05-10 07:11:52 +0000
committerMartin Willi <martin@strongswan.org>2006-05-10 07:11:52 +0000
commit37a2b616e28649b6db7c87e96b375ba1176b52cc (patch)
tree41983bf1f4a9d14198b5e13dc8694f5641b91377
parent2192375bc8f312923938ccfc5af592b5a37b6147 (diff)
downloadstrongswan-37a2b616e28649b6db7c87e96b375ba1176b52cc.tar.bz2
strongswan-37a2b616e28649b6db7c87e96b375ba1176b52cc.tar.xz
- fixed stroke error output to starter
-rwxr-xr-xsrc/charon/charon/threads/stroke_interface.c2
-rw-r--r--src/charon/charon/threads/stroke_interface.h10
-rw-r--r--src/starter/starterstroke.c163
3 files changed, 88 insertions, 87 deletions
diff --git a/src/charon/charon/threads/stroke_interface.c b/src/charon/charon/threads/stroke_interface.c
index 0a7ba80a6..a9c55673b 100755
--- a/src/charon/charon/threads/stroke_interface.c
+++ b/src/charon/charon/threads/stroke_interface.c
@@ -520,7 +520,7 @@ static void stroke_receive(private_stroke_t *this)
continue;
}
- /* TODO: BAD: does not work for starter, charon crashes!! FIX this */
+ /* setup a logger which writes status to the unix socket */
this->stroke_logger = logger_create("-", CONTROL|ERROR, FALSE, strokefile);
this->logger->log_bytes(this->logger, RAW, "stroke message", (void*)msg, msg_length);
diff --git a/src/charon/charon/threads/stroke_interface.h b/src/charon/charon/threads/stroke_interface.h
index 0ee41396f..16eb66533 100644
--- a/src/charon/charon/threads/stroke_interface.h
+++ b/src/charon/charon/threads/stroke_interface.h
@@ -56,16 +56,6 @@ typedef struct stroke_t stroke_t;
struct stroke_t {
/**
- * Implements policy_store_t interface
- */
- policy_store_t policies;
-
- /**
- * Implements credential_store_t interfacce
- */
- credential_store_t credentials;
-
- /**
* @brief Destroy a stroke_t instance.
*
* @param this stroke_t objec to destroy
diff --git a/src/starter/starterstroke.c b/src/starter/starterstroke.c
index 115741404..15e646269 100644
--- a/src/starter/starterstroke.c
+++ b/src/starter/starterstroke.c
@@ -38,54 +38,65 @@
static char* push_string(stroke_msg_t **strm, char *string)
{
- stroke_msg_t *stroke_msg;
- size_t string_length;
-
- if (string == NULL)
- {
- return NULL;
- }
- stroke_msg = *strm;
- string_length = strlen(string) + 1;
- stroke_msg->length += string_length;
-
- stroke_msg = realloc(stroke_msg, stroke_msg->length);
- strcpy((char*)stroke_msg + stroke_msg->length - string_length, string);
-
- *strm = stroke_msg;
- return (char*)(u_int)stroke_msg->length - string_length;
+ stroke_msg_t *stroke_msg;
+ size_t string_length;
+
+ if (string == NULL)
+ {
+ return NULL;
+ }
+ stroke_msg = *strm;
+ string_length = strlen(string) + 1;
+ stroke_msg->length += string_length;
+
+ stroke_msg = realloc(stroke_msg, stroke_msg->length);
+ strcpy((char*)stroke_msg + stroke_msg->length - string_length, string);
+
+ *strm = stroke_msg;
+ return (char*)(u_int)stroke_msg->length - string_length;
}
static int
send_stroke_msg (stroke_msg_t *msg)
{
- struct sockaddr_un ctl_addr = { AF_UNIX, CHARON_CTL_FILE };
- int sock;
-
- sock = socket(AF_UNIX, SOCK_STREAM, 0);
- if (sock < 0)
- {
+ struct sockaddr_un ctl_addr = { AF_UNIX, CHARON_CTL_FILE };
+ int sock;
+ int byte_count;
+ char buffer[64];
+
+ sock = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sock < 0)
+ {
plog("socket() failed: %s", strerror(errno));
return -1;
- }
- if (connect(sock, (struct sockaddr *)&ctl_addr,
+ }
+ if (connect(sock, (struct sockaddr *)&ctl_addr,
offsetof(struct sockaddr_un, sun_path) + strlen(ctl_addr.sun_path)) < 0)
- {
+ {
plog("connect(charon_ctl) failed: %s", strerror(errno));
close(sock);
return -1;
- }
-
- /* send message */
- if (write(sock, msg, msg->length) != msg->length)
- {
+ }
+
+ /* send message */
+ if (write(sock, msg, msg->length) != msg->length)
+ {
plog("write(charon_ctl) failed: %s", strerror(errno));
close(sock);
return -1;
- }
-
- close(sock);
- return 0;
+ }
+ while ((byte_count = read(sock, buffer, sizeof(buffer)-1)) > 0)
+ {
+ buffer[byte_count] = '\0';
+ plog("%s", buffer);
+ }
+ if (byte_count < 0)
+ {
+ plog(stderr, "read() failed: %s", strerror(errno));
+ }
+
+ close(sock);
+ return 0;
}
static char *
@@ -105,57 +116,57 @@ connection_name(starter_conn_t *conn)
int starter_stroke_add_conn(starter_conn_t *conn)
{
- stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
- int res;
-
- msg->length = sizeof(stroke_msg_t);
- msg->type = STR_ADD_CONN;
-
- msg->add_conn.name = push_string(&msg, connection_name(conn));
-
- msg->add_conn.me.id = push_string(&msg, conn->left.id);
- msg->add_conn.me.cert = push_string(&msg, conn->left.cert);
- msg->add_conn.me.address = push_string(&msg, inet_ntoa(conn->left.addr.u.v4.sin_addr));
- msg->add_conn.me.subnet = push_string(&msg, inet_ntoa(conn->left.subnet.addr.u.v4.sin_addr));
- msg->add_conn.me.subnet_mask = conn->left.subnet.maskbits;
-
- msg->add_conn.other.id = push_string(&msg, conn->right.id);
- msg->add_conn.other.cert = push_string(&msg, conn->right.cert);
- msg->add_conn.other.address = push_string(&msg, inet_ntoa(conn->right.addr.u.v4.sin_addr));
- msg->add_conn.other.subnet = push_string(&msg, inet_ntoa(conn->right.subnet.addr.u.v4.sin_addr));
- msg->add_conn.other.subnet_mask = conn->right.subnet.maskbits;
-
- res = send_stroke_msg(msg);
- free(msg);
- return res;
+ stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
+ int res;
+
+ msg->length = sizeof(stroke_msg_t);
+ msg->type = STR_ADD_CONN;
+
+ msg->add_conn.name = push_string(&msg, connection_name(conn));
+
+ msg->add_conn.me.id = push_string(&msg, conn->left.id);
+ msg->add_conn.me.cert = push_string(&msg, conn->left.cert);
+ msg->add_conn.me.address = push_string(&msg, inet_ntoa(conn->left.addr.u.v4.sin_addr));
+ msg->add_conn.me.subnet = push_string(&msg, inet_ntoa(conn->left.subnet.addr.u.v4.sin_addr));
+ msg->add_conn.me.subnet_mask = conn->left.subnet.maskbits;
+
+ msg->add_conn.other.id = push_string(&msg, conn->right.id);
+ msg->add_conn.other.cert = push_string(&msg, conn->right.cert);
+ msg->add_conn.other.address = push_string(&msg, inet_ntoa(conn->right.addr.u.v4.sin_addr));
+ msg->add_conn.other.subnet = push_string(&msg, inet_ntoa(conn->right.subnet.addr.u.v4.sin_addr));
+ msg->add_conn.other.subnet_mask = conn->right.subnet.maskbits;
+
+ res = send_stroke_msg(msg);
+ free(msg);
+ return res;
}
int starter_stroke_del_conn(starter_conn_t *conn)
{
- return 0;
+ return 0;
}
int starter_stroke_route_conn(starter_conn_t *conn)
{
- stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
- int res;
-
- msg->length = sizeof(stroke_msg_t);
- msg->type = STR_INSTALL;
- msg->install.name = push_string(&msg, connection_name(conn));
- res = send_stroke_msg(msg);
- free(msg);
- return res;
+ stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
+ int res;
+
+ msg->length = sizeof(stroke_msg_t);
+ msg->type = STR_INSTALL;
+ msg->install.name = push_string(&msg, connection_name(conn));
+ res = send_stroke_msg(msg);
+ free(msg);
+ return res;
}
int starter_stroke_initiate_conn(starter_conn_t *conn)
{
- stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
- int res;
-
- msg->length = sizeof(stroke_msg_t);
- msg->type = STR_INITIATE;
- msg->initiate.name = push_string(&msg, connection_name(conn));
- res = send_stroke_msg(msg);
- free(msg);
- return res;
+ stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
+ int res;
+
+ msg->length = sizeof(stroke_msg_t);
+ msg->type = STR_INITIATE;
+ msg->initiate.name = push_string(&msg, connection_name(conn));
+ res = send_stroke_msg(msg);
+ free(msg);
+ return res;
}