#!/opt/bin/perl # ######################################################################### # # # Programm zur Ermittlung freier (unbenutzter) UID's und GID's # # # ######################################################################### # # # Version 1.0 - Written 02.04.95 by Steffen Beyer # # # ######################################################################### # # # Copyright (C) 1995 by software design & management GmbH & Co. KG # # # ######################################################################### # # Einige wichtige Defaulteinstellungen: # $version = 'Version 1.0'; # $self = $0; # if ($self =~ /^.*\/([^\/]+)$/) { $self = $1; } # # Unterprogrammdefinitionen: # sub numerically { $a <=> $b } # # Aktuelle Passwort- und Gruppendatei einlesen (slurp): # setgrent; # while (($group,$passwd,$gid) = getgrent) { if ($gid_group{$group} ne "") { die "Error: Group name '$group' is not unique!\n"; } else { $gid_group{$group} = $gid; } if ($group_gid{$gid} ne "") { $group_gid{$gid} .= ", " . $group; warn "Warning: Group id '$gid' is not unique!\n"; } else { $group_gid{$gid} = $group; } } # endgrent; # setpwent; # while (($user,$passwd,$uid,$gid) = getpwent) { if ($uid_user{$user} ne "") { die "Error: User name '$user' is not unique!\n"; } else { $uid_user{$user} = $uid; } if ($user_uid{$uid} ne "") { $user_uid{$uid} .= ", " . $user; warn "Warning: User id '$uid' is not unique!\n"; } else { $user_uid{$uid} = $user; } if ($group_gid{$gid} eq "") { warn "Warning: User '$user' belongs to non-existent group '$gid'!\n"; } # $gid_user{$user} = $gid; } # endpwent; # # Ausgabe der Ueberschrift: # printf("\n'%s' %s\n\n", $self, $version); # # Ausgabe der freien UID's: # printf("Free (unused) USER ID numbers:\n\n"); # $previous = 0; # foreach $uid (sort numerically keys(%user_uid)) { if ($uid >= 0) { $difference = $uid - $previous; if ($difference == 1) { printf("%d ", $previous); } elsif ($difference == 2) { printf("%d %d ", $previous, $uid - 1); } elsif ($difference > 2) { printf("%d..%d ", $previous, $uid - 1); } else {} $previous = $uid + 1; } } # printf("%d..*\n\n", $previous); # # Ausgabe der freien GID's: # printf("Free (unused) GROUP ID numbers:\n\n"); # $previous = 0; # foreach $gid (sort numerically keys(%group_gid)) { if ($gid >= 0) { $difference = $gid - $previous; if ($difference == 1) { printf("%d ", $previous); } elsif ($difference == 2) { printf("%d %d ", $previous, $gid - 1); } elsif ($difference > 2) { printf("%d..%d ", $previous, $gid - 1); } else {} $previous = $gid + 1; } } # printf("%d..*\n\n", $previous); # # Fertig. #