rpmsx.c File Reference
`#include "system.h"`
`#include <rpmiotypes.h>`
`#include <rpmio.h>`
`#include <rpmmacro.h>`
`#include <yarn.h>`
`#include <rpmtypes.h>`
`#include "rpmsx.h"`
`#include "debug.h"`
Include dependency graph for rpmsx.c:

Go to the source code of this file.

## Macros

#define | _RPMSX_INTERNAL
#define | inc_err() nerr++

## Functions

static void | rpmsxSort (rpmsx sx)
| Stable sort for policy specifications, patterns before paths. More...
static void | rpmsxpHasMetaChars (rpmsxp sxp)
static size_t | rpmsxsPStem (const char *const buf)
| Return the length of the text that can be considered the stem. More...
static size_t | rpmsxsFStem (const char *const buf)
| Return the length of the text that is the stem of a file name. More...
static int | rpmsxAdd (rpmsx sx, const char **bpp)
| Find (or create) the stem of a file spec. More...
static int | rpmsxFind (const rpmsx sx, const char **bpp)
| Find the stem of a file name. More...
static void | rpmsxFini (void *_sx)
static rpmsx | rpmsxGetPool (rpmioPool pool)
static int | rpmsxpCheckNoDupes (const rpmsx sx)
| Check for duplicate specifications. More...
int | rpmsxParse (rpmsx sx, const char *fn)
| Parse selinux file security context patterns. More...
rpmsx | rpmsxNew (const char *fn)
| Create and load security context patterns. More...
int | rpmsxCount (const rpmsx sx)
| Return security context patterns count. More...
int | rpmsxIx (const rpmsx sx)
| Return security context patterns index. More...
int | rpmsxSetIx (rpmsx sx, int ix)
| Set security context patterns index. More...
const char * | rpmsxPattern (const rpmsx sx)
| Return current pattern. More...
const char * | rpmsxType (const rpmsx sx)
| Return current type. More...
const char * | rpmsxContext (const rpmsx sx)
| Return current context. More...
regex_t * | rpmsxRE (const rpmsx sx)
| Return current regex. More...
mode_t | rpmsxFMode (const rpmsx sx)
| Return current file mode. More...
int | rpmsxFStem (const rpmsx sx)
| Return current file stem. More...
int | rpmsxNext (rpmsx sx)
| Return next security context patterns iterator index. More...
rpmsx | rpmsxInit (rpmsx sx, int reverse)
| Initialize security context patterns iterator. More...
const char * | rpmsxFContext (rpmsx sx, const char *fn, mode_t fmode)
| Find file security context from path and type. More...

## Variables

int | _rpmsx_debug = 0
rpmioPool | _rpmsxPool

## Macro Definition Documentation

#define _RPMSX_INTERNAL

Definition at line 13 of file rpmsx.c.

#define inc_err | ( |  | ) | nerr++

Referenced by rpmsxParse().

## Function Documentation

static int rpmsxAdd | ( | rpmsx | sx,
|  | const char ** | bpp
| ) |  |

static

Find (or create) the stem of a file spec.

Error iff a file in the root directory or a regex that is too complex.

Return values

  *bpp | ptr to text after stem.

Returns
  stem index, -1 on error

Definition at line 142 of file rpmsx.c.

References rpmsxsPStem(), xmalloc(), and xrealloc().

Referenced by rpmsxParse().

const char* rpmsxContext | ( | const rpmsx | sx | ) |

Return current context.

Parameters

  sx | security context patterns

Returns
  current context, NULL on invalid

Definition at line 559 of file rpmsx.c.

Referenced by rpmsxFContext().

int rpmsxCount | ( | const rpmsx | sx | ) |

Return security context patterns count.

Parameters

  sx | security context patterns

Returns
  current count

Definition at line 520 of file rpmsx.c.

const char* rpmsxFContext | ( | rpmsx | sx,
|  | const char * | fn,
|  | mode_t | fmode
| ) |  |

Find file security context from path and type.

Parameters

  sx | security context patterns
  fn | file path
  fmode | file mode

Returns
  file security context

Definition at line 639 of file rpmsx.c.

References rpmsxContext(), rpmsxFind(), rpmsxFMode(), rpmsxFStem(), rpmsxInit(), rpmsxNext(), rpmsxPattern(), and rpmsxRE().

static int rpmsxFind | ( | const rpmsx | sx,
|  | const char ** | bpp
| ) |  |

static

Find the stem of a file name.

Error iff a file in the root directory or a regex that is too complex.

Parameters

  sx | security context patterns

Return values

  *bpp | ptr to text after stem.

Returns
  stem index, -1 on error

Definition at line 186 of file rpmsx.c.

References rpmsxsFStem().

Referenced by rpmsxFContext().

static void rpmsxFini | ( | void * | _sx | ) |

static

Definition at line 207 of file rpmsx.c.

References _free().

Referenced by rpmsxGetPool().

mode_t rpmsxFMode | ( | const rpmsx | sx | ) |

Return current file mode.

Parameters

  sx | security context patterns

Returns
  current file mode, 0 on invalid

Definition at line 577 of file rpmsx.c.

Referenced by rpmsxFContext().

int rpmsxFStem | ( | const rpmsx | sx | ) |

Return current file stem.

Parameters

  sx | security context patterns

Returns
  current file stem, -1 on invalid

Definition at line 586 of file rpmsx.c.

Referenced by rpmsxFContext().

static rpmsx rpmsxGetPool | ( | rpmioPool | pool | ) |

static

Definition at line 236 of file rpmsx.c.

References _rpmsx_debug, _rpmsxPool, rpmioGetPool(), rpmioNewPool(), and rpmsxFini().

Referenced by rpmsxNew().

rpmsx rpmsxInit | ( | rpmsx | sx,
|  | int | reverse
| ) |  |

Initialize security context patterns iterator.

Parameters

  sx | security context patterns
  reverse | iterate in reverse order?

Returns
  security context patterns

Definition at line 627 of file rpmsx.c.

References reverse.

Referenced by rpmsxFContext().

int rpmsxIx | ( | const rpmsx | sx | ) |

Return security context patterns index.

Parameters

  sx | security context patterns

Returns
  current index

Definition at line 525 of file rpmsx.c.

rpmsx rpmsxNew | ( | const char * | fn | ) |

Create and load security context patterns.

Parameters

  fn | security context patterns file name

Returns
  new security context patterns

Definition at line 500 of file rpmsx.c.

References rpmsxFree(), rpmsxGetPool(), rpmsxLink(), and rpmsxParse().

int rpmsxNext | ( | rpmsx | sx | ) |

Return next security context patterns iterator index.

Parameters

  sx | security context patterns

Returns
  security context patterns iterator index, -1 on termination

Definition at line 595 of file rpmsx.c.

References _rpmsx_debug.

Referenced by rpmsxFContext().

int rpmsxParse | ( | rpmsx | sx,
|  | const char * | fn
| ) |  |

Parse selinux file security context patterns.

Parameters

  sx | security context patterns
  fn | file name to parse

Returns
  0 on success

Definition at line 298 of file rpmsx.c.

References _, _free(), errno, inc_err, items, rpmGetPath(), rpmsxAdd(), rpmsxpCheckNoDupes(), rpmsxpHasMetaChars(), rpmsxSort(), S_IFSOCK, security_check_context, xcalloc(), and xmalloc().

Referenced by rpmsxNew().

const char* rpmsxPattern | ( | const rpmsx | sx | ) |

Return current pattern.

Parameters

  sx | security context patterns

Returns
  current pattern, NULL on invalid

Definition at line 541 of file rpmsx.c.

Referenced by rpmsxFContext().

static int rpmsxpCheckNoDupes | ( | const rpmsx | sx | ) |

static

Check for duplicate specifications.

If a duplicate specification is found and the context is the same, give a warning to the user. If a duplicate specification is found and the context is different, give a warning to the user (This could be changed to error). Return of non-zero is an error.

Parameters

  sx | security context patterns

Returns
  0 on success

Definition at line 259 of file rpmsx.c.

Referenced by rpmsxParse().

static void rpmsxpHasMetaChars | ( | rpmsxp | sxp | ) |

static

Definition at line 61 of file rpmsx.c.

Referenced by rpmsxParse().

regex_t* rpmsxRE | ( | const rpmsx | sx | ) |

Return current regex.

Parameters

  sx | security context patterns

Returns
  current context, NULL on invalid

Definition at line 568 of file rpmsx.c.

Referenced by rpmsxFContext().

int rpmsxSetIx | ( | rpmsx | sx,
|  | int | ix
| ) |  |

Set security context patterns index.

Parameters

  sx | security context patterns
  ix | new index

Returns
  current index

Definition at line 530 of file rpmsx.c.

static size_t rpmsxsFStem | ( | const char *const | buf | ) |

static

Return the length of the text that is the stem of a file name.

Returns
  stem length, 0 if no identifiable stem

Definition at line 125 of file rpmsx.c.

Referenced by rpmsxFind().

static void rpmsxSort | ( | rpmsx | sx | ) |

static

Stable sort for policy specifications, patterns before paths.

Parameters

  sx | security context patterns

Definition at line 27 of file rpmsx.c.

References _free(), and xmalloc().

Referenced by rpmsxParse().

static size_t rpmsxsPStem | ( | const char *const | buf | ) |

static

Return the length of the text that can be considered the stem.

Returns
  stem length, 0 if no identifiable stem

Definition at line 103 of file rpmsx.c.

Referenced by rpmsxAdd().

const char* rpmsxType | ( | const rpmsx | sx | ) |

Return current type.

Parameters

  sx | security context patterns

Returns
  current type, NULL on invalid/missing

Definition at line 550 of file rpmsx.c.

## Variable Documentation

int _rpmsx_debug = 0

Definition at line 21 of file rpmsx.c.

Referenced by rpmsxGetPool(), and rpmsxNext().

rpmioPool _rpmsxPool

Definition at line 234 of file rpmsx.c.

Referenced by rpmsxGetPool().