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
44int
45LDAP_CALL
46ldap_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
109int
110LDAP_CALL
111ldap_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