rbacreq.c revision 1.2
1/*	$NetBSD: rbacreq.c,v 1.2 2021/08/14 16:14:53 christos Exp $	*/
2
3/* rbacreq.c - RBAC requests */
4/* $OpenLDAP$ */
5/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
6 *
7 *
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted only as authorized by the OpenLDAP
12 * Public License.
13 *
14 * A copy of this license is available in the file LICENSE in the
15 * top-level directory of the distribution or, alternatively, at
16 * <http://www.OpenLDAP.org/license.html>.
17 */
18/* ACKNOWLEDGEMENTS:
19 */
20
21#include <sys/cdefs.h>
22__RCSID("$NetBSD: rbacreq.c,v 1.2 2021/08/14 16:14:53 christos Exp $");
23
24#include "portable.h"
25
26#include <stdio.h>
27
28#include <ac/string.h>
29
30#include "slap.h"
31#include "slap-config.h"
32#include "lutil.h"
33
34#include "rbac.h"
35
36rbac_req_t *
37rbac_alloc_req( int type )
38{
39	rbac_req_t *reqp = NULL;
40
41	reqp = ch_calloc( 1, sizeof(rbac_req_t) );
42
43	reqp->req_type = type;
44	BER_BVZERO( &reqp->sessid );
45	BER_BVZERO( &reqp->tenantid );
46	/* session creation */
47	BER_BVZERO( &reqp->uid );
48	BER_BVZERO( &reqp->authtok );
49	reqp->roles = NULL;
50	/* check access  */
51	BER_BVZERO( &reqp->opname );
52	BER_BVZERO( &reqp->objname );
53	BER_BVZERO( &reqp->objid );
54	/* add/drop role */
55	BER_BVZERO( &reqp->role );
56
57	return reqp;
58}
59
60void
61rbac_free_req( rbac_req_t *reqp )
62{
63	if ( !reqp ) return;
64
65	if ( !BER_BVISNULL( &reqp->sessid ) )
66		ber_memfree( reqp->sessid.bv_val );
67
68	if ( !BER_BVISNULL( &reqp->tenantid ) )
69		ber_memfree( reqp->tenantid.bv_val );
70
71	/* session creation */
72	if ( !BER_BVISNULL( &reqp->uid ) )
73		ber_memfree( reqp->uid.bv_val );
74
75	if ( !BER_BVISNULL( &reqp->authtok ) )
76		ber_memfree( reqp->authtok.bv_val );
77
78	if ( reqp->roles )
79		ber_bvarray_free( reqp->roles );
80
81	/* check access  */
82	if ( !BER_BVISNULL( &reqp->opname ) )
83		ber_memfree( reqp->opname.bv_val );
84
85	if ( !BER_BVISNULL( &reqp->objname ) )
86		ber_memfree( reqp->objname.bv_val );
87
88	if ( !BER_BVISNULL( &reqp->objid ) )
89		ber_memfree( reqp->objid.bv_val );
90
91	ch_free( reqp );
92
93	return;
94}
95