diff --git a/user/Makefile b/user/Makefile index 812e137..2d62221 100644 --- a/user/Makefile +++ b/user/Makefile @@ -1,14 +1,18 @@ all: cron -cron: manifests/classes.pp manifests/virtual.pp +cron: manifests/virtual.pp manifests/user.pp manifests/group.pp manifests/virtual.pp: @echo "Creating virtual.pp ..." ruby scripts/update-virtual.rb > $@ -manifests/classes.pp: manifests/virtual.pp - @echo "Creating classes.pp ..." - ruby scripts/update-classes.rb > $@ +manifests/user.pp: manifests/virtual.pp + @echo "Creating user.pp ..." + ruby scripts/update-classes.rb -u > $@ + +manifests/group.pp: manifests/virtual.pp + @echo "Creating group.pp ..." + ruby scripts/update-classes.rb -g > $@ .PHONY: manifests/virtual.pp diff --git a/user/manifests/classes.pp b/user/manifests/classes.pp deleted file mode 100644 index e69de29..0000000 diff --git a/user/manifests/init.pp b/user/manifests/init.pp index 895e46c..7389586 100644 --- a/user/manifests/init.pp +++ b/user/manifests/init.pp @@ -1,7 +1,3 @@ - -import "virtual.pp" -import "classes.pp" - # Class which contains all system users that have fixed UID's # class user::system { @@ -214,3 +210,41 @@ class user::system { } + + +# Add local user account. +# +define user::newuser($uid, $gid, $comment, $home, $shell, $groups=undef, $requiregroups=undef) { + + user { "${name}": + ensure => present, + uid => $uid, + gid => $gid, + comment => $comment, + home => $home, + shell => $shell, + groups => $groups, + require => $requiregroups, + notify => $operatingsystem ? { + OpenBSD => [ Exec["user-mod-${name}"], + Exec["user-home-${name}"], ], + default => undef, + } + } + + exec { "user-mod-${name}": + command => "usermod -L ldap ${name}", + path => "/sbin:/usr/sbin:/bin:/usr/bin", + refreshonly => true, + require => File["/etc/login.conf"], + } + + exec { "user-home-${name}": + command => "umask 077; mkdir -p ${home} && tar cf - . | tar xf - -C ${home} && chown -R ${uid}:${gid} ${home}", + cwd => "/etc/skel", + path => "/sbin:/usr/sbin:/bin:/usr/bin", + creates => "${home}", + refreshonly => true, + } + +} diff --git a/user/manifests/virtual.pp b/user/manifests/virtual.pp deleted file mode 100644 index e69de29..0000000 diff --git a/user/scripts/update-classes.rb b/user/scripts/update-classes.rb index fcf8e4a..516c987 100755 --- a/user/scripts/update-classes.rb +++ b/user/scripts/update-classes.rb @@ -39,6 +39,8 @@ f.readlines.each do |line| end f.close +user_classes = [] +group_classes = [] userlist = {} conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, 'objectClass=posixAccount', @@ -58,12 +60,12 @@ conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, 'objectClass=posixAccount', # create user class if entry['uid'][0] !~ /.*\$.*/ - print "class user::" + entry['uid'][0] + " inherits user::virtual {\n" - print " realize(User::Newuser['" + entry['uid'][0] + "'])\n" + user_classes << "class user::user::" + entry['uid'][0] + " inherits user::virtual {\n" + user_classes << " realize(User::Newuser['" + entry['uid'][0] + "'])\n" groups.each do |group| - print " realize(Group['" + group + "'])\n" + user_classes << " realize(Group['" + group + "'])\n" end - print "}\n\n" + user_classes << "}\n\n" end userlist[entry.get_dn()] = entry['uid'][0] @@ -89,10 +91,13 @@ conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, 'objectClass=posixGroup', end end if members.length > 0 - print "class user::group::" + entry['cn'][0] + " {\n" + group_classes << "class user::group::" + entry['cn'][0] + " {\n" members.uniq.sort.each do |member| - print " include user::" + member + "\n" + group_classes << " include user::user::" + member + "\n" end - print "}\n\n" + group_classes << "}\n\n" end } + +puts user_classes if ARGV.include?("-u") +puts group_classes if ARGV.include?("-g") diff --git a/user/scripts/update-virtual.rb b/user/scripts/update-virtual.rb index f8eafbe..7df89a8 100755 --- a/user/scripts/update-virtual.rb +++ b/user/scripts/update-virtual.rb @@ -39,46 +39,7 @@ f.readlines.each do |line| end f.close - -print < present, - uid => $uid, - gid => $gid, - comment => $comment, - home => $home, - shell => $shell, - groups => $groups, - require => $requiregroups, - notify => $operatingsystem ? { - OpenBSD => [ Exec["user-mod-${name}"], - Exec["user-home-${name}"], ], - default => undef, - } - } - - exec { "user-mod-${name}": - command => "usermod -L ldap ${name}", - path => "/sbin:/usr/sbin:/bin:/usr/bin", - refreshonly => true, - require => File["/etc/login.conf"], - } - - exec { "user-home-${name}": - command => "umask 077; mkdir -p ${home} && tar cf - . | tar xf - -C ${home} && chown -R ${uid}:${gid} ${home}", - cwd => "/etc/skel", - path => "/sbin:/usr/sbin:/bin:/usr/bin", - creates => "${home}", - refreshonly => true, - } - -} - -class user::virtual { -EOF - +print "class user::virtual {\n" conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, 'objectClass=posixAccount', ['uid', 'uidNumber', 'gidNumber', 'gecos', 'homeDirectory',