def add_user(user) puts "INSERT INTO passwd (uid, gecos, homedir, passwd, shell, gid) VALUES ('#{user.uidNumber}', '#{user.cn.gsub("'", "\\'")}', '#{user.homeDirectory}', '#{user.userPassword}', '#{user.loginShell}', '#{user.gidNumber}');" user.uids.each do |uid| puts "INSERT INTO passwd_names (login, uid) VALUES ('#{uid}', '#{user.uidNumber}');" end end class User attr_accessor :uidNumber, :homeDirectory, :userPassword, :loginShell, :gidNumber, :cn attr_reader :uids def initialize @uids = [] @userPassword = '' end def userPassword if @userPassword[0..6].upcase == '{CRYPT}' @userPassword[7..-1] end end def uid=(v) @uids << v end def uid @uids.first end end user = User.new ARGF.each_line do |l| if l[0] == ?# next end case l when /^$/ add_user(user) user = User.new when /(.*):: (.*)/ begin user.send($1 + '=', $2.unpack("m")[0]) rescue NoMethodError STDERR.puts("No attribute #{$1}") end when /(.*): (.*)/ begin user.send($1 + '=', $2) rescue NoMethodError STDERR.puts("No attribute #{$1}") end end end