Commit Graph

2150 Commits

Author SHA1 Message Date
Taylor R Campbell
a1d92fefbc Use rk_UNCONST with putenv("...") to pacify -Wwrite-strings. 2026-01-18 19:06:16 -06:00
Taylor R Campbell
7223924aeb roken/hostent_find_fqdn.c: Fix unnecessary const abuse. 2026-01-18 19:06:16 -06:00
Taylor R Campbell
ce43ff7b42 roken/getuserinfo.c: Fix various const abuse. 2026-01-18 19:06:16 -06:00
Nicolas Williams
3451950db7 base: NULL-terminate getarg_strings 2026-01-18 16:08:40 -06:00
Nicolas Williams
28b05924c5 roken: Add URL-safe base64 2026-01-18 16:08:39 -06:00
Nicolas Williams
788e2ee3c3 roken: Fix getarg run-on help bug 2026-01-18 16:08:39 -06:00
Nicolas Williams
5fa7d6edd8 roken: Add getdelim()/getline()
Ported from lib/libedit's.
2026-01-18 16:08:39 -06:00
Nicolas Williams
e60f02aed1 roken: Use secure_getenv() in socket_wrapper 2026-01-07 17:49:17 -06:00
Nicolas Williams
771fb1c367 roken: Split up mini_inetd_addrinfo()
To speed up tests/gss/check-gssmask we need to remove the `sleep 10`
found there, and to do that we need to make the gssmask daemons use
roken_detach_prep()/roken_detach_finish(), and to do that we need to
split up mini_inetd_addrinfo().

This commit authored by Claude with human guidance and review.
2026-01-07 17:49:17 -06:00
Ihar Hrachyshka
f0fd2d51b6 Link tests with -lresolv that depend on it 2025-04-16 10:37:27 -04:00
Minsoo Choo
aff90c322e Fix spelling 2024-06-16 23:30:48 -04:00
Jeffrey Altman
17402aef07 roken: warning: ‘line’ defined but not used [-Wunused-variable]
In rkpty.c line[] must be defined if defined(HAVE_OPENPTY),
defined(__osf__), or defined(STREAMSPTY).  Otherwise, it is unused.
2024-06-04 06:22:37 -04:00
Taylor R Campbell
4d39fe8d04 libroken: Fill in NI_NUMERICSCOPE as 0 if not defined.
This flag has defined by POSIX for years if not decades, but glibc
and Windows apparently still don't have it.

We will use it with getnameinfo, along with all other NI_NUMERICxxx
options, to minimize risk of network leaks with block_dns.
2024-01-09 21:19:30 -06:00
Taylor R Campbell
e75e549252 Use AI_NUMERICSERV if block_dns, and use local getaddrinfo to audit.
This change has two parts:

1. Provide our own local implementation of numeric-only getaddrinfo
   in auditdns.c used to audit for DNS leaks, rather than deferring
   to dlsym(RTLD_NEXT, "getaddrinfo"), in terms of inet_pton.

   To keep review and implementation simple, this is limited to
   AI_NUMERICHOST _and_ AI_NUMERICSERV -- this requires that we
   arrange to pass AI_NUMERICSERV in callers too.

2. Wherever we implement block_dns, set AI_NUMERICSERV in addition to
   AI_NUMERICHOST as needed by the new auditdns.c getaddrinfo.

   (In principle this might also avoid other network leaks -- POSIX
   guarantees no name resolution service will be invoked, and gives
   NIS+ as an example.)

   One tiny semantic change to avoid tripping over the auditor:
   kadmin(8) now uses the string "749" rather than the string
   "kerberos-adm".  (Currently we don't audit kadmin(8) for DNS leaks
   but let's avoid leaving a rake to step on.)  Every other caller I
   found is already guaranteed to pass a numeric service rather than
   named service to getaddrinfo.

fix https://github.com/heimdal/heimdal/issues/1212
2024-01-09 16:06:32 -06:00
Taylor R Campbell
e2c0d98965 lib/roken/syslog.c: Initialize hostname to avoid DNS lookups.
Previously, the hostname was initialized to `localhost'.  If it was
not cleared by init_syslog, init_logger_addr (via openlog) would
query gethostbyname to find the IP address of `localhost', which will
essentially always be 127.0.0.1.  But if it was cleared by
init_syslog, init_logger_addr would return 127.0.0.1 anyway.

This way, it always returns 127.0.0.1 in the event of no init_syslog
call, and avoids a DNS lookup.  You can always force a DNS lookup by
passing `localhost' to init_syslog explicitly, of course.

I'm not sure if anything even uses this as a fallback in Heimdal, but
let's avoid leaving a rake to step on.
2024-01-08 10:22:02 -06:00
Nicolas Williams
42e23b1777 roken: Export rk_getpwnam_r() (fix #1097)
Bug and fix reported by https://github.com/esaaprillia.
2024-01-05 11:39:19 -06:00
Daria Phoebe Brashear
3c62b6f5d7 kadm5: allow setting password_lifetime to 0 to clear
when [kadmin] password_lifetime is set to 0, it should clear the time
rather than making the freshly-changed password expire immediately
2023-11-28 21:38:17 -05:00
Joseph Sutton
a9f21ebdac roken: Const-qualify sys_errlist
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
2023-11-28 21:37:56 -05:00
Joseph Sutton
a18436d709 roken: Remove excess zeros in literals
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
2023-11-02 20:19:54 -05:00
Robert Manner
65e5b0ab79 roken/parse_bytes: fix test for >= terabyte units on 32 bit systems
On 32 bit systems, sizeof(ssize_t) and sizeof(unsigned long aka UL) is
32 bits which is not able to hold the value of a terabyte.
2023-06-20 12:57:28 -05:00
Jeffrey Altman
93454c885c roken: qsort provide ANSI C prototype for swapfunc()
K&R is no longer acceptable.
2023-06-06 09:55:27 -04:00
Jeffrey Altman
adde2e5b4b roken: snprintf properly account for char widths
If a char width is specified the number of output buffer bytes
consumed might be greater than one.   Update append_char() to
return the number of bytes consumed and use that value in xyzprintf()
instead of one.
2023-06-06 09:32:33 -04:00
Taylor R Campbell
a142767598 Fix ctype.h misuse.
Excluded: libtomath and libedit files, most of which appear to be
testing or example code not involved in production, and which are
derived from an upstream that should perhaps have patches submitted
upstream instead.

fix https://github.com/heimdal/heimdal/issues/1111
2023-05-26 14:10:11 -05:00
Luke Howard
04b3c124ca roken: ROKEN_xxx_ATTRIBUTE macros
Add ROKEN_xxx_ATTRIBUTE macros, derived from krb5-types.h, to aid compiling
with compilers that don't have __attribute__ defined.
2023-01-09 14:09:13 -05:00
Robert Manner
64a55c30fa roken/mkdtemp.c: fix incorrect indexing
Both the len and the index was decremented, which made the exit
condition (template[len - i] == 'X') trigger before it should.
Fixes solaris10 where mkdtemp is not available.
2023-01-09 10:04:35 -06:00
Luke Howard
d33e3b0523 roken: declare rk_freeifaddrs() prototype if using system ifaddrs.h 2023-01-07 21:33:39 +11:00
Luke Howard
69b417e915 roken: use correct calling conventions for rk_getifaddrs() 2023-01-07 21:33:33 +11:00
Luke Howard
666ee41759 roken: fix Solaris build
libroken needs to be linked against libsocket for socket()
2023-01-07 12:08:30 +11:00
Luke Howard
37f7c5476d roken: fix Solaris build
libroken needs to be linked against libnsl for inet_ntoa()
2023-01-07 11:40:44 +11:00
Nicolas Williams
c157054c51 roken: Move dead code in rk_time_add/sub() into #ifdefs 2023-01-04 16:05:04 -06:00
Nicolas Williams
5395918877 roken: Quiet warning about ignoring fcntl() return value 2023-01-04 16:04:40 -06:00
Nicolas Williams
1d5435043a roken: Move dead code in rk_getauxval() into #ifdefs 2023-01-04 16:03:35 -06:00
Nicolas Williams
b93129f83d roken: Fix FD and memory leaks in rk_undumptext() 2023-01-04 00:43:35 -06:00
Nicolas Williams
11c0cbe9c2 roken: Fix base32/64 decode slowness 2023-01-04 00:43:35 -06:00
Nicolas Williams
7c3a064764 roken: Quiet warnings at mergesort callers
Some static analyzers can't tell that mergesort_r() isn't outputting
freed memory.
2023-01-04 00:43:35 -06:00
Nicolas Williams
aee72d61bf roken: Move an #endif in issuid() to avoid dead code 2023-01-04 00:43:35 -06:00
Nicolas Williams
319793b30b roken: Fix leak in new undump_not_file() 2023-01-04 00:43:35 -06:00
Brian May
73b42d3238 Build rk_closefrom even if including in libc 2023-01-04 00:43:35 -06:00
Nicolas Williams
66b16d12d8 roken: Use calloc() for overflow det. in hex_encode
Using calloc() means setting errno on overflow instead of not.
2022-12-22 10:27:23 -06:00
Nicolas Williams
8b6926f4c0 roken: Add rk_undumptext() and support ttys and such
Add rk_undumptext(), which NUL-terminates the contents it reads.

rk_undumptext(), and now also rk_undumpdata(), can read from regular and
non-regular files (e.g., ttys, pipes, devices, but -on Windows- not
sockets).

This means that `asn1_print` can now read from `/dev/stdin`, which can
be a pipe.

There's a way to set a limit on how much to read from non-regular files,
and that limit defaults to 10MB.

At any rate, the rk_dumpdata(), rk_undumpdata(), and rk_undumptext() functions
really do not belong in lib/roken but in lib/base.  There are other utility
functions in lib/roken that don't belong there too.  A rationalization of the
split between lib/roken and lib/base is overdue.  And while we're at it -lest I
forget- it'd be nice to move all the krb5_storage functions out of lib/krb5 and
into lib/base, as those could come in handy for, e.g., implementing OpenSSH
style certificates and other things outside the krb5 universe.
2022-12-21 22:06:15 -06:00
Nicolas Williams
ca2467a4c4 roken: Do not use net_read() for regular files!
The bug fixed herein almost certainly means that PKINIT was never
working on Windows, since lib/hx509 uses rk_undumpdata() to read regular
files containing certificates and keys, but then since rk_undumpdata()
was using net_read(), that can't have worked.  On Windows net_read()
insists on the FD being a socket, and because of winsock, the namespaces
of socket and file descriptors on Windows are distinct.
2022-12-20 22:19:39 -06:00
Nicolas Williams
d5a87e5906 roken: Add easprintf() and evasprintf() utils
Like emalloc() and ecalloc(): errx on ENOMEM.
2022-12-08 20:49:28 -06:00
Nicolas Williams
badbef825d roken: Add trailing / to PID file DIR path
Otherwise if $HEIM_PIDFILE_DIR doesn't end in / then the pidfile gets
created in the parent.
2022-11-30 00:28:41 -06:00
Nicolas Williams
07abfdb1a9 roken: Fix UB 2022-11-01 16:10:57 -05:00
Nicolas Williams
5ce580f5ad roken: Fix typo in lib/roken/Makefile.am 2022-10-06 16:42:33 -05:00
Jeffrey Altman
7b914bfb64 roken: getaddrinfo get_null return errors
get_null() can fail for two reasons.  There can be a memory allocation
issue or the hints->ai_family could be unsupported.  This change
informs the caller of the error state instead of returning success
with an invalid struct addrinfo output parameter.

Fixes #1007
Reported-by: opless
2022-09-16 15:58:45 -04:00
Daria Phoebe Brashear
133f517482 rewrite fallthrough to HEIM_FALLTHROUGH to deal with new Apple SDKs
Apple clang version 14.0.0 (clang-1400.0.17.3.1) fails the build
because stds.h defines `fallthrough` as a macro which is then
expanded when base.h evaluates

  # if __has_attribute(fallthrough) && __clang_major__ >= 5

The macOS SDK defines `DISPATCH_FALLTHROUGH` as the macro instead
of `fallthrough`.

This change replaces the use of `fallthrough` in the tree with
`HEIM_FALLTHROUGH` and updates the declaration in configure logic
to define `HEIM_FALLTHROUGH` based upon existing definitions
(if any) of `fallthrough` or `DISPATCH_FALLTHROUGH`.
2022-09-16 15:58:45 -04:00
Nicolas Williams
13611702f9 roken: Fix parse_flags() orig argument type 2022-04-25 22:24:51 -05:00
Joseph Sutton
698bbb5647 roken: Fix time_t overflow checking
INTxx_MIN plus a positive integer of the same type will always be
negative, and so the result will always compare less than a positive
integer. Fix this check so that we produce the correct result when
adding two negative time_t values.

Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
2022-03-11 22:03:45 -05:00
Nicolas Williams
5682be7704 roken: Test time add/sub overflow prot. 2022-02-15 20:16:29 -06:00