As I mentioned the other day, I'm building a RADIUS client in Python for sending disconnect messages to Cisco routers.
One hang-up with the pyrad package is that it requires a dictionary file in order to map RADIUS attribute names to codes and types. In the case of my client, I only need two attributes: User-Name and Calling-Station-Id. I don't want to have to create a dictionary file for just these two entries. Fortunately, the StringIO module allows me to create an object that acts like a file, but works with a string I provide.
In my code, I can now do this:
from pyrad.client import Client from pyrad.dictionary import Dictionary from StringIO import StringIO dict = StringIO("ATTRIBUTE User-Name 1 string\n" + "ATTRIBUTE Calling-Station-Id 31 string") client = Client(server="nas_hostname", secret="super_secret", acctport=3799, dict=Dictionary(dict))
Because StringIO provides all the methods that a normal file object does, the Dictionary() class is none the wiser.