~ubuntu-branches/ubuntu/intrepid/samba/intrepid-updates

« back to all changes in this revision

Viewing changes to examples/LDAP/smbldap-tools-0.9.2/doc/smbldap-migrate-pwdump-groups

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2008-06-02 09:01:46 UTC
  • mfrom: (0.25.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20080602090146-92ur4nx39ccg708r
Tags: 2:3.0.30-2ubuntu1
* Merge from debian unstable, remaining changes:
  * debian/patches/VERSION.patch
    - set SAMABA_VERSION_VENDOR_SUFFIX to Ubuntu
  * debian/smb.conf
    - add "(Samba, Ubuntu)" to server string.
    - comment out the default [homes] shares, and a comment about
      "value users = %S to show users how to restrict access to 
      \\server\useranem to only username.
    - Add map to guest = Bad user, maps bad username to guest access.
      (LP: #32067)
  * debian/samba-common.postinst:
    - Fix upgrade from a first installation done with feisty, edgy, or dapper.
      (LP: #201059)
    - When populating the new sambashare group, it's not an error if the user
      simply doesn't exist; test for this case and the install continue 
      instead of aborting. (LP: #206036)
  * debian/smba-common.config:
    - do not change priority to HIGH if dhclient3 is installed
    - used priority medium instead of hight for the workgroup question
  * debian/winbind.files
    - insclude additional files
  * debian/patches/fix-documentation.patch:
    - fix typos in net(8) and smb.conf(5) man pages
  * debian/mksambapasswd.awk:
    - Don't add user with UID less than 1000 to smbpasswd.
  * debian/samba.init:
    - add 'status' option for LSB conformance.
  * Updated control version.
  * Dropped Changes:
    - Dropped debian/patches/fix-smbprinting-os2.patch. Accepted upstream.
    - Dropped debian/patches/fix-documentation.patch. Accepted upstream.
     

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/perl
2
 
 
3
 
# $Id: smbldap-migrate-pwdump-groups,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-groups : to parse a Windows
26
 
# group dump and populate Unix groups
27
 
# Reads group dump on stdin
28
 
 
29
 
 
30
 
use strict;
31
 
use FindBin;
32
 
use FindBin qw($RealBin);
33
 
use lib "$RealBin/";
34
 
use smbldap_tools;
35
 
use Getopt::Std;
36
 
 
37
 
sub process_rec_group
38
 
  {
39
 
    my ($group, $mb) = @_;
40
 
    my @members;
41
 
    
42
 
    if (!(@members = group_get_members($group))) {
43
 
      return 0;
44
 
    }
45
 
 
46
 
    foreach my $m (@members) {
47
 
      if ( !($m =~ m/^\*/) ) {
48
 
        push @{$mb}, $m;
49
 
      } else {
50
 
        my $gname = $m;
51
 
        $gname =~ s/^.//;
52
 
        if (!process_rec_group($gname, $mb)) {
53
 
          print "recursive group not added : $gname\n";
54
 
        }
55
 
      }
56
 
    }
57
 
  }
58
 
 
59
 
 
60
 
# given a group dn and a list of members, update the group
61
 
sub modify_group
62
 
  {
63
 
    my ($group, $dn_line, @members, $recgroup) = @_;
64
 
    my $m;
65
 
    my @new_mb;
66
 
 
67
 
    foreach $m (@members) {
68
 
      if ( ($m =~ m/^\*/) ) {
69
 
        my $gname = $m;
70
 
        $gname =~ s/^.//;
71
 
        if (!$recgroup) {
72
 
          print "recursive group not added : $gname\n";
73
 
        } else {
74
 
          if (!process_rec_group($gname, \@new_mb)) {
75
 
            print "recursive group not added : $gname\n";
76
 
          }
77
 
        }
78
 
      } else {
79
 
        push @new_mb, $m;
80
 
      }
81
 
    }
82
 
 
83
 
    # new_mb contains flat members from group dump
84
 
    # now append them to existing members
85
 
    push @new_mb, group_get_members($group);
86
 
    # uniq them
87
 
    my %saw;
88
 
    @saw{@new_mb} = ();
89
 
    @new_mb = keys %saw;
90
 
 
91
 
    my $nmb = $#new_mb + 1;
92
 
    print STDERR "Group $group now has $nmb member(s)\n"; 
93
 
    
94
 
    my $mbs;
95
 
    foreach $m (@new_mb) {
96
 
      $mbs .= "memberUid: $m\n";
97
 
    }
98
 
 
99
 
    my $mods="$dn_line
100
 
changetype: modify
101
 
replace: memberUid
102
 
$mbs
103
 
";
104
 
 
105
 
    #print "$mods\n";
106
 
    my $tmpldif =
107
 
      "$mods
108
 
";
109
 
 
110
 
    die "$0: error while modifying group $group\n"
111
 
      unless (do_ldapmodify($tmpldif) == 0);
112
 
    undef $tmpldif;
113
 
  }
114
 
 
115
 
sub display_group
116
 
  {
117
 
    my ($group, @members) = @_;
118
 
 
119
 
    print "Group name $group\n";
120
 
    print "Members\n";
121
 
    my $m;
122
 
    my $i = 0;
123
 
    foreach $m (@members) {
124
 
      print "$m ";
125
 
      if ($i % 5 == 0) {
126
 
        print "\n";
127
 
      }
128
 
      $i++;
129
 
    }
130
 
  }
131
 
 
132
 
sub process_group
133
 
  {
134
 
    my ($group, @members, $nocreate, $noupdate, $recgroup) = @_;
135
 
 
136
 
    my $dn_line;
137
 
    if (!defined($dn_line = get_group_dn($group))) {
138
 
      # group not found, create it ?
139
 
      if (!$nocreate) {
140
 
        system "/usr/local/sbin/smbldap-groupadd \"$group\"; sleep 5";
141
 
        if (!defined($dn_line = get_group_dn($group))) {
142
 
          return 1;
143
 
        }
144
 
        modify_group($group, $dn_line, @members, $recgroup);
145
 
      } else {
146
 
        # don't create
147
 
        print "not created:\n";
148
 
        display_group($group, @members);
149
 
      }
150
 
    } else {
151
 
      # group found, update it ?
152
 
      if (!$noupdate) {
153
 
        modify_group($group, $dn_line, @members, $recgroup);
154
 
      } else {
155
 
        # don't update
156
 
        print "not updated:\n";
157
 
        display_group($group, @members);    
158
 
      }
159
 
    }
160
 
  }
161
 
 
162
 
###################################################
163
 
 
164
 
my %Options;
165
 
 
166
 
my $ok = getopts('CUr?', \%Options);
167
 
if ( (!$ok) || ($Options{'?'}) ) {
168
 
  print "Usage: $0 [-CUr?] < group_dump\n";
169
 
  print "  -C       don't create group if it doesn't exist\n";
170
 
  print "  -U       don't update group if it exists\n";
171
 
  print "  -r       recursively process groups\n";
172
 
  exit(1);
173
 
}
174
 
 
175
 
my $group_name;
176
 
my $group_desc;
177
 
my $has_members = 0;
178
 
my @members = ();
179
 
 
180
 
while (<>) {
181
 
  my $line = $_;
182
 
  chomp($line);
183
 
  next if ( $line =~ m/^\s*$/ );
184
 
 
185
 
  if ($group_name eq "") {
186
 
    if ( $line =~ m/^Group name\s+(.+).$/ ) {
187
 
      $group_name = $1;
188
 
      next;
189
 
    }
190
 
  }
191
 
  if ($group_desc eq "") {
192
 
    if ( $line =~ m/^Comment\s+(.*)$/ ) {
193
 
      $group_desc = $1;
194
 
      next;
195
 
    }
196
 
  }
197
 
  next if ( $line =~ m/^-+.$/ );
198
 
  if (!$has_members) {
199
 
    if ( $line =~ m/^Members/ ) {
200
 
      $has_members = 1;
201
 
      next;
202
 
    }
203
 
  } else {
204
 
    if ( $line =~ m/^The command completed successfully/ ) {
205
 
      last;
206
 
    } else {
207
 
      push(@members, split(/\s+/, $line));
208
 
      next;
209
 
    }
210
 
  }
211
 
 
212
 
  #print;
213
 
}
214
 
 
215
 
if ( $#members > -1) {
216
 
  process_group($group_name, @members, $Options{'C'}, $Options{'U'}, $Options{'r'});
217
 
}
218
 
 
219
 
#print "gn=$group_name\n";
220
 
#print "gd=$group_desc\n";
221
 
#my $m;
222
 
#foreach $m (@members)
223
 
#{
224
 
#    print "$m ";
225
 
#}
226
 
#print "\n";