pam_pkcs11 0.6.12
mapper.h File Reference
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include <pwd.h>
#include <../common/cert_st.h>
#include "../scconf/scconf.h"

Go to the source code of this file.

Data Structures

struct  mapper_module_st
 Structure to be filled on mapper module initialization. More...
 
struct  mapfile
 This struct is used in processing map files a map file is a list of "key" " -> " "value" text lines. More...
 

Macros

#define MAPPER_EXTERN   extern
 
#define _DEFAULT_MAPPER_FIND_ENTRIES
 Default macro for locate certificate entry.
 
#define _DEFAULT_MAPPER_FIND_USER
 Default macro for locating user.
 
#define _DEFAULT_MAPPER_MATCH_USER
 Macro for match mapper function.
 
#define _DEFAULT_MAPPER_END
 Macro for de-initialization routine.
 
#define _DEFAULT_MAPPER_INIT
 Macro for default init function.
 

Typedefs

typedef struct mapper_module_st mapper_module
 Structure to be filled on mapper module initialization.
 

Functions

mapper_modulemapper_module_init (scconf_block *ctx, const char *mapper_name)
 Initialize module and mapper_module_st structure.
 
MAPPER_EXTERN struct mapfileset_mapent (const char *uri)
 Initialize a mapper entry table.
 
MAPPER_EXTERN int get_mapent (struct mapfile *mfile)
 Retrieve next entry of given map file.
 
MAPPER_EXTERN void end_mapent (struct mapfile *mfile)
 Release a mapentry structure.
 
MAPPER_EXTERN char * mapfile_find (const char *file, char *key, int ignorecase, int *match)
 Try to map "key" to provided mapfile.
 
MAPPER_EXTERN int mapfile_match (const char *file, char *key, const char *value, int ignorecase)
 Try to match provided key to provided name by mean of a mapfile.
 
MAPPER_EXTERN char * search_pw_entry (const char *item, int ignorecase)
 find the user login that matches pw_name or pw_gecos with provided item
 
MAPPER_EXTERN int compare_pw_entry (const char *item, struct passwd *pw, int ignorecase)
 Test if provided item matches pw_name or pw_gecos of provided password structure.
 

Macro Definition Documentation

◆ _DEFAULT_MAPPER_END

#define _DEFAULT_MAPPER_END
Value:
static void mapper_module_end(void *context) { \
free(context); \
return; \
} \

Macro for de-initialization routine.

Parameters
contextMapper context

Definition at line 219 of file mapper.h.

◆ _DEFAULT_MAPPER_FIND_ENTRIES

#define _DEFAULT_MAPPER_FIND_ENTRIES
Value:
static char ** mapper_find_entries(X509 *x509, void *context) { \
return NULL; \
}

Default macro for locate certificate entry.

Provided as sample for debugging, not for real user

Parameters
x509X509 Certificate
contextMapper context
Returns
String array with up to 15 results or NULL if fail

Definition at line 174 of file mapper.h.

◆ _DEFAULT_MAPPER_FIND_USER

#define _DEFAULT_MAPPER_FIND_USER
Value:
static char * mapper_find_user(X509 *x509,void *context,int *match) { \
if ( !x509 ) return NULL; \
*match = 1; \
return "nobody"; \
}

Default macro for locating user.

Should not be used except for debugging, as always returns "nobody"

Parameters
x509X509 Certificate
contextMapper context
Returns
Found user, or NULL

Definition at line 187 of file mapper.h.

◆ _DEFAULT_MAPPER_INIT

#define _DEFAULT_MAPPER_INIT
Value:
mapper_module* mapper_module_init(scconf_block *blk,const char *name) { \
mapper_module *pt= malloc(sizeof (mapper_module)); \
if (!pt) return NULL; \
pt->name = name; \
pt->context = NULL; \
pt->block = blk; \
pt->entries = mapper_find_entries; \
pt->finder = mapper_find_user; \
pt->matcher = mapper_match_user; \
pt->deinit = mapper_module_end; \
return pt; \
} \
DEBUG_EXTERN int get_debug_level(void)
get_debug_level() Returns the current debug level.
mapper_module * mapper_module_init(scconf_block *ctx, const char *mapper_name)
Initialize module and mapper_module_st structure.
struct mapper_module_st mapper_module
Structure to be filled on mapper module initialization.
struct _scconf_block scconf_block
Definition scconf.h:55
void(* deinit)(void *context)
module de-initialization
Definition mapper.h:56
int(* matcher)(X509 *x509, const char *login, void *context)
cert-to-login matcher
Definition mapper.h:54
const char * name
mapper name
Definition mapper.h:42
int dbg_level
debug level to set before call entry points
Definition mapper.h:46
scconf_block * block
mapper configuration block
Definition mapper.h:44
char *(* finder)(X509 *x509, void *context, int *match)
cert.
Definition mapper.h:52
void * context
pointer to mapper local data
Definition mapper.h:48
char **(* entries)(X509 *x509, void *context)
cert.
Definition mapper.h:50

Macro for default init function.

Parameters
blkMapper Configuration file block
nameName of this mapper
Returns
pointer to mapper_module data, else NULL NOTE: mapper module data MUST BE defined in module

Definition at line 232 of file mapper.h.

◆ _DEFAULT_MAPPER_MATCH_USER

#define _DEFAULT_MAPPER_MATCH_USER
Value:
static int mapper_match_user(X509 *x509, const char *login, void *context) { \
int match = 0; \
char *username= mapper_find_user(x509,context,&match); \
if (!x509) return -1; \
if (!login) return -1; \
if (!username) return 0; /*user not found*/ \
if ( ! strcmp(login,username) ) return 1; /* match user */ \
return 0; /* no match */ \
}

Macro for match mapper function.

Parameters
x509X509 Certificate
loginuser to match, or null to find user that matches certificate
contextMapper context
Returns
1 on success; login points to matched user 0 on no match -1 on error

Definition at line 204 of file mapper.h.

◆ MAPPER_EXTERN

#define MAPPER_EXTERN   extern

Typedef Documentation

◆ mapper_module

Structure to be filled on mapper module initialization.

Function Documentation

◆ compare_pw_entry()

MAPPER_EXTERN int compare_pw_entry ( const char * item,
struct passwd * pw,
int ignorecase )

Test if provided item matches pw_name or pw_gecos of provided password structure.

Parameters
itemString to be compared
pwpassword entry to search into
ignorecaseFlag to check upper/lowercase in string comparisions
Returns
1 on match, 0 on no match, -1 on error

References MAPPER_EXTERN.

◆ end_mapent()

MAPPER_EXTERN void end_mapent ( struct mapfile * mfile)

Release a mapentry structure.

Parameters
mfileMap file structure to be released

References MAPPER_EXTERN.

◆ get_mapent()

MAPPER_EXTERN int get_mapent ( struct mapfile * mfile)

Retrieve next entry of given map file.

Parameters
mfileMap file entry pointer
Returns
1 on sucess, 0 on no more entries, -1 on error

References MAPPER_EXTERN.

◆ mapfile_find()

MAPPER_EXTERN char * mapfile_find ( const char * file,
char * key,
int ignorecase,
int * match )

Try to map "key" to provided mapfile.

Parameters
fileURL of map file
keyString to be mapped
ignorecaseFlag to indicate upper/lowercase ignore in string compare
matchSet to 1 for mapped string return, unmodified for key return
Returns
key on no match, else a clone_str()'d of found mapping

References MAPPER_EXTERN.

◆ mapfile_match()

MAPPER_EXTERN int mapfile_match ( const char * file,
char * key,
const char * value,
int ignorecase )

Try to match provided key to provided name by mean of a mapfile.

Parameters
fileURL of map file
keyString to be mapped
valueString to be matched against mapped result
ignorecaseFlag to indicate upper/lowercase ignore in string compare
Returns
1 on match, 0 on no match, -1 on process error

References MAPPER_EXTERN.

◆ mapper_module_init()

mapper_module * mapper_module_init ( scconf_block * ctx,
const char * mapper_name )

Initialize module and mapper_module_st structure.

EVERY mapper module MUST provide and export this function if dinamycally linked

Parameters
ctxPointer to related configuration file context
mapper_nameName of this mapper. Used for multi-mapper modules
Returns
Pointer to a mapper_module structure, or NULL if failed

◆ search_pw_entry()

MAPPER_EXTERN char * search_pw_entry ( const char * item,
int ignorecase )

find the user login that matches pw_name or pw_gecos with provided item

Parameters
itemData to be searched from password database
ignorecaseFlag to check upper/lowercase in string comparisions
Returns
userlogin if match found, else NULL

References MAPPER_EXTERN.

◆ set_mapent()

MAPPER_EXTERN struct mapfile * set_mapent ( const char * uri)

Initialize a mapper entry table.

Parameters
uriUniversal Resource Locator of the file to be mapped
Returns
A mapfile structure pointer or NULL

References MAPPER_EXTERN.