Annotation of libaitcfg/inc/aitpwd.h, revision 1.1.2.1
1.1.2.1 ! 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.3 2012/07/22 22:28:50 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:
! 52:
! 53: struct tagAcctDB {
! 54: unsigned short db_ver;
! 55: unsigned char db_lock;
! 56: unsigned char db_wrap;
! 57:
! 58: unsigned int db_rmin;
! 59: unsigned int db_rmax;
! 60: uint64_t db_rsize;
! 61:
! 62: uint64_t db_since;
! 63:
! 64: int db_h; /* optional */
! 65: } __packed;
! 66:
! 67: /* Search callback function, compare to match argument to record match ...
! 68: * (return: -1 error, 0 not match or 1 match)
! 69: */
! 70: typedef int (*cb_acct_f)(void * /*current db_record*/, void * /*argument*/);
! 71:
! 72:
! 73: struct tagUser {
! 74: ait_val_t usr_name;
! 75: ait_val_t usr_pass;
! 76: ait_val_t usr_uid;
! 77: ait_val_t usr_gid;
! 78: ait_val_t usr_class;
! 79: ait_val_t usr_change;
! 80: ait_val_t usr_expire;
! 81: ait_val_t usr_realm;
! 82: ait_val_t usr_home;
! 83: ait_val_t usr_shell;
! 84:
! 85: SLIST_ENTRY(tagCfg) usr_next;
! 86: RB_ENTRY(tagCfg) usr_node;
! 87: };
! 88:
! 89: typedef struct tagUser * passwd_t;
! 90:
! 91: typedef enum { ALL = -1,
! 92: Username,
! 93: Password,
! 94: UID,
! 95: GID,
! 96: Class,
! 97: Change,
! 98: Expire,
! 99: Realm,
! 100: Home,
! 101: Shell
! 102: } passwd_attr_t;
! 103:
! 104:
! 105: #if 0
! 106: /*
! 107: * CreatePasswd() Create secrets from memory
! 108: * @csPasswdName = New filename for secrets
! 109: * @ppwd = Users array element
! 110: * return: 0 ok; -1 error:: can`t save new file
! 111: */
! 112: int CreatePasswd(const char *csPasswdName, passwd_t * __restrict ppwd);
! 113: /*
! 114: * LoadPasswd() Load secrets from file
! 115: * @csPasswdName = Filename of secrets
! 116: * @ppwd = Users array element
! 117: * return: 0 ok; -1 error:: can`t load file
! 118: */
! 119: int LoadPasswd(const char *csPasswdName, passwd_t * __restrict ppwd);
! 120: /*
! 121: * UnloadPasswd() Unload secrets from memory and free resources
! 122: * @ppwd = Users array element
! 123: */
! 124: void UnloadPasswd(passwd_t * __restrict ppwd);
! 125:
! 126:
! 127: // pwd_GetErrno() Get error code of last operation
! 128: inline int pwd_GetErrno();
! 129: // pwd_GetError() Get error text of last operation
! 130: inline const char *pwd_GetError();
! 131: // pwd_Delimiter() Operate with file delimiter, if delim == 0 only get current
! 132: inline unsigned char pwd_GetDelim(unsigned char delim);
! 133:
! 134:
! 135: /*
! 136: * ReadPasswd() Read from file and add new item to user array
! 137: * @f = file resource
! 138: * @ppwd = User array
! 139: * return: 0 ok; -1 error:: can`t allocate memory
! 140: */
! 141: int ReadPasswd(FILE *f, passwd_t * __restrict ppwd);
! 142: /*
! 143: * WritePasswd() Write to file from items in array
! 144: * @f = file resource
! 145: * @ppwd = User array
! 146: * return: 0 ok; -1 error:: can`t write to file
! 147: */
! 148: int WritePasswd(FILE *f, passwd_t * __restrict ppwd);
! 149:
! 150:
! 151: /*
! 152: * pwdCleanStr() Free strings in passwd_t value
! 153: * @pwd = User object
! 154: * return: none
! 155: */
! 156: inline void pwdCleanStr(passwd_t __restrict pwd);
! 157: /*
! 158: * pwdFreeValue() Free passwd_t value
! 159: * @ppwd = User object
! 160: * @idx = Index of attribute, if ALL == idx is free all structure
! 161: * return: 0 ok, -1 error
! 162: */
! 163: inline int pwdFreeValue(passwd_t * __restrict ppwd, passwd_attr_t idx);
! 164: /*
! 165: * pwdSetValue() Set passwd_t value
! 166: * @ppwd = User object
! 167: * @idx = Index of attribute, if ALL == idx clean User object and set username!
! 168: * @Value = Value to set
! 169: * return: number of fields in passwd_t; -1 error:: can`t set passwd_t
! 170: */
! 171: inline int pwdSetValue(passwd_t * __restrict ppwd, passwd_attr_t idx, unsigned char *Value);
! 172: /*
! 173: * pwdGetValue() Get passwd_t value
! 174: * @pwd = User object
! 175: * @idx = Index of attribute, if ALL == idx is error!
! 176: * @Value = Value to get
! 177: * @valLen = Size of Value string
! 178: * return: number of fields in passwd_t; -1 error:: can`t get passwd_t
! 179: */
! 180: inline int pwdGetValue(passwd_t __restrict pwd, passwd_attr_t idx, unsigned char *Value, int valLen);
! 181:
! 182:
! 183: /*
! 184: * pwd_FindAttribute() Find by attribute position in user array
! 185: * @pwd = User array
! 186: * @idx = Index of attribute, if ALL == idx return number of user array elements
! 187: * @csAttr = User attribute
! 188: * return: 0 not found item; -1 error: null parameters; >0 position in array + 1
! 189: */
! 190: inline int pwd_FindAttribute(passwd_t __restrict pwd, passwd_attr_t idx, const unsigned char *csAttr);
! 191: /*
! 192: * pwd_SetAttribute() Set user in array or add new user if not exists
! 193: * @ppwd = User array
! 194: * @idx = Index of attribute to set
! 195: * @val = User structure for setup
! 196: * return: 0 nothing changed, -1 error: not enough memory; 1 find and update item; 2 added new item
! 197: */
! 198: int pwd_SetAttribute(passwd_t * __restrict ppwd, passwd_attr_t idx, passwd_t val);
! 199: /*
! 200: * pwd_GetAttribute() Get user from array, set username in val
! 201: * @pwd = User array
! 202: * @idx = Index of attribute to get, if idx == ALL return full element items
! 203: * @val = User structure
! 204: * return: 0 not found, -1 error; >0 found at position in array + 1
! 205: */
! 206: int pwd_GetAttribute(passwd_t __restrict pwd, passwd_attr_t idx, passwd_t val);
! 207: /*
! 208: * pwd_UnsetAttribute() Unset user from array and free resources!
! 209: * @ppwd = User array
! 210: * @idx = Index of attribute to unset, if idx == ALL unset(delete) all items in element
! 211: * @val = User structure
! 212: * return: 0 item not found, -1 error: null parameters; >0 number of elements leave in array
! 213: */
! 214: int pwd_UnsetAttribute(passwd_t * __restrict ppwd, passwd_attr_t idx, passwd_t val);
! 215: /*
! 216: * pwd_Authenticate() Authenticate user, set username and password in val
! 217: * @pwd = User array
! 218: * @val = User structure for authenticate, set username & password
! 219: after authentication fill other fields if exists
! 220: * return: 0 not found, -1 error; >0 found at position in array + 1
! 221: */
! 222: int pwd_Authenticate(passwd_t __restrict pwd, passwd_t val);
! 223:
! 224:
! 225: /*
! 226: * pwd_openAcct() Open accounting aDat binary database
! 227: * @csName - DB name
! 228: * @minR - Minimum records in database
! 229: * @maxR - Maximum records in database(round-robin db), if 0 unlimited grow
! 230: * @recSize - Size of record element
! 231: * @wrapR - If maxR >0 give ability to wrap round-robin db
! 232: * return: NULL error or !=NULL opened db handle
! 233: */
! 234: struct tagAcctDB *pwd_openAcct(const char *csName, unsigned int minR, unsigned int maxR,
! 235: size_t recSize, unsigned char wrapR);
! 236: /*
! 237: * pwd_closeAcct() Close accounting aDat binary database
! 238: * @db - DB handle
! 239: * return: none
! 240: */
! 241: void pwd_closeAcct(struct tagAcctDB ** __restrict db);
! 242: /*
! 243: * pwd_writeAcct() Write accounting record to aDat binary database
! 244: * @db - DB handle
! 245: * @posR - At position number, if db is unlimited grow (-1) write at last free record
! 246: * @rec - Record data
! 247: * return: -1 error or 0 ok
! 248: */
! 249: int pwd_writeAcct(struct tagAcctDB * __restrict db, unsigned int posR, void *rec);
! 250: /*
! 251: * pwd_readAcct() Read accounting record from aDat binary database
! 252: * @db - DB handle
! 253: * @posR - From position number
! 254: * @rec - Record data buffer
! 255: * @recsize - Record data buffer size
! 256: * return: -1 error or 0 ok
! 257: */
! 258: int pwd_readAcct(struct tagAcctDB * __restrict db, unsigned int posR, void *rec, int recsize);
! 259:
! 260: /*
! 261: * pwd_findAcct() Find accounting record from aDat binary database
! 262: * @db - DB handle
! 263: * @from - From position
! 264: * @to - To position, if 0 search to end-of-file
! 265: * @func - Check for match callback function
! 266: * @arg - Argument passthrough to callback as argument for search
! 267: * return: -1 error, 0 not found or >1 founded at position! (p.s:start from 1)
! 268: */
! 269: int64_t pwd_findAcct(struct tagAcctDB * __restrict db, unsigned int from, unsigned int to,
! 270: cb_acct_f func, void *arg);
! 271: #endif
! 272:
! 273:
! 274: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>