home *** CD-ROM | disk | FTP | other *** search
- #!/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);
- }
- }
- }
-
-