1996-05-04 11:50:46 +04:00
#!/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) {
2000-08-26 00:44:33 +04:00
if($1 == name) {
1996-05-04 11:50:46 +04:00
delete names[name];
}
}
}
END {
fmt = "%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:";
1998-09-25 02:35:16 +04:00
fmt = fmt "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:%s:\n";
1996-05-04 11:50:46 +04:00
for(name in names) {
while ((getline < pwdf) > 0) {
if ($1 == name) {
1998-09-25 02:33:13 +04:00
printf(fmt, $1, $3, $5);
1996-05-04 11:50:46 +04:00
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) {
1998-09-25 02:33:13 +04:00
printf(fmt, $1, $3, $5);
1996-05-04 11:50:46 +04:00
}
close(command);
}
}
}