New developer version 0.6.8; added select () function; added demonstrating example...
[ZeXOS.git] / kernel / core / user.c
blob51e4c7cdc0f750a64057181f8be0058522e0742e
1 /*
2 * ZeX/OS
3 * Copyright (C) 2007 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
4 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include <system.h>
22 #include <string.h>
23 #include <env.h>
24 #include <user.h>
25 #include <config.h>
27 user_t user_list;
28 user_t *tempuser;
30 user_t *user_find (char *name)
32 user_t *user;
33 for (user = user_list.next; user != &user_list; user = user->next) {
34 if (!strcmp (user->name, name))
35 return user;
38 return NULL;
41 user_t *user_create (char *name, unsigned attrib, char *pass)
43 if (user_find (name))
44 return 0;
46 unsigned name_len = strlen (name);
47 unsigned pass_len = strlen (pass);
49 user_t *user;
51 /* alloc and init context */
52 user = (user_t *) kmalloc (sizeof (user_t));
53 memset (user, 0, sizeof (user_t));
55 user->name = (char *) kmalloc (sizeof (char) * name_len + 1);
56 memset (user->name, 0, name_len);
57 memcpy (user->name, name, name_len);
58 user->name[name_len] = '\0';
60 user->pass = (char *) kmalloc (sizeof (char) * pass_len + 1);
61 memset (user->pass, 0, pass_len);
62 memcpy (user->pass, pass, pass_len);
63 user->pass[pass_len] = '\0';
65 user->attrib = attrib;
67 /* add into list */
68 user->next = &user_list;
69 user->prev = user_list.prev;
70 user->prev->next = user;
71 user->next->prev = user;
73 return user;
76 bool getlogin (int i)
78 if (!currtty->logged) {
79 user_t *user = user_find (currtty->shell);
81 if (user) {
82 tempuser = user;
83 currtty->logged = true;
84 video_color (7, 0);
85 printf ("password: ");
86 } else {
87 video_color (7, 0);
88 printf ("login: ");
90 } else {
91 if (tempuser) {
92 if (!strcmp (currtty->shell, tempuser->pass)) {
93 env_set ("USER", tempuser->name);
94 currtty->user = tempuser;
95 tempuser = NULL;
97 console_refresh (); /* well, login was correct */
98 } else {
99 video_color (7, 0);
100 printf ("login: ");
101 currtty->logged = false;
103 } else
104 currtty->logged = false;
107 /* clean console */
108 for(i = 0; i < currtty->shell_len; i ++)
109 currtty->shell[i] = '\0';
112 unsigned int init_user ()
114 user_list.next = &user_list;
115 user_list.prev = &user_list;
117 user_t *root = user_create ("root", USER_GROUP_ADMIN, "root");
118 user_t *guest = user_create ("guest", USER_GROUP_GUEST, "guest");
120 /* Command which is started, when shell is ready */
121 char initcmd[] = CONFIG_UI_SHELL_INITCMD;
122 unsigned l = strlen (initcmd);
124 if (l)
125 command_parser (initcmd, l);
127 return 1;