| '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] |
| }; |
| } |