~ubuntu-branches/ubuntu/precise/smbldap-tools/precise

« back to all changes in this revision

Viewing changes to doc/smbldap-migrate-pwdump-accounts

  • Committer: Bazaar Package Importer
  • Author(s): Sergio Talens-Oliag
  • Date: 2007-09-24 13:24:18 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070924132418-8iass9n5fa0zikvc
Tags: 0.9.4-1
* New upstream release, development has moved to a new place:
  https://gna.org/projects/smbldap-tools/.
  The new upstream version closes some bugs:
  - smbldap-passwd (make_salt): update shadowMax (to
    $config{defaultMaxPasswordAge}) entry if script used with root
    priviledge (Closes: Bug#404109).
  - current smbldap-groupadd man page documents -o and -p options
    (Closes: Bug#358381).
* Fix README.Debian according to Daniel Lawson's patch (Closes: #359314).
* Added Stefan Pfetzing's patch to create a nobody user following the Debian
  style (Closes: #354092).
* The html version of the documentation is missing from the original
  tarball, I've included a patch that provides a copy downloaded from the
  web (Closes: Bug#425402, as the updated docs are right).
* Thanks to David Schmitt <david@schmitt.edv-bus.at> for providing a set of
  patches for the package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/perl -w
2
 
 
3
 
# $Id: smbldap-migrate-pwdump-accounts,v 1.1 2005/03/08 09:29:47 jtournier Exp $
4
 
#
5
 
#  This code was developped by IDEALX (http://IDEALX.org/) and
6
 
#  contributors (their names can be found in the CONTRIBUTORS file).
7
 
#
8
 
#                 Copyright (C) 2002 IDEALX
9
 
#
10
 
#  This program is free software; you can redistribute it and/or
11
 
#  modify it under the terms of the GNU General Public License
12
 
#  as published by the Free Software Foundation; either version 2
13
 
#  of the License, or (at your option) any later version.
14
 
#
15
 
#  This program is distributed in the hope that it will be useful,
16
 
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 
#  GNU General Public License for more details.
19
 
#
20
 
#  You should have received a copy of the GNU General Public License
21
 
#  along with this program; if not, write to the Free Software
22
 
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
23
 
#  USA.
24
 
 
25
 
# Purpose of smbldap-migrate-accounts : add NT sam entries from pwdump 
26
 
#                                       to ldap
27
 
 
28
 
use strict;
29
 
use Getopt::Std;
30
 
use FindBin;
31
 
use FindBin qw($RealBin);
32
 
use lib "$RealBin/";
33
 
use smbldap_tools;
34
 
 
35
 
# smbldap-migrate (-? or -h for help)
36
 
#
37
 
# Read pwdump entries on stdin, and add them to the ldap server.
38
 
# Output uncreated/unmodified entries (see parameters -C -U)
39
 
# in pwdump format to stdout.
40
 
# Errors, debug and stats are output to stderr.
41
 
 
42
 
sub modify_account
43
 
  {
44
 
    my ($login, $basedn, $lmpwd, $ntpwd, $gecos, $homedir) = @_;
45
 
    # bind to a directory with dn and password
46
 
    my $ldap_master=connect_ldap_master();
47
 
    my $modify = $ldap_master->modify ("uid=$login,$basedn",
48
 
                                       changes => [
49
 
                                                   replace => [sambaLMPassword => "$lmpwd"],
50
 
                                                   replace => [sambaNTPassword => "$ntpwd"],
51
 
                                                   replace => [gecos => "$gecos"],
52
 
                                                   replace => [sambaHomePath => "$homedir"]
53
 
                                                  ]
54
 
                                      );
55
 
    $modify->code && die "failed to modify entry: ", $modify->error ;
56
 
    # take down the session
57
 
    $ldap_master->unbind;
58
 
  }
59
 
 
60
 
#####################
61
 
 
62
 
 
63
 
my %Options;
64
 
 
65
 
my $ok = getopts('awA:CUW:?h', \%Options);
66
 
 
67
 
if ( (!$ok) || ($Options{'?'}) || ($Options{'h'}) ) {
68
 
  print "Usage: $0 [-awAWCU?]\n";
69
 
  print "  -a         process only people, ignore computers\n";
70
 
  print "  -w         process only computers, ignore persons\n";
71
 
  print "  -A <opts>  option string passed verbatim to smbldap-useradd for persons\n";
72
 
  print "  -W <opts>  option string passed verbatim to smbldap-useradd for computers\n";
73
 
  print "  -C         if entry not found, don't create it and log it to stdout (default: create it)\n";
74
 
  print "  -U         if entry found, don't update it and log it to stdout (default: update it)\n";
75
 
  print "  -?|-h      show this help message\n";
76
 
  exit (1);
77
 
}
78
 
 
79
 
my %processed = ( 'user' => 0, 'machine' => 0);
80
 
my %created = ( 'user' => 0, 'machine' => 0);
81
 
my %updated = ( 'user' => 0, 'machine' => 0);
82
 
my %logged = ( 'user' => 0, 'machine' => 0);
83
 
my %errors = ( 'user' => 0, 'machine' => 0);
84
 
my %existing = ( 'user' => 0, 'machine' => 0);
85
 
my $specialskipped = 0;
86
 
 
87
 
while (<>) {
88
 
  my ($login, $rid, $lmpwd, $ntpwd, $gecos, $homedir, $b) = split(/:/, $_);
89
 
  my $usertype;
90
 
  my $userbasedn;
91
 
 
92
 
  my $entry_type = 'user';
93
 
 
94
 
  if ($login =~ m/.*\$$/ ) {    # computer
95
 
    $processed{'machine'}++;
96
 
    $entry_type = 'machine';
97
 
    if (defined($Options{'a'})) {
98
 
      print STDERR "ignoring $login\n";
99
 
      next;
100
 
    }
101
 
 
102
 
    $usertype = "-w $Options{'W'}";
103
 
    $userbasedn = $config{computersdn};
104
 
  } else {                      # people
105
 
    $processed{'user'}++;
106
 
    if (defined($Options{'w'})) {
107
 
      print STDERR "ignoring $login\n";
108
 
      next;
109
 
    }
110
 
    if ($rid < 1000) {
111
 
      $specialskipped++;
112
 
      print STDERR "$login seems to be a special Win account (rid=$rid), skipping\n";
113
 
      next;
114
 
    }
115
 
 
116
 
    $usertype = "-a $Options{'A'}";
117
 
    $userbasedn = $config{usersdn};
118
 
  }
119
 
 
120
 
  # normalize homedir
121
 
  # uncomment to replace configured share with share from pwdump
122
 
  #  if ($homedir eq "") {
123
 
  $homedir = $config{userSmbHome};
124
 
  #  }
125
 
 
126
 
  # normalize gecos
127
 
  if (!($gecos eq "")) {
128
 
    $gecos =~ tr/�������������������������������������������������/AAAAaaaaCcEEEEEeeeeeIIIIiiiiNnOOOOooooUUUUuuuuYyy/;
129
 
  } else {
130
 
    $gecos = $config{userGecos};
131
 
  }
132
 
 
133
 
  my $user_exists = is_samba_user($login);
134
 
 
135
 
  if (!$user_exists) {
136
 
    if (!defined($Options{'C'})) {
137
 
      # uid doesn't exist and we want to create it
138
 
      my $addcmd = "/usr/local/sbin/smbldap-useradd $usertype $login > /dev/null";
139
 
      print STDERR "$addcmd\n";
140
 
      my $r = system "$addcmd";
141
 
      if ($r != 0) {
142
 
        print STDERR "error adding $login, skipping\n";
143
 
        next;
144
 
      }
145
 
      # lem modif... a retirer si pb
146
 
      if ($entry_type eq "user") {
147
 
        modify_account($login, $userbasedn, $lmpwd, $ntpwd, $gecos, $homedir);
148
 
      }
149
 
 
150
 
      $created{$entry_type}++;
151
 
    } else {                    # uid doesn't exist and no create => log
152
 
      print "$_";
153
 
      $logged{$entry_type}++;
154
 
    }
155
 
  } else {                      # account exists
156
 
    $existing{$entry_type}++;
157
 
    if (!defined($Options{'U'})) { # exists and modify 
158
 
      modify_account($login, $userbasedn, $lmpwd, $ntpwd, $gecos, $homedir);
159
 
      $updated{$entry_type}++;
160
 
    } else {                    # exists and log
161
 
      print "$_";
162
 
      $logged{$entry_type}++;
163
 
    }
164
 
  }
165
 
}
166
 
 
167
 
my $sum;
168
 
 
169
 
$sum = $processed{'user'} + $processed{'machine'};
170
 
print STDERR "processed: all=$sum user=$processed{'user'} machine=$processed{'machine'}\n";
171
 
 
172
 
$sum = $existing{'user'} + $existing{'machine'};
173
 
print STDERR "existing: all=$sum user=$existing{'user'} machine=$existing{'machine'}\n";
174
 
 
175
 
$sum = $created{'user'} + $created{'machine'};
176
 
print STDERR "created: all=$sum user=$created{'user'} machine=$created{'machine'}\n";
177
 
 
178
 
$sum = $updated{'user'} + $updated{'machine'};
179
 
print STDERR "updated: all=$sum user=$updated{'user'} machine=$updated{'machine'}\n";
180
 
 
181
 
$sum = $logged{'user'} + $logged{'machine'};
182
 
print STDERR "logged: all=$sum user=$logged{'user'} machine=$logged{'machine'}\n";
183
 
 
184
 
print STDERR "special users skipped: $specialskipped\n";
185
 
 
186
 
 
187
 
########################################
188
 
 
189
 
=head1 NAME
190
 
 
191
 
smbldap-migrate - Migrate NT accounts to LDAP
192
 
 
193
 
=head1 SYNOPSIS
194
 
 
195
 
       smbldap-migrate [-a] [-w] [-A opts] [-W opts] [-C] [-U] [-?]
196
 
 
197
 
=head1 DESCRIPTION
198
 
 
199
 
       This command reads from stdin account entries as created by pwdump,
200
 
       a tool to dump an user database on NT.
201
 
       Depending of the options, some account entries may be output on
202
 
       stdout. All errors and informations are sent to stderr.
203
 
 
204
 
       -a     process only people, ignore computers
205
 
 
206
 
       -w     process only computers, ignore persons
207
 
 
208
 
       -A opts
209
 
              a string containing arguments to pass verbatim to
210
 
              smbldap-useradd when adding users, eg "-m -x".
211
 
              You don't have to specify -a in this string.
212
 
 
213
 
       -W opts
214
 
              a string containing arguments to pass verbatim to
215
 
              smbldap-useradd when adding computers, eg "-m -x".
216
 
              You don't have to specify -w in this string.
217
 
 
218
 
       -C     if NT account not found in LDAP, don't create it and log it to stdout
219
 
              (default: create it)
220
 
 
221
 
       -U     if NT account found in LDAP, don't update it and log it to stdout
222
 
              (default: update it)
223
 
 
224
 
       -?     show the help message
225
 
 
226
 
=cut
227
 
 
228
 
#'
229
 
 
230
 
# The End
231