Home | History | Annotate | Line # | Download | only in src
      1 /*	$NetBSD: LDAPUrl.h,v 1.4 2025/09/05 21:16:14 christos Exp $	*/
      2 
      3 // $OpenLDAP$
      4 /*
      5  * Copyright 2000-2024 The OpenLDAP Foundation, All Rights Reserved.
      6  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
      7  */
      8 
      9 
     10 #ifndef LDAP_URL_H
     11 #define LDAP_URL_H
     12 
     13 #include <StringList.h>
     14 
     15 class LDAPUrlException;
     16 /**
     17  * This class is used to analyze and store LDAP-Urls as returned by a
     18  * LDAP-Server as Referrals and Search References. LDAP-URLs are defined
     19  * in RFC1959 and have the following format: <BR>
     20  * <code>
     21  * ldap://host:port/baseDN[?attr[?scope[?filter]]] <BR>
     22  * </code>
     23  */
     24 class LDAPUrl{
     25 
     26     public :
     27         /**
     28          * Create a new object from a string that contains a LDAP-Url
     29          * @param url The URL String
     30          */
     31         LDAPUrl(const std::string &url="");
     32 
     33         /**
     34          * Destructor
     35          */
     36         ~LDAPUrl();
     37 
     38         /**
     39          * @return The part of the URL that is representing the network
     40          * port
     41          */
     42         int getPort() const;
     43 
     44         /**
     45          * Set the port value of the URL
     46          * @param dn The port value
     47          */
     48         void setPort(int port);
     49 
     50         /**
     51          * @return The scope part of the URL is returned.
     52          */
     53         int getScope() const;
     54 
     55         /**
     56          * Set the Scope part of the URL
     57          * @param scope The new scope
     58          */
     59         void setScope(const std::string& scope);
     60 
     61         /**
     62          * @return The complete URL as a string
     63          */
     64         const std::string& getURLString() const;
     65 
     66         /**
     67          * Set the URL member attribute
     68          * @param url The URL String
     69          */
     70         void setURLString(const std::string &url);
     71 
     72         /**
     73          * @return The hostname or IP-Address of the destination host.
     74          */
     75         const std::string& getHost() const;
     76 
     77         /**
     78          * Set the Host part of the URL
     79          * @param host The new host part
     80          */
     81         void setHost( const std::string &host);
     82 
     83         /**
     84          * @return The Protocol Scheme of the URL.
     85          */
     86         const std::string& getScheme() const;
     87 
     88         /**
     89          * Set the Protocol Scheme of the URL
     90          * @param host The Protocol scheme. Allowed values are
     91          *       ldap,ldapi,ldaps and cldap
     92          */
     93         void setScheme( const std::string &scheme );
     94 
     95         /**
     96          * @return The Base-DN part of the URL
     97          */
     98         const std::string& getDN() const;
     99 
    100         /**
    101          * Set the DN part of the URL
    102          * @param dn The new DN part
    103          */
    104         void setDN( const std::string &dn);
    105 
    106 
    107         /**
    108          * @return The Filter part of the URL
    109          */
    110         const std::string& getFilter() const;
    111 
    112         /**
    113          * Set the Filter part of the URL
    114          * @param filter The new Filter
    115          */
    116         void setFilter( const std::string &filter);
    117 
    118         /**
    119          * @return The List of attributes  that was in the URL
    120          */
    121         const StringList& getAttrs() const;
    122 
    123         /**
    124          * Set the Attributes part of the URL
    125          * @param attrs StringList containing the List of Attributes
    126          */
    127         void setAttrs( const StringList &attrs);
    128         void setExtensions( const StringList &ext);
    129         const StringList& getExtensions() const;
    130 
    131         /**
    132          * Percent-decode a string
    133          * @param src The string that is to be decoded
    134          * @param dest The decoded result string
    135          */
    136         void percentDecode( const std::string& src, std::string& dest );
    137 
    138         /**
    139          * Percent-encoded a string
    140          * @param src The string that is to be encoded
    141          * @param dest The encoded result string
    142          * @param flags
    143          */
    144         std::string& percentEncode( const std::string& src,
    145                     std::string& dest,
    146                     int flags=0 ) const;
    147 
    148     protected :
    149         /**
    150          * Split the url string that is associated with this Object into
    151          * it components. The components of the URL can be access via the
    152          * get...() methods.
    153          * (this function is mostly for internal use and gets called
    154          * automatically whenever necessary)
    155          */
    156         void parseUrl();
    157 
    158         /**
    159          * Generate an URL string from the components that were set with
    160          * the various set...() methods
    161          * (this function is mostly for internal use and gets called
    162          * automatically whenever necessary)
    163          */
    164         void components2Url() const;
    165 
    166         void string2list(const std::string &src, StringList& sl,
    167                 bool percentDecode=false);
    168 
    169     protected :
    170         mutable bool regenerate;
    171         int m_Port;
    172         int m_Scope;
    173         std::string m_Host;
    174         std::string m_DN;
    175         std::string m_Filter;
    176         StringList m_Attrs;
    177         StringList m_Extensions;
    178         mutable std::string m_urlString;
    179         std::string m_Scheme;
    180         enum mode { base, attrs, scope, filter, extensions };
    181 };
    182 
    183 /// @cond
    184 struct code2string_s {
    185     int code;
    186     const char* string;
    187 };
    188 /// @endcond
    189 
    190 class LDAPUrlException {
    191     public :
    192         LDAPUrlException(int code, const std::string &msg="" );
    193 
    194         int getCode() const;
    195         const std::string getErrorMessage() const;
    196         const std::string getAdditionalInfo() const;
    197 
    198         static const int INVALID_SCHEME      = 1;
    199         static const int INVALID_PORT        = 2;
    200         static const int INVALID_SCOPE       = 3;
    201         static const int INVALID_URL         = 4;
    202         static const int URL_DECODING_ERROR  = 5;
    203         static const code2string_s code2string[];
    204 
    205     private:
    206         int m_code;
    207         std::string m_addMsg;
    208 };
    209 #endif //LDAP_URL_H
    210