source: storage.h @ 701ab812

Last change on this file since 701ab812 was 8e6ecfe, checked in by Dennis Kaarsemaker <dennis@…>, at 2016-03-25T18:07:53Z

Authentication: scaffolding for multiple authentication backends

Instead of always putting users passwords in XML files, allow site
admins to configure a different authentication method to integrate
authentication with other systems.

This doesn't add any authentication backends yet, merely the
scaffolding. Notably:

  • Password checking and loading/removing from storage has been decoupled. A new auth_check_pass function is used to check passwords. It does check against the configured storage first, but will handle the authentication backends as well. The XML storage merely signals that a user's password should be checked using an authentication backend.
  • If unknown-to-bitlbee users identify using an authentication backend, they are automatically registered.
  • If an authentication backend is used, that fact is stored in the XML file, the password is not. Passwords are also stored unencrypted in this case, as the password used to encrypt them can change underneath us.
  • configure and Makefile changes for the backend objects
  • Property mode set to 100644
File size: 2.4 KB
Line 
1/********************************************************************\
2  * BitlBee -- An IRC to other IM-networks gateway                     *
3  *                                                                    *
4  * Copyright 2002-2004 Wilmer van der Gaast and others                *
5  \********************************************************************/
6
7/* Layer for retrieving and storing buddy information */
8
9/*
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 2 of the License, or
13  (at your option) any later version.
14
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License with
21  the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
22  if not, write to the Free Software Foundation, Inc., 51 Franklin St.,
23  Fifth Floor, Boston, MA  02110-1301  USA
24*/
25
26#ifndef __STORAGE_H__
27#define __STORAGE_H__
28
29typedef enum {
30        STORAGE_OK = 0,
31        STORAGE_NO_SUCH_USER,
32        STORAGE_INVALID_PASSWORD,
33        STORAGE_CHECK_BACKEND,
34        STORAGE_ALREADY_EXISTS,
35        STORAGE_OTHER_ERROR /* Error that isn't caused by user input, such as
36                               a database that is unreachable. log() will be
37                               used for the exact error message */
38} storage_status_t;
39
40typedef struct {
41        const char *name;
42
43        /* May be set to NULL if not required */
44        void (*init)(void);
45
46        storage_status_t (*check_pass)(irc_t *irc, const char *nick, const char *password);
47
48        storage_status_t (*load)(irc_t *irc, const char *password);
49        storage_status_t (*save)(irc_t *irc, int overwrite);
50        storage_status_t (*remove)(const char *nick);
51
52        /* May be NULL if not supported by backend */
53        storage_status_t (*rename)(const char *onick, const char *nnick, const char *password);
54} storage_t;
55
56storage_status_t storage_check_pass(irc_t *irc, const char *nick, const char *password);
57
58storage_status_t storage_load(irc_t * irc, const char *password);
59storage_status_t storage_save(irc_t *irc, char *password, int overwrite);
60storage_status_t storage_remove(const char *nick);
61
62void register_storage_backend(storage_t *);
63G_GNUC_MALLOC GList *storage_init(const char *primary, char **migrate);
64
65#endif /* __STORAGE_H__ */
Note: See TracBrowser for help on using the repository browser.