1 |
diff -Nur e-smith-base-5.2.0/root/etc/e-smith/events/actions/user-modify-unix e-smith-base-5.2.0-optimize_user_modify_unix/root/etc/e-smith/events/actions/user-modify-unix |
2 |
--- e-smith-base-5.2.0/root/etc/e-smith/events/actions/user-modify-unix 2013-01-30 21:29:34.003293926 +0100 |
3 |
+++ e-smith-base-5.2.0-optimize_user_modify_unix/root/etc/e-smith/events/actions/user-modify-unix 2013-01-30 21:31:10.221693946 +0100 |
4 |
@@ -22,7 +22,8 @@ |
5 |
use Errno; |
6 |
use esmith::AccountsDB; |
7 |
use esmith::ConfigDB; |
8 |
-use File::Temp; |
9 |
+use Net::LDAP; |
10 |
+use esmith::util; |
11 |
|
12 |
my $conf = esmith::ConfigDB->open or die "Could not open configuration db"; |
13 |
|
14 |
@@ -33,6 +34,18 @@ |
15 |
|| die("Couldn't determine domain name"); |
16 |
$domain = $domain->value; |
17 |
|
18 |
+# prepare LDAP bind |
19 |
+my $pw = esmith::util::LdapPassword(); |
20 |
+my $base = esmith::util::ldapBase ($domain); |
21 |
+ |
22 |
+my $ldap = Net::LDAP->new('localhost') |
23 |
+ or die "$@"; |
24 |
+ |
25 |
+$ldap->bind( |
26 |
+ dn => "cn=root,$base", |
27 |
+ password => $pw |
28 |
+); |
29 |
+ |
30 |
my $event = $ARGV [0]; |
31 |
my $userName = $ARGV [1]; |
32 |
|
33 |
@@ -63,13 +76,14 @@ |
34 |
unless ( ($userName eq 'admin') or ($type eq 'user') ); |
35 |
|
36 |
setpwent; |
37 |
- my ($comment, $shell) = (getpwnam($userName))[5,8]; |
38 |
+ my ($comment, $shell) = (getpwnam($userName))[6,8]; |
39 |
endpwent; |
40 |
my $new_shell = $u->prop('Shell') |
41 |
|| (($shell eq "/bin/sshell") ? "/usr/bin/rssh" : $shell); |
42 |
|
43 |
$u->set_prop('Shell', $new_shell); |
44 |
|
45 |
+ my $result; |
46 |
#------------------------------------------------------------ |
47 |
# Modify user's shell, if required, in /etc/passwd using "usermod" |
48 |
#------------------------------------------------------------ |
49 |
@@ -81,8 +95,13 @@ |
50 |
or ( $x = 255, warn "Failed to modify shell of (unix) account $userName.\n" ); |
51 |
} |
52 |
|
53 |
- system("/usr/sbin/cpu", "usermod", '-s', "$new_shell", $userName) == 0 |
54 |
- or ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to modify shell of (ldap) account $userName.\n" ); |
55 |
+ my @new_shell = ($new_shell); |
56 |
+ $result = $ldap->modify("uid=$userName,ou=Users,$base", |
57 |
+ replace => { |
58 |
+ loginShell => \@new_shell |
59 |
+ } |
60 |
+ ); |
61 |
+ $result->code && ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to modify shell of (ldap) account $userName.\n" ); |
62 |
} |
63 |
|
64 |
#------------------------------------------------------------ |
65 |
@@ -101,26 +120,37 @@ |
66 |
or ( $x = 255, warn "Failed to modify comment of (unix) account $userName.\n" ); |
67 |
} |
68 |
|
69 |
- system("/usr/sbin/cpu", "usermod", "-f", "$first", "-E", "$last", $userName) == 0 |
70 |
- or ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to modify comment/name of (ldap) account $userName.\n" ); |
71 |
+ my @new_comment = ($new_comment); |
72 |
+ my @first = ($first); |
73 |
+ my @last = ($last); |
74 |
+ $result = $ldap->modify("uid=$userName,ou=Users,$base", |
75 |
+ replace => { |
76 |
+ givenName => \@first, |
77 |
+ sn => \@last, |
78 |
+ cn => \@new_comment, |
79 |
+ displayName => \@new_comment |
80 |
+ } |
81 |
+ ); |
82 |
+ $result->code && ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to modify comment/name of (ldap) account $userName.\n" ); |
83 |
} |
84 |
|
85 |
- my $new_phone = $u->prop('Phone') || ''; |
86 |
- my $new_company = $u->prop('Company') || ''; |
87 |
- my $new_dept = $u->prop('Dept') || ''; |
88 |
- my $new_city = $u->prop('City') || ''; |
89 |
- my $new_street = $u->prop('Street') || ''; |
90 |
- |
91 |
- my $tmpattr = File::Temp->new(); |
92 |
- print $tmpattr "telephoneNumber: $new_phone\n"; |
93 |
- print $tmpattr "o: $new_company\n"; |
94 |
- print $tmpattr "ou: $new_dept\n"; |
95 |
- print $tmpattr "l: $new_city\n"; |
96 |
- print $tmpattr "street: $new_street\n"; |
97 |
- $tmpattr->flush(); |
98 |
- system("/usr/sbin/cpu", "usermod", "-a", "$tmpattr", "-e", "$userName\@$domain", $userName) == 0 |
99 |
- or ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to modify email of (ldap) account $userName.\n" ); |
100 |
- undef $tmpattr; |
101 |
+ my @new_phone = ($u->prop('Phone')) || (); |
102 |
+ my @new_company = ($u->prop('Company')) || (); |
103 |
+ my @new_dept = ($u->prop('Dept')) || (); |
104 |
+ my @new_city = ($u->prop('City')) || (); |
105 |
+ my @new_street = ($u->prop('Street')) || (); |
106 |
+ $result = $ldap->modify("uid=$userName,ou=Users,$base", |
107 |
+ replace => { |
108 |
+ telephoneNumber => \@new_phone, |
109 |
+ o => \@new_company, |
110 |
+ ou => \@new_dept, |
111 |
+ l => \@new_city, |
112 |
+ street => \@new_street |
113 |
+ } |
114 |
+ ); |
115 |
+ $result->code && ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to modify email of (ldap) account $userName.\n" ); |
116 |
+ |
117 |
} |
118 |
|
119 |
+$ldap->unbind; |
120 |
exit ($x); |