Initial commit
[yaffs-website] / node_modules / parse-passwd / index.js
1 'use strict';
2
3 /**
4  * Parse the content of a passwd file into a list of user objects.
5  * This function ignores blank lines and comments.
6  *
7  * ```js
8  * // assuming '/etc/passwd' contains:
9  * // doowb:*:123:123:Brian Woodward:/Users/doowb:/bin/bash
10  * console.log(parse(fs.readFileSync('/etc/passwd', 'utf8')));
11  *
12  * //=> [
13  * //=>   {
14  * //=>     username: 'doowb',
15  * //=>     password: '*',
16  * //=>     uid: '123',
17  * //=>     gid: '123',
18  * //=>     gecos: 'Brian Woodward',
19  * //=>     homedir: '/Users/doowb',
20  * //=>     shell: '/bin/bash'
21  * //=>   }
22  * //=> ]
23  * ```
24  * @param  {String} `content` Content of a passwd file to parse.
25  * @return {Array} Array of user objects parsed from the content.
26  * @api public
27  */
28
29 module.exports = function(content) {
30   if (typeof content !== 'string') {
31     throw new Error('expected a string');
32   }
33   return content
34     .split('\n')
35     .map(user)
36     .filter(Boolean);
37 };
38
39 function user(line, i) {
40   if (!line || !line.length || line.charAt(0) === '#') {
41     return null;
42   }
43
44   // see https://en.wikipedia.org/wiki/Passwd for field descriptions
45   var fields = line.split(':');
46   return {
47     username: fields[0],
48     password: fields[1],
49     uid: fields[2],
50     gid: fields[3],
51     // see https://en.wikipedia.org/wiki/Gecos_field for GECOS field descriptions
52     gecos: fields[4],
53     homedir: fields[5],
54     shell: fields[6]
55   };
56 }