annotate APOPtools/apoppasswd @ 4:d741b3ecc917 draft

imapext-2007f
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 30 Oct 2014 00:03:05 +0900
parents 28a55bc1110c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
1 #!/usr/local/bin/perl
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
2 # Customize these variables.
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
3 # If you change APOPFILEBASE, change the same variable in apopcall.c too.
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
4 # See http://www.gentei.org/~yuuji/software/imapext/
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
5
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
6 $HOME=$ENV{"HOME"};
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
7
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
8 $DEFAULTMAILDIR = "Maildir"; # Must be same as ../src/osdep/unix/Makefile
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
9
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
10 $APOPFILEBASE = ".apop"; # "$HOME/$APOPFILEBASE" is the password file
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
11 # $APOPFILEBASE = "$DEFAULTMAILDIR/apop";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
12 # $APOPFILEBASE = "Mail/apop";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
13
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
14 $ENCODER = "cat";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
15 # $ENCODER = "gzip";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
16 # $ENCODER = "uuencode $$|gzip";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
17
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
18 $DECODER = "cat";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
19 # $DECODER = "gzip -dc";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
20 # $DECODER = "gzip -dc | uudecode";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
21
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
22 $DOTQMAIL = ".qmail"; # qmail
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
23 # $DOTQMAIL = ".forward"; # Postfix
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
24
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
25 $XADDR_DELIM = "-"; # qmail
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
26 # $XADDR_DELIM = "+"; # Postfix
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
27
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
28 $HERE = "."; # qmail
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
29 # $HERE = "~"; # Postfix
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
30
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
31 $EXT = "";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
32 $force = 0;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
33 $base = 0;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
34
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
35 $APOPFILE = "$HOME/$APOPFILEBASE";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
36
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
37 sub handler {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
38 system "stty echo";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
39 print STDERR "Abort:\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
40 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
41 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
42
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
43 $SIG{'INT'} = $SIG{'KILL'} = $SIG{'QUIT'} = $SIG{'HUP'} = 'handler';
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
44
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
45 while ($_=$ARGV[0], /^-.+/ && shift) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
46 if (/^-e/) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
47 $APOPFILE .= $XADDR_DELIM . ($EXT=shift);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
48 } elsif (/^-b/) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
49 $base++;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
50 } elsif (/^-c/) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
51 $create++;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
52 } elsif (/^-s/) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
53 $stream++;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
54 # and exit;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
55 } elsif (/^-h/) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
56 &usage; # and exit
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
57 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
58 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
59
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
60 sub checkmaildir {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
61 local($dotqmail) = ("$HOME/$DOTQMAIL");
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
62 local($maildir) = ($DEFAULTMAILDIR); # default
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
63 $dotqmail .= "$XADDR_DELIM$EXT" if $EXT;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
64 $maildir .= "-$EXT" if $EXT;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
65 unless (-f "$dotqmail") {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
66 if ($create) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
67 if (open(DQMAIL, "> $dotqmail")) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
68 print DQMAIL "$HERE/$maildir/\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
69 print "File [$dotqmail] created\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
70 close(DQMAIL);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
71 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
72 } else {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
73 print "$dotqmail file does not exist.\n"; # should go to stdout
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
74 print "Your should create $maildir first!\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
75 print "(-c option automatically makes it)\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
76 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
77 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
78 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
79 if (-s $dotqmail) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
80 $maildir='';
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
81 if (open(DQMAIL, "< $dotqmail")) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
82 while (<DQMAIL>) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
83 s/[\r\n \t]*$//g;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
84 next if /#/;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
85 next unless m,\./.*/,;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
86 chop; # strip trailing "/"
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
87 $maildir = $_;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
88 last;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
89 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
90 close(DQMAIL);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
91 $maildir = $DEFAULTMAILDIR if $maildir eq '';
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
92 unless (-d "$HOME/$maildir"
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
93 && -d "$HOME/$maildir/new"
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
94 && -d "$HOME/$maildir/cur"
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
95 && -d "$HOME/$maildir/tmp") {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
96 if ($create) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
97 mkdir "$HOME/$maildir", 0700;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
98 mkdir "$HOME/$maildir/new", 0700;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
99 mkdir "$HOME/$maildir/cur", 0700;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
100 mkdir "$HOME/$maildir/tmp", 0700;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
101 print "Maildir [$maildir/] created\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
102 } else {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
103 print "Maildir($maildir) does not exist\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
104 print "Your should do maildirmake $maildir first!\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
105 print "(-c option automatically makes it)\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
106 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
107 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
108 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
109 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
110 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
111 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
112
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
113 sub usage {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
114 local($mydir, $myname) = ($0 =~ m,(.*)/(.*),);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
115 print<<_EOU_;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
116 $myname Change Mail password for imap-4.7+qmailapop
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
117 Usage: $myname [options]
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
118 Options are...
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
119 -e EXT Set target email address to "user-EXT"
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
120 -c If no .qmail file and Maildir, create them
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
121
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
122 _EOU_
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
123 exit 0;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
124 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
125
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
126 if ($stream) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
127 &stream;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
128 exit; # not reached
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
129 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
130 $OK=0;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
131 until ($OK) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
132 system "stty -echo";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
133 print STDERR "Enter APOP Password: ";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
134 $new1 = <>;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
135 print STDERR "\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
136 if (length($new1) == 1) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
137 print STDERR "Canceled\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
138 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
139 } elsif (length($new1) < 9) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
140 print STDERR "Password is too short! Please use more than 8 chars.\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
141 next;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
142 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
143 print STDERR "Again APOP Password: ";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
144 $new2 = <>;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
145 if ($new1 eq $new2) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
146 $OK=1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
147 } else {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
148 print STDERR "\nPassword mismatch! Try again.\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
149 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
150 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
151 #OK
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
152 &checkmaildir;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
153 system "stty echo";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
154 open(NP, "| $ENCODER > $APOPFILE") || die "Cannot write on $APOPFILE\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
155 print NP "$new1";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
156 close(NP);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
157 chmod 0600, $APOPFILE;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
158 print STDERR "\nUpdated APOP password successfully.\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
159
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
160 sub stream { # Must match with old password
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
161 local($PASS, $old, $new1, $new2, $master) = (0);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
162 local($masterfile) = ($APOPFILE);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
163 $masterfile = "$HOME/$APOPFILEBASE" if $base;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
164 exit 1 if ($> == 0);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
165 while (<>) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
166 chop;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
167 if (/^PASS (.*)$/i) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
168 $old = $1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
169 } elsif (/^NEW (.*)/i) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
170 $new1 = $1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
171 } elsif (/^NEW2 (.*)/i) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
172 $new2 = $1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
173 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
174 last if ("$new1" ne "" && "$new2" ne "");
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
175 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
176 if (-s $APOPFILE || ($base && -f $masterfile)) { # Already exist
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
177 if (open(OLD, "$DECODER $masterfile |")) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
178 ($master = <OLD>) =~ s/[\n\r]$//g;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
179 close(OLD);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
180 } else {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
181 print "Old password file corrupted.\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
182 print "Please ask to administrator.\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
183 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
184 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
185 if ($master ne $old) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
186 print "Illegal password\nBye\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
187 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
188 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
189 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
190 if ($new1 ne $new2) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
191 print "Password(new) mismatch\nBye\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
192 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
193 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
194 # OK, now begin to create!
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
195 &checkmaildir;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
196 if (open(P, "| $ENCODER > $APOPFILE")) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
197 # open success
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
198 print P "$new1\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
199 close(P);
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
200 chmod 0600, $APOPFILE;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
201 if (-s $APOPFILE) {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
202 print "Success!\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
203 exit 0;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
204 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
205 } else {
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
206 print "Cannot output to $APOPFILE\nBye\n";
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
207 exit 1;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
208 }
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
209 exit 0;
28a55bc1110c [mq]: imapext
yuuji@gentei.org
parents:
diff changeset
210 }
4
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
211 #!/usr/local/bin/perl
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
212 # Customize these variables.
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
213 # If you change APOPFILEBASE, change the same variable in apopcall.c too.
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
214 # See http://www.gentei.org/~yuuji/software/imapext/
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
215
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
216 $HOME=$ENV{"HOME"};
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
217
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
218 $DEFAULTMAILDIR = "Maildir"; # Must be same as ../src/osdep/unix/Makefile
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
219
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
220 $APOPFILEBASE = ".apop"; # "$HOME/$APOPFILEBASE" is the password file
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
221 # $APOPFILEBASE = "$DEFAULTMAILDIR/apop";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
222 # $APOPFILEBASE = "Mail/apop";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
223
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
224 $ENCODER = "cat";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
225 # $ENCODER = "gzip";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
226 # $ENCODER = "uuencode $$|gzip";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
227
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
228 $DECODER = "cat";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
229 # $DECODER = "gzip -dc";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
230 # $DECODER = "gzip -dc | uudecode";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
231
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
232 $DOTQMAIL = ".qmail"; # qmail
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
233 # $DOTQMAIL = ".forward"; # Postfix
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
234
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
235 $XADDR_DELIM = "-"; # qmail
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
236 # $XADDR_DELIM = "+"; # Postfix
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
237
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
238 $HERE = "."; # qmail
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
239 # $HERE = "~"; # Postfix
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
240
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
241 $EXT = "";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
242 $force = 0;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
243 $base = 0;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
244
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
245 $APOPFILE = "$HOME/$APOPFILEBASE";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
246
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
247 sub handler {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
248 system "stty echo";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
249 print STDERR "Abort:\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
250 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
251 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
252
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
253 $SIG{'INT'} = $SIG{'KILL'} = $SIG{'QUIT'} = $SIG{'HUP'} = 'handler';
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
254
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
255 while ($_=$ARGV[0], /^-.+/ && shift) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
256 if (/^-e/) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
257 $APOPFILE .= $XADDR_DELIM . ($EXT=shift);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
258 } elsif (/^-b/) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
259 $base++;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
260 } elsif (/^-c/) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
261 $create++;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
262 } elsif (/^-s/) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
263 $stream++;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
264 # and exit;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
265 } elsif (/^-h/) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
266 &usage; # and exit
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
267 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
268 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
269
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
270 sub checkmaildir {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
271 local($dotqmail) = ("$HOME/$DOTQMAIL");
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
272 local($maildir) = ($DEFAULTMAILDIR); # default
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
273 $dotqmail .= "$XADDR_DELIM$EXT" if $EXT;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
274 $maildir .= "-$EXT" if $EXT;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
275 unless (-f "$dotqmail") {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
276 if ($create) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
277 if (open(DQMAIL, "> $dotqmail")) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
278 print DQMAIL "$HERE/$maildir/\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
279 print "File [$dotqmail] created\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
280 close(DQMAIL);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
281 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
282 } else {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
283 print "$dotqmail file does not exist.\n"; # should go to stdout
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
284 print "Your should create $maildir first!\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
285 print "(-c option automatically makes it)\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
286 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
287 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
288 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
289 if (-s $dotqmail) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
290 $maildir='';
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
291 if (open(DQMAIL, "< $dotqmail")) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
292 while (<DQMAIL>) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
293 s/[\r\n \t]*$//g;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
294 next if /#/;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
295 next unless m,\./.*/,;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
296 chop; # strip trailing "/"
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
297 $maildir = $_;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
298 last;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
299 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
300 close(DQMAIL);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
301 $maildir = $DEFAULTMAILDIR if $maildir eq '';
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
302 unless (-d "$HOME/$maildir"
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
303 && -d "$HOME/$maildir/new"
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
304 && -d "$HOME/$maildir/cur"
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
305 && -d "$HOME/$maildir/tmp") {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
306 if ($create) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
307 mkdir "$HOME/$maildir", 0700;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
308 mkdir "$HOME/$maildir/new", 0700;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
309 mkdir "$HOME/$maildir/cur", 0700;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
310 mkdir "$HOME/$maildir/tmp", 0700;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
311 print "Maildir [$maildir/] created\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
312 } else {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
313 print "Maildir($maildir) does not exist\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
314 print "Your should do maildirmake $maildir first!\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
315 print "(-c option automatically makes it)\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
316 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
317 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
318 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
319 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
320 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
321 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
322
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
323 sub usage {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
324 local($mydir, $myname) = ($0 =~ m,(.*)/(.*),);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
325 print<<_EOU_;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
326 $myname Change Mail password for imap-4.7+qmailapop
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
327 Usage: $myname [options]
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
328 Options are...
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
329 -e EXT Set target email address to "user-EXT"
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
330 -c If no .qmail file and Maildir, create them
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
331
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
332 _EOU_
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
333 exit 0;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
334 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
335
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
336 if ($stream) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
337 &stream;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
338 exit; # not reached
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
339 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
340 $OK=0;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
341 until ($OK) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
342 system "stty -echo";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
343 print STDERR "Enter APOP Password: ";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
344 $new1 = <>;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
345 print STDERR "\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
346 if (length($new1) == 1) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
347 print STDERR "Canceled\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
348 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
349 } elsif (length($new1) < 9) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
350 print STDERR "Password is too short! Please use more than 8 chars.\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
351 next;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
352 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
353 print STDERR "Again APOP Password: ";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
354 $new2 = <>;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
355 if ($new1 eq $new2) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
356 $OK=1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
357 } else {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
358 print STDERR "\nPassword mismatch! Try again.\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
359 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
360 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
361 #OK
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
362 &checkmaildir;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
363 system "stty echo";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
364 open(NP, "| $ENCODER > $APOPFILE") || die "Cannot write on $APOPFILE\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
365 print NP "$new1";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
366 close(NP);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
367 chmod 0600, $APOPFILE;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
368 print STDERR "\nUpdated APOP password successfully.\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
369
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
370 sub stream { # Must match with old password
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
371 local($PASS, $old, $new1, $new2, $master) = (0);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
372 local($masterfile) = ($APOPFILE);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
373 $masterfile = "$HOME/$APOPFILEBASE" if $base;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
374 exit 1 if ($> == 0);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
375 while (<>) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
376 chop;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
377 if (/^PASS (.*)$/i) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
378 $old = $1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
379 } elsif (/^NEW (.*)/i) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
380 $new1 = $1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
381 } elsif (/^NEW2 (.*)/i) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
382 $new2 = $1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
383 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
384 last if ("$new1" ne "" && "$new2" ne "");
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
385 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
386 if (-s $APOPFILE || ($base && -f $masterfile)) { # Already exist
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
387 if (open(OLD, "$DECODER $masterfile |")) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
388 ($master = <OLD>) =~ s/[\n\r]$//g;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
389 close(OLD);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
390 } else {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
391 print "Old password file corrupted.\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
392 print "Please ask to administrator.\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
393 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
394 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
395 if ($master ne $old) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
396 print "Illegal password\nBye\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
397 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
398 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
399 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
400 if ($new1 ne $new2) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
401 print "Password(new) mismatch\nBye\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
402 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
403 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
404 # OK, now begin to create!
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
405 &checkmaildir;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
406 if (open(P, "| $ENCODER > $APOPFILE")) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
407 # open success
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
408 print P "$new1\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
409 close(P);
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
410 chmod 0600, $APOPFILE;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
411 if (-s $APOPFILE) {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
412 print "Success!\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
413 exit 0;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
414 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
415 } else {
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
416 print "Cannot output to $APOPFILE\nBye\n";
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
417 exit 1;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
418 }
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
419 exit 0;
d741b3ecc917 imapext-2007f
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
420 }

yatex.org