mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
0e8fd33987
(This used to be commit 291551d807
)
75 lines
1.7 KiB
Awk
75 lines
1.7 KiB
Awk
#!/usr/bin/awk -f
|
|
# edit the line above to point to your real location of awk interpreter
|
|
|
|
# awk program for adding new entries in smbpasswd files
|
|
# arguments are account names to add; feed it an existent Samba password
|
|
# file on stdin, results will be written on stdout
|
|
#
|
|
# Michal Jaegermann, michal@ellpspace.math.ualberta.ca, 1995-11-09
|
|
|
|
BEGIN {
|
|
me = "addtosmbpass";
|
|
count = ARGC;
|
|
FS = ":";
|
|
|
|
if (count == 1) {
|
|
print "Usage:", me,
|
|
"name1 [name2 ....] < smbpasswd.in > smbpasswd.out";
|
|
ARGV[1] = "/dev/null";
|
|
ARGC = 2;
|
|
exit;
|
|
}
|
|
|
|
for(i = 1; i < count; i++) {
|
|
names[ARGV[i]] = " ";
|
|
delete ARGV[i];
|
|
}
|
|
# sane awk should work simply with 'ARGC = 1', but not every awk
|
|
# implementation is sane - big sigh!!
|
|
ARGV[1] = "-";
|
|
ARGC = 2;
|
|
#
|
|
# If you have ypmatch but is not RPC registered (some Linux systems
|
|
# for example) comment out the next line.
|
|
# "which ypmatch" | getline ypmatch;
|
|
if (1 != match(ypmatch, /^\//)) {
|
|
ypmatch = "";
|
|
}
|
|
pwdf = "/etc/passwd";
|
|
}
|
|
#check for names already present in input
|
|
{
|
|
print $0;
|
|
for(name in names) {
|
|
if($1 ~ name) {
|
|
delete names[name];
|
|
}
|
|
}
|
|
}
|
|
END {
|
|
fmt = "%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:";
|
|
fmt = fmt "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:%s:%s:%s\n";
|
|
for(name in names) {
|
|
while ((getline < pwdf) > 0) {
|
|
if ($1 == name) {
|
|
printf(fmt, $1, $3, $5, $6, $7);
|
|
close(pwdf);
|
|
notfound = "";
|
|
break;
|
|
}
|
|
notfound = "n";
|
|
}
|
|
$0 = "";
|
|
if (notfound && ypmatch) {
|
|
# try to find in NIS databases
|
|
command = ypmatch " " name " passwd";
|
|
command | getline;
|
|
if (NF > 0) {
|
|
printf(fmt, $1, $3, $5, $6, $7);
|
|
}
|
|
close(command);
|
|
}
|
|
}
|
|
}
|
|
|