amail-checkins Mailing List for aMail
Brought to you by:
bit-man
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
(55) |
May
(46) |
Jun
(5) |
Jul
|
Aug
|
Sep
(2) |
Oct
(1) |
Nov
(6) |
Dec
(101) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(32) |
Feb
|
Mar
(35) |
Apr
|
May
(49) |
Jun
(6) |
Jul
(2) |
Aug
(26) |
Sep
(3) |
Oct
|
Nov
|
Dec
|
From: Victor A. R. <bi...@us...> - 2002-09-06 21:46:17
|
Update of /cvsroot/amail/new_project/program In directory usw-pr-cvs1:/tmp/cvs-serv2286/program Modified Files: ServiceGlue.pl folders.pl pop.pl Log Message: Bug corrected for folders creation using the new TRex::Storage interface Index: ServiceGlue.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/ServiceGlue.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** ServiceGlue.pl 23 May 2002 00:08:11 -0000 1.1 --- ServiceGlue.pl 6 Sep 2002 21:46:13 -0000 1.2 *************** *** 1,5 **** #!/usr/bin/perl -w ! # -- SOAP::Lite -- guide.soaplite.com -- Copyright (C) 2001 Paul Kulchenko -- use SOAP::Transport::HTTP; --- 1,5 ---- #!/usr/bin/perl -w ! use strict; use SOAP::Transport::HTTP; Index: folders.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/folders.pl,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** folders.pl 29 Aug 2002 17:36:34 -0000 1.7 --- folders.pl 6 Sep 2002 21:46:13 -0000 1.8 *************** *** 387,390 **** --- 387,391 ---- } + sub Trash { # sends all the messages in the folder to the trash Index: pop.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/pop.pl,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** pop.pl 29 Aug 2002 17:36:34 -0000 1.6 --- pop.pl 6 Sep 2002 21:46:13 -0000 1.7 *************** *** 183,186 **** --- 183,187 ---- close MAILBOX; + unless ($found) { # It's a new folder if ($_ = createNewFolder($folder_to) ) { *************** *** 201,214 **** ### some code that manages the folders file ### inside the kernel - - # if ($_ = Check_folder_name($folder_to)) { # check if new name OK - # $folder_mess = $_; # if something came back, it's an error message that we pass on - # &Print_start; - # return; - # } - # # This looks like a valid folder name - # $folder_info{$folder_to} = [$folder_to,0,0,0]; # create new folder entry - # $folder_list .= "$folder_to,"; - # $folder_added = 1; } --- 202,205 ---- |
From: Victor A. R. <bi...@us...> - 2002-09-06 21:46:17
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv2286/program/lib/Storage Modified Files: EMail.pm Log Message: Bug corrected for folders creation using the new TRex::Storage interface Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** EMail.pm 29 Aug 2002 17:36:34 -0000 1.9 --- EMail.pm 6 Sep 2002 21:46:13 -0000 1.10 *************** *** 187,191 **** my $authMethod = shift; my @param = @_; ! $_ = $authMethod; --- 187,191 ---- my $authMethod = shift; my @param = @_; ! my @folders; $_ = $authMethod; *************** *** 223,227 **** seek MAILBOX, 0, 0; print MAILBOX @folders,"\n",@messages; ! close MAILBOX; print STDERR "Folder created !!!\n" if $Debug; --- 223,228 ---- seek MAILBOX, 0, 0; print MAILBOX @folders,"\n",@messages; ! my $status = close MAILBOX; ! print STDERR "close status: $status\n" if $Debug; print STDERR "Folder created !!!\n" if $Debug; |
From: Victor A. R. <bi...@us...> - 2002-09-06 21:46:17
|
Update of /cvsroot/amail/new_project In directory usw-pr-cvs1:/tmp/cvs-serv2286 Modified Files: ChangeLog Log Message: Bug corrected for folders creation using the new TRex::Storage interface Index: ChangeLog =================================================================== RCS file: /cvsroot/amail/new_project/ChangeLog,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** ChangeLog 3 Jun 2002 19:48:19 -0000 1.4 --- ChangeLog 6 Sep 2002 21:46:13 -0000 1.5 *************** *** 13,17 **** Improvements: ! - Modularization for user authentication (aMail::PAM) - PAM module for old aMail style --- 13,18 ---- Improvements: ! - Modularization for user authentication (aMail::PAM) - PAM module for old aMail style + - Storage modularization (in progress) |
From: Victor A. R. <bi...@us...> - 2002-08-29 17:36:38
|
Update of /cvsroot/amail/new_project/program/lib In directory usw-pr-cvs1:/tmp/cvs-serv29385/program/lib Modified Files: Storage.pm Log Message: Folder creation, with TRex service glue, fully integrated to TRex core ... well some minor hacks were done !! Index: Storage.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage.pm,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** Storage.pm 26 Aug 2002 22:53:23 -0000 1.8 --- Storage.pm 29 Aug 2002 17:36:34 -0000 1.9 *************** *** 102,105 **** --- 102,106 ---- use SOAP::Lite; + my $Debug = 1; ## ## Pending issues: *************** *** 372,376 **** /$FOLDER/ && ($self->{'CLID'} eq 'EMail') && do { ! print "Folder creation\n"; return $self->{'SOAPhandler'}->folderCreate( $$input{'NAME'}, $self->{'authMethod'}, @param )->result; --- 373,377 ---- /$FOLDER/ && ($self->{'CLID'} eq 'EMail') && do { ! print STDERR "Folder creation\n" if $Debug; return $self->{'SOAPhandler'}->folderCreate( $$input{'NAME'}, $self->{'authMethod'}, @param )->result; *************** *** 393,397 **** my $PORT = 12345; ! print "Class ID: $module \n"; my $handler = SOAP::Lite --- 394,398 ---- my $PORT = 12345; ! print STDERR "Class ID: $module \n" if $Debug; my $handler = SOAP::Lite |
From: Victor A. R. <bi...@us...> - 2002-08-29 17:36:37
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv29385/program/lib/Storage Modified Files: EMail.pm Log Message: Folder creation, with TRex service glue, fully integrated to TRex core ... well some minor hacks were done !! Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** EMail.pm 26 Aug 2002 22:53:23 -0000 1.8 --- EMail.pm 29 Aug 2002 17:36:34 -0000 1.9 *************** *** 133,137 **** my @param = @_; ! print "Auth. Method: $authMethod \n" if $Debug; $_ = $authMethod; --- 133,137 ---- my @param = @_; ! print STDERR "Auth. Method: $authMethod \n" if $Debug; $_ = $authMethod; *************** *** 194,201 **** my $aMail_ID = $param[0]; ! print "===================== folderCreate\n" if $Debug; ! print "aMail ID: $aMail_ID\n" if $Debug; return 2 unless ! handlePAM( $aMail_ID ); ! print "Folder creation: $folder\n" if $Debug; ########################################### --- 194,201 ---- my $aMail_ID = $param[0]; ! print STDERR "===================== folderCreate\n" if $Debug; ! print STDERR "aMail ID: $aMail_ID\n" if $Debug; return 2 unless ! handlePAM( $aMail_ID ); ! print STDERR "Folder creation: $folder\n" if $Debug; ########################################### *************** *** 205,209 **** safe_open_update( *MAILBOX{IO}, $mailbox_file); flock(MAILBOX,2) || return 3; ! print "Folder file locked.\n" if $Debug; while (($_ = <MAILBOX>) and $_ ne "\n") { --- 205,209 ---- safe_open_update( *MAILBOX{IO}, $mailbox_file); flock(MAILBOX,2) || return 3; ! print STDERR "Folder file locked.\n" if $Debug; while (($_ = <MAILBOX>) and $_ ne "\n") { *************** *** 225,229 **** close MAILBOX; ! print "Folder created !!!\n" if $Debug; ### Successfull completion return 0; --- 225,229 ---- close MAILBOX; ! print STDERR "Folder created !!!\n" if $Debug; ### Successfull completion return 0; *************** *** 313,320 **** if ($code == PAM_PROMPT_ECHO_OFF() ) { $ans = $SID; ! print "SID (convers_off): $ans \n" if $Debug; } elsif ($code == PAM_PROMPT_ECHO_ON() ) { $ans = $SID; ! print "SID (convers_on): $SID \n" if $Debug; } elsif ($code == PAM_ERROR_MSG() ) { $problem = $code } elsif ($code == PAM_TEXT_INFO() ) { } --- 313,320 ---- if ($code == PAM_PROMPT_ECHO_OFF() ) { $ans = $SID; ! print STDERR "SID (convers_off): $ans \n" if $Debug; } elsif ($code == PAM_PROMPT_ECHO_ON() ) { $ans = $SID; ! print STDERR "SID (convers_on): $SID \n" if $Debug; } elsif ($code == PAM_ERROR_MSG() ) { $problem = $code } elsif ($code == PAM_TEXT_INFO() ) { } *************** *** 330,351 **** sub handlePAM() { my $aMail_ID = shift; ! my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $aMail_ID, \&local_pam_conversation ); $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); ! print "Problem: $problem\n" if $Debug; return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Authenticate\n" if $Debug; $problem = $sec_handle->pam_authenticate(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Mgmt\n" if $Debug; $problem = $sec_handle->pam_acct_mgmt(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Open_session\n" if $Debug; $problem = $sec_handle->pam_open_session(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "END\n" if $Debug; return 0; } --- 330,351 ---- sub handlePAM() { my $aMail_ID = shift; ! my $sec_handle = new aMail::PAM( "TRex_Storage_EMail", $aMail_ID, \&local_pam_conversation ); $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); ! print STDERR "Problem: $problem\n" if $Debug; return $problem unless ( $problem == PAM_SUCCESS() ); ! print STDERR "Authenticate\n" if $Debug; $problem = $sec_handle->pam_authenticate(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print STDERR "Mgmt\n" if $Debug; $problem = $sec_handle->pam_acct_mgmt(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print STDERR "Open_session\n" if $Debug; $problem = $sec_handle->pam_open_session(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print STDERR "END\n" if $Debug; return 0; } |
From: Victor A. R. <bi...@us...> - 2002-08-29 17:36:37
|
Update of /cvsroot/amail/new_project/program In directory usw-pr-cvs1:/tmp/cvs-serv29385/program Modified Files: folders.pl functions.pl pop.pl Log Message: Folder creation, with TRex service glue, fully integrated to TRex core ... well some minor hacks were done !! Index: folders.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/folders.pl,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** folders.pl 26 Aug 2002 22:53:23 -0000 1.6 --- folders.pl 29 Aug 2002 17:36:34 -0000 1.7 *************** *** 341,361 **** if ( ! defined $handler ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; return; }; my @authMethods = $handler->authMethods; ! if ( notExistsAuthMethod( 'AMAIL', \@authMethods ) ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Authentication failed") . ".</font>"; return; }; ! if( ! $handler->open( { AUTH_METHOD => 'AMAIL', ! AUTH_PARAMETERS => { aMail_ID => $amail_ID, ! SID => $SID } } ) ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; return; }; ! if( ! (my $error = $handler->insert( { OBJECT => 'FOLDER', NAME => $folderName } ) ) ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Invalid authentication method") . ".</font>" --- 341,365 ---- if ( ! defined $handler ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; + &Open_Read(); return; }; my @authMethods = $handler->authMethods; ! if ( notExistsAuthMethod( { AUTH_METHOD => 'AMAIL', ! AUTH_ARRAY => \@authMethods } ) ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Authentication failed") . ".</font>"; + &Open_Read(); return; }; ! if ( $handler->open( { AUTH_METHOD => 'AMAIL', ! AUTH_PARAMETERS => { aMail_ID => $amail_ID, ! SID => $SID } } ) ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; + &Open_Read(); return; }; ! if( my $error = $handler->insert( { OBJECT => 'FOLDER', NAME => $folderName } ) ) { $folder_mess = "<font color='$problem_color'>" . $language->maketext("Invalid authentication method") . ".</font>" *************** *** 371,403 **** if ($error == 4); ! return; }; $handler->close(); ! # if ($_ = Check_folder_name($folder)) { ! # $folder_mess = $_; ! # &Open_Read(); ! # return; ! # } ! ! # my $mailbox_file = "$user_path/folders"; ! # safe_open_update( *MAILBOX{IO}, $mailbox_file); ! # flock(MAILBOX,2) || die "Could not exclusively lock $mailbox_file. $!"; ! # while (($_ = <MAILBOX>) and $_ ne "\n") { ! # push @folders,$_; ! # } ! # foreach (@folders) { ! # if ($_ =~ /^$folder,/) { ! # $folder_mess = "<font color='$problem_color'>" . $language->maketext("You already have a folder by that name") . ".</font>"; ! # close MAILBOX; ! # return; ! # } ! # } ! # my @messages = <MAILBOX>; ! # push @folders, "$folder,0,0,0\n"; ! # seek MAILBOX, 0, 0; ! # print MAILBOX @folders,"\n",@messages; ! # close MAILBOX; $folder_mess = $language->maketext("The folder [_1] has been created", "<b>$folder</b>"). "."; $action = 1; --- 375,385 ---- if ($error == 4); ! &Open_Read(); ! return; }; $handler->close(); ! $folder_mess = $language->maketext("The folder [_1] has been created", "<b>$folder</b>"). "."; $action = 1; Index: functions.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/functions.pl,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** functions.pl 30 May 2002 17:31:09 -0000 1.4 --- functions.pl 29 Aug 2002 17:36:34 -0000 1.5 *************** *** 267,275 **** EOP - - - - - - - --- 267,268 ---- Index: pop.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/pop.pl,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** pop.pl 3 Jun 2002 19:48:19 -0000 1.5 --- pop.pl 29 Aug 2002 17:36:34 -0000 1.6 *************** *** 13,16 **** --- 13,17 ---- use aMail::Sec; use aMail::PAM; + use aMail::Storage; use Fcntl qw(:DEFAULT :flock); *************** *** 167,173 **** my $folders_file = "$db_path/$amail_ID/folders"; ! safe_open_read( *MAILBOX{IO}, $folders_file ); ! flock(MAILBOX,1) or die "Could not lock $db_path/$amail_ID/folders. $!"; my ($folder_info,%folder_info,$found); while (($folder_info = <MAILBOX>) and ($folder_info ne "\n")) { # get folder info --- 168,175 ---- my $folders_file = "$db_path/$amail_ID/folders"; ! $folder_added = 0; ! AGAIN: safe_open_read( *MAILBOX{IO}, $folders_file ); ! flock(MAILBOX,1) or die "Could not lock $folders_file. $!"; my ($folder_info,%folder_info,$found); while (($folder_info = <MAILBOX>) and ($folder_info ne "\n")) { # get folder info *************** *** 180,196 **** @messages = <MAILBOX>; close MAILBOX; ! &Make_sort; ! $folder_added = 0; unless ($found) { # It's a new folder ! if ($_ = Check_folder_name($folder_to)) { # check if new name OK $folder_mess = $_; # if something came back, it's an error message that we pass on &Print_start; return; ! } ! # This looks like a valid folder name ! $folder_info{$folder_to} = [$folder_to,0,0,0]; # create new folder entry ! $folder_list .= "$folder_to,"; $folder_added = 1; } my $keep_message; if ($folder eq 'Search Results') { # if we are showing search results and we move a message to a folder --- 182,218 ---- @messages = <MAILBOX>; close MAILBOX; ! unless ($found) { # It's a new folder ! if ($_ = createNewFolder($folder_to) ) { $folder_mess = $_; # if something came back, it's an error message that we pass on &Print_start; return; ! }; $folder_added = 1; + + ## Inits the previus defined/filled variables + undef $folder_info; + undef %folder_info; + undef $found; + delete @messages[ 0 ... $#messages ]; + $folder_list = ""; + goto AGAIN; ### This reads, again, the folders file, and is + ### just a hack to use createFolder mixed wiht + ### some code that manages the folders file + ### inside the kernel + + # if ($_ = Check_folder_name($folder_to)) { # check if new name OK + # $folder_mess = $_; # if something came back, it's an error message that we pass on + # &Print_start; + # return; + # } + # # This looks like a valid folder name + # $folder_info{$folder_to} = [$folder_to,0,0,0]; # create new folder entry + # $folder_list .= "$folder_to,"; + # $folder_added = 1; } + + &Make_sort; + my $keep_message; if ($folder eq 'Search Results') { # if we are showing search results and we move a message to a folder *************** *** 261,265 **** } ! sub Get_POP { #Get the email --- 283,330 ---- } ! sub createNewFolder ($) { ! my $folderName = shift; ! my $folder_mess; ! my $handler = aMail::Storage->new( 'EMail' ); ! ! if ( ! defined $handler ) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; ! return $folder_mess; ! }; ! ! my @authMethods = $handler->authMethods; ! if ( notExistsAuthMethod( { AUTH_METHOD => 'AMAIL', ! AUTH_ARRAY => \@authMethods } ) ) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Authentication failed") . ".</font>"; ! return $folder_mess; ! }; ! ! if ( $handler->open( { AUTH_METHOD => 'AMAIL', ! AUTH_PARAMETERS => { aMail_ID => $amail_ID, ! SID => $SID } } ) ) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; ! return $folder_mess; ! }; ! ! if( my $error = $handler->insert( { OBJECT => 'FOLDER', NAME => $folderName } ) ) { ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Invalid authentication method") . ".</font>" ! if ($error == 1); ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Authentication failed") . ".</font>" ! if ($error == 2); ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Internal error") . ".</font>" ! if ($error == 3); ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("You already have a folder by that name") . ".</font>" ! if ($error == 4); ! ! return $folder_mess; ! ! }; ! ! $handler->close(); ! } sub Get_POP { #Get the email |
From: Victor A. R. <bi...@us...> - 2002-08-26 22:53:26
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv24488/program/lib/Storage Modified Files: EMail.pm Log Message: Use of TRex::Storage (alpha 1) for folder creation. Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** EMail.pm 23 Aug 2002 18:02:00 -0000 1.7 --- EMail.pm 26 Aug 2002 22:53:23 -0000 1.8 *************** *** 30,34 **** use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/authGetMethods authAuthenticate/; use aMail::PAM; --- 30,34 ---- use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/new authGetMethods authAuthenticate close/; use aMail::PAM; *************** *** 38,42 **** ################ Settings ! my @acceptedMethods = [ 'AMAIL' ]; my $db_path = '/home/bit-man/aMail/initialize_user'; my $Debug = 1; --- 38,44 ---- ################ Settings ! my @acceptedMethods; ! push ( @acceptedMethods,'AMAIL' ); ! my $db_path = '/home/bit-man/aMail/initialize_user'; my $Debug = 1; *************** *** 279,283 **** } ! =pod --- 281,289 ---- } ! sub close() { ! my $self = shift; ! ! return 0; ! } =pod |
From: Victor A. R. <bi...@us...> - 2002-08-26 22:53:26
|
Update of /cvsroot/amail/new_project/docs/devel/Storage In directory usw-pr-cvs1:/tmp/cvs-serv24488/docs/devel/Storage Modified Files: EMail.html Storage.html Log Message: Use of TRex::Storage (alpha 1) for folder creation. Index: EMail.html =================================================================== RCS file: /cvsroot/amail/new_project/docs/devel/Storage/EMail.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** EMail.html 23 Aug 2002 18:02:00 -0000 1.1 --- EMail.html 26 Aug 2002 22:53:22 -0000 1.2 *************** *** 2,6 **** <HTML> <HEAD> ! <TITLE>Developer's arena - aMail::Storage::EMail</TITLE> <LINK REV="made" HREF="mailto:pro...@po..."> </HEAD> --- 2,6 ---- <HTML> <HEAD> ! <TITLE>Developer's arena - TRex::Storage::EMail</TITLE> <LINK REV="made" HREF="mailto:pro...@po..."> </HEAD> *************** *** 16,20 **** <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>aMail::Storage::EMail</H1> </TD> </TR> --- 16,20 ---- <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>TRex::Storage::EMail</H1> </TD> </TR> *************** *** 170,174 **** <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>aMail::Storage::EMail</H1> </TD> </TR> --- 170,174 ---- <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>TRex::Storage::EMail</H1> </TD> </TR> Index: Storage.html =================================================================== RCS file: /cvsroot/amail/new_project/docs/devel/Storage/Storage.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Storage.html 23 Aug 2002 18:02:00 -0000 1.1 --- Storage.html 26 Aug 2002 22:53:22 -0000 1.2 *************** *** 2,6 **** <HTML> <HEAD> ! <TITLE>Developer's arena - aMail::Storage</TITLE> <LINK REV="made" HREF="mailto:pro...@po..."> </HEAD> --- 2,6 ---- <HTML> <HEAD> ! <TITLE>Developer's arena - TRex::Storage</TITLE> <LINK REV="made" HREF="mailto:pro...@po..."> </HEAD> *************** *** 16,20 **** <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>aMail::Storage</H1> </TD> </TR> --- 16,20 ---- <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>TRex::Storage</H1> </TD> </TR> *************** *** 37,41 **** --- 37,43 ---- <LI><A HREF="#new($)"><CODE>new($)</CODE></A></LI> <LI><A HREF="#authmethods()"><CODE>authMethods()</CODE></A></LI> + <LI><A HREF="#notexistsauthmethod">notExistsAuthMethod</A></LI> <LI><A HREF="#open(%)"><CODE>open(%)</CODE></A></LI> + <LI><A HREF="#insert(%)"><CODE>insert(%)</CODE></A></LI> </UL> *************** *** 128,132 **** die "Crashhhh new() !!!\n" if ( ! defined $handler );</PRE> <P> ! <H2><A NAME="authmethods()"><CODE>authMethods()</CODE></A></H2> <P>Each class ID can be implemented using different technologies (relational database, LDAP repository, etc.), and using distinct authentication schemas.</P> --- 130,134 ---- die "Crashhhh new() !!!\n" if ( ! defined $handler );</PRE> <P> ! <H2><A NAME="authmethods()"><A HREF="#item_authMethods"><CODE>authMethods()</CODE></A></A></H2> <P>Each class ID can be implemented using different technologies (relational database, LDAP repository, etc.), and using distinct authentication schemas.</P> *************** *** 153,156 **** --- 155,200 ---- my @authMethods = authMethods();</PRE> <P> + <H2><A NAME="notexistsauthmethod">notExistsAuthMethod</A></H2> + <P>Checks if the passed authentication method exists in the array obtained + via <A HREF="#item_authMethods"><CODE>authMethods()</CODE></A> call.</P> + <P>The parameters are passed in a hash, and the key values are :</P> + <UL> + <LI><STRONG><A NAME="item_AUTH_METHOD_%3A_Authenticated_method_to_search_for">AUTH_METHOD : Authenticated method to search for</A></STRONG><BR> + + <LI><STRONG><A NAME="item_authMethods">AUTH_ARRAY : a reference to the authentication array obtained via <CODE>authMethods()</CODE> call.</A></STRONG><BR> + + </UL> + <P>The return values are 1 (one) on failure and o (zero) on success.</P> + <P>Usage :</P> + <PRE> + use aMail::Storage;</PRE> + <PRE> + my $method = "AMAIL"; + </PRE> + <PRE> + + ### ... handler obtained via new() ... + ### ... auth methods obtained via authMethods() ..</PRE> + <PRE> + + die "$method auth. schema not supported" + if notExistsAuthMethod( { AUTH_METHOD => $method, + AUTH_ARRAY => \@authMethods });</PRE> + <PRE> + + =cut</PRE> + <P>sub notExistsAuthMethod { + my $input = shift; + my $authMethods = $$input{'AUTH_ARRAY'};</P> + <PRE> + for( my $i=0; $i < scalar @$authMethods; $i++ ) { + return 0 if ( $$authMethods[$i] eq $$input{'AUTH_METHOD'} ); + }; + </PRE> + <PRE> + + return 1; ### Sorry, not found :-( + }</PRE> + <P> <H2><A NAME="open(%)"><CODE>open(%)</CODE></A></H2> <P>Opens a connection to the desired storage class.</P> *************** *** 183,186 **** --- 227,310 ---- AUTH_PARAMETERS => { aMail_ID => 'bit-man', SID => '331868645' } } );</PRE> + <P> + <H2><A NAME="insert(%)"><CODE>insert(%)</CODE></A></H2> + <P>Inserts an object in the data store.</P> + <P>The parameters are passed in a hash, and the key values corresopnd + to the desired parameters to be passed:</P> + <UL> + <LI><STRONG>AUTH_METHOD : Authenticated method (described previously)</STRONG><BR> + + <LI><STRONG>AUTH_PARAMETERS : hash containing the authentication credentials. + In case of NULL is an empty hash, if USER_PWD the keys USER and PASSWORD + must be passed, and if AMAIL the keys aMail_ID and SID will be used.</STRONG><BR> + + The the code returned is the corresponding to each storage class. + <P></P></UL> + <P>Usage :</P> + <PRE> + use aMail::Storage;</PRE> + <PRE> + my $folder = "myFolder"; + </PRE> + <PRE> + + ### ... handler obtained via new() ... + ### ... auth methods obtained via authMethods() .. + ### ... authentication via open() ...</PRE> + <PRE> + + die "Can't insert folder $folder" + unless ! $handler->insert( { OBJECT => 'FOLDER', + NAME => $folder ] );</PRE> + <PRE> + + =cut</PRE> + <P>sub <CODE>insert()</CODE> { + my $self = shift; + my $input = shift; + </P> + <PRE> + + my @param; + push @param, $self->{'aMail_ID'}; + push @param, $self->{'SID'};</PRE> + <PRE> + + $_ = $$input{'OBJECT'};</PRE> + <PRE> + /$FOLDER/ && ($self->{'CLID'} eq 'EMail') && do { + print "Folder creation\n"; + return $self->{'SOAPhandler'}->folderCreate( $$input{'NAME'}, + $self->{'authMethod'}, @param )->result; + }; + </PRE> + <PRE> + + return 999; ## Sorry, invalid operation + }</PRE> + <P>## + ## Miscellaneous functions (some internal, some exported) + ##</P> + <P>############# ConnectToWebService ########################################## + sub <CODE>ConnectToWebService($)</CODE> { + my $module = shift; + my $HOST = 'localhost'; + my $PORT = 12345;</P> + <PRE> + print "Class ID: $module \n"; + </PRE> + <PRE> + + my $handler = SOAP::Lite + -> uri('aMail/Storage/' . $module) + -> proxy('<A HREF="http://">http://</A>'.$HOST .':'. $PORT .'/') + -> on_fault(sub { my($soap, $res) = @_; + die ref $res ? $res->faultstring : $soap->transport->status, "\n"; + });</PRE> + <PRE> + + return $handler; + } + 1;</PRE> <HR> *************** *** 193,197 **** <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>aMail::Storage</H1> </TD> </TR> --- 317,321 ---- <TD ALIGN="center"> <H1>Developer's arena</H1> ! <H1>TRex::Storage</H1> </TD> </TR> |
From: Victor A. R. <bi...@us...> - 2002-08-26 22:53:26
|
Update of /cvsroot/amail/new_project/program/lib/L10N In directory usw-pr-cvs1:/tmp/cvs-serv24488/program/lib/L10N Modified Files: en.pm es.pm nl.pm Log Message: Use of TRex::Storage (alpha 1) for folder creation. Index: en.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/L10N/en.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** en.pm 31 Jul 2002 17:46:32 -0000 1.7 --- en.pm 26 Aug 2002 22:53:23 -0000 1.8 *************** *** 9,12 **** --- 9,25 ---- %Lexicon = ( + + "Internal error" + => "Internal error", + + "Invalid authentication method" + => "Invalid authentication method", + + "Authentication failed" + => "Authentication failed", + + "Failed to contact storage device" + => "Failed to contact storage device", + "A session cannot be established" => "A session cannot be established", Index: es.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/L10N/es.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** es.pm 31 Jul 2002 17:46:32 -0000 1.7 --- es.pm 26 Aug 2002 22:53:23 -0000 1.8 *************** *** 8,11 **** --- 8,24 ---- %Lexicon = ( + + "Internal error" + => "Error interno", + + "Invalid authentication method" + => "Método de autenticación inválido", + + "Authentication failed" + => "Fallo de autehticación", + + "Failed to contact storage device" + => "Error al conectarse al dispositivo de almacenamiento", + "A session cannot be established" => "No puede establecerse una sesión", Index: nl.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/L10N/nl.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** nl.pm 31 Jul 2002 17:46:32 -0000 1.7 --- nl.pm 26 Aug 2002 22:53:23 -0000 1.8 *************** *** 9,12 **** --- 9,25 ---- %Lexicon = ( + + "Internal error" + => "Internal error", + + "Invalid authentication method" + => "Invalid authentication method", + + "Authentication failed" + => "Authentication failed", + + "Failed to contact storage device" + => "Failed to contact storage device", + "A session cannot be established" => "A session cannot be established", |
From: Victor A. R. <bi...@us...> - 2002-08-26 22:53:26
|
Update of /cvsroot/amail/new_project/program/lib In directory usw-pr-cvs1:/tmp/cvs-serv24488/program/lib Modified Files: Common.pm Storage.pm Log Message: Use of TRex::Storage (alpha 1) for folder creation. Index: Common.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Common.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** Common.pm 24 Aug 2002 17:52:29 -0000 1.7 --- Common.pm 26 Aug 2002 22:53:23 -0000 1.8 *************** *** 34,37 **** --- 34,38 ---- Get_head Set_location Server_time Get_language FileCopy Get_spellpath Get_language_list Get_file_list + existsAuthMethod Get_UIDL_list in_uidl_list Save_UIDL_list Delete_uidl_list_from_server Get_UIDL_Trash_list *************** *** 119,123 **** my $skin_URL = "http://$localhost/aMail/media/skins"; ## Skins my $dir_URL = "http://$localhost/cgi-bin/aMail"; ## cgi-bin (Perl scripts) ! my $db_path = "/home/bit-man/aMail/initialize_user"; ## User data my $img_URL = "http://$localhost/aMail/media/images"; ## Images base (modified ## on language basis) --- 120,124 ---- my $skin_URL = "http://$localhost/aMail/media/skins"; ## Skins my $dir_URL = "http://$localhost/cgi-bin/aMail"; ## cgi-bin (Perl scripts) ! my $db_path = "/home/bit-man/TRex/initialize_user"; ## User data my $img_URL = "http://$localhost/aMail/media/images"; ## Images base (modified ## on language basis) *************** *** 862,865 **** --- 863,867 ---- } + ######################## UIDL associated routines ################# Index: Storage.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** Storage.pm 23 Aug 2002 18:02:00 -0000 1.7 --- Storage.pm 26 Aug 2002 22:53:23 -0000 1.8 *************** *** 97,101 **** use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/new authMethods open close insert/; use SOAP::Lite; --- 97,102 ---- use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/new authMethods open insert ! notExistsAuthMethod/; use SOAP::Lite; *************** *** 203,209 **** my @auth_methods = $handler->authGetMethods()->result; ! return @$auth_methods; } =pod --- 204,260 ---- my @auth_methods = $handler->authGetMethods()->result; ! return @auth_methods; } + + =pod + + =head2 notExistsAuthMethod + + Checks if the passed authentication method exists in the array obtained + via authMethods() call. + + The parameters are passed in a hash, and the key values are : + + =over 2 + + =item * + AUTH_METHOD : Authenticated method to search for + + =item * + AUTH_ARRAY : a reference to the authentication array obtained via authMethods() call. + + =back + + The return values are 1 (one) on failure and o (zero) on success. + + Usage : + + use aMail::Storage; + + my $method = "AMAIL"; + + ### ... handler obtained via new() ... + ### ... auth methods obtained via authMethods() .. + + die "$method auth. schema not supported" + if notExistsAuthMethod( { AUTH_METHOD => $method, + AUTH_ARRAY => \@authMethods }); + + + =cut + + sub notExistsAuthMethod { + my $input = shift; + my $authMethods = $$input{'AUTH_ARRAY'}; + + for( my $i=0; $i < scalar @$authMethods; $i++ ) { + return 0 if ( $$authMethods[$i] eq $$input{'AUTH_METHOD'} ); + }; + + return 1; ### Sorry, not found :-( + } + + =pod *************** *** 270,273 **** --- 321,364 ---- + =pod + + =head2 insert(%) + + Inserts an object in the data store. + + The parameters are passed in a hash, and the key values corresopnd + to the desired parameters to be passed: + + =over 2 + + =item * + AUTH_METHOD : Authenticated method (described previously) + + =item * + AUTH_PARAMETERS : hash containing the authentication credentials. + In case of NULL is an empty hash, if USER_PWD the keys USER and PASSWORD + must be passed, and if AMAIL the keys aMail_ID and SID will be used. + + The the code returned is the corresponding to each storage class. + + =back + + Usage : + + use aMail::Storage; + + my $folder = "myFolder"; + + ### ... handler obtained via new() ... + ### ... auth methods obtained via authMethods() .. + ### ... authentication via open() ... + + die "Can't insert folder $folder" + unless ! $handler->insert( { OBJECT => 'FOLDER', + NAME => $folder ] ); + + + =cut + sub insert() { my $self = shift; *************** *** 288,291 **** --- 379,388 ---- return 999; ## Sorry, invalid operation } + + + ## + ## Miscellaneous functions (some internal, some exported) + ## + |
From: Victor A. R. <bi...@us...> - 2002-08-26 22:53:26
|
Update of /cvsroot/amail/new_project/program In directory usw-pr-cvs1:/tmp/cvs-serv24488/program Modified Files: folders.pl Log Message: Use of TRex::Storage (alpha 1) for folder creation. Index: folders.pl =================================================================== RCS file: /cvsroot/amail/new_project/program/folders.pl,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** folders.pl 3 Jun 2002 19:48:19 -0000 1.5 --- folders.pl 26 Aug 2002 22:53:23 -0000 1.6 *************** *** 10,13 **** --- 10,14 ---- use aMail::L10N; use aMail::PAM; + use aMail::Storage; use Fcntl qw(:DEFAULT :flock); # used for locking files *************** *** 334,364 **** sub NewFolder { ! if ($_ = Check_folder_name($folder)) { ! $folder_mess = $_; ! &Open_Read(); return; ! } ! my $mailbox_file = "$user_path/folders"; ! safe_open_update( *MAILBOX{IO}, $mailbox_file); ! flock(MAILBOX,2) || die "Could not exclusively lock $mailbox_file. $!"; ! while (($_ = <MAILBOX>) and $_ ne "\n") { ! push @folders,$_; ! } ! foreach (@folders) { ! if ($_ =~ /^$folder,/) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("You already have a folder by that name") . ".</font>"; ! close MAILBOX; ! return; ! } ! } ! my @messages = <MAILBOX>; ! push @folders, "$folder,0,0,0\n"; ! seek MAILBOX, 0, 0; ! print MAILBOX @folders,"\n",@messages; ! close MAILBOX; $folder_mess = $language->maketext("The folder [_1] has been created", "<b>$folder</b>"). "."; $action = 1; } --- 335,406 ---- sub NewFolder { + $folderName = $folder; + + my $handler = aMail::Storage->new( 'EMail' ); ! if ( ! defined $handler ) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; return; ! }; ! ! my @authMethods = $handler->authMethods; ! if ( notExistsAuthMethod( 'AMAIL', \@authMethods ) ) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Authentication failed") . ".</font>"; ! return; ! }; ! ! if( ! $handler->open( { AUTH_METHOD => 'AMAIL', ! AUTH_PARAMETERS => { aMail_ID => $amail_ID, ! SID => $SID } } ) ) { ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Failed to contact storage device") . ".</font>"; ! return; ! }; ! if( ! (my $error = $handler->insert( { OBJECT => 'FOLDER', NAME => $folderName } ) ) ) { ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Invalid authentication method") . ".</font>" ! if ($error == 1); ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Authentication failed") . ".</font>" ! if ($error == 2); ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("Internal error") . ".</font>" ! if ($error == 3); ! ! $folder_mess = "<font color='$problem_color'>" . $language->maketext("You already have a folder by that name") . ".</font>" ! if ($error == 4); ! ! return; ! ! }; ! ! $handler->close(); ! # if ($_ = Check_folder_name($folder)) { ! # $folder_mess = $_; ! # &Open_Read(); ! # return; ! # } ! ! # my $mailbox_file = "$user_path/folders"; ! # safe_open_update( *MAILBOX{IO}, $mailbox_file); ! # flock(MAILBOX,2) || die "Could not exclusively lock $mailbox_file. $!"; ! # while (($_ = <MAILBOX>) and $_ ne "\n") { ! # push @folders,$_; ! # } ! # foreach (@folders) { ! # if ($_ =~ /^$folder,/) { ! # $folder_mess = "<font color='$problem_color'>" . $language->maketext("You already have a folder by that name") . ".</font>"; ! # close MAILBOX; ! # return; ! # } ! # } ! # my @messages = <MAILBOX>; ! # push @folders, "$folder,0,0,0\n"; ! # seek MAILBOX, 0, 0; ! # print MAILBOX @folders,"\n",@messages; ! # close MAILBOX; $folder_mess = $language->maketext("The folder [_1] has been created", "<b>$folder</b>"). "."; $action = 1; + &Open_Read(); ### Fills the @folders array } |
From: Victor A. R. <bi...@us...> - 2002-08-24 17:52:32
|
Update of /cvsroot/amail/new_project/program/lib In directory usw-pr-cvs1:/tmp/cvs-serv23128/program/lib Modified Files: Common.pm Log Message: Minimum Common.pm update: host IP addres is taken from environment variable set by CGI interface Index: Common.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Common.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** Common.pm 31 Jul 2002 17:46:32 -0000 1.6 --- Common.pm 24 Aug 2002 17:52:29 -0000 1.7 *************** *** 110,122 **** ### ### The next variables define the location for all the file components ### ! my $man_URL = "http://127.0.0.1/aMail/man"; ## Manual pages ! my $skin_URL = "http://127.0.0.1/aMail/media/skins"; ## Skins ! my $dir_URL = "http://127.0.0.1/cgi-bin/aMail"; ## cgi-bin (Perl scripts) my $db_path = "/home/bit-man/aMail/initialize_user"; ## User data ! my $img_URL = "http://127.0.0.1/aMail/media/images"; ## Images base (modified ## on language basis) --- 110,124 ---- + my $localhost = $ENV{'SERVER_ADDR'}; # This host !! + ### ### The next variables define the location for all the file components ### ! my $man_URL = "http://$localhost/aMail/man"; ## Manual pages ! my $skin_URL = "http://$localhost/aMail/media/skins"; ## Skins ! my $dir_URL = "http://$localhost/cgi-bin/aMail"; ## cgi-bin (Perl scripts) my $db_path = "/home/bit-man/aMail/initialize_user"; ## User data ! my $img_URL = "http://$localhost/aMail/media/images"; ## Images base (modified ## on language basis) *************** *** 131,135 **** # ********************* Remove above testing **************************** ! my $lang = 'en'; # Preferred system language #my $spellpath = ""; # OS path to ispell/aspell null disables spelling feature. my %spell_dictionary = ( # Dictionaries for ispell --- 133,137 ---- # ********************* Remove above testing **************************** ! my $lang = 'es'; # Preferred system language #my $spellpath = ""; # OS path to ispell/aspell null disables spelling feature. my %spell_dictionary = ( # Dictionaries for ispell |
From: Victor A. R. <bi...@us...> - 2002-08-23 18:02:03
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv15045/program/lib/Storage Modified Files: EMail.pm Log Message: Alpha 1 stage for aMail::Storage and aMail::Storage::EMail Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** EMail.pm 23 Aug 2002 00:02:49 -0000 1.6 --- EMail.pm 23 Aug 2002 18:02:00 -0000 1.7 *************** *** 39,43 **** ################ Settings my @acceptedMethods = [ 'AMAIL' ]; ! my $db_path = '/home/bit-man/initialize_user'; ######################################### --- 39,44 ---- ################ Settings my @acceptedMethods = [ 'AMAIL' ]; ! my $db_path = '/home/bit-man/aMail/initialize_user'; ! my $Debug = 1; ######################################### *************** *** 68,71 **** --- 69,74 ---- my $name = "myNewFolder"; + ### ... handler craetion via new() ... + die "Crash !!!!\n" unless $handler->authAuthenticate( $authMethod, $aMail_ID, $SID)->result; *************** *** 75,78 **** --- 78,82 ---- Note: all methods return 0 (zero) on success, and not zero on error. + =cut *************** *** 88,92 **** use SOAP::Lite; ! my @auth_methods = $handler->authGetMethods()->result; --- 92,98 ---- use SOAP::Lite; ! ! ### ... handler craetion via new() ... ! my @auth_methods = $handler->authGetMethods()->result; *************** *** 113,119 **** my $pass = 'secret'; ! die "Can't authenticate !!!!\n" ! unless $handler->authAuthenticate( $authMethod, $user, $pass)->result; =cut --- 119,126 ---- my $pass = 'secret'; ! ### ... handler craetion via new() ... + die "Can't authenticate !!!!\n" + unless ! $handler->authAuthenticate( $authMethod, $user, $pass)->result; =cut *************** *** 124,128 **** my @param = @_; ! print "Auth. Method: $authMethod \n"; $_ = $authMethod; --- 131,135 ---- my @param = @_; ! print "Auth. Method: $authMethod \n" if $Debug; $_ = $authMethod; *************** *** 136,177 **** sub folderCreate() { my $self = shift; my $folder = shift; my @param = @_; - $SID = $param[1]; - my $aMail_ID = $param[0]; ! return 0 if ( ! handlePAM( $aMail_ID ) ); ! print "Folder creation: $folder\n"; ! ########################################### ! my $user_path = "$db_path/$aMail_ID"; ! return 0 if ( ! Check_folder_name($folder) ); ! ! ! my $mailbox_file = "$user_path/folders"; ! safe_open_update( *MAILBOX{IO}, $mailbox_file); ! flock(MAILBOX,2) || return 2; ! while (($_ = <MAILBOX>) and $_ ne "\n") { ! push @folders,$_; ! } ! foreach (@folders) { ! if ($_ =~ /^$folder,/) { ! close MAILBOX; ! return 1; ! } ! } ! my @messages = <MAILBOX>; ! push @folders, "$folder,0,0,0\n"; ! seek MAILBOX, 0, 0; ! print MAILBOX @folders,"\n",@messages; ! close MAILBOX; ! ! ########################################### ! return 1; } --- 143,232 ---- + =head2 folderCreate + + Creates a folder + + Returns : + + =over 4 + + =item * + 1 if unsupported uthentication method + + =item * + 2 if authentication failed + + =item * + 3 if the folder file can't be locked + + =item * + 4 if the folder already exists + + =back + + Usage: + + use SOAP::Lite; + + my $name = 'myFolder'; + + ### ... handler craetion via new() ... + ### ... authentication via authAuthenticate() ... + + die "Can't create folder $name !!!!\n" + unless ! $handler->folderCreate( $name, + $authMethod'}, @authParams )->result; + + =cut + sub folderCreate() { my $self = shift; my $folder = shift; + my $authMethod = shift; my @param = @_; ! $_ = $authMethod; ! /$AMAIL/ && do { ! $SID = $param[1]; ! my $aMail_ID = $param[0]; ! print "===================== folderCreate\n" if $Debug; ! print "aMail ID: $aMail_ID\n" if $Debug; ! return 2 unless ! handlePAM( $aMail_ID ); ! print "Folder creation: $folder\n" if $Debug; ! ########################################### ! my $user_path = "$db_path/$aMail_ID"; ! my $mailbox_file = "$user_path/folders"; ! ! safe_open_update( *MAILBOX{IO}, $mailbox_file); ! flock(MAILBOX,2) || return 3; ! print "Folder file locked.\n" if $Debug; ! ! while (($_ = <MAILBOX>) and $_ ne "\n") { ! push @folders,$_; ! } ! foreach (@folders) { ! if ($_ =~ /^$folder,/) { ! close MAILBOX; ! return 4; ## Folder already exists ! } ! } ! ! ## Folder creation in folders file ! my @messages = <MAILBOX>; ! push @folders, "$folder,0,0,0\n"; ! seek MAILBOX, 0, 0; ! print MAILBOX @folders,"\n",@messages; ! close MAILBOX; ! ! print "Folder created !!!\n" if $Debug; ! ### Successfull completion ! return 0; ! }; ! ! return 1; ### Sorry, invalid auth method } *************** *** 228,232 **** =pod ! =head2 pam_conversation() Default conversation routine used in PAM --- 283,287 ---- =pod ! =head2 local_pam_conversation() Default conversation routine used in PAM *************** *** 241,245 **** =cut ! sub pam_conversation { my @res; --- 296,300 ---- =cut ! sub local_pam_conversation { my @res; *************** *** 252,259 **** if ($code == PAM_PROMPT_ECHO_OFF() ) { $ans = $SID; ! print "SID (convers_off): $ans \n"; } elsif ($code == PAM_PROMPT_ECHO_ON() ) { $ans = $SID; ! print "SID (convers_on): $SID \n"; } elsif ($code == PAM_ERROR_MSG() ) { $problem = $code } elsif ($code == PAM_TEXT_INFO() ) { } --- 307,314 ---- if ($code == PAM_PROMPT_ECHO_OFF() ) { $ans = $SID; ! print "SID (convers_off): $ans \n" if $Debug; } elsif ($code == PAM_PROMPT_ECHO_ON() ) { $ans = $SID; ! print "SID (convers_on): $SID \n" if $Debug; } elsif ($code == PAM_ERROR_MSG() ) { $problem = $code } elsif ($code == PAM_TEXT_INFO() ) { } *************** *** 269,290 **** sub handlePAM() { my $aMail_ID = shift; ! my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $aMail_ID, \&pam_conversation ); $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); ! print "Problem: $problem\n"; return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Authenticate\n"; $problem = $sec_handle->pam_authenticate(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Mgmt\n"; $problem = $sec_handle->pam_acct_mgmt(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Open_session\n"; $problem = $sec_handle->pam_open_session(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "END\n"; return 0; } --- 324,345 ---- sub handlePAM() { my $aMail_ID = shift; ! my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $aMail_ID, \&local_pam_conversation ); $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); ! print "Problem: $problem\n" if $Debug; return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Authenticate\n" if $Debug; $problem = $sec_handle->pam_authenticate(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Mgmt\n" if $Debug; $problem = $sec_handle->pam_acct_mgmt(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "Open_session\n" if $Debug; $problem = $sec_handle->pam_open_session(); return $problem unless ( $problem == PAM_SUCCESS() ); ! print "END\n" if $Debug; return 0; } |
From: Victor A. R. <bi...@us...> - 2002-08-23 18:02:03
|
Update of /cvsroot/amail/new_project/program/lib In directory usw-pr-cvs1:/tmp/cvs-serv15045/program/lib Modified Files: Storage.pm Log Message: Alpha 1 stage for aMail::Storage and aMail::Storage::EMail Index: Storage.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** Storage.pm 23 Aug 2002 00:02:49 -0000 1.6 --- Storage.pm 23 Aug 2002 18:02:00 -0000 1.7 *************** *** 57,60 **** --- 57,62 ---- update: updates the passed data into the data storage + =back + Additionally the storage is separated into distinct storage classes, each one representing a conceptually different stored data but that *************** *** 76,79 **** --- 78,82 ---- Profile: User profile storage + =back =head1 Implementation details *************** *** 113,116 **** --- 116,122 ---- ## from each implementation and this makes the core code a bit ## module dependent + ## + ## 3.- The security checking for folder name, etc. will be reatined int + ## the core =pod *************** *** 129,132 **** --- 135,139 ---- my $handler = aMail::Storage->new( 'EMail' ); die "Crashhhh new() !!!\n" if ( ! defined $handler ); + =cut *************** *** 176,179 **** --- 183,188 ---- AMAIL: Old aMail authentication schema + =back + Usage : *************** *** 184,187 **** --- 193,197 ---- my @authMethods = authMethods(); + =cut *************** *** 193,203 **** my @auth_methods = $handler->authGetMethods()->result; ! if ( ! @auth_methods ) { ! $main::Error = 1; ! $main::ErrorText = "No athentication methods available"; ! return undef; ! } else { ! return @$auth_methods; ! } } --- 203,207 ---- my @auth_methods = $handler->authGetMethods()->result; ! return @$auth_methods; } *************** *** 223,226 **** --- 227,232 ---- The the code returned is the corresponding to each storage class. + =back + Usage : *************** *** 260,264 **** my $self = shift; ! return = $self->{'SOAPhandler'}->close()->result; } --- 266,270 ---- my $self = shift; ! return $self->{'SOAPhandler'}->close()->result; } *************** *** 267,271 **** my $self = shift; my $input = shift; - my $return = 'VIRGIN'; my @param; --- 273,276 ---- *************** *** 273,293 **** push @param, $self->{'SID'}; - my $handler = $self->{'SOAPhandler'}; $_ = $$input{'OBJECT'}; /$FOLDER/ && ($self->{'CLID'} eq 'EMail') && do { print "Folder creation\n"; ! $return = $handler->folderCreate( $$input{'NAME'}, @param )->result; ! return 1; }; ! if ( $return = 'VIRGIN' ) { ! $main::Error = 3; ! $main::ErrorText = "Can't execute insert for aMail::Store::" . $self->{'CLID'}; ! return undef; ! } else { ! return $close_return; ! } ! } --- 278,290 ---- push @param, $self->{'SID'}; $_ = $$input{'OBJECT'}; /$FOLDER/ && ($self->{'CLID'} eq 'EMail') && do { print "Folder creation\n"; ! return $self->{'SOAPhandler'}->folderCreate( $$input{'NAME'}, ! $self->{'authMethod'}, @param )->result; }; ! return 999; ## Sorry, invalid operation } |
From: Victor A. R. <bi...@us...> - 2002-08-23 18:02:03
|
Update of /cvsroot/amail/new_project/docs/devel/Storage In directory usw-pr-cvs1:/tmp/cvs-serv15045/docs/devel/Storage Added Files: EMail.html Storage.html Log Message: Alpha 1 stage for aMail::Storage and aMail::Storage::EMail --- NEW FILE --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Developer's arena - aMail::Storage::EMail</TITLE> <LINK REV="made" HREF="mailto:pro...@po..."> </HEAD> <!-- Background white, links blue (unvisited), navy (visited), red (active) --> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#000080" ALINK="#FF0000"> <TABLE WIDTH="80%"> <TR> <TD> <IMG SRC="../doc/media/logo.gif" ALT="[aMail documentation]"> </TD> <TD ALIGN="center"> <H1>Developer's arena</H1> <H1>aMail::Storage::EMail</H1> </TD> </TR> </TABLE> <A NAME="__index__"></A> <!-- INDEX BEGIN --> <!-- <UL> <LI><A HREF="#name">NAME</A></LI> <LI><A HREF="#synopsis">SYNOPSIS</A></LI> <LI><A HREF="#description">DESCRIPTION</A></LI> <LI><A HREF="#methods">METHODS</A></LI> <UL> <LI><A HREF="#common usage">Common usage</A></LI> <LI><A HREF="#authgetmethods">authGetMethods</A></LI> <LI><A HREF="#authauthenticate">authAuthenticate</A></LI> <LI><A HREF="#foldercreate">folderCreate</A></LI> <LI><A HREF="#local_pam_conversation()"><CODE>local_pam_conversation()</CODE></A></LI> </UL> </UL> --> <!-- INDEX END --> <P> <HR> <H1><A NAME="name">NAME</A></H1> <P>aMail::Storage::EMail - provides e-mail storage services</P> <P> <HR> <H1><A NAME="synopsis">SYNOPSIS</A></H1> <PRE> use SOAP::Lite;</PRE> <PRE> my $handler = SOAP::Lite -> uri('aMail/Storage/EMail') -> proxy('<A HREF="http://">http://</A>'.$HOST .':'. $PORT .'/') -> on_fault(sub { my($soap, $res) = @_; die ref $res ? $res->faultstring : $soap->transport->status, "\n"; });</PRE> <P> <HR> <H1><A NAME="description">DESCRIPTION</A></H1> <P>Basically allows the e-mail store in a flat folder based structure, that doesn't allow the creation of folders containing folders, where each e-mail must be asociated (or stored into) an existing folder.</P> <P> <HR> <H1><A NAME="methods">METHODS</A></H1> <P> <H2><A NAME="common usage">Common usage</A></H2> <P>All methods, except authGetMethods, expect the parameters ``authentication method'' (authMethod), and the authentication parameters. It should be enough to pass them once, but no persistence mechanism has been implemented (yet !).</P> <P>Usage:</P> <PRE> use aMail::Storage::EMail;</PRE> <PRE> my $authMethod = 'AMAIL'; my $aMail_ID = 'bit-man'; my $SID = obtainedThroguhPAM(); my $name = "myNewFolder";</PRE> <PRE> ### ... handler craetion via new() ... </PRE> <PRE> die "Crash !!!!\n" unless $handler->authAuthenticate( $authMethod, $aMail_ID, $SID)->result;</PRE> <PRE> die "Can't create folder $name\n" unless $handler->folderCreate( $name, $authMethod, $aMail_ID, $SID)->result;</PRE> <P>Note: all methods return 0 (zero) on success, and not zero on error.</P> <P> <H2><A NAME="authgetmethods">authGetMethods</A></H2> <P>Return the supported authentication methods as an array.</P> <P>Usage:</P> <PRE> use SOAP::Lite; </PRE> <PRE> ### ... handler craetion via new() ...</PRE> <PRE> my @auth_methods = $handler->authGetMethods()->result;</PRE> <P> <H2><A NAME="authauthenticate">authAuthenticate</A></H2> <P>Return a PAM_* error (see aMail::PAM module) in case of error, if AMAIL authentication is used. Zero in case of success.</P> <P>Returns 999 if an unsupported authentication method is passed.</P> <P>Usage:</P> <PRE> use SOAP::Lite;</PRE> <PRE> my $authMethod = 'USR_PWD'; my $user = 'bit-man'; my $pass = 'secret';</PRE> <PRE> ### ... handler craetion via new() ...</PRE> <PRE> die "Can't authenticate !!!!\n" unless ! $handler->authAuthenticate( $authMethod, $user, $pass)->result;</PRE> <P> <H2><A NAME="foldercreate">folderCreate</A></H2> <P>Creates a folder</P> <P>Returns :</P> <UL> <LI><STRONG><A NAME="item_1_if_unsupported_uthentication_method">1 if unsupported uthentication method</A></STRONG><BR> <LI><STRONG><A NAME="item_2_if_authentication_failed">2 if authentication failed</A></STRONG><BR> <LI><STRONG><A NAME="item_3_if_the_folder_file_can%27t_be_locked">3 if the folder file can't be locked</A></STRONG><BR> <LI><STRONG><A NAME="item_4_if_the_folder_already_exists">4 if the folder already exists</A></STRONG><BR> </UL> <P>Usage:</P> <PRE> use SOAP::Lite;</PRE> <PRE> my $name = 'myFolder';</PRE> <PRE> ### ... handler craetion via new() ... ### ... authentication via authAuthenticate() ...</PRE> <PRE> die "Can't create folder $name !!!!\n" unless ! $handler->folderCreate( $name, $authMethod'}, @authParams )->result;</PRE> <P> <H2><A NAME="local_pam_conversation()"><CODE>local_pam_conversation()</CODE></A></H2> <P>Default conversation routine used in PAM</P> <P>Usage:</P> <PRE> * in case PAM asks for a credential, message PAM_PROMPT_ECHO_OFF() or PAM_PROMPT_ECHO_ON(), the value stored in the $SID scalar is passed to PAM </PRE> <PRE> * in case a PAM sends a PAM_ERROR_MSG(), it is stored in $problem</PRE> <HR> <TABLE WIDTH="80%"> <TR> <TD> <IMG SRC="../doc/media/logo.gif" ALT="[aMail documentation]"> </TD> <TD ALIGN="center"> <H1>Developer's arena</H1> <H1>aMail::Storage::EMail</H1> </TD> </TR> </TABLE> </HTML> --- NEW FILE --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Developer's arena - aMail::Storage</TITLE> <LINK REV="made" HREF="mailto:pro...@po..."> </HEAD> <!-- Background white, links blue (unvisited), navy (visited), red (active) --> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#000080" ALINK="#FF0000"> <TABLE WIDTH="80%"> <TR> <TD> <IMG SRC="../doc/media/logo.gif" ALT="[aMail documentation]"> </TD> <TD ALIGN="center"> <H1>Developer's arena</H1> <H1>aMail::Storage</H1> </TD> </TR> </TABLE> <A NAME="__index__"></A> <!-- INDEX BEGIN --> <!-- <UL> <LI><A HREF="#name">NAME</A></LI> <LI><A HREF="#synopsis">SYNOPSIS</A></LI> <LI><A HREF="#description">DESCRIPTION</A></LI> <LI><A HREF="#first sight">First sight</A></LI> <LI><A HREF="#implementation details">Implementation details</A></LI> <LI><A HREF="#methods">METHODS</A></LI> <UL> <LI><A HREF="#new($)"><CODE>new($)</CODE></A></LI> <LI><A HREF="#authmethods()"><CODE>authMethods()</CODE></A></LI> <LI><A HREF="#open(%)"><CODE>open(%)</CODE></A></LI> </UL> </UL> --> <!-- INDEX END --> <P> <HR> <H1><A NAME="name">NAME</A></H1> <P>aMail::Storage - provides storage management services</P> <P> <HR> <H1><A NAME="synopsis">SYNOPSIS</A></H1> <PRE> use aMail::Storage;</PRE> <P> <HR> <H1><A NAME="description">DESCRIPTION</A></H1> <P>The data storage module is an abstraction presented to the core (or anyone interfacing with it) to manage the storage of any persistent data storage. This one must be emphasized, mainly because all volatile info would be stored in memory storage (accessed through variables), and not through the Data Storage. Albeith the generic name is retained for simplicity, and because in a future implementation volatile info could be accessed also through this module (this could be very useful for data that must be encrypted).</P> <P>To allow a generic use of this interface (and that allows the storage in any media) in a consistent way across any storage access method (plain text files, relational databases, etc.), hidding the implementation details to the core.</P> <P> <HR> <H1><A NAME="first sight">First sight</A></H1> <P>The actions that all storage allow us to do are reading data from it and writing into it. Additionally there's security considerations to do, such as context creation (authentication), internal data structure preparation, and so on.</P> <P>Based on these generic assumptions, the next methods will be used:</P> <UL> <LI><STRONG><A NAME="item_open%3A_initiates_the_relationship_between_the_pro">open: initiates the relationship between the program and the data storage</A></STRONG><BR> <LI><STRONG><A NAME="item_close%3A_closes_the_relationship">close: closes the relationship</A></STRONG><BR> <LI><STRONG><A NAME="item_storage">read: reads data objects from the data storage (first usage)</A></STRONG><BR> <LI><STRONG><A NAME="item_read_next%3A_reads_the_next_object_from_data_stora">read_next: reads the next object from data storage</A></STRONG><BR> <LI><STRONG><A NAME="item_insert%3A_adds_tha_passsed_data_to_the_data_storag">insert: adds tha passsed data to the data storage</A></STRONG><BR> <LI><STRONG><A NAME="item_update%3A_updates_the_passed_data_into_the_data_st">update: updates the passed data into the data storage</A></STRONG><BR> </UL> <P>Additionally the storage is separated into distinct storage classes, each one representing a conceptually different stored data but that could be implemented in the same media. Examples of these are configuration data, profile data and e-mails.</P> <P>There exist the next the so called class ID, that identifies the storage class, whcih are:</P> <UL> <LI><STRONG><A NAME="item_EMail%3A_E%2Dmail_store">EMail: E-mail store</A></STRONG><BR> <LI><STRONG><A NAME="item_Config%3A_System_configuration_data_store">Config: System configuration data store</A></STRONG><BR> <LI><STRONG><A NAME="item_Profile%3A_User_profile_storage">Profile: User profile storage</A></STRONG><BR> </UL> <P> <HR> <H1><A NAME="implementation details">Implementation details</A></H1> <P>The class attributed to the storage objects is aMail::Storage.</P> <P>As explained, each object has methods (open, close, read, write, etc.) to manipulate data in the data storage, whose interface (and usage) is defined in the following paragraphs.</P> <P>A note, before starting with the methods, is that all methods return a non-zero value that indicates an error; when this value is zero is a success code. The error meaning is specified in each method documentation.</P> <P> <HR> <H1><A NAME="methods">METHODS</A></H1> <P> <H2><A NAME="new($)"><CODE>new($)</CODE></A></H2> <P>This is the constructor, an returns a new handler for to the specified storage class (mandatory parameter).</P> <P>Usage :</P> <PRE> use aMail::Storage;</PRE> <PRE> my $handler = aMail::Storage->new( 'EMail' ); die "Crashhhh new() !!!\n" if ( ! defined $handler );</PRE> <P> <H2><A NAME="authmethods()"><CODE>authMethods()</CODE></A></H2> <P>Each class ID can be implemented using different technologies (relational database, LDAP repository, etc.), and using distinct authentication schemas.</P> <P>The returned value is an array containing the preferred authentication methods, ordered from most preferred to least preferred.</P> <P>The supported authentication methods are:</P> <UL> <LI><STRONG><A NAME="item_NULL%3A_No_autentication_is_required">NULL: No autentication is required</A></STRONG><BR> <LI><STRONG><A NAME="item_USER_PWD%3A_User_and_password">USER_PWD: User and password</A></STRONG><BR> <LI><STRONG><A NAME="item_AMAIL%3A_Old_aMail_authentication_schema">AMAIL: Old aMail authentication schema</A></STRONG><BR> </UL> <P>Usage :</P> <PRE> use aMail::Storage;</PRE> <PRE> my $handler = aMail::Storage->new( 'EMail' ); die "Crashhhh new() !!!\n" if ( ! defined $handler ); </PRE> <PRE> my @authMethods = authMethods();</PRE> <P> <H2><A NAME="open(%)"><CODE>open(%)</CODE></A></H2> <P>Opens a connection to the desired storage class.</P> <P>The parameters are passed in a hash, and the key values corresopnd to the desired parameters to be passed:</P> <UL> <LI><STRONG><A NAME="item_method">AUTH_METHOD : Authenticated method (described previously)</A></STRONG><BR> <LI><STRONG><A NAME="item_AUTH_PARAMETERS_%3A_hash_containing_the_authentica">AUTH_PARAMETERS : hash containing the authentication credentials. In case of NULL is an empty hash, if USER_PWD the keys USER and PASSWORD must be passed, and if AMAIL the keys aMail_ID and SID will be used.</A></STRONG><BR> The the code returned is the corresponding to each storage class. <P></P></UL> <P>Usage :</P> <PRE> use aMail::Storage;</PRE> <PRE> my $handler = aMail::Storage->new( 'EMail' ); die "Crashhhh new() !!!\n" if ( ! defined $handler ); </PRE> <PRE> my @authMethods = $handler->authMethods(); die "Unknown authentication method\n" if ! AMAIL_Method_in_list( @authMethods );</PRE> <PRE> die "Can't authenticate\n" unless $handler->open( { AUTH_METHOD => 'AMAIL', AUTH_PARAMETERS => { aMail_ID => 'bit-man', SID => '331868645' } } );</PRE> <HR> <TABLE WIDTH="80%"> <TR> <TD> <IMG SRC="../doc/media/logo.gif" ALT="[aMail documentation]"> </TD> <TD ALIGN="center"> <H1>Developer's arena</H1> <H1>aMail::Storage</H1> </TD> </TR> </TABLE> </HTML> |
From: Victor A. R. <bi...@us...> - 2002-08-23 18:00:27
|
Update of /cvsroot/amail/new_project/docs/devel/Storage In directory usw-pr-cvs1:/tmp/cvs-serv14642/docs/devel/Storage Log Message: Directory /cvsroot/amail/new_project/docs/devel/Storage added to the repository |
From: Victor A. R. <bi...@us...> - 2002-08-23 00:02:52
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv26627/program/lib/Storage Modified Files: EMail.pm Log Message: Documentation added to aMail::Storage y aMail::Storage::EMail (pod, of course !!) Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** EMail.pm 16 Aug 2002 21:49:55 -0000 1.5 --- EMail.pm 23 Aug 2002 00:02:49 -0000 1.6 *************** *** 3,6 **** --- 3,31 ---- package aMail::Storage::EMail; + =pod + + =head1 NAME + + aMail::Storage::EMail - provides e-mail storage services + + =head1 SYNOPSIS + + use SOAP::Lite; + + my $handler = SOAP::Lite + -> uri('aMail/Storage/EMail') + -> proxy('http://'.$HOST .':'. $PORT .'/') + -> on_fault(sub { my($soap, $res) = @_; + die ref $res ? $res->faultstring : $soap->transport->status, "\n"; + }); + + =head1 DESCRIPTION + + Basically allows the e-mail store in a flat folder based structure, that + doesn't allow the creation of folders containing folders, where each + e-mail must be asociated (or stored into) an existing folder. + + =cut + use Exporter; @ISA = ('Exporter'); *************** *** 11,24 **** use aMail::Sec; ## ## Pending issues: ## ! ## 1.- The returned values for each fucntion are not defined ! ################ Settings ! my @acceptedMethods = [ 'AMAIL' ]; ! my $db_path = '/home/bit-man'; ! ######################################### my $SID = ""; --- 36,79 ---- use aMail::Sec; + + ################ Settings + my @acceptedMethods = [ 'AMAIL' ]; + my $db_path = '/home/bit-man/initialize_user'; + ######################################### + ## ## Pending issues: ## ! ## - authAuthenticate returns a 999 error when no invalid auth ! ## it's not a stylish error code, anyway (and can be overlapped ! ## by a module that returns a 999 code) + =pod ! =head1 METHODS ! ! =head2 Common usage ! ! All methods, except authGetMethods, expect the parameters "authentication ! method" (authMethod), and the authentication parameters. It should be enough ! to pass them once, but no persistence mechanism has been implemented (yet !). ! ! Usage: ! ! use aMail::Storage::EMail; ! ! my $authMethod = 'AMAIL'; ! my $aMail_ID = 'bit-man'; ! my $SID = obtainedThroguhPAM(); ! my $name = "myNewFolder"; ! ! die "Crash !!!!\n" ! unless $handler->authAuthenticate( $authMethod, $aMail_ID, $SID)->result; ! ! die "Can't create folder $name\n" ! unless $handler->folderCreate( $name, $authMethod, $aMail_ID, $SID)->result; ! ! Note: all methods return 0 (zero) on success, and not zero on error. ! =cut my $SID = ""; *************** *** 26,33 **** --- 81,122 ---- + =head2 authGetMethods + + Return the supported authentication methods as an array. + + Usage: + + use SOAP::Lite; + + my @auth_methods = $handler->authGetMethods()->result; + + =cut + sub authGetMethods() { return @acceptedMethods; } + + =head2 authAuthenticate + + Return a PAM_* error (see aMail::PAM module) in case of error, if + AMAIL authentication is used. Zero in case of success. + + Returns 999 if an unsupported authentication method is passed. + + Usage: + + use SOAP::Lite; + + my $authMethod = 'USR_PWD'; + my $user = 'bit-man'; + my $pass = 'secret'; + + die "Can't authenticate !!!!\n" + unless $handler->authAuthenticate( $authMethod, $user, $pass)->result; + + + =cut + sub authAuthenticate() { my $self = shift; *************** *** 42,47 **** }; ! ## I'm sorry, no valid authentication method; ! return 0; } --- 131,136 ---- }; ! ## I'm sorry, invalid authentication method; ! return 999; } *************** *** 54,58 **** my $aMail_ID = $param[0]; ! return 0 if ( ! defined handlePAM( $aMail_ID ) ); print "Folder creation: $folder\n"; --- 143,147 ---- my $aMail_ID = $param[0]; ! return 0 if ( ! handlePAM( $aMail_ID ) ); print "Folder creation: $folder\n"; *************** *** 183,202 **** $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); print "Problem: $problem\n"; ! return undef unless ( $problem == PAM_SUCCESS() ); print "Authenticate\n"; $problem = $sec_handle->pam_authenticate(); ! return undef unless ( $problem == PAM_SUCCESS() ); print "Mgmt\n"; $problem = $sec_handle->pam_acct_mgmt(); ! return undef unless ( $problem == PAM_SUCCESS() ); print "Open_session\n"; $problem = $sec_handle->pam_open_session(); ! return undef unless ( $problem == PAM_SUCCESS() ); print "END\n"; ! return 1; } 1; --- 272,291 ---- $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); print "Problem: $problem\n"; ! return $problem unless ( $problem == PAM_SUCCESS() ); print "Authenticate\n"; $problem = $sec_handle->pam_authenticate(); ! return $problem unless ( $problem == PAM_SUCCESS() ); print "Mgmt\n"; $problem = $sec_handle->pam_acct_mgmt(); ! return $problem unless ( $problem == PAM_SUCCESS() ); print "Open_session\n"; $problem = $sec_handle->pam_open_session(); ! return $problem unless ( $problem == PAM_SUCCESS() ); print "END\n"; ! return 0; } 1; |
From: Victor A. R. <bi...@us...> - 2002-08-23 00:02:52
|
Update of /cvsroot/amail/new_project/program/lib In directory usw-pr-cvs1:/tmp/cvs-serv26627/program/lib Modified Files: Storage.pm Log Message: Documentation added to aMail::Storage y aMail::Storage::EMail (pod, of course !!) Index: Storage.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** Storage.pm 16 Aug 2002 21:49:55 -0000 1.5 --- Storage.pm 23 Aug 2002 00:02:49 -0000 1.6 *************** *** 2,5 **** --- 2,95 ---- package aMail::Storage; + =pod + + =head1 NAME + + aMail::Storage - provides storage management services + + =head1 SYNOPSIS + + use aMail::Storage; + + =head1 DESCRIPTION + + The data storage module is an abstraction presented to the core (or + anyone interfacing with it) to manage the storage of any persistent + data storage. This one must be emphasized, mainly because all volatile + info would be stored in memory storage (accessed through variables), + and not through the Data Storage. Albeith the generic name is retained + for simplicity, and because in a future implementation volatile info + could be accessed also through this module (this could be very useful + for data that must be encrypted). + + To allow a generic use of this interface (and that allows the storage + in any media) in a consistent way across any storage access method + (plain text files, relational databases, etc.), hidding the implementation + details to the core. + + =head1 First sight + + The actions that all storage allow us to do are reading data from it + and writing into it. Additionally there's security considerations to + do, such as context creation (authentication), internal data structure + preparation, and so on. + + Based on these generic assumptions, the next methods will be used: + + =over 6 + + =item * + open: initiates the relationship between the program and the data storage + + =item * + close: closes the relationship + + =item * + read: reads data objects from the data storage (first usage) + + =item * + read_next: reads the next object from data storage + + =item * + insert: adds tha passsed data to the data storage + + =item * + update: updates the passed data into the data storage + + Additionally the storage is separated into distinct storage classes, + each one representing a conceptually different stored data but that + could be implemented in the same media. Examples of these are + configuration data, profile data and e-mails. + + There exist the next the so called class ID, that identifies the storage + class, whcih are: + + =over 3 + + =item * + EMail: E-mail store + + =item * + Config: System configuration data store + + =item * + Profile: User profile storage + + + =head1 Implementation details + + The class attributed to the storage objects is aMail::Storage. + + As explained, each object has methods (open, close, read, write, etc.) + to manipulate data in the data storage, whose interface (and usage) is + defined in the following paragraphs. + + A note, before starting with the methods, is that all methods return a + non-zero value that indicates an error; when this value is zero is a + success code. The error meaning is specified in each method documentation. + + =cut + + use Exporter; @ISA = ('Exporter'); *************** *** 19,23 **** ## and strctly necessary in some environment (e.g. database connections). ## ! ## 2.- The returned values for each function in EMail.pm are not defined sub new { --- 109,134 ---- ## and strctly necessary in some environment (e.g. database connections). ## ! ## 2.- The error codes from the modules are EMail, Config, etc. are ! ## passed "as is" to the caller. This codes are not independent ! ## from each implementation and this makes the core code a bit ! ## module dependent ! ! =pod ! ! =head1 METHODS ! ! =head2 new($) ! ! This is the constructor, an returns a new handler for to the ! specified storage class (mandatory parameter). ! ! Usage : ! ! use aMail::Storage; ! ! my $handler = aMail::Storage->new( 'EMail' ); ! die "Crashhhh new() !!!\n" if ( ! defined $handler ); ! =cut ! sub new { *************** *** 42,47 **** } ! ###### Let's the fun begin !!! --- 153,188 ---- } + =pod + + =head2 authMethods() + + Each class ID can be implemented using different technologies (relational + database, LDAP repository, etc.), and using distinct authentication schemas. + + The returned value is an array containing the preferred authentication methods, + ordered from most preferred to least preferred. + + The supported authentication methods are: + + =over 3 + + =item * + NULL: No autentication is required ! =item * ! USER_PWD: User and password ! ! =item * ! AMAIL: Old aMail authentication schema ! ! Usage : ! ! use aMail::Storage; ! ! my $handler = aMail::Storage->new( 'EMail' ); ! die "Crashhhh new() !!!\n" if ( ! defined $handler ); ! ! my @authMethods = authMethods(); ! =cut *************** *** 50,56 **** my $self = shift; my $handler = $self->{'SOAPhandler'}; ! my $auth_methods = $handler->authGetMethods()->result; ! if ( ! defined $auth_methods ) { $main::Error = 1; $main::ErrorText = "No athentication methods available"; --- 191,197 ---- my $self = shift; my $handler = $self->{'SOAPhandler'}; ! my @auth_methods = $handler->authGetMethods()->result; ! if ( ! @auth_methods ) { $main::Error = 1; $main::ErrorText = "No athentication methods available"; *************** *** 61,64 **** --- 202,244 ---- } + =pod + + =head2 open(%) + + Opens a connection to the desired storage class. + + The parameters are passed in a hash, and the key values corresopnd + to the desired parameters to be passed: + + =over 2 + + =item * + AUTH_METHOD : Authenticated method (described previously) + + =item * + AUTH_PARAMETERS : hash containing the authentication credentials. + In case of NULL is an empty hash, if USER_PWD the keys USER and PASSWORD + must be passed, and if AMAIL the keys aMail_ID and SID will be used. + + The the code returned is the corresponding to each storage class. + + Usage : + + use aMail::Storage; + + my $handler = aMail::Storage->new( 'EMail' ); + die "Crashhhh new() !!!\n" if ( ! defined $handler ); + + my @authMethods = $handler->authMethods(); + die "Unknown authentication method\n" + if ! AMAIL_Method_in_list( @authMethods ); + + die "Can't authenticate\n" + unless $handler->open( { AUTH_METHOD => 'AMAIL', + AUTH_PARAMETERS => { aMail_ID => 'bit-man', + SID => '331868645' } } ); + + =cut + sub open() { my $self = shift; *************** *** 68,83 **** push @param, $$input{'AUTH_PARAMETERS'}{'aMail_ID'}; push @param, $$input{'AUTH_PARAMETERS'}{'SID'}; ! my $handler = $self->{'SOAPhandler'}; ! my $open_return = $handler->authAuthenticate( $$input{'AUTH_METHOD'}, @param)->result; ! if ( ! defined $open_return ) { ! $main::Error = 1; ! $main::ErrorText = "No handler for aMail::Store::" . $self->{'CLID'}; ! return undef; ! } else { ! $self->{'aMail_ID'} = $$input{'AUTH_PARAMETERS'}{'aMail_ID'}; ! $self->{'SID'} = $$input{'AUTH_PARAMETERS'}{'SID'}; ! return $open_return; ! } } --- 248,257 ---- push @param, $$input{'AUTH_PARAMETERS'}{'aMail_ID'}; push @param, $$input{'AUTH_PARAMETERS'}{'SID'}; ! ! $self->{'aMail_ID'} = $$input{'AUTH_PARAMETERS'}{'aMail_ID'}; ! $self->{'SID'} = $$input{'AUTH_PARAMETERS'}{'SID'}; ! $self->{'authMethod'} = $$input{'AUTH_METHOD'}; ! return $self->{'SOAPhandler'}->authAuthenticate( $$input{'AUTH_METHOD'}, @param)->result; } *************** *** 85,99 **** sub close() { my $self = shift; - - my $handler = $self->{'SOAPhandler'}; - my $close_return = $handler->close()->result; ! if ( ! defined $close_return ) { ! $main::Error = 2; ! $main::ErrorText = "Can't execute close for aMail::Store::" . $self->{'CLID'}; ! return undef; ! } else { ! return $close_return; ! } } --- 259,264 ---- sub close() { my $self = shift; ! return = $self->{'SOAPhandler'}->close()->result; } |
From: Victor A. R. <bi...@us...> - 2002-08-16 21:49:59
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv10999/program/lib/Storage Modified Files: EMail.pm Log Message: A litlle advance on aMail::Storage::Email class definition and implementation Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** EMail.pm 6 Aug 2002 22:41:23 -0000 1.4 --- EMail.pm 16 Aug 2002 21:49:55 -0000 1.5 *************** *** 5,65 **** use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/auth_methods/; use aMail::PAM; my @acceptedMethods = [ 'AMAIL' ]; my $SID = ""; my $problem = ""; ! sub auth_methods() { return @acceptedMethods; } ! sub open() { my $self = shift; ! my $input = shift; ! $_ = $$input{'AUTH_METHOD'}; - /$AMAIL/ && do { print "AUTH_PARM: " . $$input{'AUTH_PARAMETERS'} . "\n"; - print "AUTH_METHOD: " . $$input{'AUTH_METHOD'} . "\n"; ! my $authParams = $$input{'AUTH_PARAMETERS'}; ! $SID = $$authParams{'SID'}; ! print "aMail_ID: " . $$authParams{'aMail_ID'} . "\n"; ! print "SID: " . $$authParams{'SID'} . "-" . $SID . "\n"; - print "Starting PAM\n"; - my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $$authParams{'aMail_ID'}, \&pam_conversation ); - $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); - print "Problem: $problem\n"; - return undef unless ( $problem == PAM_SUCCESS() ); ! print "Authenticate\n"; ! $problem = $sec_handle->pam_authenticate(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! print "Mgmt\n"; ! $problem = $sec_handle->pam_acct_mgmt(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! print "open_session\n"; ! $problem = $sec_handle->pam_open_session(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "END\n"; ! return 1; ! }; } ! sub close() { my $self = shift; ! return 1; } =pod --- 5,139 ---- use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/authGetMethods authAuthenticate/; use aMail::PAM; + use aMail::Common; + use aMail::Sec; + ## + ## Pending issues: + ## + ## 1.- The returned values for each fucntion are not defined + + + ################ Settings my @acceptedMethods = [ 'AMAIL' ]; + my $db_path = '/home/bit-man'; + ######################################### + my $SID = ""; my $problem = ""; ! sub authGetMethods() { return @acceptedMethods; } ! sub authAuthenticate() { my $self = shift; ! my $authMethod = shift; ! my @param = @_; ! ! print "Auth. Method: $authMethod \n"; ! $_ = $authMethod; ! /$AMAIL/ && do { $SID = $param[1]; ! return handlePAM( $param[0] ); ! }; ! ! ## I'm sorry, no valid authentication method; ! return 0; ! } ! sub folderCreate() { ! my $self = shift; ! my $folder = shift; ! my @param = @_; ! $SID = $param[1]; ! my $aMail_ID = $param[0]; ! ! return 0 if ( ! defined handlePAM( $aMail_ID ) ); ! print "Folder creation: $folder\n"; ! ! ########################################### ! my $user_path = "$db_path/$aMail_ID"; ! ! return 0 if ( ! Check_folder_name($folder) ); ! my $mailbox_file = "$user_path/folders"; ! safe_open_update( *MAILBOX{IO}, $mailbox_file); ! flock(MAILBOX,2) || return 2; ! ! while (($_ = <MAILBOX>) and $_ ne "\n") { ! push @folders,$_; ! } ! ! foreach (@folders) { ! if ($_ =~ /^$folder,/) { ! close MAILBOX; ! return 1; ! } ! } ! my @messages = <MAILBOX>; ! push @folders, "$folder,0,0,0\n"; ! seek MAILBOX, 0, 0; ! print MAILBOX @folders,"\n",@messages; ! close MAILBOX; ! ! ########################################### ! return 1; ! } ! sub folderDestroy() { ! my $self = shift; ! return 0; } + sub folderRename() { + my $self = shift; + + return 0; + } ! sub folderRetrieve() { my $self = shift; ! return 0; ! } ! ! sub msgStore() { ! my $self = shift; ! ! return 0; ! } ! ! sub msgRetrieve() { ! my $self = shift; ! ! return 0; ! } ! ! sub msgDelete() { ! my $self = shift; ! ! return 0; ! } ! ! sub msgMove() { ! my $self = shift; ! ! return 0; } + sub msgTag() { + my $self = shift; + + return 0; + } + + =pod *************** *** 102,104 **** --- 176,204 ---- } + + + sub handlePAM() { + my $aMail_ID = shift; + my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $aMail_ID, \&pam_conversation ); + $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); + print "Problem: $problem\n"; + return undef unless ( $problem == PAM_SUCCESS() ); + + print "Authenticate\n"; + $problem = $sec_handle->pam_authenticate(); + return undef unless ( $problem == PAM_SUCCESS() ); + + print "Mgmt\n"; + $problem = $sec_handle->pam_acct_mgmt(); + return undef unless ( $problem == PAM_SUCCESS() ); + + print "Open_session\n"; + $problem = $sec_handle->pam_open_session(); + return undef unless ( $problem == PAM_SUCCESS() ); + + print "END\n"; + return 1; + } 1; + + |
From: Victor A. R. <bi...@us...> - 2002-08-16 21:49:58
|
Update of /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail In directory usw-pr-cvs1:/tmp/cvs-serv10999/docs/devel/plan/Storage2/e-mail Modified Files: storage.e-mail.zargo Log Message: A litlle advance on aMail::Storage::Email class definition and implementation Index: storage.e-mail.zargo =================================================================== RCS file: /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail/storage.e-mail.zargo,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 Binary files /tmp/cvswlsPs9 and /tmp/cvsQVDOG8 differ |
From: Victor A. R. <bi...@us...> - 2002-08-16 21:49:58
|
Update of /cvsroot/amail/new_project/program/lib In directory usw-pr-cvs1:/tmp/cvs-serv10999/program/lib Modified Files: Storage.pm Log Message: A litlle advance on aMail::Storage::Email class definition and implementation Index: Storage.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** Storage.pm 6 Aug 2002 22:41:23 -0000 1.4 --- Storage.pm 16 Aug 2002 21:49:55 -0000 1.5 *************** *** 4,11 **** use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/new auth_methods open close/; use SOAP::Lite; sub new { --- 4,23 ---- use Exporter; @ISA = ('Exporter'); ! @EXPORT = qw/new authMethods open close insert/; use SOAP::Lite; + ## + ## Pending issues: + ## + ## 1.- Each time a function is called through web service, it must + ## perform some security checkings (PAM). Previuosly it was made + ## at each CGI request and the performance penalty is accepted, but + ## now it must be done one time for each function call inside the + ## aMail::Storage module !!!!! :-(( + ## If some object persistence could be achieved, then all wil be easier + ## and strctly necessary in some environment (e.g. database connections). + ## + ## 2.- The returned values for each function in EMail.pm are not defined sub new { *************** *** 35,42 **** ! sub auth_methods() { my $self = shift; my $handler = $self->{'SOAPhandler'}; ! my $auth_methods = $handler->auth_methods()->result; if ( ! defined $auth_methods ) { --- 47,54 ---- ! sub authMethods() { my $self = shift; my $handler = $self->{'SOAPhandler'}; ! my $auth_methods = $handler->authGetMethods()->result; if ( ! defined $auth_methods ) { *************** *** 52,70 **** my $self = shift; my $input = shift; - - - print $$input{'AUTH_METHOD'}; - print " - "; - print $$input{'AUTH_PARAMETERS'}; - print " - "; - my $x = $$input{'AUTH_PARAMETERS'}; - print $$x{'aMail_ID'}; - print " - "; - print $$x{'SID'}; - print "\n"; my $handler = $self->{'SOAPhandler'}; ! my $open_return = $handler->open( { AUTH_METHOD => $$input{'AUTH_METHOD'} , ! AUTH_PARAMETERS => $$input{'AUTH_PARAMETERS'} })->result; if ( ! defined $open_return ) { --- 64,73 ---- my $self = shift; my $input = shift; + my @param; + push @param, $$input{'AUTH_PARAMETERS'}{'aMail_ID'}; + push @param, $$input{'AUTH_PARAMETERS'}{'SID'}; my $handler = $self->{'SOAPhandler'}; ! my $open_return = $handler->authAuthenticate( $$input{'AUTH_METHOD'}, @param)->result; if ( ! defined $open_return ) { *************** *** 73,76 **** --- 76,81 ---- return undef; } else { + $self->{'aMail_ID'} = $$input{'AUTH_PARAMETERS'}{'aMail_ID'}; + $self->{'SID'} = $$input{'AUTH_PARAMETERS'}{'SID'}; return $open_return; } *************** *** 93,106 **** } - ################################ Read - # - # En el caso de read y read_next se hace más evidente la necesidad de una separacion - # entre el método de acceso a los datos y T-Rex, por lo tanto se va a hacer una capa - # extra que separe al módulo Storage.pm (considerado parte integral de T-Rex) de las - # implementaciones, y el cual será dependiente de cada forma de almacenamiento (y - # deberá ser hecho ad-hoc para cada una de ellas). ! sub read() { my $self = shift; } --- 98,128 ---- } ! sub insert() { my $self = shift; + my $input = shift; + my $return = 'VIRGIN'; + + my @param; + push @param, $self->{'aMail_ID'}; + push @param, $self->{'SID'}; + + my $handler = $self->{'SOAPhandler'}; + $_ = $$input{'OBJECT'}; + + /$FOLDER/ && ($self->{'CLID'} eq 'EMail') && do { + print "Folder creation\n"; + $return = $handler->folderCreate( $$input{'NAME'}, @param )->result; + return 1; + }; + + if ( $return = 'VIRGIN' ) { + $main::Error = 3; + $main::ErrorText = "Can't execute insert for aMail::Store::" . $self->{'CLID'}; + return undef; + } else { + return $close_return; + } + } |
From: Victor A. R. <bi...@us...> - 2002-08-15 21:17:02
|
Update of /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail In directory usw-pr-cvs1:/tmp/cvs-serv16573/docs/devel/plan/Storage2/e-mail Modified Files: storage.e-mail.zargo Log Message: Added class diagram for Storage::EMail Index: storage.e-mail.zargo =================================================================== RCS file: /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail/storage.e-mail.zargo,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 Binary files /tmp/cvsKFMuKG and /tmp/cvsu2Vhdd differ |
From: Victor A. R. <bi...@us...> - 2002-08-09 22:10:24
|
Update of /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail In directory usw-pr-cvs1:/tmp/cvs-serv27608/docs/devel/plan/Storage2/e-mail Modified Files: storage.e-mail.zargo Log Message: aMail::Storage::EMail use cases and first class diagram (bare-bare-really-bare one) Index: storage.e-mail.zargo =================================================================== RCS file: /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail/storage.e-mail.zargo,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 Binary files /tmp/cvsctkCVl and /tmp/cvscZREVz differ |
From: Victor A. R. <bi...@us...> - 2002-08-07 21:39:52
|
Update of /cvsroot/amail/new_project/docs/devel/plan/Storage2/e-mail In directory usw-pr-cvs1:/tmp/cvs-serv3025/docs/devel/plan/Storage2/e-mail Added Files: storage.e-mail.zargo Log Message: aMail::Storage::EMail analysis using UML (just the use case diagram, right now) --- NEW FILE --- PK â3=Wdûôá{/m??ì-WÌvhÅ}%ËT¯@×!¹JNò0O4Ñû¦°]¡º7F?[08_¾D« Ï;0w- K|¯NæÌn*ç´ÊêË}*8ñÉf©ÎæðÜîüðÐq04ÓË?"ûçæPK<XWô EKCDh·³Ú¿6M|Is!x£Ví9>¶ÿ?rLÇo çV«¼\L\àù®C³2ÍÙÄýýîó0×y;½ÿòþó»/ßþøà,3vÕÝ·»/n¼´N]fÑ4¤t5«òeÝtYVTYùÈøo'Y<x+úç,YQï1÷¾Þ~úº¢ïXéýKë¿# ?ÂÖXÔ¡¦ñèÃѬo¦{ݯå.8ÒQ5îÒÓeRß«naï,¹:Ϫ|åetî-+º¢:á|©}ÊôÕ<®mÆåK=~#ÜÍ°uÁ|2YPX³Ç¢°' ÈÖ!"Øà27F$°!"']ÁmÖat\@Âÿ_@âRÓçZ ¸ë(4=Äúý£Æì3fÖG¹¨'.ÃaQf:îÚ*ÿu²¾óÁ»ßðú¹7 tÛð+v~×ÏßAÌà añ éi81óÏ~~»Í,ϵúCËq-g` q°{7ôÂ0wÖ("ó¸3¶MÃbèq(ËJùð§"c\ÓØ·ßo/ 4¢¤(WÇ[¹Z«s6Ï'Hãþ«NùË:H3uæa%2Òäê &ØÂ*Ù!\>ð^ðÊÝU§@ËG,@ "7ªÆÂQdæ©X#²8W Ñ%itÈ£c"Ͷ¡0óç#oÙªp_õjïïæ«r¾ÝecÄò*¿¨1(2ƪ±FFõ5§9kÎ þhWô¸h§ wBÖ¤/MúV´×´l<HÖ¢/-z¨(zÔJtÂvò±ö¬=_ÚóHÑó°ç¯×´}Ð"è[UÐ3À Âëmú¦Ç¦Ý¦õ´6}-Óý"êAKÔúúzªUÏÜÖªå~¥Ö¨ÕPÿ]àãEß>Ê|:¢>I·ÓßPK¼¡ÿa |
From: Victor A. R. <bi...@us...> - 2002-08-06 22:41:26
|
Update of /cvsroot/amail/new_project/program/lib/Storage In directory usw-pr-cvs1:/tmp/cvs-serv28364/program/lib/Storage Modified Files: EMail.pm Log Message: A little bit more advanced Service Glue implementation (pre-pre-alfa2) Index: EMail.pm =================================================================== RCS file: /cvsroot/amail/new_project/program/lib/Storage/EMail.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** EMail.pm 1 Aug 2002 22:15:04 -0000 1.3 --- EMail.pm 6 Aug 2002 22:41:23 -0000 1.4 *************** *** 22,54 **** my $input = shift; ! print "AUTH_PARM: " . $$input{'AUTH_PARAMETERS'} . "\n"; ! print "AUTH_METHOD: " . $$input{'AUTH_METHOD'} . "\n"; ! my $authParams = $$input{'AUTH_PARAMETERS'}; ! $SID = $$authParams{'SID'}; ! print "aMail_ID: " . $$authParams{'aMail_ID'} . "\n"; ! print "SID: " . $$authParams{'SID'} . "-" . $SID . "\n"; ! ! print "Starting PAM\n"; ! my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $$authParams{'aMail_ID'}, \&pam_conversation ); ! $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); ! print "Problem: $problem\n"; ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "Authenticate\n"; ! $problem = $sec_handle->pam_authenticate(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "Mgmt\n"; ! $problem = $sec_handle->pam_acct_mgmt(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "open_session\n"; ! $problem = $sec_handle->pam_open_session(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! print "END\n"; } --- 22,64 ---- my $input = shift; ! $_ = $$input{'AUTH_METHOD'}; ! /$AMAIL/ && do { print "AUTH_PARM: " . $$input{'AUTH_PARAMETERS'} . "\n"; ! print "AUTH_METHOD: " . $$input{'AUTH_METHOD'} . "\n"; ! ! my $authParams = $$input{'AUTH_PARAMETERS'}; ! $SID = $$authParams{'SID'}; ! print "aMail_ID: " . $$authParams{'aMail_ID'} . "\n"; ! print "SID: " . $$authParams{'SID'} . "-" . $SID . "\n"; ! ! print "Starting PAM\n"; ! my $sec_handle = new aMail::PAM( "aMail_Storage_EMail", $$authParams{'aMail_ID'}, \&pam_conversation ); ! $problem = ( ref($sec_handle) ? PAM_SUCCESS() : ref($sec_handle) ); ! print "Problem: $problem\n"; ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "Authenticate\n"; ! $problem = $sec_handle->pam_authenticate(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "Mgmt\n"; ! $problem = $sec_handle->pam_acct_mgmt(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! ! print "open_session\n"; ! $problem = $sec_handle->pam_open_session(); ! return undef unless ( $problem == PAM_SUCCESS() ); ! print "END\n"; ! return 1; ! }; } + + sub close() { + my $self = shift; + + return 1; + } |