The FreeRADIUS server $Id: f3670dba8951ca10eb4948feb3dc3db9423a334f $
Loading...
Searching...
No Matches
Macros | Functions | Variables
misc.c File Reference

Various miscellaneous utility functions. More...

#include <freeradius-devel/util/dbuff.h>
#include <freeradius-devel/util/sbuff.h>
#include <freeradius-devel/util/syserror.h>
#include <fcntl.h>
#include <grp.h>
#include <pwd.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/uio.h>
+ Include dependency graph for misc.c:

Go to the source code of this file.

Macros

#define FR_PUT_LE16(a, val)
 
#define SWAP(_a, _b)
 

Functions

static int _fr_quick_sort (void const *to_sort[], int start, int end, fr_cmp_t cmp)
 
int fr_blocking (UNUSED int fd)
 
int fr_cloexec (UNUSED int fd)
 
int fr_digest_cmp (uint8_t const *a, uint8_t const *b, size_t length)
 Do a comparison of two authentication digests by comparing the FULL data.
 
int fr_nonblock (UNUSED int fd)
 
fr_cmp_ret_t fr_pointer_cmp (void const *a, void const *b)
 Compares two pointers.
 
int fr_quick_sort (void const *to_sort[], int start, int end, fr_cmp_t cmp)
 Quick sort an array of pointers using a comparator.
 
int fr_set_signal (int sig, sig_t func)
 Sets a signal handler using sigaction if available, else signal.
 
size_t fr_snprint_uint128 (char *out, size_t outlen, uint128_t const num)
 Write 128bit unsigned integer to buffer.
 
int fr_strtoll (int64_t *out, char **end, char const *value)
 Consume the integer (or hex) portion of a value string.
 
int fr_strtoull (uint64_t *out, char **end, char const *value)
 Consume the integer (or hex) portion of a value string.
 
void fr_suid_noop (void)
 
char * fr_tolower (char *str)
 
char * fr_trim (char const *str, size_t size)
 Trim whitespace from the end of a string.
 
int fr_unset_signal (int sig)
 Uninstall a signal for a specific handler.
 
ssize_t fr_utf8_to_ucs2 (uint8_t *out, size_t outlen, char const *in, size_t inlen)
 Convert UTF8 string to UCS2 encoding.
 
static int rad_lock (int fd, int lock_len, int cmd, int type)
 
int rad_lockfd (int fd, int lock_len)
 
int rad_lockfd_nonblock (int fd, int lock_len)
 
int rad_unlockfd (int fd, int lock_len)
 

Variables

fr_suid_t fr_suid_down = fr_suid_noop
 
fr_suid_t fr_suid_up = fr_suid_noop
 

Detailed Description

Various miscellaneous utility functions.

Definition in file misc.c.

Macro Definition Documentation

◆ FR_PUT_LE16

#define FR_PUT_LE16 (   a,
  val 
)
Value:
do {\
a[1] = ((uint16_t) (val)) >> 8;\
a[0] = ((uint16_t) (val)) & 0xff;\
} while (0)
unsigned short uint16_t

Definition at line 36 of file misc.c.

◆ SWAP

#define SWAP (   _a,
  _b 
)
Value:
do { \
void const *_tmp = to_sort[_a]; \
to_sort[_a] = to_sort[_b]; \
to_sort[_b] = _tmp; \
} while (0)

Function Documentation

◆ _fr_quick_sort()

static int _fr_quick_sort ( void const *  to_sort[],
int  start,
int  end,
fr_cmp_t  cmp 
)
static

Definition at line 454 of file misc.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_blocking()

int fr_blocking ( UNUSED int  fd)

Definition at line 298 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_cloexec()

int fr_cloexec ( UNUSED int  fd)

Definition at line 331 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_digest_cmp()

int fr_digest_cmp ( uint8_t const *  a,
uint8_t const *  b,
size_t  length 
)

Do a comparison of two authentication digests by comparing the FULL data.

Otherwise, the server can be subject to timing attacks.

http://www.cs.rice.edu/~dwallach/pub/crosby-timing2009.pdf

Definition at line 516 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_nonblock()

int fr_nonblock ( UNUSED int  fd)

Definition at line 293 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_pointer_cmp()

fr_cmp_ret_t fr_pointer_cmp ( void const *  a,
void const *  b 
)

Compares two pointers.

Parameters
afirst pointer to compare.
bsecond pointer to compare.
Returns
  • -1 if a < b.
  • +1 if b > a.
  • 0 if both equal.

Definition at line 449 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_quick_sort()

int fr_quick_sort ( void const *  to_sort[],
int  start,
int  end,
fr_cmp_t  cmp 
)

Quick sort an array of pointers using a comparator.

Parameters
to_sortarray of pointers to sort.
startthe lowest index (usually 0).
endthe length of the array.
cmpthe comparison function to use to sort the array elements.
Returns
  • 0 on success.
  • -1 on comparator error, retrieve the error with fr_strerror. The array is a permutation of its input but its order is undefined.

Definition at line 495 of file misc.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_set_signal()

int fr_set_signal ( int  sig,
sig_t  func 
)

Sets a signal handler using sigaction if available, else signal.

Parameters
sigto set handler for.
funchandler to set.

Definition at line 47 of file misc.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_snprint_uint128()

size_t fr_snprint_uint128 ( char *  out,
size_t  outlen,
uint128_t const  num 
)

Write 128bit unsigned integer to buffer.

Author
Alexey Frunze
Parameters
outwhere to write result to.
outlensize of out.
num128 bit integer.

Definition at line 401 of file misc.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fr_strtoll()

int fr_strtoll ( int64_t *  out,
char **  end,
char const *  value 
)

Consume the integer (or hex) portion of a value string.

Allows integer or hex representations of integers (but not octal, as octal is deemed to be confusing).

Note
Check for overflow with errno == ERANGE.
Parameters
[out]outResult of parsing string as signed 64bit integer.
[out]endpointer to the first non numeric char.
[in]valuestring to parse.
Returns
integer value.

Definition at line 191 of file misc.c.

◆ fr_strtoull()

int fr_strtoull ( uint64_t *  out,
char **  end,
char const *  value 
)

Consume the integer (or hex) portion of a value string.

Allows integer or hex representations of integers (but not octal, as octal is deemed to be confusing).

Parameters
[out]outResult of parsing string as unsigned 64bit integer.
[out]endpointer to the first non numeric char.
[in]valuestring to parse.
Returns
integer value.

Definition at line 160 of file misc.c.

◆ fr_suid_noop()

void fr_suid_noop ( void  )

Definition at line 529 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_tolower()

char * fr_tolower ( char *  str)

Definition at line 225 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_trim()

char * fr_trim ( char const *  str,
size_t  size 
)

Trim whitespace from the end of a string.

Definition at line 213 of file misc.c.

◆ fr_unset_signal()

int fr_unset_signal ( int  sig)

Uninstall a signal for a specific handler.

man sigaction says these are fine to call from a signal handler.

Parameters
sigSIGNAL

Definition at line 76 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_utf8_to_ucs2()

ssize_t fr_utf8_to_ucs2 ( uint8_t out,
size_t  outlen,
char const *  in,
size_t  inlen 
)

Convert UTF8 string to UCS2 encoding.

Note
Borrowed from src/crypto/ms_funcs.c of wpa_supplicant project (http://hostap.epitest.fi/wpa_supplicant/)
Parameters
[out]outWhere to write the ucs2 string.
[in]outlenSize of output buffer.
[in]inUTF8 string to convert.
[in]inlenlength of UTF8 string.
Returns
the size of the UCS2 string written to the output buffer (in bytes).

Definition at line 347 of file misc.c.

+ Here is the caller graph for this function:

◆ rad_lock()

static int rad_lock ( int  fd,
int  lock_len,
int  cmd,
int  type 
)
static

Definition at line 103 of file misc.c.

+ Here is the caller graph for this function:

◆ rad_lockfd()

int rad_lockfd ( int  fd,
int  lock_len 
)

Definition at line 119 of file misc.c.

+ Here is the call graph for this function:

◆ rad_lockfd_nonblock()

int rad_lockfd_nonblock ( int  fd,
int  lock_len 
)

Definition at line 129 of file misc.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rad_unlockfd()

int rad_unlockfd ( int  fd,
int  lock_len 
)

Definition at line 141 of file misc.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ fr_suid_down

fr_suid_t fr_suid_down = fr_suid_noop

Definition at line 534 of file misc.c.

◆ fr_suid_up

fr_suid_t fr_suid_up = fr_suid_noop

Definition at line 533 of file misc.c.