Back to index

lightning-sunbird  0.9+nobinonly
proxyauthctrl.c
Go to the documentation of this file.
00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is Mozilla Communicator client code, released
00015  * March 31, 1998.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998-1999
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 #include "ldap-int.h"
00038 
00039 /* ldap_create_proxyauth_control
00040 
00041    Create a "version 1" proxied authorization control.
00042 
00043    Parameters are  
00044 
00045    ld              LDAP pointer to the desired connection 
00046 
00047    dn            The dn used in the proxy auth
00048 
00049    ctl_iscritical  Indicates whether the control is critical of not. If
00050                    this field is non-zero, the operation will only be car-
00051                    ried out if the control is recognized by the server
00052                    and/or client
00053 
00054    ctrlp           the address of a place to put the constructed control 
00055 */
00056 
00057 int
00058 LDAP_CALL
00059 ldap_create_proxyauth_control (
00060      LDAP *ld, 
00061      const char *dn, 
00062      const char ctl_iscritical,
00063      LDAPControl **ctrlp   
00064 )
00065 {
00066        BerElement           *ber;
00067        int                         rc;
00068 
00069        if ( !NSLDAPI_VALID_LDAP_POINTER( ld )) {
00070               return( LDAP_PARAM_ERROR );
00071        }
00072 
00073        if (  ctrlp == NULL ) {
00074               LDAP_SET_LDERRNO( ld, LDAP_PARAM_ERROR, NULL, NULL );
00075               return ( LDAP_PARAM_ERROR );
00076        }
00077        if (NULL == dn)
00078        {
00079            dn = "";
00080        }
00081 
00082        /* create a ber package to hold the controlValue */
00083        if ( ( nsldapi_alloc_ber_with_options( ld, &ber ) ) != LDAP_SUCCESS ) {
00084               LDAP_SET_LDERRNO( ld, LDAP_NO_MEMORY, NULL, NULL );
00085               return( LDAP_NO_MEMORY );
00086        }
00087 
00088 
00089 
00090         if ( LBER_ERROR == ber_printf( ber, 
00091                                        "{s}", 
00092                                        dn ) ) 
00093         {
00094             LDAP_SET_LDERRNO( ld, LDAP_ENCODING_ERROR, NULL, NULL );
00095             ber_free( ber, 1 );
00096             return( LDAP_ENCODING_ERROR );
00097         }
00098 
00099        rc = nsldapi_build_control( LDAP_CONTROL_PROXYAUTH, ber, 1,
00100            ctl_iscritical, ctrlp );
00101 
00102        LDAP_SET_LDERRNO( ld, rc, NULL, NULL );
00103        return( rc );
00104 
00105 }
00106 
00107 
00108 /* ldap_create_proxiedauth_control
00109 
00110    Create a "version 2" proxied authorization control.
00111 
00112    Parameters are  
00113 
00114    ld              LDAP pointer to the desired connection 
00115 
00116    authzid              The authorization identity used in the proxy auth,
00117                    e.g., dn:uid=bjensen,dc=example,dc=com
00118 
00119    ctrlp           the address of a place to put the constructed control 
00120 */
00121 
00122 int
00123 LDAP_CALL
00124 ldap_create_proxiedauth_control (
00125      LDAP *ld, 
00126      const char *authzid, 
00127      LDAPControl **ctrlp   
00128 )
00129 {
00130        BerElement           *ber;
00131        int                         rc;
00132 
00133        if ( !NSLDAPI_VALID_LDAP_POINTER( ld )) {
00134               return( LDAP_PARAM_ERROR );
00135        }
00136 
00137        if (  ctrlp == NULL || authzid == NULL ) {
00138               LDAP_SET_LDERRNO( ld, LDAP_PARAM_ERROR, NULL, NULL );
00139               return ( LDAP_PARAM_ERROR );
00140        }
00141 
00142        /* create a ber package to hold the controlValue */
00143        if ( ( nsldapi_alloc_ber_with_options( ld, &ber ) ) != LDAP_SUCCESS ) {
00144               LDAP_SET_LDERRNO( ld, LDAP_NO_MEMORY, NULL, NULL );
00145               return( LDAP_NO_MEMORY );
00146        }
00147 
00148 
00149 
00150         if ( LBER_ERROR == ber_printf( ber, 
00151                                        "s", 
00152                                        authzid ) ) 
00153         {
00154             LDAP_SET_LDERRNO( ld, LDAP_ENCODING_ERROR, NULL, NULL );
00155             ber_free( ber, 1 );
00156             return( LDAP_ENCODING_ERROR );
00157         }
00158 
00159        rc = nsldapi_build_control( LDAP_CONTROL_PROXIEDAUTH, ber, 1, 1, ctrlp );
00160 
00161        LDAP_SET_LDERRNO( ld, rc, NULL, NULL );
00162        return( rc );
00163 
00164 }