[RFC/RFT] stoken and xmlconfig changes
David Woodhouse
dwmw2 at infradead.org
Tue Aug 12 07:35:13 PDT 2014
On Tue, 2014-08-05 at 11:42 +0100, David Woodhouse wrote:
> Perhaps I should follow your lead and allow the PSKC XML to be passed
> in as the "string". And then just add a function or callback for the
> library to give it *back* again. The library will hand it back in the
> same form (raw/PSKC) that it received it.
I've done this. I haven't yet made it support PSKC, but there are
lock/unlock callbacks for using a counter-based token, which will be
called before the token is used and then again afterwards with the new
data.
I've implemented this in openconnect itself, and also in
NetworkManager-openconnect.
Does this look correct for the Java side?
diff --git a/java/src/org/infradead/libopenconnect/LibOpenConnect.java b/java/src/org/infradead/libopenconnect/LibOpenConnect.java
index 2352675..f86edec 100644
--- a/java/src/org/infradead/libopenconnect/LibOpenConnect.java
+++ b/java/src/org/infradead/libopenconnect/LibOpenConnect.java
@@ -59,6 +59,8 @@ public abstract class LibOpenConnect {
public int onWriteNewConfig(byte[] buf) { return 0; }
public void onProtectSocket(int fd) { }
public void onStatsUpdate(VPNStats stats) { }
+ public int onTokenLock() { return 0; }
+ public int onTokenUnlock(String newToken) { return 0; }
/* create/destroy library instances */
diff --git a/jni.c b/jni.c
index 9936236..23fcbe1 100644
--- a/jni.c
+++ b/jni.c
@@ -525,6 +525,50 @@ out:
(*ctx->jenv)->PopLocalFrame(ctx->jenv, NULL);
}
+static int lock_token_cb(void *privdata)
+{
+ struct libctx *ctx = privdata;
+ jmethodID mid;
+ int ret = -1;
+
+ if ((*ctx->jenv)->PushLocalFrame(ctx->jenv, 256) < 0)
+ return -1;
+
+ mid = get_obj_mid(ctx, ctx->jobj, "onTokenLock", "(V)I");
+ if (!mid)
+ goto out;
+
+ (*ctx->jenv)->CallIntMethod(ctx->jenv, ctx->jobj, mid);
+
+out:
+ (*ctx->jenv)->PopLocalFrame(ctx->jenv, NULL);
+ return ret;
+}
+
+static int unlock_token_cb(void *privdata, const char *new_token)
+{
+ struct libctx *ctx = privdata;
+ jstring jtoken;
+ int ret = -1;
+ jmethodID mid;
+
+ if ((*ctx->jenv)->PushLocalFrame(ctx->jenv, 256) < 0)
+ return -1;
+
+ jtoken = dup_to_jstring(ctx->jenv, new_token);
+ if (!jtoken)
+ goto out;
+
+ mid = get_obj_mid(ctx, ctx->jobj, "onTokenUnlock", "(Ljava/lang/String;)I");
+ if (mid)
+ ret = (*ctx->jenv)->CallIntMethod(ctx->jenv, ctx->jobj, mid, jtoken);
+
+out:
+ (*ctx->jenv)->PopLocalFrame(ctx->jenv, NULL);
+ return ret;
+}
+
+
/* Library init/uninit */
static jobject init_async_lock(struct libctx *ctx)
@@ -566,6 +610,8 @@ JNIEXPORT jlong JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_init(
if (!ctx->vpninfo)
goto bad_delete_ref;
+ openconnect_set_token_callbacks(ctx->vpninfo, ctx, lock_token_cb,
+ unlock_token_cb);
openconnect_set_protect_socket_handler(ctx->vpninfo, protect_socket_cb);
openconnect_set_stats_handler(ctx->vpninfo, stats_cb);
--
dwmw2
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 5745 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/openconnect-devel/attachments/20140812/f45d69a8/attachment.bin>
More information about the openconnect-devel
mailing list