Changeset 2475


Ignore:
Timestamp:
06/17/21 13:33:50 (3 years ago)
Author:
nanardon
Message:

start samba support: manage sambaSID

Location:
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap.pm

    r2051 r2475  
    102102    my ($self, $id) = @_; 
    103103 
    104     my $ssid = $self->config('sambaSID') || 'S-2016-01-07'; 
     104    my $ssid = $self->config('sambaSID') || 'S-1-5-21-2016-01-07'; 
    105105    if (defined($id)) { 
    106106        $ssid .= '-' . $id; 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/Group.pm

    r2406 r2475  
    4040sub _key_attr { 'cn' }  
    4141 
    42 sub _my_ldap_classes { qw(top posixGroup) } 
     42sub _my_ldap_classes { qw(top posixGroup sambaGroupMapping) } 
    4343 
    4444sub _get_attr_schema { 
     
    5656        dn => { ro => 1 }, 
    5757        objectClass => { ro => 1 }, 
     58        sambaSID => { }, 
    5859    } 
     60    ); 
     61} 
     62 
     63sub _update_class { 
     64    my ($self) = @_; 
     65 
     66    $self->SUPER::_update_class( 
     67        sambaSID => $self->base->sambaSID( 
     68            _computeSSID($self->_get_attributes('gidNumber')) 
     69        ) 
    5970    ); 
    6071} 
     
    6475 
    6576    my $entry = Net::LDAP::Entry->new(); 
     77 
     78    $data{sambaSID} ||= $base->sambaSID(_computeSSID($data{gidNumber})); 
    6679 
    6780    $entry->dn(join(',', 
     
    87100    my $res = $base->get_object('group', $id)->set_fields(%delayed); 
    88101    return defined($res) ? 1 : 0; 
     102} 
     103 
     104sub _computeSSID { 
     105    my ($value) = @_; 
     106    $value * 2 + 1000 
    89107} 
    90108 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/User.pm

    r2041 r2475  
    136136        sambaLMPassword => { readable => 0, }, 
    137137        sambaNTPassword => { readable => 0, }, 
    138         sambaSID => { ro => 1 }, 
     138        sambaSID => { }, 
    139139    } 
    140140    ); 
     
    168168    $data{sn} ||= $id; # sn is mandatory 
    169169    $data{uid} ||= $id; # uid is mandatory 
    170     $data{sambaSID} = $base->sambaSID(_computeSSID($data{uidNumber})); 
     170    $data{sambaSID} ||= $base->sambaSID(_computeSSID($data{uidNumber})); 
    171171    $data{homeDirectory} ||= '/dev/null'; # homeDirectory is mandatory 
    172172    $data{$class->_key_attribute($base)} = $id; 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql.pm

    r2471 r2475  
    9494        $self->{_db}->do(q{set DATESTYLE to 'DMY'}); 
    9595        $self->log(LA_DEBUG, 'New connection to DB'); 
     96 
     97        $self->get_global_value('sambaSID') or do { 
     98            $self->_setSambaSID; 
     99            $self->commit; 
     100        }; 
    96101 
    97102        return $self->{_db}; 
     
    776781} 
    777782 
     783=head2 sambaSID($id) 
     784 
     785Return the base samba SID set in the config or a default one if none is set. 
     786 
     787If C<$id> is given return the full SID suitable for an object. 
     788 
     789=cut 
     790 
     791sub sambaSID { 
     792    my ($self, $id) = @_; 
     793 
     794    my $ssid = $self->get_global_value('sambaSID'); 
     795    if (defined($id)) { 
     796        $ssid .= '-' . $id; 
     797    } 
     798    return $ssid; 
     799} 
     800 
     801sub _setSambaSID { 
     802    my ( $self ) = @_; 
     803 
     804    my $sid = sprintf( 
     805        'S-1-5-21-%d-%d', 
     806        int(rand 1000000000), 
     807        int(rand 1000000000), 
     808    ); 
     809 
     810    $self->set_global_value( 'sambaSID', $sid ); 
     811    return $sid; 
     812} 
     813 
     814 
     815 
    778816=head2 find_expired_users ($expire) 
    779817 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Group.pm

    r2431 r2475  
    194194                label => l('Member count'), 
    195195            }, 
     196 
     197            # Samba: 
     198 
     199            sambaSID => { 
     200                ro => 1, 
     201                auto => 1, 
     202            }, 
     203            _sambaSID => { 
     204                ro => 1, 
     205                hide => 1, 
     206                managed => 1, 
     207                get => sub { 
     208                    my ($self) = @_; 
     209                    my $obj = $self->object; 
     210                    my $uid = $obj->get_field('gidnumber'); 
     211                    return $obj->base->sambaSID( $uid * 2 + 1001 ); 
     212                } 
     213            }, 
     214 
    196215        } 
    197216    ) 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm

    r2474 r2475  
    10121012                } 
    10131013            }, 
     1014 
     1015            # Shadow: 
     1016 
    10141017            shadowExpire => { 
    10151018                ro => 1, 
     
    10411044                } 
    10421045            }, 
     1046            shadowWarning => { }, 
     1047            shadowMin => { }, 
     1048            shadowMax => { }, 
     1049            shadowLastChange => { 
     1050                ro => 1, 
     1051                auto => 1, 
     1052            }, 
     1053            _shadowLastChange => { 
     1054                ro => 1, 
     1055                hide => 1, 
     1056                managed => 1, 
     1057                get => sub { 
     1058                    my ($self) = @_; 
     1059                    my $obj = $self->object; 
     1060                    my $ts = $obj->get_field('passwordLastSet'); 
     1061                    $ts or return; 
     1062 
     1063                    my $Dt = DateTime::Format::Pg->parse_datetime( $ts ); 
     1064                    return int( $Dt->epoch / 86400); 
     1065                } 
     1066            }, 
     1067            shadowInactive => { }, 
     1068            shadowFlag => { }, 
     1069 
     1070            # Samba: 
     1071 
     1072            sambaSID => { 
     1073                ro => 1, 
     1074                auto => 1, 
     1075            }, 
     1076            _sambaSID => { 
     1077                ro => 1, 
     1078                hide => 1, 
     1079                managed => 1, 
     1080                get => sub { 
     1081                    my ($self) = @_; 
     1082                    my $obj = $self->object; 
     1083                    my $uid = $obj->get_field('uidnumber'); 
     1084                    return $obj->base->sambaSID( $uid * 2 + 1000 ); 
     1085                } 
     1086            }, 
     1087 
    10431088            directReports => { 
    10441089                auto => 1, 
     
    13211366                label => l('Name'), 
    13221367            }, 
    1323             shadowWarning => { }, 
    1324             shadowMin => { }, 
    1325             shadowMax => { }, 
    1326             shadowLastChange => { 
    1327                 ro => 1, 
    1328                 auto => 1, 
    1329             }, 
    1330             _shadowLastChange => { 
    1331                 ro => 1, 
    1332                 hide => 1, 
    1333                 managed => 1, 
    1334                 get => sub { 
    1335                     my ($self) = @_; 
    1336                     my $obj = $self->object; 
    1337                     my $ts = $obj->get_field('passwordLastSet'); 
    1338                     $ts or return; 
    1339  
    1340                     my $Dt = DateTime::Format::Pg->parse_datetime( $ts ); 
    1341                     return int( $Dt->epoch / 86400); 
    1342                 } 
    1343             }, 
    1344             shadowInactive => { }, 
    1345             shadowFlag => { }, 
    13461368            otherTelephone => { }, 
    13471369            nickname => { 
Note: See TracChangeset for help on using the changeset viewer.