123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /***********************************************************************
- *
- * radattr.c
- *
- * A plugin which is stacked on top of radius.so. This plugin writes
- * all RADIUS attributes from the server's authentication confirmation
- * into /var/run/radattr.pppN. These attributes are available for
- * consumption by /etc/ppp/ip-{up,down} scripts.
- *
- * Copyright (C) 2002 Roaring Penguin Software Inc.
- *
- * This plugin may be distributed according to the terms of the GNU
- * General Public License, version 2 or (at your option) any later version.
- *
- ***********************************************************************/
- static char const RCSID[] =
- "$Id: radattr.c,v 1.2 2004/10/28 00:24:40 paulus Exp $";
- #include "pppd.h"
- #include "radiusclient.h"
- #include <stdio.h>
- extern void (*radius_attributes_hook)(VALUE_PAIR *);
- static void print_attributes(VALUE_PAIR *);
- static void cleanup(void *opaque, int arg);
- char pppd_version[] = VERSION;
- /**********************************************************************
- * %FUNCTION: plugin_init
- * %ARGUMENTS:
- * None
- * %RETURNS:
- * Nothing
- * %DESCRIPTION:
- * Initializes radattr plugin.
- ***********************************************************************/
- void
- plugin_init(void)
- {
- radius_attributes_hook = print_attributes;
- #if 0
- /* calling cleanup() on link down is problematic because print_attributes()
- is called only after PAP or CHAP authentication, but not when the link
- should go up again for any other reason */
- add_notifier(&link_down_notifier, cleanup, NULL);
- #endif
- /* Just in case... */
- add_notifier(&exitnotify, cleanup, NULL);
- info("RADATTR plugin initialized.");
- }
- /**********************************************************************
- * %FUNCTION: print_attributes
- * %ARGUMENTS:
- * vp -- linked-list of RADIUS attribute-value pairs
- * %RETURNS:
- * Nothing
- * %DESCRIPTION:
- * Prints the attribute pairs to /var/run/radattr.pppN. Each line of the
- * file contains "name value" pairs.
- ***********************************************************************/
- static void
- print_attributes(VALUE_PAIR *vp)
- {
- FILE *fp;
- char fname[512];
- char name[2048];
- char value[2048];
- int cnt = 0;
- slprintf(fname, sizeof(fname), "/var/run/radattr.%s", ifname);
- fp = fopen(fname, "w");
- if (!fp) {
- warn("radattr plugin: Could not open %s for writing: %m", fname);
- return;
- }
- for (; vp; vp=vp->next) {
- if (rc_avpair_tostr(vp, name, sizeof(name), value, sizeof(value)) < 0) {
- continue;
- }
- fprintf(fp, "%s %s\n", name, value);
- cnt++;
- }
- fclose(fp);
- dbglog("RADATTR plugin wrote %d line(s) to file %s.", cnt, fname);
- }
- /**********************************************************************
- * %FUNCTION: cleanup
- * %ARGUMENTS:
- * opaque -- not used
- * arg -- not used
- * %RETURNS:
- * Nothing
- * %DESCRIPTION:
- * Deletes /var/run/radattr.pppN
- ***********************************************************************/
- static void
- cleanup(void *opaque, int arg)
- {
- char fname[512];
- slprintf(fname, sizeof(fname), "/var/run/radattr.%s", ifname);
- (void) remove(fname);
- dbglog("RADATTR plugin removed file %s.", fname);
- }
|