mirror of
https://codeberg.org/TicklishHoneyBee/CLIte.git
synced 2026-03-11 09:04:37 +00:00
get env variables the "Right Way" - load them in from /etc/passwd and /etc/env on login
This commit is contained in:
parent
03bc7b2e66
commit
e49b180450
1 changed files with 104 additions and 22 deletions
126
clite/core.js
126
clite/core.js
|
|
@ -186,6 +186,33 @@ var clite = {
|
|||
return true;
|
||||
}
|
||||
|
||||
function defaultConfig() {
|
||||
// /etc/env contains the default environment variables
|
||||
vfsapi.mkFile('/etc/env');
|
||||
var n = vfsapi.getNode('/etc/env');
|
||||
if (!n) {
|
||||
clite.log.write('environment failure');
|
||||
return false;
|
||||
}
|
||||
n.data.content = `
|
||||
PATH=/bin
|
||||
`;
|
||||
n.perms = '-rw-r--r--';
|
||||
// /etc/passwd contains user account details
|
||||
vfsapi.mkFile('/etc/passwd');
|
||||
var n = vfsapi.getNode('/etc/passwd');
|
||||
if (!n) {
|
||||
clite.log.write('access config failure');
|
||||
return false;
|
||||
}
|
||||
n.data.content = `
|
||||
root:x:0:0:root:/root:/bin/sh
|
||||
guest:x:1:1:guest:/usr/home/guest:/bin/sh
|
||||
`;
|
||||
// TODO: check cookies for a local user
|
||||
n.perms = '-rw-r--r--';
|
||||
}
|
||||
|
||||
function init1() {
|
||||
clite.log.write('CLIte Version '+clite.state.version);
|
||||
// setup vfs
|
||||
|
|
@ -256,6 +283,9 @@ data/about.txt:/usr/share/site/about:0:0:-rw-rw-r--`;
|
|||
fn.data.content = null;
|
||||
}
|
||||
clite.io.close(fd);
|
||||
// populate /etc (mostly for environment)
|
||||
clite.log.write('Populating /etc');
|
||||
defaultConfig();
|
||||
// populate /dev (data/filesys.txt is /dev/wfs already)
|
||||
clite.log.write('Populating /dev');
|
||||
defaultDevices();
|
||||
|
|
@ -422,7 +452,7 @@ clite.user = {
|
|||
groups:[],
|
||||
env:{
|
||||
HOME:'/',
|
||||
USER:udata.name,
|
||||
USER:this.name,
|
||||
}
|
||||
};
|
||||
clite.user.getUID = function() {
|
||||
|
|
@ -438,21 +468,64 @@ clite.user = {
|
|||
return true;
|
||||
return false;
|
||||
}
|
||||
function setLogin(user,uid,gid,groups) {
|
||||
udata.name = user;
|
||||
udata.uid = uid;
|
||||
udata.gid = gid;
|
||||
udata.groups = groups;
|
||||
udata.env.HOME = '/usr/home/'+user;
|
||||
udata.env.PWD = udata.env.HOME;
|
||||
udata.env.USER = udata.name;
|
||||
clite.shell.env.HOME = '/usr/home/'+user;
|
||||
clite.shell.env.PWD = '/usr/home/'+user;
|
||||
clite.shell.env.USER = user;
|
||||
clite.shell.prompt.generate();
|
||||
function setLogin(uid) {
|
||||
var found = false;
|
||||
|
||||
var n = vfs.getFile('/etc/passwd');
|
||||
if (!n)
|
||||
return false;
|
||||
var lines = n.split('\n');
|
||||
lines.forEach(function(line) {
|
||||
if (found)
|
||||
return;
|
||||
if (line[0] == '#')
|
||||
return;
|
||||
var sects = line.split(':');
|
||||
// 0 username
|
||||
// 1 null
|
||||
// 2 uid
|
||||
// 3 gid
|
||||
// 4 real name
|
||||
// 5 home dir
|
||||
// 6 shell
|
||||
if (sects.length != 7)
|
||||
return;
|
||||
if (parseInt(sects[2]) != uid)
|
||||
return;
|
||||
found = true;
|
||||
udata.name = sects[0];
|
||||
udata.uid = uid;
|
||||
udata.gid = parseInt(sects[3]);
|
||||
udata.env.HOME = sects[5];
|
||||
udata.env.SHELL = sects[6];
|
||||
udata.env.USER = udata.name;
|
||||
udata.env.PWD = udata.env.HOME;
|
||||
});
|
||||
|
||||
if (!found)
|
||||
return false;
|
||||
|
||||
n = vfs.getFile('/etc/env');
|
||||
if (!n)
|
||||
return false;
|
||||
lines = n.split('\n');
|
||||
lines.forEach(function(line) {
|
||||
if (line[0] == '#')
|
||||
return;
|
||||
var sects = line.split('=');
|
||||
if (sects.length != 2)
|
||||
return;
|
||||
udata.env[sects[0].trim()] = sects[1].trim();
|
||||
});
|
||||
|
||||
// TODO: read in data from /etc/groups
|
||||
udata.groups = [];
|
||||
|
||||
clite.user.hasLogin = function() {
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
clite.user.genGuest = function() {
|
||||
clite.term.clear();
|
||||
|
|
@ -464,8 +537,14 @@ clite.user = {
|
|||
n.gid = 1;
|
||||
}
|
||||
vfs.mkLink('/usr/home/guest/web','/usr/share/site');
|
||||
setLogin('guest',1,1,[]);
|
||||
clite.term.events.refocus();
|
||||
|
||||
setLogin(1);
|
||||
|
||||
// should really have init/getty exec the shell with the env data etc
|
||||
clite.shell.init();
|
||||
}
|
||||
clite.user.getEnv = function() {
|
||||
return structuredClone(udata.env);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
|
@ -481,6 +560,9 @@ clite.user = {
|
|||
hasLogin:function() { // check if we're in a user session
|
||||
return false;
|
||||
},
|
||||
getEnv:function() { // get the current environment (variables)
|
||||
return {};
|
||||
},
|
||||
genGuest:null
|
||||
};
|
||||
|
||||
|
|
@ -1295,6 +1377,11 @@ clite.shell = {
|
|||
clite.shell.reading.buff = e.target.value;
|
||||
}
|
||||
},
|
||||
init:function() {
|
||||
clite.shell.env = clite.user.getEnv();
|
||||
clite.shell.prompt.generate();
|
||||
clite.term.events.refocus();
|
||||
},
|
||||
exit:function(pid,v) {
|
||||
if (pid > -1)
|
||||
clite.proc.exit(pid);
|
||||
|
|
@ -1497,12 +1584,7 @@ clite.shell = {
|
|||
return;
|
||||
clite.shell.history.setCurrent(c+add);
|
||||
},
|
||||
env:{
|
||||
USER:'root',
|
||||
PWD:'/',
|
||||
HOME:'/',
|
||||
PATH:'/bin'
|
||||
},
|
||||
env:{},
|
||||
macro:{
|
||||
clear:function(args,io) {
|
||||
clite.term.clear();
|
||||
|
|
@ -1824,7 +1906,7 @@ clite.lib = {
|
|||
clite.shell.exit(pid,v);
|
||||
}
|
||||
clite.core.execSafeAsync(function() {
|
||||
call(Object.create(env),io);
|
||||
call(structuredClone(env),io);
|
||||
});
|
||||
return pid;
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue