明らかに、次のコマンドを使用してSambaユーザーがパスワードを変更する必要があるかどうかを確認できます。
pdbedit -v -u userid | grep "Password must change"
また、以下を使用してすべてのSambaユーザーを一覧表示できることに気づきました。
pdbedit -L -v
次の形式で約10MBのデータを出力します。
---------------
Unix username: egbjt005$
NT username: egbjt005$
...
Password must change: Thu, 16 Aug 2012 07:33:58 NZST
...
---------------
Unix username: eghwj001$
NT username: eghwj001$
...
Password must change: Fri, 20 Jul 2012 14:42:46 NZST
...
... 興味深いデータの数行を表します。パスワードが期限切れで変更されていない場合、この日付は過去になります。
私が本当に欲しいのは、パスワードの変更が必要な特定の2文字のプレフィックス(たとえば「eg」を使用)で始まるユーザーIDのリストです。どうすればいいですか?
答え1
pdbedit
オンラインで見つけたいくつかの出力例を見てみましょう。あなたのコードは異なる場合があります。印刷されたコンテンツのいくつかの例を提供できる場合は、このコードがお客様のニーズに適している可能性があります。
まず、プレフィックスと一致するユーザー名を見つける必要があります。次のように出力形式がpdbedit
指定されているようです。username: foo
awk
pdbedit -L -v | awk '/username:/ {print $2}'
次に、プレフィックスで始まる名前を探す必要があるので、grepを使ってみましょう。
pdbedit -L -v | awk '/username:/ {print $2}' | grep ^eg
特定のユーザーのパスワードを変更する必要があるかどうかを確認するには、戻りコードを調べて文字列があるかどうかをgrep
確認できます。
if pdbedit -v -u $name | grep -q "Password must change" ; then
echo $name
fi
各名前を解決するループで、すべてを1つにまとめます。
for name in $(pdbedit -L -v | awk '/username:/ {print $2}' | grep ^eg); do
if pdbedit -v -u $name | grep -q "Password must change" ; then
echo $name
fi
done
出力例の公開後に更新
この形式は、一般的なUnixコマンドラインテキスト処理ツールが好きな人が設計したものではありません!もちろん、どんな言語でも何でもできますが、私はおそらくこの言語を解析するためにPythonやPerlのような言語を使うでしょう。 Pythonは日付と時刻を正しく処理できないため、ここではPerlを選択しました。
#!/usr/bin/perl
use Date::Parse;
$now = time();
while (<>) {
if (/Unix username:\s*(.*)/) {
$username = $1;
}
if (/Password must change:\s*(.*)/) {
$change = str2time($1);
if ($change <= $now) {
print "$username\n";
}
}
}
これにより、パスワードが期限切れになったすべてのユーザーのUnixユーザー名が印刷されます。次のように使用してください。
pdbedit -L -v | perl parse.pl
質問作成者による編集
私が使用したコードは次のとおりです。
#!/usr/bin/perl
use Date::Parse;
$now = time();
while (<>) {
if (/Unix username:\s*(.*)/) {
$username = $1;
}
if (/Password must change:\s*(.*)/) {
$expiry = $1;
$change = str2time($expiry);
if ($expiry !~ /^never/ && $change <= $now && $username =~ /^eg[a-z]{3}\d+/) {
print "$username expiry: $expiry\n";
}
}
}
次の出力を生成します。
egdfd001 expiry: Mon, 30 Jul 2012 08:12:02 NZST
egjpf001 expiry: Mon, 13 Aug 2012 07:50:03 NZST