Package: xtradius
Version: 1.2.1-beta2-1
Severity: wishlist
For one of my projects, I need the ability to add wildcard to the list
of accepted clients, so that any host can use the radius service. I
created a small patch that can achieve this by adding an entry like
* secret
to the clients file. However, I am not a C programmer, so anyone familiar
with that language (and xtradius) should check that patch, although it is
working fine for me.
The patch has to be applied to the file src/files.c.
-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.6.18-3-xen-vserver-686
Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15)
Versions of packages xtradius depends on:
ii libc6 2.3.2.ds1-22sarge4 GNU C Library: Shared libraries an
-- no debconf information
1390,1391c1390,1402
<
< c->ipaddr = get_ipaddr(hostnm);
---
>
> // This introduces * as a fallback wildcard for clients
> // Stefan Tomanek <[EMAIL PROTECTED]>
> if ( strcmp(hostnm, "*") != 0 ) {
> c->ipaddr = get_ipaddr(hostnm);
> strNcpy(c->longname, ip_hostname(c->ipaddr),
> sizeof(c->longname));
> } else {
> log(L_INFO, "Creating a wildcard client entry");
> // wildcard: we do not know anything about the IP address
> yet
> // An IP adress of 0 serves as a marker
> c->ipaddr = (UINT4)0;
> c->longname[0] = 0;
> }
1394,1395d1404
< strNcpy(c->longname, ip_hostname(c->ipaddr),
< sizeof(c->longname));
1405d1413
<
1416a1425,1457
> // So we did not find a matching entry, let's check again if we have
> // a wildcard record
> // Stefan Tomanek <[EMAIL PROTECTED]>
> if (! cl) {
> // client default (*)
> RADCLIENT *cd;
> // Let's see whether we can find a default entry in the list
> for(cd = clients; cd; cd = cd->next) {
> // An IP adress of 0 serves as a marker
> if(cd->ipaddr == 0) {
> // create a new client struct
> RADCLIENT *cn;
> if ((cn = malloc(sizeof(RADCLIENT))) == NULL) {
> log(L_INFO, "Out of memory while processing
> wildcard client");
> return NULL;
> } else {
> log(L_INFO, "Creating a new client entry due to
> wildcard match");
> cn->ipaddr = ipaddr;
> // Now we copy all the important data over from the
> default template
> strNcpy(cn->secret, cd->secret, sizeof(cn->secret));
> strNcpy(cn->shortname, cd->shortname,
> sizeof(cn->shortname));
> strNcpy(cn->longname, ip_hostname(ipaddr),
> sizeof(cn->longname));
> // Now we place the new RADCLIENT struct in the linked
> list
> cn->next = cd->next;
> cd->next = cn;
> // This is the entry we want to return
> cl = cn;
> }
> }
> }
> }
>
>