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.
		
		
		
		
			
				
					57 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					57 lines
				
				1.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'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]
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 |