pkgsrc/net/radiusd-cistron/patches/patch-af
martti 4694497b69 radiusd-cistron (1.6.7) cistron; urgency=medium
* Fix checkrad.pl::cisco_snmp and usrhiper_snmp so that communities
    other than "public" can be used too.
  * Error out on superflous command line args (optind >= argc)
  * Encrypt CHAP-Password in radclient so that CHAP can be tested too
  * Add "wildcard" option to realms - if you set this option, you can
    match on the entire username using shell wildcards in the realms file.
  * If the nastype in /etc/raddb/naslist is set to 'none' for a nas,
    logins on that nas will have no simultaneous use restrictions imposed
    and those logins will not count towards the total amount of logins.
  * Removed 'raduse' and manpage.
  * Can disable radutmp with "-u none" (likewise radwtmp with "-W none",
    though we already had "-w" for that).
  * Call checkrad with an extra argument, the framed IP address.
  * Fix bug where $INCLUDEing a file without any records would
    cause the rest of the original file to be ignored
  * Support for 64-bit wide integers (integer8 type). If compiled with
    gcc, users file can contain both hex and decimal 64-bit values,
    and 64-bit values are printed in decimal. With other compilers
    (no "long long" support) only hex 64-bit values are supported.
  * Change "_" to "-" in dictionary.redback and change the 64 bits
    values to integer8.
  * Moved the dictionary files to /usr/local/share/radius. Now
    only /etc/raddb/dictionary remains that $INCLUDES all the others.
    For new installs only; existing installations won't be changed
  * Make integer in the format string of sprintf(buf, "%03d:%.20s", ..) in
    make_wtmp() unsigned (%u), otherwise the sprintf could in some cases
    (negative NAS-Port, very long NAS-name) overrun the buffer by one
    byte, overwriting the least significant byte of the return address
    on the stack with a \0. Not sure if this is exploitable or not,
    but it could be a security problem.
  * Make sure ut.login (struct radutmp member) is treated everywhere
    as a NON-zero terminated string.
  * Make sure unsigned integers are used in all places using lvalues
    (32 bits radius values), especially nas_port.
  * radrelay: update id of packet when retransmitting.
  * Print an error and free the request struct if we receive an unknown
    packet type.
  * rad_check_multi: if username/NAS/port match, don't count as dup.
2003-12-16 19:19:41 +00:00

130 lines
3.5 KiB
Text

$NetBSD: patch-af,v 1.3 2003/12/16 19:19:41 martti Exp $
--- src/radwho.c.orig Wed Jul 2 12:39:03 2003
+++ src/radwho.c Tue Dec 16 20:20:12 2003
@@ -20,6 +20,7 @@
#include <errno.h>
#include <sys/stat.h>
#include <sys/utsname.h>
+#include <sys/ioctl.h>
#include <time.h>
#include <ctype.h>
#include <netinet/in.h>
@@ -40,18 +41,20 @@
* Header above output and format.
*/
char *hdr1 =
-"Login Name What TTY When From Location";
-char *ufmt1 = "%-10.10s %-17.17s %-5.5s %-4.4s %-9.9s %-9.9s %-.16s%s";
+"Login Name What TTY When From Location";
+char *ufmt1 = "%-16.16s %-17.17s %-5.5s %-4.4s %-9.9s %-9.9s %-.*s%s";
char *ufmt1r = "%s,%s,%s,%s,%s,%s,%s%s";
-char *rfmt1 = "%-10.10s %-17.17s %-5.5s %s%-3d %-9.9s %-9.9s %-.19s%s";
+char *rfmt1 = "%-16.16s %-17.17s %-5.5s %s%-3d %-9.9s %-9.9s %-.*s%s";
char *rfmt1r = "%s,%s,%s,%s%u,%s,%s,%s%s";
+#define FMT1_HOST_SIZE 13
char *hdr2 =
-"Login Port What When From Location";
-char *ufmt2 = "%-10.10s %-6.6d %-7.7s %-13.13s %-10.10s %-.16s%s";
+"Login Port What When From Location";
+char *ufmt2 = "%-16.16s %-6.6d %-7.7s %-13.13s %-10.10s %-.*s%s";
char *ufmt2r = "%s,%u,%s,%s,%s,%s%s";
-char *rfmt2 = "%-10.10s %s%-5d %-6.6s %-13.13s %-10.10s %-.28s%s";
+char *rfmt2 = "%-16.16s %s%-5d %-6.6s %-13.13s %-10.10s %-.*s%s";
char *rfmt2r = "%s,%s%u,%s,%s,%s,%s%s";
+#define FMT2_HOST_SIZE 19
char *eol = "\n";
NAS *naslist;
@@ -307,7 +310,8 @@
return tmp;
}
if (strncmp(tty, "cu", 2) == 0) {
- return tmp + 2;
+ sprintf(tmp, "%.15s", tty + 2);
+ return tmp;
}
return "??";
}
@@ -371,6 +375,8 @@
*/
int main(int argc, char **argv)
{
+ struct winsize ws;
+ int extra_width = 0;
FILE *fp;
struct radutmp rt;
struct utmp ut;
@@ -389,6 +395,11 @@
char *p, *q, *portind;
int c, portno;
+ ioctl(0, TIOCGWINSZ, &ws);
+ if (ws.ws_col >= 80) {
+ extra_width = ws.ws_col - 80;
+ }
+
while((c = getopt(argc, argv, "Dd:flhnsipcru:")) != EOF) switch(c) {
case 'D':
use_dns = 0;
@@ -486,14 +497,17 @@
while(fread(&ut, sizeof(ut), 1, fp) == 1) {
#ifdef USER_PROCESS
if (ut.ut_user[0] && ut.ut_line[0] &&
- ut.ut_type == USER_PROCESS) {
+ ut.ut_type == USER_PROCESS)
#else
- if (ut.ut_user[0] && ut.ut_line[0]) {
+ if (ut.ut_user[0] && ut.ut_line[0])
#endif
- if (showname)
+ {
+ strncpy(inbuf, ut.ut_name, UT_NAMESIZE);
+ inbuf[UT_NAMESIZE] = '\0';
+ if (showname)
printf((rawoutput == 0? ufmt1: ufmt1r),
- ut.ut_name,
- fullname(ut.ut_name),
+ inbuf,
+ fullname(inbuf),
"shell",
ttyshort(ut.ut_line),
#ifdef __svr4__
@@ -502,10 +516,11 @@
dotime(ut.ut_time),
#endif
ut.ut_host,
+ FMT1_HOST_SIZE + extra_width,
myname, eol);
else
printf((rawoutput==0? ufmt2:ufmt2r),
- ut.ut_name,
+ inbuf,
ttyshort(ut.ut_line),
"shell",
#ifdef __svr4__
@@ -514,6 +529,7 @@
dotime(ut.ut_time),
#endif
ut.ut_host,
+ FMT2_HOST_SIZE + extra_width,
myname, eol);
}
}
@@ -560,6 +576,7 @@
portind, portno,
dotime(rt.time),
nasname(ntohl(rt.nas_address)),
+ FMT1_HOST_SIZE + extra_width,
hostname(rt.framed_address), eol);
else
printf((rawoutput == 0? rfmt2: rfmt2r),
@@ -568,6 +585,7 @@
proto(rt.proto, rt.porttype),
dotime(rt.time),
nasname(ntohl(rt.nas_address)),
+ FMT2_HOST_SIZE + extra_width,
hostname(rt.framed_address), eol);
}
}