You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.4 KiB
56 lines
1.4 KiB
'use strict'; |
|
|
|
/** |
|
* Parse the content of a passwd file into a list of user objects. |
|
* This function ignores blank lines and comments. |
|
* |
|
* ```js |
|
* // assuming '/etc/passwd' contains: |
|
* // doowb:*:123:123:Brian Woodward:/Users/doowb:/bin/bash |
|
* console.log(parse(fs.readFileSync('/etc/passwd', 'utf8'))); |
|
* |
|
* //=> [ |
|
* //=> { |
|
* //=> username: 'doowb', |
|
* //=> password: '*', |
|
* //=> uid: '123', |
|
* //=> gid: '123', |
|
* //=> gecos: 'Brian Woodward', |
|
* //=> homedir: '/Users/doowb', |
|
* //=> shell: '/bin/bash' |
|
* //=> } |
|
* //=> ] |
|
* ``` |
|
* @param {String} `content` Content of a passwd file to parse. |
|
* @return {Array} Array of user objects parsed from the content. |
|
* @api public |
|
*/ |
|
|
|
module.exports = function(content) { |
|
if (typeof content !== 'string') { |
|
throw new Error('expected a string'); |
|
} |
|
return content |
|
.split('\n') |
|
.map(user) |
|
.filter(Boolean); |
|
}; |
|
|
|
function user(line, i) { |
|
if (!line || !line.length || line.charAt(0) === '#') { |
|
return null; |
|
} |
|
|
|
// see https://en.wikipedia.org/wiki/Passwd for field descriptions |
|
var fields = line.split(':'); |
|
return { |
|
username: fields[0], |
|
password: fields[1], |
|
uid: fields[2], |
|
gid: fields[3], |
|
// see https://en.wikipedia.org/wiki/Gecos_field for GECOS field descriptions |
|
gecos: fields[4], |
|
homedir: fields[5], |
|
shell: fields[6] |
|
}; |
|
}
|
|
|