Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
App::LDAP - 管理者と百台のコンピュータ #YAPC::Asia 2012
Search
shelling
September 30, 2012
Technology
2
580
App::LDAP - 管理者と百台のコンピュータ #YAPC::Asia 2012
Introduction to App::LDAP, YAPC::Asia 2012
shelling
September 30, 2012
Tweet
Share
More Decks by shelling
See All by shelling
Distributed Storage for Web Applications
shelling
3
770
Other Decks in Technology
See All in Technology
20260222ねこIoTLT ねこIoTLTをふりかえる
poropinai1966
0
210
もう怖くないバックグラウンド処理 Background Tasks のすべて - Hakodate.swift #1
kantacky
0
110
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
4
670
【2026年版】生成AIによる情報システムへのインパクト
taka_aki
0
170
【Developers Summit 2026】Memory Is All You Need:コンテキストの「最適化」から「継続性」へ ~RAGを進化させるメモリエンジニアリングの最前線~
shisyu_gaku
5
720
LINEヤフーにおけるAI駆動開発組織のプロデュース施策
lycorptech_jp
PRO
0
150
Agent Skills 入門
puku0x
0
930
Claude Codeと駆け抜ける 情報収集と実践録
sontixyou
1
980
LINEアプリ開発のための Claude Code活用基盤の構築
lycorptech_jp
PRO
1
950
社内でAWS BuilderCards体験会を立ち上げ、得られた気づき / 20260225 Masaki Okuda
shift_evolve
PRO
1
110
使って学ぼう MCP (と GitHub Codespaces)
tsubakimoto_s
1
220
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
57
47k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
180
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Rails Girls Zürich Keynote
gr2m
96
14k
Navigating Team Friction
lara
192
16k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
230
Bash Introduction
62gerente
615
210k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
110
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7k
Transcript
App::LDAP 管理者と百台のコンピュータ shelling Sunday, September 30, 12
#!/me use qw(perl ruby javascript); use feature qw(css elisp); twitter
“shellingford”; github “shelling”; cpan “shelling”; Sunday, September 30, 12
Review Sunday, September 30, 12
/etc/passwd /etc/shadow LDAP Server Sunday, September 30, 12
network file system samba account netgroup network printers ... Sunday,
September 30, 12
new . Sunday, September 30, 12
ldap-utils LDAP Server Sunday, September 30, 12
LDIF#add ldapmodify -a -f dn: uid=jason8936,ou=people,dc=example,dc=com uid: jason8936 cn: jason8936
sn: jason8936 mail:
[email protected]
objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$Hk7MFO3..... shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1020 gidNumber: 1020 homeDirectory: /home/jason8936 Sunday, September 30, 12
LDIF#modify ldapmodify -f dn: uid=jason8936,ou=people,dc=example,dc=com changetype: modify delete: mail mail:
[email protected]
- add: mail mail:
[email protected]
mail:
[email protected]
Sunday, September 30, 12
LDIF#delete ldapmodify -f dn: uid=jason8936,ou=people,dc=example,dc=com changetype: delete Sunday, September 30,
12
Drawbacks • Time-Consumed • Not Quite Convenient • Not Abstract
Enough Sunday, September 30, 12
Demo https://vimeo.com/50077777 Sunday, September 30, 12
Demo https://vimeo.com/50077777 Sunday, September 30, 12
under the hood Sunday, September 30, 12
MVC $ ldap add user foo Controller Model LDAP Server
(CRUD)able Sunday, September 30, 12
User Group Host Sudoer Controller & Dispatcher $ ldap add
user foo Command Add Del Passwd Export User Group Host Sudoer App::LDAP:: use qw( Namespace::Dispatch MooseX::Getopt ); sub run { ... } foo Sunday, September 30, 12
Model & Schema top posixAccount person organizationalPerson inetOrgPerson shadowAccount posixGroup
ipHost LDIF::User LDIF::Group RFC2307 RFC2798 Sunday, September 30, 12
just class package person; use Moose; extends ‘top’; has ...
=> ...; package organizationalPerson; use Moose; extends ‘person’; has ... => ...; Sunday, September 30, 12
required => ? objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' DESC 'an
account with POSIX attributes' SUP top AUXILIARY MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description ) ) 1 0 RFC2307 has cn => ( required => ); Sunday, September 30, 12
isa => ? attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber' DESC 'An
integer identifying a user' EQUALITY integerMatch SYNTAX ‘INTEGER’ SINGLE-VALUE ) attributetype ( 1.3.6.1.1.1.1.12 NAME 'memberUid' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX ‘IA5String’ ) ArrayRef[Str] Num Not SINGLE-VALUE RFC2307 Sunday, September 30, 12
Ext#1 package App::LDAP::ObjectClass::Foo; use Moose; has ‘a_attribute’ => ( is
=> “rw”, isa => “...”, required => 1 or 0, ); ... Sunday, September 30, 12
Ext#2 package App::LDAP::LDIF::Foo; use Moose; extends “App::LDAP::ObjectClass::Foo”; has ‘+a_attribute’ =>
( default => “...”, ); ... Sunday, September 30, 12
Ext#3 package App::LDAP::Command::Foo; use Moose; with “App::LDAP::Role::Command”; sub run {
my $self = @_; App::LDAP::LDIF::Foo->... } ... Sunday, September 30, 12
NextStep#1 User->search( cn => “shelling ford”, mail => “
[email protected]
” );
Sunday, September 30, 12
NextStep#2 $user->modify( cn => “shelling ford”, mail => “
[email protected]
” );
Sunday, September 30, 12
NextStep#3 config(“/nss/passwd”); config(“/nss/group”); Sunday, September 30, 12
UseCase#1 LDAP NFS orker /home/ Worker Worker Worker Work look
up sudoers mount Sunday, September 30, 12
UseCase#2 galera1 galera2 galera3 LDAP galera3’ look up hosts 10.1.193.205
10.1.132.173 Sunday, September 30, 12
Conclusions Not a replacement to ldap-utils Saving your time on
routines help you to create correct LDIFs Sunday, September 30, 12
Thank You http://github.com/shelling/app-ldap pull request & issues welcome Sunday, September
30, 12