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