{ $OUT = ''; # Generate qmail user assignments for users. These will be handled by # ~user/.qmail. use esmith::AccountsDB; my $adb = esmith::AccountsDB->open_ro(); foreach $user ( $adb->users ) { my $user_name = $user->key; my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef) = getpwnam($user_name); # It is almost impossible to get Text::Template to output nothing # on failure. It can be done by removing the newline at the end of # this file but that is messy. Therefore, we'll simply return an # error message that will make qmail-newu fail. Also send a # warning message that will be captured in the logs. unless (defined $uid && defined $gid && defined $dir) { my $msg = "Failed to obtain user details for \'$user_name\' " . "while processing user assignments."; warn "$msg\n"; $OUT = $msg; return; } $user_assign = $user_name . ":${uid}:${gid}:${dir}"; # Assign mail for user@ $OUT .= "=" . $user_name . ":${user_assign}:::\n"; # Assign mail for user-ext@ $OUT .= "+" . $user_name . "-:${user_assign}:-::\n"; } # Need to remove the final newline character. Blank lines in # /var/qmail/users/assign are prohibited. chomp($OUT); # Failsafe: /var/qmail/users/assign cannot have blank lines. # Therefore, if $OUT is empty, simply set up an assign for the # alias user. unless ($OUT) { (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef) = getpwnam("alias"); $alias_assign = "alias:${uid}:${gid}:${dir}"; $OUT = "=alias:${alias_assign}:::"; } }