Add support for extended attributes: draft-dekok-radext-radius-extensions
[freeradius.git] / scripts / clients.pl
index dc6aba5..819887c 100755 (executable)
@@ -2,31 +2,67 @@
 #
 #  Convert old-style "clients" file to new "clients.conf" format.
 #
-#  Usage: clients.pl clients new-clients.conf
-#         The "new-clients.conf" will be over-written.
+#  Usage: clients.pl clients [naslist] new-clients.conf
+#      The "new-clients.conf" will be created if it does not exist.
+#      If it does exist, it will be over-written.
 #
 #
 #      $Id$
 #
-if ($#ARGV != 1) {
-    print "Usage: clients.pl clients new-clients.conf\n";
+if (($#ARGV < 1) || ($#ARGV > 2)) {
+    print "Usage: clients.pl clients [naslist] new-clients.conf\n";
     print "       The \"new-clients.conf\" will be created if it does not exist.\n";
-    print "       If it does exist, it will be over-written.";
+    print "       If it does exist, it will be over-written.\n";
     exit(1);
 }
 
 $old = shift;
 $new = shift;
 
-open OLD, "< $old"or die "Failed to open $old: $!\n";
-open NEW, "> $new" or die "Failed to open $new: $!\n";
+if ($new =~ /naslist/) {
+    $naslist = $new;
+    $new = shift;
+}
+
+open OLD, "< $old" or die "Failed to open $old: $!\n";
 
 while (<OLD>) {
     next if (/^\s*\#/);
+    next if (/^\s*$/);
 
     split;
 
-    print NEW "client $_[0] {\n";
-    print NEW "\tsecret = $_[1]\n";
+    $clients{$_[0]}{"secret"} = $_[1];
+}
+close OLD;
+
+if (defined $naslist) {
+    open OLD, "< $naslist" or die "Failed to open $naslist: $!\n";
+
+    while (<OLD>) {
+       next if (/^\s*\#/);
+       next if (/^\s*$/);
+
+       split;
+
+       if (!defined $clients{$_[0]}) {
+           print "WARNING! client $_[0] is defined in naslist, but not in clients!";
+           next;
+       }
+
+       $clients{$_[0]}{"shortname"} = $_[1];
+       $clients{$_[0]}{"nastype"} = $_[2];
+    }
+}
+
+open NEW, "> $new" or die "Failed to open $new: $!\n";
+foreach $client (keys %clients) {
+    print NEW "client $client {\n";
+    print NEW "\tsecret = ", $clients{$client}{"secret"}, "\n";
+    if (defined $clients{$client}{"shortname"}) {
+       print NEW "\tshortname = ", $clients{$client}{"shortname"}, "\n";
+       print NEW "\tnastype = ", $clients{$client}{"nastype"}, "\n";
+    }
     print NEW "}\n";
+    print NEW "\n";
 }