xref: /titanic_50/usr/src/lib/libldap5/sources/ldap/common/proxyauthctrl.c (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1 #pragma ident	"%Z%%M%	%I%	%E% SMI"
2 
3 /*
4  * The contents of this file are subject to the Netscape Public
5  * License Version 1.1 (the "License"); you may not use this file
6  * except in compliance with the License. You may obtain a copy of
7  * the License at http://www.mozilla.org/NPL/
8  *
9  * Software distributed under the License is distributed on an "AS
10  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11  * implied. See the License for the specific language governing
12  * rights and limitations under the License.
13  *
14  * The Original Code is Mozilla Communicator client code, released
15  * March 31, 1998.
16  *
17  * The Initial Developer of the Original Code is Netscape
18  * Communications Corporation. Portions created by Netscape are
19  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
20  * Rights Reserved.
21  *
22  * Contributor(s):
23  */
24 #include "ldap-int.h"
25 
26 /* ldap_create_proxyauth_control
27 
28    Create a "version 1" proxied authorization control.
29 
30    Parameters are
31 
32    ld              LDAP pointer to the desired connection
33 
34    dn		   The dn used in the proxy auth
35 
36    ctl_iscritical  Indicates whether the control is critical of not. If
37                    this field is non-zero, the operation will only be car-
38                    ried out if the control is recognized by the server
39                    and/or client
40 
41    ctrlp           the address of a place to put the constructed control
42 */
43 
44 int
45 LDAP_CALL
ldap_create_proxyauth_control(LDAP * ld,const char * dn,const char ctl_iscritical,LDAPControl ** ctrlp)46 ldap_create_proxyauth_control (
47      LDAP *ld,
48      const char *dn,
49      const char ctl_iscritical,
50      LDAPControl **ctrlp
51 )
52 {
53 	BerElement		*ber;
54 	int				rc;
55 
56 	if ( !NSLDAPI_VALID_LDAP_POINTER( ld )) {
57 		return( LDAP_PARAM_ERROR );
58 	}
59 
60 	if (  ctrlp == NULL ) {
61 		LDAP_SET_LDERRNO( ld, LDAP_PARAM_ERROR, NULL, NULL );
62 		return ( LDAP_PARAM_ERROR );
63 	}
64 	if (NULL == dn)
65 	{
66 	    dn = "";
67 	}
68 
69 	/* create a ber package to hold the controlValue */
70 	if ( ( nsldapi_alloc_ber_with_options( ld, &ber ) ) != LDAP_SUCCESS ) {
71 		LDAP_SET_LDERRNO( ld, LDAP_NO_MEMORY, NULL, NULL );
72 		return( LDAP_NO_MEMORY );
73 	}
74 
75 
76 
77         if ( LBER_ERROR == ber_printf( ber,
78                                        "{s}",
79                                        dn ) )
80         {
81             LDAP_SET_LDERRNO( ld, LDAP_ENCODING_ERROR, NULL, NULL );
82             ber_free( ber, 1 );
83             return( LDAP_ENCODING_ERROR );
84         }
85 
86 	rc = nsldapi_build_control( LDAP_CONTROL_PROXYAUTH, ber, 1,
87 	    ctl_iscritical, ctrlp );
88 
89 	LDAP_SET_LDERRNO( ld, rc, NULL, NULL );
90 	return( rc );
91 
92 }
93 
94 
95 /* ldap_create_proxiedauth_control
96 
97    Create a "version 2" proxied authorization control.
98 
99    Parameters are
100 
101    ld              LDAP pointer to the desired connection
102 
103    authzid		   The authorization identity used in the proxy auth,
104                    e.g., dn:uid=bjensen,dc=example,dc=com
105 
106    ctrlp           the address of a place to put the constructed control
107 */
108 
109 int
110 LDAP_CALL
ldap_create_proxiedauth_control(LDAP * ld,const char * authzid,LDAPControl ** ctrlp)111 ldap_create_proxiedauth_control (
112      LDAP *ld,
113      const char *authzid,
114      LDAPControl **ctrlp
115 )
116 {
117 	BerElement		*ber;
118 	int				rc;
119 
120 	if ( !NSLDAPI_VALID_LDAP_POINTER( ld )) {
121 		return( LDAP_PARAM_ERROR );
122 	}
123 
124 	if (  ctrlp == NULL || authzid == NULL ) {
125 		LDAP_SET_LDERRNO( ld, LDAP_PARAM_ERROR, NULL, NULL );
126 		return ( LDAP_PARAM_ERROR );
127 	}
128 
129 	/* create a ber package to hold the controlValue */
130 	if ( ( nsldapi_alloc_ber_with_options( ld, &ber ) ) != LDAP_SUCCESS ) {
131 		LDAP_SET_LDERRNO( ld, LDAP_NO_MEMORY, NULL, NULL );
132 		return( LDAP_NO_MEMORY );
133 	}
134 
135 
136 
137         if ( LBER_ERROR == ber_printf( ber,
138                                        "s",
139                                        authzid ) )
140         {
141             LDAP_SET_LDERRNO( ld, LDAP_ENCODING_ERROR, NULL, NULL );
142             ber_free( ber, 1 );
143             return( LDAP_ENCODING_ERROR );
144         }
145 
146 	rc = nsldapi_build_control( LDAP_CONTROL_PROXIEDAUTH, ber, 1, 1, ctrlp );
147 
148 	LDAP_SET_LDERRNO( ld, rc, NULL, NULL );
149 	return( rc );
150 
151 }
152