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/>.
30 user_t
*user_find (char *name
)
33 for (user
= user_list
.next
; user
!= &user_list
; user
= user
->next
) {
34 if (!strcmp (user
->name
, name
))
41 user_t
*user_create (char *name
, unsigned attrib
, char *pass
)
46 unsigned name_len
= strlen (name
);
47 unsigned pass_len
= strlen (pass
);
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
;
68 user
->next
= &user_list
;
69 user
->prev
= user_list
.prev
;
70 user
->prev
->next
= user
;
71 user
->next
->prev
= user
;
78 if (!currtty
->logged
) {
79 user_t
*user
= user_find (currtty
->shell
);
83 currtty
->logged
= true;
85 printf ("password: ");
92 if (!strcmp (currtty
->shell
, tempuser
->pass
)) {
93 env_set ("USER", tempuser
->name
);
94 currtty
->user
= tempuser
;
97 console_refresh (); /* well, login was correct */
101 currtty
->logged
= false;
104 currtty
->logged
= false;
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
);
125 command_parser (initcmd
, l
);