src/server/public/auth.h

Sat, 28 Jan 2017 10:38:34 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 28 Jan 2017 10:38:34 +0100
changeset 162
b169992137a8
parent 161
aadda87bad1b
child 211
2160585200ac
permissions
-rw-r--r--

improves cgi error handling and allows requests with empty headers

also fixes broken windows porting commit

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2013 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef WS_AUTH_H
#define	WS_AUTH_H

#include <sys/types.h>

#ifdef	__cplusplus
extern "C" {
#endif

#ifdef XP_WIN32
typedef int uid_t;
typedef int gid_t;
#endif

typedef struct auth_db AuthDB;
typedef struct user    User;   

/*
 * get a user from the authentication database
 * 
 * param1: authentication database
 * param2: user
 */
typedef User*(*authdb_get_user_f)(AuthDB*, char*);

struct auth_db {
    char                *name;
    /* User* get_user(AuthDB *db, char *username) */
    authdb_get_user_f   get_user;
    int                 use_cache;
};

/*
 * verify the users password
 * returns 1 if the password is correct, otherwise 0
 * 
 * param1: user
 * param2: password
 */
typedef int(*user_verify_passwd_f)(User*, char*);

/*
 * check if the user is a member of a given group
 * 
 * param1: user
 * param2: group
 */
typedef int(*user_check_group_f)(User*, char*);

/*
 * free the user object
 */
typedef void(*user_free_f)(User*);

struct user {
    char                   *name;
    uid_t                  uid;
    gid_t                  gid;
    /* int verify_password(User *user, char *password) */
    user_verify_passwd_f   verify_password;
    /* int check_group(User *user, char *group) */
    user_check_group_f     check_group;
    /* void free(User*) */
    user_free_f            free;
};


User* authdb_get_user(AuthDB *db, char *user);
User* authdb_get_and_verify(AuthDB *db, char *user, char *password, int *pw);

#ifdef	__cplusplus
}
#endif

#endif	/* WS_AUTH_H */

mercurial