Re: use freeRadius client to connect a java application
Hi I proposed to use TinyRadius but they refused it. they consider it (contamination risk AND the IPR risk ) So they opt to FreeRadius Client. It's a C library, had to be used from a Java application, it would need to be called either via JNI, or simply linked into a small C main program and then spawned from Java as an external process. I'm a beginner in c development [?]. someone can help me to do this?? thanks in advance 2010/8/31 Michael Lecuyer <mjl@iterpacis.org>
Sorry, I was looking at the client in the freeradius server source.
Now I'm looking at the same source you are looking at.
On 2010-08-31 4:37 AM, Noura Kossentini wrote:
i downloaded freeradius-client-1.1.6 and in radiusclient.c I found this copyright
/* * Copyright (c) 2004 Maxim Sobolev <sobomax@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. *
Please send me the link to download free radius client you speak about
In this case (radiusclient is a BSD copyright) can I use JNI?? and how?
thanks
2010/8/30 Michael Lecuyer <mjl@iterpacis.org <mailto:mjl@iterpacis.org>>
So our production must be supported on all platforms so I think that using JNI is the good solution.
The radius client is not written in a form suitable for JNI. That is to say its not modular in the sense most Java programs are. The main() function is the only way to call radclient. The radclient main() sets all the internal structures up based on the command line arguments.
I've just noticed that the FreeRadius radclient.c is released as the GNU General Public License which you can't use with your product. You might go with tinyradius (LGPL). There are probably other free RADIUS clients written in other languages (python, perl).
/* * radclient.c General radius packet debug tool. * * Version: $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version.
On 2010-08-30 8:45 AM, Noura Kossentini wrote:
Hi
Thanks for your detailed answer. So our production must be supported on all platforms so I think that using JNI is the good solution. Please can you help me on how to use the JNI with freeradius client??
thanks
2010/8/27 Michael Lecuyer <mjl@iterpacis.org <mailto:mjl@iterpacis.org> <mailto:mjl@iterpacis.org
<mailto:mjl@iterpacis.org>>>
The radclient is limited to CHAP, PAP, and Digest authentication methods. It can send MSCHAP and MSCHAPV2 if you write the code to build the request (NT-Response & Challenge) and so on (not trivial to get right).
Otherwise you can direct your attributes to send to the Runtime.exec()
Here's some example code for running the radclient:
import java.io.*;
public class RunRadClient { public static void main(String[] a) { try { RunRadClient t = new RunRadClient(); t.go(a); } catch (Exception e) { e.printStackTrace(); } }
private void go(String[] a) throws Exception {
try { //./radclient -c 2 -i 23 -s -x -f /tmp/radattr 192.168.1.187 auth axltest String path = "/usr/src/freeradius/src/main/radclient";
String[] cmd = { path, "-c", "1", // Send on packet. "-i", "22", // Packet id (change this each time) "-s", // Display summary information. "192.168.1.187", // Server "auth", // Authentication packet. "axltest" // Secret };
// Attributes: StringBuffer sb = new StringBuffer(); sb.append("NAS-IP-Address=192.168.1.187\n"); sb.append("NAS-Port =1\n"); sb.append("User-Name=michael\n"); sb.append("Chap-Password=test\n");
Process p = Runtime.getRuntime().exec(cmd);
// For our purposes stdin, stdout, and stderr are reversed in sense because // they relate to the exec'd process. BufferedReader stderr = new BufferedReader( new InputStreamReader(p.getErrorStream())); BufferedReader stdout = new BufferedReader( new InputStreamReader(p.getInputStream())); BufferedWriter stdin = new BufferedWriter( new OutputStreamWriter(p.getOutputStream()));
// Build the attributes as a StringBuilder and write them to stdout. stdin.write(sb.toString(), 0, sb.length()); stdin.flush(); stdin.close();
p.waitFor(); int exitValue = p.exitValue(); if (exitValue != 0) { System.out.println("Error running command, exit = " + exitValue); } String line; while ((line = stdout.readLine()) != null) { System.out.println(line); } } catch (Exception e) { System.err.println("Exec failed" + e.getMessage()); e.printStackTrace(); }
} }
The result is this, which must be parsed to extract any response attributes and to get the packet status.
Sending Access-Request of id 100 to 192.168.1.187 port 1812 NAS-IP-Address = 192.168.1.187 NAS-Port = 1 User-Name = "michael" CHAP-Password = 0x64234c1d14fde1c04c8590c13b8c9aa181 rad_recv: Access-Accept packet from host 192.168.1.187 port 1812, id=100, length=85 Reply-Message = "Howdy." Cisco-Attr-0 = 0x683332332d63757272656e63793d555344 Cisco-Attr-0 = 0x436973636f2d586d69742d526174653d3939 Framed-IP-Address = 192.123.231.123
Total approved auths: 1 Total denied auths: 0 Total lost auths: 0
On 2010-08-27 9:24 AM, Noura Kossentini wrote:
Hi
thanks for quick answer. Can you help me on how to use JNI with freeradius client??
2010/8/27 Michael Lecuyer <mjl@iterpacis.org <mailto:mjl@iterpacis.org> <mailto:mjl@iterpacis.org <mailto:mjl@iterpacis.org>> <mailto:mjl@iterpacis.org <mailto:mjl@iterpacis.org>
<mailto:mjl@iterpacis.org <mailto:mjl@iterpacis.org>>>>
You have two methods: JNI (Java native interface) to call the Freeradius client or purchase a very good Java RADIUS Client API from AXLRadius.com
On 2010-08-27 7:05 AM, Noura Kossentini wrote:
Hi,
In our company it's forbidden to use products with GPL License. So I ca not use Jradius client to connect my client application to a radius server.
Since that FreeRadius is distributed under BSD, it's allowed to me to use this library.
My queqtion is can you help me on how can I connect and authenticate my java application to a radius server using FreeRadius client??
Thanks in advance
Regards Noura
- List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
Noura Kossentini wrote:
I proposed to use TinyRadius but they refused it. they consider it (contamination risk AND the IPR risk )
My $0.02 is that licenses aren't an issue. FUD around licenses is an issue.
So they opt to FreeRadius Client. It's a C library, had to be used from a Java application, it would need to be called either via JNI, or simply linked into a small C main program and then spawned from Java as an external process.
I'm a beginner in c development . someone can help me to do this??
See the Java docs for how to link to C programs. Alan DeKok.
Hi can I use the authentication module for apache. With my java program I will send a http requqest to apache and it will do the authentication?? <http://www.apache.org/> 2010/9/8 Alan DeKok <aland@deployingradius.com>
Noura Kossentini wrote:
I proposed to use TinyRadius but they refused it. they consider it (contamination risk AND the IPR risk )
My $0.02 is that licenses aren't an issue. FUD around licenses is an issue.
So they opt to FreeRadius Client. It's a C library, had to be used from a Java application, it would need to be called either via JNI, or simply linked into a small C main program and then spawned from Java as an external process.
I'm a beginner in c development . someone can help me to do this??
See the Java docs for how to link to C programs.
Alan DeKok. - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
participants (2)
-
Alan DeKok -
Noura Kossentini