!C99Shell v. 1.0 pre-release build #16!

Software: Apache/2.0.54 (Fedora). PHP/5.0.4 

uname -a: Linux mina-info.me 2.6.17-1.2142_FC4smp #1 SMP Tue Jul 11 22:57:02 EDT 2006 i686 

uid=48(apache) gid=48(apache) groups=48(apache)
context=system_u:system_r:httpd_sys_script_t
 

Safe-mode: OFF (not secure)

/usr/include/   drwxr-xr-x
Free 3.89 GB of 27.03 GB (14.4%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     sasl.h (34.48 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* This is a proposed C API for support of SASL
*
* Basic Type Summary:
*  sasl_conn_t       Context for a SASL connection negotiation
*  sasl_ssf_t        Security layer Strength Factor
*  sasl_callback_t   A typed client/server callback function and context
*  sasl_interact_t   A client interaction descriptor
*  sasl_secret_t     A client authentication secret/credentials/passphrase
*  sasl_rand_t       Random data context structure
*  sasl_security_properties_t  An application's required security level
*  sasl_external_properties_t  Security provided by an external security layer
*
* Callbacks:
*  sasl_getopt_t     client/server: Get an option value
*  sasl_log_t        client/server: Log message handler
*  sasl_getpath_t    client/server: Get path to search for mechanisms
*  sasl_getsimple_t  client: Get user/language list
*  sasl_getsecret_t  client: Get authentication secret
*  sasl_chalprompt_t client: Display challenge and prompt for response
*  sasl_authorize_t  server: Authorize policy callback
*  sasl_server_getsecret_t server: User secret database read
*  sasl_server_putsecret_t server: User secret database write
*
* Client/Server Function Summary:
*  sasl_done         Release all SASL global state
*  sasl_dispose      Connection done: Dispose of sasl_conn_t
*  sasl_getprop      Get property (e.g., user name, security layer info)
*  sasl_setprop      Set property (e.g., external ssf)
*  sasl_usererr      Translate server error code to user error code
*  sasl_errstring    Translate sasl error code to a string
*  sasl_encode       Encode data to send using security layer
*  sasl_decode       Decode data received using security layer
*
* Client Function Summary:
*  sasl_client_init  Load and initialize client plug-ins (call once)
*  sasl_client_new   Initialize client connection context: sasl_conn_t
*  sasl_client_start Select mechanism for connection
*  sasl_client_step  Perform one authentication step
*  sasl_client_auth  Create client secret (e.g., from a user & passphrase)
*  sasl_free_secret  Erase & Dispose of a sasl_secret_t
*
* Server Function Summary
*  sasl_server_init  Load and initialize server plug-ins (call once)
*  sasl_server_new   Initialize server connection context: sasl_conn_t
*  sasl_listmech     Create list of available mechanisms
*  sasl_server_start Begin an authentication exchange
*  sasl_server_step  Perform one authentication exchange step
*  sasl_checkpass    Check a plaintext passphrase
*  sasl_userexists   Check if user exists
*  sasl_setpass      Change a password or add a user entry
*
* Basic client model:
*  1. client calls sasl_client_init() at startup to load plug-ins
*  2. when connection formed, call sasl_client_new()
*  3. once list of supported mechanisms received from server, client
*     calls sasl_client_start().  goto 4a
*  4. client calls sasl_client_step()
* [4a. If SASL_INTERACT, fill in prompts and goto 4
*      -- doesn't happen if callbacks provided]
*  4b. If SASL error, goto 7 or 3
*  4c. If SASL_OK, continue or goto 6 if last server response was success
*  5. send message to server, wait for response
*  5a. On data or success with server response, goto 4
*  5b. On failure goto 7 or 3
*  5c. On success with no server response continue
*  6. continue with application protocol until connection closes
*     call sasl_getprop/sasl_encode/sasl_decode() if using security layer
*  7. call sasl_dispose(), may return to step 2
*  8. call sasl_done() when program terminates
*
* Basic Server model:
*  1. call sasl_server_init() at startup to load plug-ins
*  2. On connection, call sasl_server_new()
* [3. call sasl_listmech() and send list to client]
*  4. after client AUTH command, call sasl_server_start(), goto 5a
*  5. call sasl_server_step()
*  5a. If SASL_CONTINUE, output to client, wait response, repeat 5
*  5b. If SASL error, then goto 7
*  5c. If SASL_OK, move on
*  6. continue with application protocol until connection closes
*     call sasl_getprop/sasl_encode/sasl_decode() if using security layer
*  7. call sasl_dispose(), may return to step 2
*  8. call sasl_done() when program terminates
*
*/

#ifndef SASL_H
#define SASL_H 1

#define SASL_VERSION_MAJOR 1
#define SASL_VERSION_MINOR 5
#define SASL_VERSION_STEP 28

/* The following ifdef block is the standard way of creating macros
* which make exporting from a DLL simpler. All files within this DLL
* are compiled with the LIBSASL_EXPORTS symbol defined on the command
* line. this symbol should not be defined on any project that uses
* this DLL. This way any other project whose source files include
* this file see LIBSASL_API functions as being imported from a DLL,
* wheras this DLL sees symbols defined with this macro as being
* exported.  */
/* Under Unix, life is simpler: we just need to mark library functions
* as extern.  (Technically, we don't even have to do that.) */
#ifdef WIN32
# ifdef LIBSASL_EXPORTS
#  define LIBSASL_API  __declspec(dllexport)
# else /* LIBSASL_EXPORTS */
#  define LIBSASL_API  __declspec(dllimport)
# endif /* LIBSASL_EXPORTS */
#else /* WIN32 */
# define LIBSASL_API extern
#endif /* WIN32 */

/*************
* Basic API *
*************/

/* SASL result codes: */
#define SASL_CONTINUE   (1)  /* another step is needed in authentication */
#define SASL_OK         (0)  /* successful result */
#define SASL_FAIL      (-1)  /* generic failure */
#define SASL_NOMEM     (-2)  /* memory shortage failure */
#define SASL_BUFOVER   (-3)  /* overflowed buffer */
#define SASL_NOMECH    (-4)  /* mechanism not supported */
#define SASL_BADPROT   (-5)  /* bad protocol / cancel */
#define SASL_NOTDONE   (-6)  /* can't request info until later in exchange */
#define SASL_BADPARAM  (-7)  /* invalid parameter supplied */
#define SASL_TRYAGAIN  (-8)  /* transient failure (e.g., weak key) */
#define SASL_BADMAC    (-9)  /* integrity check failed */
                             /* -- client only codes -- */
#define SASL_INTERACT   (2)  /* needs user interaction */
#define SASL_BADSERV   (-10) /* server failed mutual authentication step */
#define SASL_WRONGMECH (-11) /* mechanism doesn't support requested feature */
#define SASL_NEWSECRET (-12) /* new secret needed */
                             /* -- server only codes -- */
#define SASL_BADAUTH   (-13) /* authentication failure */
#define SASL_NOAUTHZ   (-14) /* authorization failure */
#define SASL_TOOWEAK   (-15) /* mechanism too weak for this user */
#define SASL_ENCRYPT   (-16) /* encryption needed to use mechanism */
#define SASL_TRANS     (-17) /* One time use of a plaintext password will
                enable requested mechanism for user */
#define SASL_EXPIRED   (-18) /* passphrase expired, has to be reset */
#define SASL_DISABLED  (-19) /* account disabled */
#define SASL_NOUSER    (-20) /* user not found */
#define SASL_PWLOCK    (-21) /* password locked */
#define SASL_NOCHANGE  (-22) /* requested change was not needed */
#define SASL_BADVERS   (-23) /* version mismatch with plug-in */

#define SASL_NOPATH    (-25) /* path not set */

/* max size of a sasl mechanism name */
#define SASL_MECHNAMEMAX 20

/* per-connection SASL negotiation state for client or server
*/
typedef struct sasl_conn sasl_conn_t;

/* opaque passphrase/secret kept encrypted by API middleware
*  can be used by caller for single sign-on
* client "KEY" option will be used as key for
*  clients which offer a save-to-disk option.
*/
typedef struct sasl_secret {
    unsigned long len;
    char data[1];        /* variable sized */
} sasl_secret_t;

/* random data context structure
*/
typedef struct sasl_rand_s sasl_rand_t;


/****************************
* Configure Basic Services *
****************************/

/* the following functions are used to adjust how allocation and mutexes work
* they must be called before all other SASL functions:
*/

/* memory allocation functions which may optionally be replaced:
*/
typedef void *sasl_malloc_t(unsigned long);
typedef void *sasl_calloc_t(unsigned long, unsigned long);
typedef void *sasl_realloc_t(void *, unsigned long);
typedef void sasl_free_t(void *);

LIBSASL_API void sasl_set_alloc(sasl_malloc_t *,
                sasl_calloc_t *,
                sasl_realloc_t *,
                                sasl_free_t *);

/* mutex functions which may optionally be replaced:
*  sasl_mutex_new allocates a mutex structure
*  sasl_mutex_lock blocks until mutex locked
*   returns SASL_FAIL on deadlock or parameter error
*   returns SASL_OK on success
*  sasl_mutex_unlock unlocks mutex if it's locked
*   returns SASL_FAIL if not locked or parameter error
*   returns SASL_OK on success
*/
typedef void *sasl_mutex_new_t();
typedef int sasl_mutex_lock_t(void *mutex);
typedef int sasl_mutex_unlock_t(void *mutex);
typedef void sasl_mutex_dispose_t(void *mutex);

LIBSASL_API void sasl_set_mutex(sasl_mutex_new_t *, sasl_mutex_lock_t *,
                                sasl_mutex_unlock_t *, sasl_mutex_dispose_t *);

/*****************************
* Security preference types *
*****************************/

/* security layer strength factor -- an unsigned integer usable by the caller
*  to specify approximate security layer strength desired.  Roughly
*  correlated to effective key length for encryption.
* 0   = no protection
* 1   = integrity protection only
* 40  = 40-bit DES or 40-bit RC2/RC4
* 56  = DES
* 112 = triple-DES
* 128 = 128-bit RC2/RC4/BLOWFISH
*/
typedef unsigned sasl_ssf_t;

/* secflags provided on sasl_server_new and sasl_client_new:
*/
#define SASL_SECURITY_LAYER (0x0001) /* caller supports security layer */

/***************************
* Security Property Types *
***************************/

/* Structure specifying the client or server's security policy
* and optional additional properties.
*/

/* These are the various security flags apps can specify. */
/* NOPLAINTEXT          -- don't permit mechanisms susceptible to simple
*                         passive attack (e.g., PLAIN, LOGIN)
* NOACTIVE             -- protection from active (non-dictionary) attacks
*                         during authentication exchange.
*                Authenticates server.
* NODICTIONARY         -- don't permit mechanisms susceptible to passive
*                         dictionary attack
* FORWARD_SECRECY      -- require forward secrecy between sessions
*                         (breaking one won't help break next)
* NOANONYMOUS          -- don't permit mechanisms that allow anonymous login
* PASS_CREDENTIALS     -- require mechanisms which pass client
*               credentials, and allow mechanisms which can pass
*               credentials to do so
*/
#define SASL_SEC_NOPLAINTEXT     (0x0001)
#define SASL_SEC_NOACTIVE        (0x0002)
#define SASL_SEC_NODICTIONARY    (0x0004)
#define SASL_SEC_FORWARD_SECRECY (0x0008)
#define SASL_SEC_NOANONYMOUS     (0x0010)
#define SASL_SEC_PASS_CREDENTIALS (0x0200)

typedef struct sasl_security_properties
{
    /* security strength factor
     *  min_ssf      = minimum acceptable final level
     *  max_ssf      = maximum acceptable final level
     */
    sasl_ssf_t min_ssf;
    sasl_ssf_t max_ssf;

    /* Maximum security layer receive buffer size.
     *  0=security layer not supported
     */
    unsigned maxbufsize;
    
    /* bitfield for security properties -- see SASL_SEC_* above */
    int security_flags;

    /* NULL terminated array of additional property names, values */
    const char **property_names;
    const char **property_values;
} sasl_security_properties_t;


/* Structure communicating the characteristics of an external security
* mechanism.  This is used with sasl_setprop() to inform the library
* of an active external security layer.  If the auth_id is non-NULL,
* this enables the EXTERNAL authentication mechanism; this may also
* allow other mechanisms to become active (for instance, if an
* application demands encryption, mechanisms which solely provide
* authentication might become active if the necessary encryption is
* provided external to SASL).  Since this potentially changes the
* list of supported mechanisms, the mechanism list should be re-sent,
* if it has been sent already.  */
typedef struct sasl_external_properties
{
  /* security provided by the external mechanism */
  sasl_ssf_t ssf;

  /* authorization identity provided by the external mechanism */
  char *auth_id;
} sasl_external_properties_t;

/******************
* Callback types *
******************/

/* Extensible type for a client/server callbacks
*  id      -- identifies callback type
*  proc    -- procedure call arguments vary based on id
*  context -- context passed to procedure
*/
typedef struct sasl_callback {
    /* Identifies the type of the callback function.
     * Mechanisms must ignore callbacks with id's they don't recognize.
     */
    unsigned long id;
    int (*proc)();  /* Callback function.  Types of arguments vary by 'id' */
    void *context;
} sasl_callback_t;

/* callback ids & functions:
*/
#define SASL_CB_LIST_END  (0) /* end of list */

/* option reading callback -- this allows a SASL configuration to be
*  encapsulated in the caller's configuration system.  Some implementations
*  may use default config file(s) if this is omitted.  Configuration items
*  may be plugin-specific and are arbitrary strings.
*
* inputs:
*  context     -- option context from callback record
*  plugin_name -- name of plugin (NULL = general SASL option)
*  option      -- name of option
* output:
*  result      -- set to result which persists until next getopt in
*                 same thread, unchanged if option not found
*  len         -- length of result (optional)
* returns:
*  SASL_OK     -- no error
*  SASL_FAIL   -- error
*/
typedef int sasl_getopt_t(void *context, const char *plugin_name,
              const char *option,
              const char **result, unsigned *len);
#define SASL_CB_GETOPT      (1)

/* Logging levels for use with the logging callback function. */
#define SASL_LOG_ERR        (1) /* error message */
#define SASL_LOG_WARNING    (2) /* warning message */
#define SASL_LOG_INFO       (3) /* normal message */

/* logging callback -- this allows plugins and the middleware to
*  log operations they perform.
* inputs:
*  context     -- logging context from the callback record
*  priority    -- logging priority; see above
*  message     -- message to log
* returns:
*  SASL_OK     -- no error
*  SASL_FAIL   -- error
*/
typedef int sasl_log_t(void *context,
               int priority,
               const char *message);

#define SASL_CB_LOG        (2)

/* getpath callback -- this allows applications to specify the
* colon-separated path to search for plugins (by default,
* taken from the SASL_PATH environment variable).
* inputs:
*  context     -- getpath context from the callback record
* outputs:
*  path    -- colon seperated path (allocated on the heap; the
*                 library will free it using the sasl_free_t *
*                 passed to sasl_set_alloc(), or the standard free()
*                 library call).
* returns:
*  SASL_OK     -- no error
*  SASL_FAIL   -- error
*/
typedef int sasl_getpath_t(void * context,
               char ** path);

#define SASL_CB_GETPATH        (3)

/* verify file callback -- this allows applications to check if they
* want SASL to use files, file by file.  This is intended to allow
* applications to sanity check the environment to make sure plugins
* or the configuration file can't be written to, etc.
* inputs:
*  context     -- verifypath context from the callback record
*  file        -- full path to file to verify
*  type        -- type of file to verify

* returns:
*  SASL_OK        -- no error (file can safely be used)
*  SASL_CONTINUE  -- continue WITHOUT using this file
*  SASL_FAIL      -- error
*/
typedef int sasl_verifyfile_t(void * context,
                              const char * file, const int type);

#define SASL_CB_VERIFYFILE  (4)

/* these are the types of files libsasl will ask about */
#define SASL_VRFY_PLUGIN    (1)
#define SASL_VRFY_CONF        (2)
#define SASL_VRFY_PASSWD    (3)
#define SASL_VRFY_OTHER        (4)

/* client/user interaction callbacks:
*/
/* Simple prompt -- result must persist until next call to getsimple or
*  until connection context is disposed
* inputs:
*  context       -- context from callback structure
*  id            -- callback id
* outputs:
*  result        -- set to NUL terminated string
*                   NULL = user cancel
*  len           -- length of result, ignored with SASL_CB_SECRET
* returns SASL_OK
*/
typedef int sasl_getsimple_t(void *context, int id,
                 const char **result, unsigned *len);
#define SASL_CB_USER        (0x4001) /* client user identity to login as */
#define SASL_CB_AUTHNAME    (0x4002) /* client authentication name,
                          * defaults to authid in sasl_secret_t */
#define SASL_CB_LANGUAGE    (0x4003) /* comma separated list of RFC 1766
                          * language codes in order of preference
                      * to be used to localize client prompts
                      * or server error codes */

/* get a sasl_secret_t
*  psecret -- may be left NULL if sasl_client_auth() called
* returns SASL_OK
*/
typedef int sasl_getsecret_t(sasl_conn_t *conn, void *context, int id,
                 sasl_secret_t **psecret);
#define SASL_CB_PASS        (0x4004) /* client passphrase-based secret */


/* prompt for input in response to a challenge, result is copied & erased
*  by caller.
* input:
*  context   -- context from callback structure
*  id        -- callback id
*  challenge -- server challenge
* output:
*  result    -- NUL terminated result, NULL = user cancel
*  len       -- length of result
* returns SASL_OK
*/
typedef int sasl_chalprompt_t(void *context, int id,
                  const char *challenge,
                  const char *prompt, const char *defresult,
                  const char **result, unsigned *len);
#define SASL_CB_ECHOPROMPT   (0x4005) /* challenge and client-entered result */
#define SASL_CB_NOECHOPROMPT (0x4006) /* challenge and client-entered result */

/* prompt (or autoselect) the realm to do authentication in.
*  may get a list of valid realms.
* input:
*  context     -- context from callback structure
*  id          -- callback id
*  availrealms -- available realms; string list; NULL terminated
* output:
*  result      -- NUL terminated realm; NULL is equivalent to ""
* returns SASL_OK
* result must persist until the next callback
*/
/* If there is an interaction with SASL_CB_GETREALM the challenge of
*  the sasl_interact_t will be of the format: {realm1, realm2,
*  ...}. That is a list of possible realms seperated by comma spaces
*  enclosed by brackets.
*/
typedef int sasl_getrealm_t(void *context, int id,
                const char **availrealms,
                const char **result);
#define SASL_CB_GETREALM (0x4007) /* realm to attempt authentication in */


/* server callbacks:
*/
/* callback to verify authorization
*  requested_user -- the identity/username to authorize
*  auth_identity  -- the identity associated with the secret
*                    if the identity is not in the realm specified in
*                    sasl_server_new, it will be of the form user@realm
* return:
*  user           -- NULL = requested_user, otherwise canonicalized
*  errstr         -- can be set to error string on failure
* returns SASL_OK on success, SASL_BADAUTH or other SASL response on failure
*/
typedef int sasl_authorize_t(void *context,
                 const char *auth_identity,
                 const char *requested_user,
                 const char **user,
                 const char **errstr);
#define SASL_CB_PROXY_POLICY (0x8001)

/* callback to lookup a user's secret for a mechanism
*  mechanism     -- the mechanism requesting its secret
*  auth_identity -- the identity being looked up
*  realm         -- the realm the identity is in
* return:
*  secret        -- the secret associated with this user
*                   for this mechanism
* returns SASL_OK on success or other SASL response on failure
*/
typedef int sasl_server_getsecret_t(void *context,
                    const char *mechanism,
                    const char *auth_identity,
                    const char *realm,
                    sasl_secret_t ** secret);
#define SASL_CB_SERVER_GETSECRET (0x8002)

/* callback to store a user's secret for a mechanism
*  mechanism     -- the mechanism storing its secret
*  auth_identity -- the identity being stored
*  realm         -- the realm the identity is in
*  secret        -- the secret associated with this user
*                   for this mechanism.  If NULL, user's secret
*             for this mechanism will be erased.
* returns SASL_OK on success or other SASL response on failure
*/
typedef int sasl_server_putsecret_t(void *context,
                    const char *mechanism,
                    const char *auth_identity,
                    const char *realm,
                    const sasl_secret_t * secret);
#define SASL_CB_SERVER_PUTSECRET (0x8003)


/**********************************
* Common Client/server functions *
**********************************/

/* dispose of all SASL plugins.  Connection
* states have to be disposed of before calling this.
*/
LIBSASL_API void sasl_done(void);

/* dispose connection state, sets it to NULL
*  checks for pointer to NULL
*/
LIBSASL_API void sasl_dispose(sasl_conn_t **pconn);

/* translate server error code to user error code
*  currently only maps SASL_NOUSER to SASL_BADAUTH
*/
LIBSASL_API int sasl_usererr(int saslerr);

/* translate an error number into a string
* input:
*  saslerr  -- the error number
*  langlist -- comma separated list of RFC 1766 languages (may be NULL)
* results:
*  outlang  -- the language actually used (may be NULL if don't care)
* returns:
*  the error message
*/
LIBSASL_API const char *sasl_errstring(int saslerr,
               const char *langlist,
               const char **outlang);
               
/* get property from SASL connection state
*  propnum       -- property number
*  pvalue        -- pointer to value
* returns:
*  SASL_OK       -- no error
*  SASL_NOTDONE  -- property not available yet
*  SASL_BADPARAM -- bad property number
*/
LIBSASL_API int sasl_getprop(sasl_conn_t *conn, int propnum, void **pvalue);
#define SASL_USERNAME   0     /* pointer to NUL terminated user name */
#define SASL_SSF        1     /* security layer security strength factor,
                   * if 0, call to sasl_encode, sasl_decode
                   * unnecessary */
#define SASL_MAXOUTBUF  2     /* security layer max output buf unsigned */  
#define SASL_REALM      3     /* server authentication realm used */
#define SASL_GETOPTCTX  4     /* context for getopt callback */
#define SASL_IP_LOCAL   5     /* local address (pvalue=sockaddr_in *) */
#define SASL_IP_REMOTE  6     /* remote address (pvalue=sockaddr_in *) */

/* set property in SASL connection state
* returns:
*  SASL_OK       -- value set
*  SASL_BADPARAM -- invalid property or value
*/
LIBSASL_API int sasl_setprop(sasl_conn_t *conn,
                 int propnum,
                 const void *value);
#define SASL_SSF_EXTERNAL 100  /* external SSF active --
                * sasl_external_properties_t */
#define SASL_SEC_PROPS    101  /* sasl_security_properties_t */
                   /* also allows SASL_IP_LOCAL, SASL_IP_REMOTE */

/* do precalculations during an idle period or network round trip
*  may pass NULL to precompute for some mechanisms prior to connect
*  returns 1 if action taken, 0 if no action taken
*/
LIBSASL_API int sasl_idle(sasl_conn_t *conn);

/**************
* Client API *
**************/

/* list of client interactions with user for caller to fill in
*/
typedef struct sasl_interact {
    unsigned long id;        /* same as client/user callback ID */
    const char *challenge;      /* may be computer readable */
    const char *prompt;         /* always human readable */
    const char *defresult;    /* default result string */
    void *result;        /* set to point to result -- this will
                 * be freed by the library iff it
                 * would be freed by the library if
                 * returned from normal callback of
                 * the same id */
    unsigned len;        /* set to length of result */
} sasl_interact_t;

/* initialize the SASL client drivers
*  callbacks      -- base callbacks for all client connections
* returns:
*  SASL_OK        -- Success
*  SASL_NOMEM     -- Not enough memory
*  SASL_BADVERS   -- Mechanism version mismatch
*  SASL_BADPARAM  -- error in config file
*  SASL_NOMECH    -- No mechanisms available
*  ...
*/
LIBSASL_API int sasl_client_init(const sasl_callback_t *callbacks);

/* initialize a client exchange based on the specified mechanism
*  service       -- registered name of the service using SASL (e.g. "imap")
*  serverFQDN    -- the fully qualified domain name of the server
*  prompt_supp   -- list of client interactions supported
*                   may also include sasl_getopt_t context & call
*                   NULL prompt_supp = user/pass via SASL_INTERACT only
*                   NULL proc = interaction supported via SASL_INTERACT
*  secflags      -- security flags (see above)
* in/out:
*  pconn         -- connection negotiation structure
*                   pointer to NULL => allocate new
*
* Returns:
*  SASL_OK       -- success
*  SASL_NOMECH   -- no mechanism meets requested properties
*  SASL_NOMEM    -- not enough memory
*/
LIBSASL_API int sasl_client_new(const char *service,
            const char *serverFQDN,
            const sasl_callback_t *prompt_supp,
            int secflags,
            sasl_conn_t **pconn);

/* select a mechanism for a connection
*  mechlist      -- mechanisms server has available (punctuation ignored)
*  secret        -- optional secret from previous session
* output:
*  prompt_need   -- on SASL_INTERACT, list of prompts needed to continue
*  clientout     -- the initial client response to send to the server
*  mech          -- set to mechanism name
*
* Returns:
*  SASL_OK       -- success
*  SASL_NOMEM    -- not enough memory
*  SASL_NOMECH   -- no mechanism meets requested properties
*  SASL_INTERACT -- user interaction needed to fill in prompt_need list
*/
LIBSASL_API int sasl_client_start(sasl_conn_t *conn,
                  const char *mechlist,
                  sasl_secret_t *secret,
                  sasl_interact_t **prompt_need,
                  char **clientout,
                  unsigned *clientoutlen,
                  const char **mech);

/* do a single authentication step.
*  serverin    -- the server message received by the client, MUST have a NUL
*                 sentinel, not counted by serverinlen
* output:
*  prompt_need -- on SASL_INTERACT, list of prompts needed to continue
*  clientout   -- the client response to send to the server
*
* returns:
*  SASL_OK        -- success
*  SASL_INTERACT  -- user interaction needed to fill in prompt_need list
*  SASL_BADPROT   -- server protocol incorrect/cancelled
*  SASL_BADSERV   -- server failed mutual auth
*/
LIBSASL_API int
sasl_client_step(sasl_conn_t *conn,
         const char *serverin,
         unsigned serverinlen,
         sasl_interact_t **prompt_need,
         char **clientout,
         unsigned *clientoutlen);

/* Set connection secret based on passphrase
*  may be used in SASL_CB_PASS callback
* input:
*  user          -- username
*  pass          -- plaintext passphrase with NUL sentinel
*  passlen       -- 0 = strlen(pass)
* out:
*  prompts       -- if non-NULL, SASL_CB_PASS item filled in
*  keepcopy      -- set to copy of secret if non-NULL
* returns:
*  SASL_OK       -- success
*  SASL_NOMEM    -- failure
*/
LIBSASL_API int
sasl_client_auth(sasl_conn_t *conn,
         const char *user,
         const char *pass, unsigned passlen,
         sasl_interact_t *prompts, sasl_secret_t **keepcopy);

/* erase & dispose of a sasl_secret_t
*  calls free utility last set by sasl_set_alloc
*/
LIBSASL_API void sasl_free_secret(sasl_secret_t **);

/**************
* Server API *
**************/

/* initialize server drivers, done once per process
*  callbacks      -- base callbacks for all server connections
*  appname        -- name of calling application (for lower level logging)
* results:
*  state          -- server state
* returns:
*  SASL_OK        -- success
*  SASL_BADPARAM  -- error in config file
*  SASL_NOMEM     -- memory failure
*  SASL_BADVERS   -- Mechanism version mismatch
*/
LIBSASL_API int sasl_server_init(const sasl_callback_t *callbacks,
                 const char *appname);


/* create context for a single SASL connection
*  service        -- registered name of the service using SASL (e.g. "imap")
*  serverFQDN     -- Fully qualified server domain name.  NULL means use
*                    gethostname().  Useful for multi-homed servers.
*  user_realm     -- permits multiple user domains on server, NULL = default
*  callbacks      -- callbacks (e.g., authorization, lang, new getopt context)
*  secflags       -- security flags (see above)
* returns:
*  pconn          -- new connection context
*
* returns:
*  SASL_OK        -- success
*  SASL_NOMEM     -- not enough memory
*/
LIBSASL_API int sasl_server_new(const char *service,
                const char *serverFQDN,
                const char *user_realm,
                const sasl_callback_t *callbacks,
                int secflags,
                sasl_conn_t **pconn);

/* This returns a list of mechanisms in a NUL-terminated string
*  user          -- restricts mechanisms to those available to that user
*                   (may be NULL)
*  prefix        -- appended to beginning of result
*  sep           -- appended between mechanisms
*  suffix        -- appended to end of result
* results:
*  result        -- NUL terminated allocated result, caller must free
*  plen          -- gets length of result (excluding NUL), may be NULL
*  pcount        -- gets number of mechanisms, may be NULL
*
* returns:
*  SASL_OK        -- success
*  SASL_NOMEM     -- not enough memory
*  SASL_NOMECH    -- no enabled mechanisms
*/
LIBSASL_API int sasl_listmech(sasl_conn_t *conn,
                  const char *user,
                  const char *prefix,
                  const char *sep,
                  const char *suffix,
                  char **result,
                  unsigned *plen,
                  unsigned *pcount);

/* start a mechanism exchange within a connection context
*  mech           -- the mechanism name client requested
*  clientin       -- client initial response, NULL if empty
*  clientinlen    -- length of initial response
*  serverout      -- initial server challenge, NULL if done
*  serveroutlen   -- length of initial server challenge
* output:
*  pconn          -- the connection negotiation state on success
*  errstr         -- set to string to send to user on failure
*
* Same returns as sasl_server_step()
*/
LIBSASL_API int sasl_server_start(sasl_conn_t *conn,
                  const char *mech,
                  const char *clientin,
                  unsigned clientinlen,
                  char **serverout,
                  unsigned *serveroutlen,
                  const char **errstr);

/* perform one step of the SASL exchange
*  inputlen & input -- client data
*                      NULL on first step if no optional client step
*  outputlen & output -- set to the server data to transmit
*                        to the client in the next step
*  errstr           -- set to a more text error message from
*                    a lower level mechanism on failure
*
* returns:
*  SASL_OK        -- exchange is complete.
*  SASL_CONTINUE  -- indicates another step is necessary.
*  SASL_TRANS     -- entry for user exists, but not for mechanism
*                    and transition is possible
*  SASL_BADPARAM  -- service name needed
*  SASL_BADPROT   -- invalid input from client
*  ...
*/
LIBSASL_API int sasl_server_step(sasl_conn_t *conn,
             const char *clientin,
             unsigned clientinlen,
             char **serverout,
             unsigned *serveroutlen,
             const char **errstr);

/* check if a plaintext password is valid
* if user is NULL, check if plaintext is enabled
* inputs:
*  user         -- user to query in current user_realm
*  userlen      -- length of username, 0 = strlen(user)
*  pass         -- plaintext password to check
*  passlen      -- length of password, 0 = strlen(pass)
* outputs:
*  errstr       -- set to error message for use in protocols
* returns
*  SASL_OK      -- success
*  SASL_NOMECH  -- user found, but no verifier
*  SASL_NOUSER  -- user not found
*/
LIBSASL_API int sasl_checkpass(sasl_conn_t *conn,
                   const char *user,
                   unsigned userlen,
                   const char *pass,
                   unsigned passlen,
                   const char **errstr);

/* check if a user exists on server
*  service       -- registered name of the service using SASL (e.g. "imap")
*  user_realm    -- permits multiple user domains on server, NULL = default
*  user          -- NUL terminated user name
*
* returns:
*  SASL_OK       -- success
*  SASL_DISABLED -- account disabled
*  SASL_NOUSER   -- user not found
*  SASL_NOMECH   -- user found, but no usable mechanism
*/
LIBSASL_API int sasl_user_exists(const char *service,
             const char *user_realm,
             const char *user);

/* set the password for a user
*  conn        -- SASL connection
*  user        -- user name
*  pass        -- plaintext password, may be NULL to remove user
*  passlen     -- length of password, 0 = strlen(pass)
*  flags       -- see flags below
*  errstr      -- optional more detailed error
*
* returns:
*  SASL_NOCHANGE  -- proper entry already exists
*  SASL_NOMECH    -- no authdb supports password setting as configured
*  SASL_DISABLED  -- account disabled
*  SASL_PWLOCK    -- password locked
*  SASL_FAIL      -- OS error
*  SASL_BADPARAM  -- password too long
*  SASL_OK        -- successful
*/
LIBSASL_API int sasl_setpass(sasl_conn_t *conn,
         const char *user,
         const char *pass,
         unsigned passlen,
         int flags,
         const char **errstr);
#define SASL_SET_CREATE  0x01   /* create a new entry for user */
#define SASL_SET_DISABLE 0x02    /* disable user account */

/**********************
* security layer API *
**********************/

/* encode a block of data for transmission using security layer
* returns:
*  SASL_OK      -- success (returns input if no layer negotiated)
*  SASL_NOTDONE -- security layer negotiation not finished
*/
LIBSASL_API int sasl_encode(sasl_conn_t *conn,
                const char *input, unsigned inputlen,
                char **output, unsigned *outputlen);

/* decode a block of data received using security layer
* returns:
*  SASL_OK      -- success (returns input if no layer negotiated)
*  SASL_NOTDONE -- security layer negotiation not finished
*/
LIBSASL_API int sasl_decode(sasl_conn_t *conn,
                const char *input, unsigned inputlen,
                char **output, unsigned *outputlen);

/************************************
* Credentials API (used by server) *
************************************/

/* install credentials passed by the client
* Installing a set of credentials may install them on a per-process
* or a per-thread basis; neither behavior may be assumed.
* returns:
*  SASL_OK      -- success
*  SASL_FAIL    -- failure
*  SASL_NOTDONE -- credentials not passed
*/
LIBSASL_API int sasl_cred_install(sasl_conn_t *conn);

/* uninstalls a connection's credentials
* returns:
*  SASL_OK      -- success
*  SASL_FAIL    -- failure
*/
LIBSASL_API int sasl_cred_uninstall(sasl_conn_t *conn);
#endif /* SASL_H */


:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #16 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0049 ]--