aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/fetchmaildistrib
blob: 00cc19107230abc10071c94d5c23cf42aa140d0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#/bin/bash
#
# fetchmaildistrib --- Distribute central fetchmail knowledge.
#
# The central fetchmail database, /etc/fetchmail, contains all accounts that
# are to be fetched by the root's daemon. Often, a user desires quicker
# access (e.g., when testing some email path). In such cases, the destination
# user (marked as is USER here in the poll lines) should set up a ~/.fetchmailrc
# for himself. This scripts generates such lines from the central file.
#
# By Rick van Rein.

# From stdin, select poll lines for user $1
function selectuser () {
	grep ^poll | grep "is $1 here"
}


for i in `cut -d: -f1 </etc/passwd`
do	homedir=`grep ^$i: /etc/passwd | cut -d: -f6`
	fetchfile=`selectuser $i </etc/fetchmailrc`
	if [ -z "$fetchfile" ]
	then	rm -f $homedir/.fetchmailrc
	else	cp /dev/null $homedir/.fetchmailrc
		chmod go-rwx $homedir/.fetchmailrc
		grep ^defaults /etc/fetchmailrc >>$homedir/.fetchmailrc
		selectuser $i </etc/fetchmailrc >>$homedir/.fetchmailrc
	fi
done
>; $username = "p99dreyf"; $passwd = "xxxxxxxx"; $command = "exec ~/bin/imapd"; use Net::Telnet (); $host = new Net::Telnet (Timeout => 10, Port => 23, Prompt => '/p99dreyf>\s?$/', Cmd_remove_mode => 1); $host->option_accept(Dont => &Net::Telnet::TELOPT_ECHO, Wont => &Net::Telnet::TELOPT_ECHO); open (FILE,">log"); $host->dump_log("log2"); $host->input_log("log3"); ## Issue some commands. $host->open($hostname); #$host->login($username, $passwd); $host->waitfor('/login:\s?$/'); $host->print("$username"); $host->waitfor('/Password:\s?$/'); $host->print("$passwd"); $host->waitfor('/p99dreyf>\s?$/'); $host->print("$command"); $strip=1; while ($strip) { $greeting=$host->getline(); if ($greeting=~/^\* PREAUTH.*$/) { print "$greeting"; $strip=0;}; } do { do { $cmd=<STDIN>; chop $cmd; } while ($cmd !~/[A-Za-z0-9]/); $host->print("$cmd"); print FILE ">>$cmd<<\n"; do { $line=$host->getline(); chop($line); print "$line\n"; print FILE "<<$line<<\n"; } while (($line!~/^[A-Za-z0-9]+ (OK|BAD|Expunge).*$/) && ($line!~/^\* BAD.*$/)); print FILE "--next cmd\n"; } while ($line!~/^[A-Za-z0-9]+ OK LOGOUT.*$/); exit;