make peer IP address and peer IP available to the xauth_module.verify_secret() method
authorAndreas Steffen <andreas.steffen@strongswan.org>
Wed, 2 Apr 2008 19:04:45 +0000 (19:04 -0000)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Wed, 2 Apr 2008 19:04:45 +0000 (19:04 -0000)
src/pluto/keys.c
src/pluto/modecfg.c
src/pluto/xauth.c
src/pluto/xauth.h

index 0d2efc9..6cdf169 100644 (file)
@@ -647,7 +647,7 @@ xauth_get_secret(xauth_t *xauth_secret)
  * find a matching secret
  */
 static bool
-xauth_verify_secret(const char *conn_name, const xauth_t *xauth_secret)
+xauth_verify_secret(const xauth_peer_t *peer, const xauth_t *xauth_secret)
 {
     bool found = FALSE;
     secret_t *s;
index 04f13fa..967a0b2 100644 (file)
@@ -967,6 +967,12 @@ xauth_inR1(struct msg_digest *md)
     }
     else 
     {
+       xauth_peer_t peer;
+
+       peer.conn_name = st->st_connection->name;
+       addrtot(&md->sender, 0, peer.ip_address, sizeof(peer.ip_address));
+       idtoa(&md->st->st_connection->spd.that.id, peer.id, sizeof(peer.id));
+
        DBG(DBG_CONTROL,
            DBG_log("peer xauth user name is '%.*s'"
                   , ia.xauth_secret.user_name.len
@@ -977,9 +983,8 @@ xauth_inR1(struct msg_digest *md)
                   , ia.xauth_secret.user_password.len
                   , ia.xauth_secret.user_password.ptr)
        )
-       /* verify the user credentials using a plugn function */
-       st->st_xauth.status = xauth_module.verify_secret(st->st_connection->name
-                                                      , &ia.xauth_secret);
+       /* verify the user credentials using a plugin function */
+       st->st_xauth.status = xauth_module.verify_secret(&peer, &ia.xauth_secret);
        plog("extended authentication %s", st->st_xauth.status? "was successful":"failed");
     }
 
index 4c82a37..31ffcc3 100644 (file)
@@ -44,7 +44,7 @@ xauth_init(void)
                DBG_log("xauth module: found get_secret() function");
            }
        )
-       xauth_module.verify_secret = (bool (*) (const char*, const xauth_t*))
+       xauth_module.verify_secret = (bool (*) (const xauth_peer_t*, const xauth_t*))
                        dlsym(xauth_module.handle, "verify_secret");
        DBG(DBG_CONTROL,
            if (xauth_module.verify_secret != NULL)
index b36f291..0a9f792 100644 (file)
 #ifndef _XAUTH_H
 #define _XAUTH_H
 
+#include <freeswan.h>
+#include "defs.h"
+
 /* XAUTH credentials */
 
 struct chunk_t;
 
 typedef struct {
+    char *conn_name;
+    char id[BUF_LEN];
+    char ip_address[ADDRTOT_BUF];
+} xauth_peer_t;
+
+typedef struct {
     chunk_t user_name;
     chunk_t user_password;
 } xauth_t;
@@ -30,7 +39,7 @@ typedef struct {
 typedef struct {
     void *handle;
     bool (*get_secret) (xauth_t *xauth_secret);
-    bool (*verify_secret) (const char *conn_name, const xauth_t *xauth_secret);
+    bool (*verify_secret) (const xauth_peer_t *peer, const xauth_t *xauth_secret);
 } xauth_module_t;
 
 extern xauth_module_t xauth_module;