** Description changed:

  Debian version 3.2.6+dfsg-3 adds a new dependency, `wtmpdb`. this is
  listed as needed in `radlast`. This caused a component-mismatch, as
  `wtmpdb` is in universe and not main.
  
  in doing research for a MIR, it was found that `wtmpdb` has been
  orphaned in Debian without explanation. https://metadata.ftp-
  master.debian.org/changelogs//main/w/wtmpdb/wtmpdb_0.13.0-4_changelog
  
  the upstream github project for `wtmpdb` is maintained
  
  https://github.com/thkukuk/wtmpdb
  
  The led to more discussion and research to understand the requirement
  for `wtmpdb` in freeradius. `radlast` is the most dense program ever
  written...
  
  ```
  #! /bin/sh
  
  prefix=@prefix@
  localstatedir=@localstatedir@
  logdir=@logdir@
  
  exec last -f $logdir/radwtmp "$@"
  ```
  
  jokes aside, `radlast` requirest `last`. The root issue is that `last`,
  and even deeper `wtmp` and `utmp` `glibc` implementations did not
  undergo the 32 bit time_t transition. as of today, any `wtmp`
- implementation still uses 32bit time on a 32bit system. Within
- `freeradius`, this is implemented in src/modules/rlm_unix/rlm_unix.c
+ implementation still uses 32bit time on a 32bit system. on biarch
+ systems (x86-64, s390x, ppcel64), the implementation moved to an
+ unsigned int, so the problem got shoved an extra 70 years down the road
+ (at least the seconds are uint). Within `freeradius`, this is
+ implemented in src/modules/rlm_unix/rlm_unix.c
  
  ln358 declares the struct utmp ut
  
  ```
   VALUE_PAIR   *vp;
   vp_cursor_t  cursor;
   FILE         *fp;
   struct utmp  ut;
   time_t               t;
   char         buf[64];
   char const   *s;
   int          delay = 0;
   int          status = -1;
   int          nas_address = 0;
   int          framed_address = 0;
  ```
  
  and then when written, fopen -> fwrite(&ut) is called
  
  ```
   /*
    *   Write a RADIUS wtmp log file.
    *
    *   Try to open the file if we can't, we don't write the
    *   wtmp file. If we can try to write. If we fail,
    *   return RLM_MODULE_FAIL ..
    */
   if ((fp = fopen(inst->radwtmp, "a")) != NULL) {
    if ((fwrite(&ut, sizeof(ut), 1, fp)) != 1) {
     fclose(fp);
     return RLM_MODULE_FAIL;
    }
    fclose(fp);
   } else
    return RLM_MODULE_FAIL;
  
   return RLM_MODULE_OK;
  }
  ```
  
  In the end, I've ended up a little confused, as reading this I see:
  
  * radwtmp is still hitting the 2038 problem
  * radlast will use last from wtmpdb
  * wtmpdb introduces a pam module to deal with login / logout events
  * freeradius is writing it's _own_ wtmp log using a utmp struct, so wtmpdb 
isn't going to be logging those in a 64 bit way
  
  Which leads to this bug and proposal:
  
  **remove wtmpdb as a dependency of freeradius**
  
  * `wtmpdb` is not in main
  * `wtpmdb` is orphaned in debian currently
  * getting a MIR and new debian owner in time for plucky release is unlikely
  * as plucky is an interim release, with 9 months of support, plucky itself 
will not hit the 2038 issue
  * `utmp` itself is 32 bit, and declared to be on any biarch platform (x86-64, 
ppc64, s390x)
      * thus the approach in `freeradius` is coupled to current distro 
implementations of `utmp`.
      * changing `last` won't help with that problem
  * adding a new pam module and login tracking mechanism for a 2038 compliant 
`last` feels far outside the need and scope for this package.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2096611

Title:
  Revert Upstream dependency on wtmpdb last in radlast

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/freeradius/+bug/2096611/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to