The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Macros | Typedefs | Functions
misc.h File Reference

Various miscellaneous utility functions. More...

#include <freeradius-devel/build.h>
#include <freeradius-devel/missing.h>
#include <freeradius-devel/util/print.h>
#include <freeradius-devel/util/talloc.h>
#include <freeradius-devel/util/time.h>
#include <signal.h>
+ Include dependency graph for misc.h:

Go to the source code of this file.

Macros

#define fr_bskip_whitespace(_p, _e)   while((_p < _e) && isspace((uint8_t)*(_p))) _p++
 Skip whitespace, stopping at end ('\t', '\n', '\v', '\f', '\r', ' ') More...
 
#define fr_skip_not_whitespace(_p)   while(*_p && !isspace((uint8_t)*(_p))) _p++
 Skip everything that's not whitespace ('\t', '\n', '\v', '\f', '\r', ' ') More...
 
#define fr_skip_whitespace(_p)   while(isspace((uint8_t)*(_p))) _p++
 Skip whitespace ('\t', '\n', '\v', '\f', '\r', ' ') More...
 
#define fr_zero_whitespace(_p)   while (isspace((uint8_t) *_p)) *(_p++) = '\0'
 Zero out any whitespace with nul bytes. More...
 
#define VERIFY_ALL_TALLOC
 

Typedefs

typedef int8_t(* fr_cmp_t) (void const *a, void const *b)
 
typedef void(* fr_free_t) (void *)
 

Functions

int fr_blocking (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. More...
 
int fr_nonblock (int fd)
 
int8_t fr_pointer_cmp (void const *a, void const *b)
 Compares two pointers. More...
 
void fr_quick_sort (void const *to_sort[], int min_idx, int max_idx, fr_cmp_t cmp)
 Quick sort an array of pointers using a comparator. More...
 
int fr_set_signal (int sig, sig_t func)
 Sets a signal handler using sigaction if available, else signal. More...
 
size_t fr_snprint_uint128 (char *out, size_t outlen, uint128_t const num)
 Write 128bit unsigned integer to buffer. More...
 
int fr_strtoll (int64_t *out, char **end, char const *value)
 Consume the integer (or hex) portion of a value string. More...
 
int fr_strtoull (uint64_t *out, char **end, char const *value)
 Consume the integer (or hex) portion of a value string. More...
 
char * fr_trim (char const *str, size_t size)
 Trim whitespace from the end of a string. More...
 
int fr_unset_signal (int sig)
 Uninstall a signal for a specific handler. More...
 
ssize_t fr_utf8_to_ucs2 (uint8_t *out, size_t outlen, char const *in, size_t inlen)
 Convert UTF8 string to UCS2 encoding. More...
 
static bool is_integer (char const *value)
 Check whether the string is all numbers. More...
 
static bool is_printable (void const *value, size_t len)
 Check whether the string is made up of printable UTF8 chars. More...
 
static bool is_whitespace (char const *value)
 Check whether the string is all whitespace. More...
 
static bool is_zero (char const *value)
 Check whether the string is all zeros. More...
 
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)
 

Detailed Description

Various miscellaneous utility functions.

Definition in file misc.h.

Macro Definition Documentation

◆ fr_bskip_whitespace

#define fr_bskip_whitespace (   _p,
  _e 
)    while((_p < _e) && isspace((uint8_t)*(_p))) _p++

Skip whitespace, stopping at end ('\t', '\n', '\v', '\f', '\r', ' ')

Parameters
[in,out]_pstring to skip over.
[in]_epointer to end of string.

Definition at line 66 of file misc.h.

◆ fr_skip_not_whitespace

#define fr_skip_not_whitespace (   _p)    while(*_p && !isspace((uint8_t)*(_p))) _p++

Skip everything that's not whitespace ('\t', '\n', '\v', '\f', '\r', ' ')

Parameters
[in,out]_pstring to skip over.

Definition at line 72 of file misc.h.

◆ fr_skip_whitespace

#define fr_skip_whitespace (   _p)    while(isspace((uint8_t)*(_p))) _p++

Skip whitespace ('\t', '\n', '\v', '\f', '\r', ' ')

Parameters
[in,out]_pstring to skip over.

Definition at line 59 of file misc.h.

◆ fr_zero_whitespace

#define fr_zero_whitespace (   _p)    while (isspace((uint8_t) *_p)) *(_p++) = '\0'

Zero out any whitespace with nul bytes.

Parameters
[in,out]_pstring to process

Definition at line 78 of file misc.h.

◆ VERIFY_ALL_TALLOC

#define VERIFY_ALL_TALLOC

Definition at line 52 of file misc.h.

Typedef Documentation

◆ fr_cmp_t

typedef int8_t(* fr_cmp_t) (void const *a, void const *b)

Definition at line 38 of file misc.h.

◆ fr_free_t

typedef void(* fr_free_t) (void *)

Definition at line 39 of file misc.h.

Function Documentation

◆ fr_blocking()

int fr_blocking ( int  fd)

◆ 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 463 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_nonblock()

int fr_nonblock ( int  fd)

◆ fr_pointer_cmp()

int8_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 408 of file misc.c.

+ Here is the caller graph for this function:

◆ fr_quick_sort()

void 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.

Definition at line 420 of file misc.c.

+ 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 360 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_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 306 of file misc.c.

+ Here is the caller graph for this function:

◆ is_integer()

static bool is_integer ( char const *  value)
inlinestatic

Check whether the string is all numbers.

Returns
  • true if the entirety of the string is number chars.
  • false if string contains non-numeric chars or is empty.

Definition at line 128 of file misc.h.

+ Here is the caller graph for this function:

◆ is_printable()

static bool is_printable ( void const *  value,
size_t  len 
)
inlinestatic

Check whether the string is made up of printable UTF8 chars.

Parameters
valueto check.
lenof value.
Returns
  • true if the string is printable.
  • false if the string contains non printable chars

Definition at line 107 of file misc.h.

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

◆ is_whitespace()

static bool is_whitespace ( char const *  value)
inlinestatic

Check whether the string is all whitespace.

Returns
  • true if the entirety of the string is whitespace.
  • false if the string contains non whitespace.

Definition at line 86 of file misc.h.

◆ is_zero()

static bool is_zero ( char const *  value)
inlinestatic

Check whether the string is all zeros.

Returns
  • true if the entirety of the string is all zeros.
  • false if string contains non-zero chars or is empty.

Definition at line 146 of file misc.h.

◆ 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:
+ Here is the caller 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: