Hi Alessandro, activities.noDocument() only means that the current document should no longer be considered part of the crawl. In both cases it is reasonable to check the SmbAuthException text and throw ManifoldCFException if it seems to be bad credentials. You should not call activities.noDocument() in that case. In fact, you could make a single method that gets called from both places that decides whether the exception reason is that the credentials are bad.
Karl On Wed, Apr 8, 2015 at 7:40 AM, Alessandro Benedetti < benedetti.ale...@gmail.com> wrote: > Karl, > taking a look to Trunk code I see a little bit of difference from the > environment ( 1.8) where I was working ( getDocumentVersions is not there > anymore), applied to the current trunk I can see 2 points where to put the > modification : > > > org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector#processDocuments > > org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java:692 > > catch (jcifs.smb.SmbAuthException e) > { > Logging.connectors.warn("JCIFS: Authorization exception reading > version information for "+documentIdentifier+" - skipping"); > if(e.getMessage().equals("Logon failure: unknown user name or bad > password.")) > throw new ManifoldCFException( "SmbAuthException thrown: " + > e.getMessage(), e ); > else { > activities.deleteDocument(documentIdentifier); > continue;} > } > > and : > > catch (jcifs.smb.SmbAuthException e) > { > Logging.connectors.warn("JCIFS: Authorization exception reading > document/directory "+documentIdentifier+" - skipping"); > errorCode = e.getClass().getSimpleName().toUpperCase(Locale.ROOT); > errorDesc = "Authorization: "+e.getMessage(); > // We call the delete even if it's a directory; this is harmless. > activities.noDocument(documentIdentifier, versionString); > continue; > } > > If I am pretty sure of the first, I have no idea what is doing the > "activities.noDocument" . > > Should we apply the change in there as well? > > If you confirm this I will proceed with the commit. > > > Cheers > > > > 2015-04-07 16:36 GMT+01:00 Karl Wright <daddy...@gmail.com>: > > > Hi Richard, > > > > Windows SMB error messages seem to be mostly in English. We look for a > > number of these in the JCIFS connector. And, in any case, we don't have > a > > lot of choice, since there are no specific error codes we could use > > instead. > > > > Karl > > > > > > On Tue, Apr 7, 2015 at 10:43 AM, Nichols, Richard < > > richard.nich...@coriant.com> wrote: > > > > > Will checking for "Logon failure: unknown user name or bad password." > > work > > > for non-English Windows installations? > > > > > > Regards, > > > Rick > > > > > > -----Original Message----- > > > From: Karl Wright [mailto:daddy...@gmail.com] > > > Sent: Tuesday, April 07, 2015 8:52 AM > > > To: dev > > > Subject: Re: [Windows Shares Connector] Un-expected removal of all > > > documents > > > > > > Yes, this is exactly what I was thinking of. You can go ahead and > commit > > > this to trunk, and pull up the change to the dev_1x branch also. > > > > > > Thanks! > > > Karl > > > > > > > > > On Tue, Apr 7, 2015 at 8:42 AM, Alessandro Benedetti < > > > benedetti.ale...@gmail.com> wrote: > > > > > > > Hi Karl, > > > > just back to the issue, I think I solved it in a quick way ( not so > > much > > > > intrusive) : > > > > > > > > > > > > > > > > > > org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector#getDocumentVersions > > > > > > > > > > > > > > org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java:706 > > > > > > > > ... > > > > > > > > catch ( jcifs.smb.SmbAuthException e ) > > > > { > > > > Logging.connectors.warn( > > > > "JCIFS: Authorization exception reading version information > > > > for " + documentIdentifier > > > > + " - skipping" ); > > > > if(e.getMessage().equals("Logon failure: unknown user name or bad > > > > password.")) > > > > throw new ManifoldCFException( "SmbAuthException thrown: " + > > > > e.getMessage(), e ); > > > > else > > > > rval[i] = null; > > > > } > > > > > > > > ... > > > > > > > > In this way the message is checked, and if it is a Login failure we > > > > throw the manifoldCFException breaking the iteration ( because login > > > > failure means no documents will be accessible but we don't have to > > > > erase them) . > > > > > > > > If it is another Authorization exception ( like permissions changed > > > > for the folder/file) the behaviour is the same than before. > > > > > > > > I think should be enough to be safe, what do you think ? > > > > > > > > Is any other method affected by this problem ? > > > > > > > > I think should be limited to the versions check. > > > > > > > > > > > > Cheers > > > > > > > > > > > > 2015-04-02 16:32 GMT+01:00 Alessandro Benedetti < > > > > benedetti.ale...@gmail.com> > > > > : > > > > > > > > > > > > > > > > > > > 2015-04-02 15:58 GMT+01:00 Karl Wright <daddy...@gmail.com>: > > > > > > > > > >> Hi Alessandro, > > > > >> > > > > >> Yes, you interpreted my reply correctly. > > > > >> > > > > >> I think we therefore have to perform any checking operations on > the > > > > actual > > > > >> file being accessed. This is actually pretty easy to do without > > > > >> sacrificing performance. All you need to do is the following: > > > > >> > > > > >> try { > > > > >> ... do the file access operation ... > > > > >> } catch (SmbException e) { > > > > >> ... figure out from the exception whether to throw a > > > > ManifoldCFException > > > > >> or a ServiceInterruption ... > > > > >> ... If the exception does not include enough to distinguish > > between > > > > bad > > > > >> credentials and insufficient privs, then do a check RIGHT HERE for > > bad > > > > >> credentials ... > > > > >> } > > > > >> > > > > >> What do you think? The new code would only ever be called if the > > > > document > > > > >> cannot be read. > > > > >> > > > > > > > > > > I think we can proceed like you said, I am investigating right now > > the > > > > > details returned for the exception ( to understand if there is any > > > > > difference between wrong credentials or access denied) > > > > > In the case we find the "wrong credential" we have to throw the > > > exception > > > > > and stop the iteration ( this will happen the very first time > > assuming > > > > none > > > > > is playing server side) . > > > > > In this way we save the time of checking all the files ( in the > case > > of > > > > > wrong credentials no one will be accessible) . > > > > > > > > > > Another way can be to do this credential check at the beginning and > > > stop > > > > > only if we have wrong credential ( leaving the permission check > file > > by > > > > > file) . > > > > > > > > > > Quite a confused scenario, but we can sort this out with little > > changes > > > > :) > > > > > > > > > > > > > > > > > > > >> > > > > >> Karl > > > > >> > > > > >> > > > > >> On Thu, Apr 2, 2015 at 10:42 AM, Alessandro Benedetti < > > > > >> benedetti.ale...@gmail.com> wrote: > > > > >> > > > > >> > OkI am currently working on that, and I will work on that next > > > tuesday > > > > >> as > > > > >> > well . > > > > >> > But what about point 2 : > > > > >> > " (2) the check itself is > > > > >> > specific to the ROOT of the tree, which the user may not have > > access > > > > >> to." > > > > >> > > > > > >> > I think I got your problem, you mean that a possible scenario > can > > > > happen > > > > >> > when you configure the repository connector with a user that is > > not > > > > >> able > > > > >> > to access the root but is able to access the directories we want > > to > > > > >> crawl. > > > > >> > In such a case the repository connector will appear to be not > able > > > to > > > > >> > connect, while the crawling will be still possible if you > > configure > > > > the > > > > >> > accessible directories in the job. > > > > >> > If this is correct , the situation is more complicated ... > > > > >> > > > > > >> > Cheers > > > > >> > > > > > >> > > > > > >> > 2015-03-31 16:44 GMT+01:00 Karl Wright <daddy...@gmail.com>: > > > > >> > > > > > >> > > Hi Alessandro, > > > > >> > > > > > > >> > > Your code snippet has two problems: (1) it doesn't distinguish > > > > between > > > > >> > > service interruptions and bad credentials, > > > > >> > > > > > >> > > > > > >> > Should not be the difference between the IOException and the Smb > > > one ? > > > > >> > > > > > >> > > > > > >> > > and (2) the check itself is > > > > >> > > specific to the ROOT of the tree, which the user may not have > > > access > > > > >> to. > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > In check() we can get away with this but if you wire up the > > > check() > > > > >> logic > > > > >> > > into the crawl processing it will break some people. > > > > >> > > > > > > >> > > The first problem, (1), is exactly what we need to figure out > > > > anyway. > > > > >> > > > > > > >> > > Karl > > > > >> > > > > > > >> > > > > > > >> > > On Tue, Mar 31, 2015 at 11:30 AM, Alessandro Benedetti < > > > > >> > > benedetti.ale...@gmail.com> wrote: > > > > >> > > > > > > >> > > > Hi karl comments follow : > > > > >> > > > > > > > >> > > > 2015-03-31 16:18 GMT+01:00 Karl Wright <daddy...@gmail.com > >: > > > > >> > > > > > > > >> > > > > Hi Alessandro, > > > > >> > > > > > > > > >> > > > > There are situations where the check() method does not > > succeed > > > > but > > > > >> > you > > > > >> > > > can > > > > >> > > > > still crawl. So I would not do it that way, since it > > > > >> fundamentally > > > > >> > > > changes > > > > >> > > > > the contract. > > > > >> > > > > > > > > >> > > > > > > > >> > > > Am I wrong or we should assume the "check()" method to work > as > > > > it's > > > > >> > built > > > > >> > > > for. > > > > >> > > > I mean if in some case, this method is wrongly implemented , > > > this > > > > >> can > > > > >> > not > > > > >> > > > break another assumption. > > > > >> > > > > > > > >> > > > > > > > > >> > > > > My proposal is to have processDocuments ABORT the job when > > it > > > > >> finds > > > > >> > bad > > > > >> > > > > credentials. That's very fast and will not permit a job > to > > > run > > > > >> for a > > > > >> > > > long > > > > >> > > > > time. > > > > >> > > > > > > > > >> > > > > The trick is to determine if there are bad credentials > > WITHOUT > > > > >> doing > > > > >> > > any > > > > >> > > > > more work in the processDocuments pathway than we > currently > > > are. > > > > >> An > > > > >> > > > > exception will be thrown either way, but we need to figure > > out > > > > >> > whether > > > > >> > > > > there is any information in the exception that we can use > to > > > > >> decide > > > > >> > > > between > > > > >> > > > > bad credentials and no access permissions. > > > > >> > > > > > > > > >> > > > > You can help provide that by doing a simple experiment on > > your > > > > >> > client's > > > > >> > > > > hardware (or yours, if you have such hardware in house). > > > Change > > > > >> the > > > > >> > > > > credential to an invalid one and see what the exception > > > details > > > > >> are. > > > > >> > > > Then > > > > >> > > > > change to valid credentials and try to crawl a directory > > that > > > is > > > > >> not > > > > >> > > > > visible to the credentialed user you supplied, and make a > > note > > > > of > > > > >> the > > > > >> > > > > exception details in that case too. > > > > >> > > > > > > > > >> > > > > > > > >> > > > I was thinking to slightly modifying the getSession() method > > > > adding > > > > >> the > > > > >> > > > file exist check , something like this : > > > > >> > > > > > > > >> > > > ... > > > > >> > > > > > > > >> > > > try > > > > >> > > > { > > > > >> > > > // use NtlmPasswordAuthentication so that we can reuse > > > > >> credential > > > > >> > > > for DFS support > > > > >> > > > pa = new NtlmPasswordAuthentication( domain, username, > > > > password > > > > >> ); > > > > >> > > > SmbFile smbconnection = new SmbFile( "smb://" + server + > > > "/", > > > > >> pa ); > > > > >> > > > smbconnectionPath = getFileCanonicalPath( smbconnection > ); > > > > >> > > > smbconnection.exists(); > > > > >> > > > } > > > > >> > > > catch ( MalformedURLException e ) > > > > >> > > > { > > > > >> > > > Logging.connectors.error( > > > > >> > > > "Unable to access SMB/CIFS share: " + "smb://" + ( ( > > > > domain > > > > >> == > > > > >> > > > null ) ? "" : domain ) + ";" > > > > >> > > > + username + ":<password>@" + server + "/\n" + e > > ); > > > > >> > > > throw new ManifoldCFException( "Unable to access > SMB/CIFS > > > > >> share: " > > > > >> > > > + server, e, > > > > >> > > > > > > > >> > > > ManifoldCFException.REPOSITORY_CONNECTION_ERROR ); > > > > >> > > > } catch (SmbException e) { > > > > >> > > > Logging.connectors.error( > > > > >> > > > "Unable to access SMB/CIFS share: Credential not > > > valid > > > > >> - " > > > > >> > > > + "smb://" + ((domain == null) ? "" : domain) + ";" > > > > >> > > > + username + ":<password>@" + server + > > > "/\n" + > > > > >> e); > > > > >> > > > throw new ManifoldCFException( "Unable to access > SMB/CIFS > > > > share: > > > > >> > > > Credential not valid - " + server, e, > > > > >> > > > ManifoldCFException.REPOSITORY_CONNECTION_ERROR > ); > > > > >> > > > } > > > > >> > > > > > > > >> > > > Catching the smbException should make the trick. > > > > >> > > > Anyway I will go more in details. > > > > >> > > > > > > > >> > > > Cheers > > > > >> > > > > > > > >> > > > > > > > >> > > > > Karl > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > On Tue, Mar 31, 2015 at 10:50 AM, Alessandro Benedetti < > > > > >> > > > > benedetti.ale...@gmail.com> wrote: > > > > >> > > > > > > > > >> > > > > > Currently we are checking each of the String[] > > oldVersions , > > > > >> trying > > > > >> > > to > > > > >> > > > > > access it ... > > > > >> > > > > > So in the scenario I described the current performances > > are > > > > >> quite > > > > >> > > > bad... > > > > >> > > > > > We would need to avoid at all the scan of the oldDocs if > > we > > > > know > > > > >> > the > > > > >> > > > > > provided credential are not valid anymore . > > > > >> > > > > > > > > > >> > > > > > Let me be extreme, but what about not allowing the job > to > > > > start > > > > >> at > > > > >> > > all > > > > >> > > > if > > > > >> > > > > > the Repository Connector is currently broken ( i.e. the > > > > >> connection > > > > >> > is > > > > >> > > > not > > > > >> > > > > > working, and we know that because of the check method) . > > > > >> > > > > > In this way we avoid to destroy already existent indexes > > and > > > > we > > > > >> > > simply > > > > >> > > > > > communicate a message in the job giving advice the job > can > > > not > > > > >> > start > > > > >> > > > > > because Repository connector is currently offline ( and > > > > showing > > > > >> the > > > > >> > > > > > explanation) . > > > > >> > > > > > > > > > >> > > > > > Does this make sense ? > > > > >> > > > > > > > > > >> > > > > > 2015-03-31 15:30 GMT+01:00 Karl Wright < > > daddy...@gmail.com > > > >: > > > > >> > > > > > > > > > >> > > > > > > Hi Alessandro, > > > > >> > > > > > > > > > > >> > > > > > > If you put a check in the processDocuments method, it > > will > > > > be > > > > >> > > called > > > > >> > > > > for > > > > >> > > > > > > every group of documents. That's fine, but if you > > > structure > > > > >> it > > > > >> > as > > > > >> > > a > > > > >> > > > > > > separate call it would impact performance. That is > why > > I > > > > >> suggest > > > > >> > > > just > > > > >> > > > > > > doing a better job of interpreting the existing > > > exceptions. > > > > >> > > > > > > > > > > >> > > > > > > Karl > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > On Tue, Mar 31, 2015 at 10:27 AM, Alessandro > Benedetti < > > > > >> > > > > > > benedetti.ale...@gmail.com> wrote: > > > > >> > > > > > > > > > > >> > > > > > > > As an addition, this should be quite simple, not > > > > proceeding > > > > >> > with > > > > >> > > > the > > > > >> > > > > > > > processDocuments method, if the RepositoryConnector > is > > > not > > > > >> able > > > > >> > > to > > > > >> > > > > > > connect( > > > > >> > > > > > > > check method return not a proper message). > > > > >> > > > > > > > > > > > >> > > > > > > > Right ? > > > > >> > > > > > > > Wondering where is the proper point to enter the > > action > > > :) > > > > >> > > > > > > > > > > > >> > > > > > > > Cheers > > > > >> > > > > > > > > > > > >> > > > > > > > 2015-03-31 14:59 GMT+01:00 Alessandro Benedetti < > > > > >> > > > > > > > benedetti.ale...@gmail.com> > > > > >> > > > > > > > : > > > > >> > > > > > > > > > > > >> > > > > > > > > Yes Karl, > > > > >> > > > > > > > > I was thinking exactly that, to first check if > the > > > > >> > credentials > > > > >> > > > are > > > > >> > > > > > > > valid, > > > > >> > > > > > > > > before scanning all the documents. > > > > >> > > > > > > > > This because permissions per files depend on > > > > users/groups, > > > > >> > but > > > > >> > > > the > > > > >> > > > > > > > current > > > > >> > > > > > > > > scenario is not in-validating the user, but > > > invalidating > > > > >> the > > > > >> > > > access > > > > >> > > > > > of > > > > >> > > > > > > > that > > > > >> > > > > > > > > user. > > > > >> > > > > > > > > > > > > >> > > > > > > > > An error must be thrown, but the docs not deleted > ( > > > not > > > > >> even > > > > >> > > > > > scanned) . > > > > >> > > > > > > > > > > > > >> > > > > > > > > Furthermore, what will happen, in the case the > > server > > > is > > > > >> > down ? > > > > >> > > > > > > > > Are we safe in that scenario ? > > > > >> > > > > > > > > > > > > >> > > > > > > > > Cheers > > > > >> > > > > > > > > > > > > >> > > > > > > > > 2015-03-31 14:42 GMT+01:00 Karl Wright < > > > > >> daddy...@gmail.com>: > > > > >> > > > > > > > > > > > > >> > > > > > > > >> This is actually pretty standard behavior across > > our > > > > >> > connector > > > > >> > > > > > family, > > > > >> > > > > > > > and > > > > >> > > > > > > > >> has been true since Day One. The behavior comes > > from > > > > the > > > > >> > > basic > > > > >> > > > > > broad > > > > >> > > > > > > > >> requirement that the crawler should keep going > and > > > skip > > > > >> the > > > > >> > > > > document > > > > >> > > > > > > > when > > > > >> > > > > > > > >> the permissions do not allow it to be fetched. > > With > > > > the > > > > >> > > Windows > > > > >> > > > > > Share > > > > >> > > > > > > > >> connector, it's sometimes the case (when DFS is > > used > > > a > > > > >> lot) > > > > >> > > that > > > > >> > > > > > whole > > > > >> > > > > > > > >> subtrees of documents are not fetchable using the > > > > >> > credentials > > > > >> > > > > > > supplied. > > > > >> > > > > > > > >> So > > > > >> > > > > > > > >> it is not so easy to just check for valid > > credentials > > > > at > > > > >> the > > > > >> > > > > > > beginning. > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> For a solution, I'd be inclined to look for a way > > to > > > > >> figure > > > > >> > > out > > > > >> > > > if > > > > >> > > > > > the > > > > >> > > > > > > > >> credentials are actually *invalid*, and abort the > > job > > > > if > > > > >> so. > > > > >> > > > This > > > > >> > > > > > is > > > > >> > > > > > > > >> distinct from the case where the credentials are > > > valid > > > > >> but > > > > >> > the > > > > >> > > > > > > connector > > > > >> > > > > > > > >> doesn't have permissions to read the document. > It > > > will > > > > >> take > > > > >> > > > some > > > > >> > > > > > > > >> experimentation to see if we get back different > > > > exception > > > > >> > text > > > > >> > > > in > > > > >> > > > > > the > > > > >> > > > > > > > two > > > > >> > > > > > > > >> situations. > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> Karl > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> On Tue, Mar 31, 2015 at 9:30 AM, Alessandro > > > Benedetti < > > > > >> > > > > > > > >> abenede...@apache.org > > > > >> > > > > > > > >> > wrote: > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > Hi guys, > > > > >> > > > > > > > >> > playing with the Windows Shares Connector in > > > > ManifoldCF > > > > >> > 1.8 > > > > >> > > I > > > > >> > > > > > > > >> encountered > > > > >> > > > > > > > >> > this problem : > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > *Scenario* > > > > >> > > > > > > > >> > *1)* Indexing windows Shares server > > > > >> > > > > > > > >> > *2)* Indexing successfully finished with N docs > > > > indexed > > > > >> > > > > > > > >> > *3)* Offline ,while no indexing is happening, > > > Shares > > > > >> > server > > > > >> > > > > side, > > > > >> > > > > > > the > > > > >> > > > > > > > >> > Administrator password changes > > > > >> > > > > > > > >> > *4) *Repository Connector is not able to > connect > > > > >> > anymore(of > > > > >> > > > > course > > > > >> > > > > > > > >> because > > > > >> > > > > > > > >> > the password has changed) > > > > >> > > > > > > > >> > *5)* Next indexing cycle, ALL docs are removed > > from > > > > the > > > > >> > > index > > > > >> > > > . > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > *Expected Behaviour* > > > > >> > > > > > > > >> > As I user I would like to see an error message, > > > that > > > > >> will > > > > >> > > let > > > > >> > > > me > > > > >> > > > > > > > >> understand > > > > >> > > > > > > > >> > the issue, not losing all my N indexed docs . > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > *Reason* > > > > >> > > > > > > > >> > Taking a look into the code, the problems seems > > to > > > be > > > > >> in > > > > >> > > the : > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > > > > > > org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector#getDocumentVersions > > > > >> > > > > > > > >> > where it tries to access each document > singularly > > > > >> through > > > > >> > > > Samba, > > > > >> > > > > > and > > > > >> > > > > > > > >> > removing them one by one if not reachable > > anymore. > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > *Solution* > > > > >> > > > > > > > >> > Before scanning each document, we have to be > sure > > > the > > > > >> > > > connection > > > > >> > > > > > is > > > > >> > > > > > > > >> > working. > > > > >> > > > > > > > >> > If not this is only armful. > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > I will continue investigating, but I would like > > > your > > > > >> > opinion > > > > >> > > > as > > > > >> > > > > > well > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > Cheers > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > -- > > > > >> > > > > > > > >> > -------------------------- > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > Benedetti Alessandro > > > > >> > > > > > > > >> > Visiting card : > > > http://about.me/alessandro_benedetti > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > "Tyger, tyger burning bright > > > > >> > > > > > > > >> > In the forests of the night, > > > > >> > > > > > > > >> > What immortal hand or eye > > > > >> > > > > > > > >> > Could frame thy fearful symmetry?" > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > William Blake - Songs of Experience -1794 > England > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > -- > > > > >> > > > > > > > > -------------------------- > > > > >> > > > > > > > > > > > > >> > > > > > > > > Benedetti Alessandro > > > > >> > > > > > > > > Visiting card : > > http://about.me/alessandro_benedetti > > > > >> > > > > > > > > > > > > >> > > > > > > > > "Tyger, tyger burning bright > > > > >> > > > > > > > > In the forests of the night, > > > > >> > > > > > > > > What immortal hand or eye > > > > >> > > > > > > > > Could frame thy fearful symmetry?" > > > > >> > > > > > > > > > > > > >> > > > > > > > > William Blake - Songs of Experience -1794 England > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > -- > > > > >> > > > > > > > -------------------------- > > > > >> > > > > > > > > > > > >> > > > > > > > Benedetti Alessandro > > > > >> > > > > > > > Visiting card : > http://about.me/alessandro_benedetti > > > > >> > > > > > > > > > > > >> > > > > > > > "Tyger, tyger burning bright > > > > >> > > > > > > > In the forests of the night, > > > > >> > > > > > > > What immortal hand or eye > > > > >> > > > > > > > Could frame thy fearful symmetry?" > > > > >> > > > > > > > > > > > >> > > > > > > > William Blake - Songs of Experience -1794 England > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > -- > > > > >> > > > > > -------------------------- > > > > >> > > > > > > > > > >> > > > > > Benedetti Alessandro > > > > >> > > > > > Visiting card : http://about.me/alessandro_benedetti > > > > >> > > > > > > > > > >> > > > > > "Tyger, tyger burning bright > > > > >> > > > > > In the forests of the night, > > > > >> > > > > > What immortal hand or eye > > > > >> > > > > > Could frame thy fearful symmetry?" > > > > >> > > > > > > > > > >> > > > > > William Blake - Songs of Experience -1794 England > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > -- > > > > >> > > > -------------------------- > > > > >> > > > > > > > >> > > > Benedetti Alessandro > > > > >> > > > Visiting card : http://about.me/alessandro_benedetti > > > > >> > > > > > > > >> > > > "Tyger, tyger burning bright > > > > >> > > > In the forests of the night, > > > > >> > > > What immortal hand or eye > > > > >> > > > Could frame thy fearful symmetry?" > > > > >> > > > > > > > >> > > > William Blake - Songs of Experience -1794 England > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > > >> > -- > > > > >> > -------------------------- > > > > >> > > > > > >> > Benedetti Alessandro > > > > >> > Visiting card : http://about.me/alessandro_benedetti > > > > >> > > > > > >> > "Tyger, tyger burning bright > > > > >> > In the forests of the night, > > > > >> > What immortal hand or eye > > > > >> > Could frame thy fearful symmetry?" > > > > >> > > > > > >> > William Blake - Songs of Experience -1794 England > > > > >> > > > > > >> > > > > > > > > > > > > > > > > > > > > -- > > > > > -------------------------- > > > > > > > > > > Benedetti Alessandro > > > > > Visiting card : http://about.me/alessandro_benedetti > > > > > > > > > > "Tyger, tyger burning bright > > > > > In the forests of the night, > > > > > What immortal hand or eye > > > > > Could frame thy fearful symmetry?" > > > > > > > > > > William Blake - Songs of Experience -1794 England > > > > > > > > > > > > > > > > > > > > > -- > > > > -------------------------- > > > > > > > > Benedetti Alessandro > > > > Visiting card : http://about.me/alessandro_benedetti > > > > > > > > "Tyger, tyger burning bright > > > > In the forests of the night, > > > > What immortal hand or eye > > > > Could frame thy fearful symmetry?" > > > > > > > > William Blake - Songs of Experience -1794 England > > > > > > > > > > ============================================================ > > > The information contained in this message may be privileged > > > and confidential and protected from disclosure. If the reader > > > of this message is not the intended recipient, or an employee > > > or agent responsible for delivering this message to the > > > intended recipient, you are hereby notified that any reproduction, > > > dissemination or distribution of this communication is strictly > > > prohibited. If you have received this communication in error, > > > please notify us immediately by replying to the message and > > > deleting it from your computer. Thank you. Coriant-Tellabs > > > ============================================================ > > > > > > > > > -- > -------------------------- > > Benedetti Alessandro > Visiting card : http://about.me/alessandro_benedetti > > "Tyger, tyger burning bright > In the forests of the night, > What immortal hand or eye > Could frame thy fearful symmetry?" > > William Blake - Songs of Experience -1794 England >