trying to get HEAD building again. If you want the code
[abartlet/samba.git/.git] / examples / LDAP / convertSambaAccount
index f5b49ff095784812662b0af961614a92b9ce9fe6..223c43eadabc35afba84895cf0476bbf534b497f 100755 (executable)
@@ -15,8 +15,8 @@ use Net::LDAP::LDIF;
 my ( $domain, $domsid );
 my ( $ldif, $ldif2 );
 my ( $entry, @objclasses, $obj );
-my ( $is_samba_account );
-my ( %attr_map, $key );
+my ( $is_samba_account, $is_samba_group );
+my ( %attr_map, %group_attr_map, $key );
 
 if ( $#ARGV != 2 ) {
        print "Usage: convertSambaAccount domain_sid input_ldif output_ldif\n";
@@ -41,6 +41,11 @@ if ( $#ARGV != 2 ) {
        acctFlags       => 'sambaAcctFlags',
 );
 
+%group_attr_map = (
+       ntSid           => 'sambaSID',
+       ntGroupType     => 'sambaGroupType',
+);
+
 $domsid = $ARGV[0];
 
 $ldif = Net::LDAP::LDIF->new ($ARGV[1], "r")
@@ -65,37 +70,44 @@ while ( !$ldif->eof ) {
        ##
        @objclasses = $entry->get_value( "objectClass" );
        undef ( $is_samba_account );
+       undef ( $is_samba_group );
        foreach $obj ( @objclasses ) {
                if ( "$obj" eq "sambaAccount" ) {
                        $is_samba_account = 1;
+               } elsif ( "$obj" eq "sambaGroupMapping" ) {
+                       $is_samba_group = 1;
                }
        }
 
-       if ( !defined ( $is_samba_account ) ) {
-               $ldif2->write_entry( $entry );
-               next;
-       }
-
-       ##
-       ## start editing the sambaAccount
-       ##
+       if ( defined ( $is_samba_account ) ) {
+               ##
+               ## start editing the sambaAccount
+               ##
 
-       $entry->delete( 'objectclass' => [ 'sambaAccount' ] );
-       $entry->add( 'objectclass' => 'sambaSamAccount' );
+               $entry->delete( 'objectclass' => [ 'sambaAccount' ] );
+               $entry->add( 'objectclass' => 'sambaSamAccount' );
 
-       $entry->add( 'sambaSID' => $domsid."-".$entry->get_value( "rid" ) );
-       $entry->delete( 'rid' );
+               $entry->add( 'sambaSID' => $domsid."-".$entry->get_value( "rid" ) );
+               $entry->delete( 'rid' );
        
-       if ( $entry->get_value( "primaryGroupID" ) ) {
-               $entry->add( 'sambaPrimaryGroupSID' => $domsid."-".$entry->get_value( "primaryGroupID" ) );
-               $entry->delete( 'primaryGroupID' );
-       }
+               if ( $entry->get_value( "primaryGroupID" ) ) {
+                       $entry->add( 'sambaPrimaryGroupSID' => $domsid."-".$entry->get_value( "primaryGroupID" ) );
+                       $entry->delete( 'primaryGroupID' );
+               }
        
 
-       foreach $key ( keys %attr_map ) {
-               if ( $entry->get_value($key) ) {
-                       $entry->add( $attr_map{$key} => $entry->get_value($key) );
-                       $entry->delete( $key );
+               foreach $key ( keys %attr_map ) {
+                       if ( defined($entry->get_value($key)) ) {
+                               $entry->add( $attr_map{$key} => $entry->get_value($key) );
+                               $entry->delete( $key );
+                       }
+               }
+       } elsif ( defined ( $is_samba_group ) ) {
+               foreach $key ( keys %group_attr_map ) {
+                       if ( defined($entry->get_value($key)) ) {
+                               $entry->add( $group_attr_map{$key} => $entry->get_value($key) );
+                               $entry->delete( $key );
+                       }
                }
        }