Annotation of libaitcfg/inc/aitpwd.h, revision 1.2

1.2     ! misho       1: /*************************************************************************
        !             2: * (C) 2010 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
        !             3: *  by Michael Pounov <misho@openbsd-bg.org>
        !             4: *
        !             5: * $Author: misho $
        !             6: * $Id: aitpwd.h,v 1.1.2.11 2012/09/19 13:44:25 misho Exp $
        !             7: *
        !             8: **************************************************************************
        !             9: The ELWIX and AITNET software is distributed under the following
        !            10: terms:
        !            11: 
        !            12: All of the documentation and software included in the ELWIX and AITNET
        !            13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
        !            14: 
        !            15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
        !            16:        by Michael Pounov <misho@elwix.org>.  All rights reserved.
        !            17: 
        !            18: Redistribution and use in source and binary forms, with or without
        !            19: modification, are permitted provided that the following conditions
        !            20: are met:
        !            21: 1. Redistributions of source code must retain the above copyright
        !            22:    notice, this list of conditions and the following disclaimer.
        !            23: 2. Redistributions in binary form must reproduce the above copyright
        !            24:    notice, this list of conditions and the following disclaimer in the
        !            25:    documentation and/or other materials provided with the distribution.
        !            26: 3. All advertising materials mentioning features or use of this software
        !            27:    must display the following acknowledgement:
        !            28: This product includes software developed by Michael Pounov <misho@elwix.org>
        !            29: ELWIX - Embedded LightWeight unIX and its contributors.
        !            30: 4. Neither the name of AITNET nor the names of its contributors
        !            31:    may be used to endorse or promote products derived from this software
        !            32:    without specific prior written permission.
        !            33: 
        !            34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
        !            35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            37: ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            44: SUCH DAMAGE.
        !            45: */
        !            46: #ifndef __AITPWD_H
        !            47: #define __AITPWD_H
        !            48: 
        !            49: 
        !            50: #include <time.h>
        !            51: #include <sys/types.h>
        !            52: #include <aitio.h>
        !            53: 
        !            54: 
        !            55: #define PWD_CRIT_NAME  0
        !            56: #define PWD_CRIT_UID   1
        !            57: #define PWD_CRIT_GID   2
        !            58: 
        !            59: 
        !            60: struct tagAcctDB {
        !            61:        unsigned short  db_ver;
        !            62:        unsigned char   db_lock;
        !            63:        unsigned char   db_wrap;
        !            64: 
        !            65:        unsigned int    db_rmin;
        !            66:        unsigned int    db_rmax;
        !            67:        uint64_t        db_rsize;
        !            68: 
        !            69:        uint64_t        db_since;
        !            70: 
        !            71:        int             db_h;           /* optional */
        !            72: } __packed;
        !            73: 
        !            74: /* Search callback function, compare to match argument to record match ... 
        !            75:  *  (return: -1 error, 0 not match or 1 match)
        !            76:  */
        !            77: typedef int (*cb_acct_f)(void * /*current db_record*/, void * /*argument*/);
        !            78: 
        !            79: 
        !            80: struct tagUser {
        !            81:        int                     usr_fields;
        !            82: 
        !            83:        ait_val_t               usr_name;
        !            84:        ait_val_t               usr_pass;
        !            85:        ait_val_t               usr_uid;
        !            86:        ait_val_t               usr_gid;
        !            87:        ait_val_t               usr_class;
        !            88:        ait_val_t               usr_change;
        !            89:        ait_val_t               usr_expire;
        !            90:        ait_val_t               usr_realm;
        !            91:        ait_val_t               usr_home;
        !            92:        ait_val_t               usr_shell;
        !            93: 
        !            94:        SLIST_ENTRY(tagUser)    usr_next;
        !            95:        RB_ENTRY(tagUser)       usr_node;
        !            96: };
        !            97: typedef struct tagPWD {
        !            98:        pthread_mutex_t         pwd_mtx;
        !            99: 
        !           100:        struct tagUser          *slh_first;
        !           101:        struct tagUser          *rbh_root;
        !           102: } pwd_root_t;
        !           103: #define PWD_LOCK(x)    pthread_mutex_lock(&(x)->pwd_mtx)
        !           104: #define PWD_UNLOCK(x)  pthread_mutex_unlock(&(x)->pwd_mtx)
        !           105: 
        !           106: #define PWD_ISEMPTY(x) RB_EMPTY((x))
        !           107: 
        !           108: typedef enum { ALL = -1, 
        !           109:        Username, 
        !           110:        Password, 
        !           111:        UID, 
        !           112:        GID, 
        !           113:        Class, 
        !           114:        Change, 
        !           115:        Expire, 
        !           116:        Realm, 
        !           117:        Home, 
        !           118:        Shell 
        !           119: } passwd_attr_t;
        !           120: 
        !           121: 
        !           122: /*
        !           123:  * cfgInitPasswd() - Init password root
        !           124:  *
        !           125:  * @pwd = Password root
        !           126:  * return: -1 error or 0 ok
        !           127:  */
        !           128: int cfgInitPasswd(pwd_root_t * __restrict pwd);
        !           129: /*
        !           130:  * cfgLoadPasswd() - Load passwords from file
        !           131:  *
        !           132:  * @pwdName = Passwords filename
        !           133:  * @pwd = Password root
        !           134:  * return: -1 error or 0 ok
        !           135:  */
        !           136: int cfgLoadPasswd(const char *pwdName, pwd_root_t * __restrict pwd);
        !           137: /*
        !           138:  * cfgClearPasswd() - Clear passwords and free resources
        !           139:  *
        !           140:  * @cfg = Password root
        !           141:  * return: none
        !           142:  */
        !           143: void cfgClearPasswd(pwd_root_t * __restrict pwd);
        !           144: /*
        !           145:  * cfgUnloadPasswd() - Unload passwords from memory and destroy resources
        !           146:  *
        !           147:  * @pwd = Password root
        !           148:  * return: none
        !           149:  */
        !           150: void cfgUnloadPasswd(pwd_root_t * __restrict pwd);
        !           151: /*
        !           152:  * cfgCreatePasswd() - Create password file from memory
        !           153:  *
        !           154:  * @pwdName = New password filename
        !           155:  * @pwd = Password root
        !           156:  * return: -1 error or 0 ok
        !           157:  */
        !           158: int cfgCreatePasswd(const char *pwdName, pwd_root_t * __restrict pwd);
        !           159: 
        !           160: /*
        !           161:  * cfgReadPasswd() - Read file and add new item at password root
        !           162:  *
        !           163:  * @f = File resource
        !           164:  * @pwd = Password root
        !           165:  * return: -1 error or 0 ok
        !           166:  */
        !           167: int cfgReadPasswd(FILE *f, pwd_root_t * __restrict pwd);
        !           168: /*
        !           169:  * cfgWritePasswd() - Write passwords from memory
        !           170:  *
        !           171:  * @f = File handle
        !           172:  * @pwd = Password root
        !           173:  * return: -1 error or 0 ok
        !           174:  */
        !           175: int cfgWritePasswd(FILE *f, pwd_root_t * __restrict pwd);
        !           176: /*
        !           177:  * cfgConcatPasswd() - Concat two password roots into one
        !           178:  *
        !           179:  * @pwd = Password root
        !           180:  * @add_pwd = Concated password root will be destroy after merge
        !           181:  * return: -1 error or 0 ok
        !           182:  */
        !           183: int cfgConcatPasswd(pwd_root_t * __restrict pwd, pwd_root_t * __restrict add_pwd);
        !           184: 
        !           185: /*
        !           186:  * cfgAuthPasswd() - Authenticate user against passwords db
        !           187:  *
        !           188:  * @pwd = Password root
        !           189:  * @csName = Username
        !           190:  * @csPass = Password
        !           191:  * return: =NULL deny or !=NULL allow
        !           192:  */
        !           193: const struct tagUser *cfgAuthPasswd(pwd_root_t * __restrict pwd, 
        !           194:                const char *csName, const char *csPass);
        !           195: 
        !           196: /*
        !           197:  * cfg_findPasswdBy() - Find user by criteria position in list
        !           198:  *
        !           199:  * @pwd = Password root
        !           200:  * @criteria = Search criteria [PWD_CRIT_NAME|PWD_CRIT_UID|PWD_CRIT_GID]
        !           201:  * @arg1 = Username | UID | GID
        !           202:  * return: NULL not found item or error and !=NULL found item
        !           203:  */
        !           204: const struct tagUser *cfg_findPasswdBy(pwd_root_t * __restrict pwd, int criteria, ...);
        !           205: /*
        !           206:  * cfg_unsetPasswd() - Unset item from passwords and free resources
        !           207:  *
        !           208:  * @pwd = Password root
        !           209:  * @criteria = Search criteria [PWD_CRIT_NAME|PWD_CRIT_UID]
        !           210:  * @arg1 = Username | UID
        !           211:  * return: 0 item not found, -1 error or 1 removed item
        !           212:  */
        !           213: int cfg_unsetPasswd(pwd_root_t * __restrict pwd, int criteria, ...);
        !           214: /*
        !           215:  * cfg_setPasswd() - Set item in password or adding new item if not exists
        !           216:  *
        !           217:  * @cfg = Password root
        !           218:  * @fields = Meaning continuous field
        !           219:  * @csName = Username
        !           220:  * @arg1 = Password
        !           221:  * @arg2 = UID
        !           222:  * @arg3 = GID
        !           223:  * @arg4 = Login class
        !           224:  * @arg5 = Chage date
        !           225:  * @arg6 = Expire date
        !           226:  * @arg7 = Realm
        !           227:  * @arg8 = Home dir
        !           228:  * @arg9 = Shell
        !           229:  * return: 0 nothing changed, -1 error, 1 found and updated item or 2 added new item
        !           230:  */
        !           231: int cfg_setPasswd(pwd_root_t * __restrict pwd, u_char fields, const char *csName, ...);
        !           232: /*
        !           233:  * cfg_getPasswd() - Get item from passwords and return structure from it
        !           234:  *
        !           235:  * @pwd = Password root
        !           236:  * @criteria = Search criteria [PWD_CRIT_NAME|PWD_CRIT_UID]
        !           237:  * @arg1 = Username | UID
        !           238:  * return: NULL item not found, !=NULL structure found
        !           239:  */
        !           240: inline const struct tagUser *cfg_getPasswd(pwd_root_t * __restrict pwd, int criteria, ...);
        !           241: 
        !           242: 
        !           243: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>