Converting classic to .NET 2 code, and .NET gets an error back from ADS?

 For future-proofing, our Internal Phone Directory is being moved onto our AD servers, and obviously we're using LDAP for queries.

To get the phoneboook queries working, I adapted the current classic ASP code to use LDAP, and that works fine. However, we're wanting to move these pages to .NET, and that's where the problem comes in. Using the same basic logic from the Classic code (90% of its unchanged) to produce an LDAP query, I get the error


 155 Unknown error (0x80005000)

This is using the same website, and so the same credentials  - unless aspx pages run under a different account to asp ones?

8/26/2008 1:17:13 PM 2291 articles. 0 followers. Follow

10 Replies

Similar Articles

[PageSpeed] 43

unless aspx pages run under a different account to asp ones?

They do.  Classic ASP is usually the IUSR/IWAM accounts, ASP.NET is the ASP.NET process account, NETWORK SERVICE on IIS 6 and 7.


Please: Don't forget to click "Mark as Answer" on the post that helped you. That way future readers will know which post solved your issue.
8/26/2008 1:43:14 PM

 Am I right in thinking that I need to use the

DirectoryEntry class to do this correctly?
8/26/2008 1:58:09 PM

 Right. I added

On Error Resume Next
        Dim oRoot As DirectoryEntry = New DirectoryEntry(sql)
        If Err.Number <> 0 Then Trace.Write("139 " & Err.Description)

        oRoot.Username = "xxx\xxxx"  '' added for authentication
        oRoot.Password = "xxxxxx" '' added for authentication

oRoot.AuthenticationType = AuthenticationTypes.Secure


to the code,  but still comes back with the 80005000 error

8/27/2008 9:42:37 AM

Okay, first of all, VBScript and VB.Net are quite different beasts, certainly a lot more different that VBScript and VB6, so you can just expect things not to work.  Or not to work the way you'd expect.  On the other hand, VB.Net is just so much better than VBScript at pretty much everything that it's worth the pain of learning.

Here's an example: VBScript has On Error Resume Next and Err.Number.  Yuck!  VB.Net has exceptions and "try catch blocks".  You can find loads of help online.  I've posted a few addresses at the bottom to get you started.  The best bit about them is that you can specify the exception(s) to catch and any others still be thrown and you can specify different code to run for each type of exception that may be thrown.  On Error Resume Next is in there for backwards-compatibility - exception-handling is the way forward.

As for the specifics, what's contained in the string 'sql'?  I'm surprised you're seeing error 139 because it doesn't usually fetch the directory entry until you actually do something with it (like read a value).  I think we need to see a little more of your code.

A DirectoryEntry is required if you need to update an entry in AD.  It can also be used to retrieve values for a single object in AD.  Are you using DirectorySearcher to search the directory?  If so, you can retrive values from the SearchResult objects that you'll get back - they're kind of like a read-only DirectoryEntry but the syntax is slightly different.

If you're still having problems, one thing you can try is to get the basic query running in a console application and then transfer the code to your ASP.NET project.


8/27/2008 7:25:28 PM

 I'd tried using Try...Catch but as I cannot see where the error reports go, it was a little pointless. Trace.Write reports that it cannot convert the Catch output to a string for instance.

the sql string is just a prebuilt LDAP query - 


is a fairly average one that returns about 35 entries via the asp page.

I'm only looking to do read queries - no updates from this at all. Since you ask, this is the content of the .vb file:


Imports System.DirectoryServices

Partial Class phoneSearchResultADS
    Inherits System.Web.UI.Page
    Dim strusername As String, struserfname As String
    Dim strusersname As String, strddp As String
    Dim strPhone As String, intuserid As Integer
    Dim strfrom As String
    Dim sql As String, arrusername As Array
    Dim optname As String, strFirstName As String, strSurName As String
    Dim intsearchwg As String, searchwg As String, strFilterNameOn As String
    Dim strFilterOn As String, strFilterOff As String, strquote As String
    Dim concatflag As Boolean, search_quote As String

    Public Sub Page_load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        If strusername & struserfname & strusersname & strddp & strPhone = "" Then Response.Redirect("phonebook/phonesearchADS.asp")

    End Sub
    Public Sub GetQueryVariables()
        If Request.ServerVariables("request_method") = "GET" Then
            strusername = Trim(Request.QueryString("strusername"))
            intuserid = Request.QueryString("intuserid")
            struserfname = Trim(Request.QueryString("struserfname"))
            strusersname = Trim(Request.QueryString("strusersname"))
            strddp = Trim(Request.QueryString("strddp"))
            strphone = Trim(Request.QueryString("strphone"))
            strfrom = Request.Form("from")
            Trace.Write("strFrom[" & strfrom & "]")
            strusername = Trim(Request.Form("strusername"))
            strusername = Replace(strusername, "'", "''")
            If strfrom <> "ff" Then
                struserfname = Trim(Request.Form("struserfname"))
                struserfname = Replace(struserfname, "'", "''")
                strusersname = Trim(Request.Form("strusersname"))
                Trace.Write("strusersname[" & strusersname & "]")
                strusersname = Replace(strusersname, "'", "''")
                intuserid = Int(Request.Form("intuserid"))
                strddp = Trim(Request.Form("strddp"))
                strPhone = Trim(Request.Form("strphone"))
                intuserid = 0
                strusername = Replace(Trim(Request.Form("strusername")), "'", "''")
            End If
        End If
    End Sub
    Public Sub PrepareQuery()
        sql = "<LDAP://,OU=CYC,DC=xxx,DC=xxx,DC=uk>;(&(objectCategory=person)(objectClass=user)"
        If strfrom = "ff" And InStr(strusername, " ") > 0 Then
            arrusername = Split(strusername, " ", -1, 1)
            struserfname = arrusername(0)
            strusersname = arrusername(1)
            If UBound(arrusername) > 1 Then
                For x = 2 To UBound(arrusername)
                    strusersname = strusersname & " " & arrusername(x)
            End If
        ElseIf strfrom = "ff" And InStr(strusername, " ") = 0 Then
            struserfname = ""
            strusersname = strusername
        End If
        If (struserfname > "" And strusersname > "") Or strfrom = "ff" Then ' can assume full name
            optname = "a"
            Trace.Write("strUserfName[" & struserfname & "]")
            'arrSearchString = Split(strUsersName," ",-1)
            If InStr(strusersname, " ") > 0 Then ' assume double surname

                strFirstName = RTrim(struserfname)
                'for x = 1 to ubound(arrSearchString)
                '    strSurName = arrSearchString(x)&" "
                Dim strSurName As String = RTrim(strusersname)
                Dim strFirstName As String = RTrim(struserfname)
                Dim strSurName As String = RTrim(strusersname)
            End If
        ElseIf RTrim(struserfname) = "" Then 'can assume surname
            optname = "s"
            strFirstName = ""
            strSurName = RTrim(strusersname)
        Else        ' assume first name
            optname = "f"
            strSurName = ""
            strFirstName = RTrim(struserfname)

        End If
        intsearchwg = 0
        If searchwg = "yes" Then intsearchwg = 1
        strddp = Replace(strddp, "'", "''")
        strFilterNameOn = "like '"
        strFilterOn = "like '%"
        strFilterOff = "%' "
        strQuote = " like "
        concatflag = False
        search_quote = ""
        If strFirstName > "" Then
            sql = sql & "(givenname=" & strFirstName & "*)"
            search_quote = "<span style = ""color:#4682B4;"">First Name</span> " & strquote & " " & strFirstName
            concatflag = True
        End If
        If strSurName > "" Then
            sql = sql & "(sn=" & strSurName & "*)"
            search_quote = search_quote & "<span style = ""color:#4682B4;"">Surname</span> " & strquote & " " & strSurName
            concatflag = True
        End If
        If strddp > "" Then
            sql = sql & "(|(company=" & strddp & "*)(department=" & strddp & "*)(Title=" & strddp & "*))"
            search_quote = search_quote & "<span style = ""color:#4682B4;"">dept/wgp/job</span> " & strquote & " " & strddp
            concatflag = True
        End If
        If strPhone > "" Then
            sql = sql & "(telephoneNumber=" & strPhone & "*)"
            'response.write("<!-- strphonecol[" & strPhoneCol & "]strFilterOn[" & strFilterOn & "]strddp[" & strddp & "]strFilterOff[" & strFilterOff & "] -->" & vblf)
            search_quote = search_quote & "<span style = ""color:#4682B4;"">phone number</span> " & strquote & " " & strPhone
        End If
        sql = sql & ");sn,givenname,telephoneNumber,mail,department,title,displayname,company"
        '    Return
    End Sub

    Public Function GetPhoneList(ByVal sql As String) As Hashtable

        'To retrieve list of all  LDAP users
        Trace.Write("Query string " & sql)

        'This function returns HashTable

        '_ldapServerName = ldapServerName

        'Dim sServerName As String = "mail"
        On Error Resume Next
        Dim oRoot As DirectoryEntry = New DirectoryEntry(sql)
        If Err.Number <> 0 Then Trace.Write("139 " & Err.Description)
        oRoot.Username = "xxx\xxx"
        If Err.Number <> 0 Then Trace.Write("142 " & Err.Description)
        oRoot.Password = "xxx"
        If Err.Number <> 0 Then Trace.Write("144 " & Err.Description)
        'On Error Resume Next
        oRoot.AuthenticationType = AuthenticationTypes.Secure
        If Err.Number <> 0 Then Trace.Write("146 " & Err.Description)
        Dim oSearcher As DirectorySearcher = New DirectorySearcher(oRoot)
        If Err.Number <> 0 Then Trace.Write("147 " & Err.Description)

        Dim oResults As SearchResultCollection
        If Err.Number <> 0 Then Trace.Write("151 " & Err.Description)
        Dim oResult As SearchResult
        'Dim RetArray As New Hashtable()
        '        Try

        ' On Error Resume Next
        oResults = oSearcher.FindAll
        If Err.Number <> 0 Then Trace.Write("160 " & Err.Description)
        'Catch comEx As System.Runtime.InteropServices.COMException
        'Catch invOpEx As InvalidOperationException
        ' Catch notSuppEx As NotSupportedException

        'Catch e As Exception

        'Trace.Write("Error 163 " & e.Message)

        ' Return RetArray

        ' End Try
        'For Each oResult In oResults
        '    Trace.Write("output " & oResult.GetDirectoryEntry().Properties("sn").Value)
        '    'If Not oResult.GetDirectoryEntry().Properties("cn").Value = "" Then
        '    'RetArray.Add(oResult.GetDirectoryEntry().Properties("uid").Value, oResult.GetDirectoryEntry().Properties("cn").Value)
        '    'End If

        'Return RetArray
        ' End Try
    End Function
End Class

8/28/2008 9:28:28 AM

 I switched nack to using the try catch way, after realising that .tostring sorts out the error message!


this is what I get back

 Query string <LDAP://,OU=CYC,DC=york,DC=gov,DC=uk>;(&(objectCategory=person)(objectClass=user)(sn=ba*));sn,givenname,telephoneNumber,mail,department,title,displayname,company    0.669713051859671    0.367406
    159 System.Runtime.InteropServices.COMException (0x80005000): Unknown error (0x80005000)
  at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
  at System.DirectoryServices.DirectoryEntry.Bind()
  at System.DirectoryServices.DirectoryEntry.get_AdsObject()
  at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
  at System.DirectoryServices.DirectorySearcher.FindAll()
  at phoneSearchResultADS.GetPhoneList(String sql)


error is from Catch comEx As System.Runtime.InteropServices.COMException


for clarity, this query would expect to return 30 + records.

8/29/2008 11:15:38 AM

I'm guessing, given that you've called it 'sql' that the string was used in an ADO query in your ASP site, is that right?

Things are a bit different in .NET.

DirectoryEntry returns a single object representing an object in the directory, e.g. a user account or a group account, or an organizationalUnit.

DirectorySearcher is used to find one or more objects and returns a collection of SearchResults (which are like read-only DirectoryEnty objects but with slightly different syntax).

You can create a DirectoryEntry and use it as the root of your search, to narrow the search down to a particular set of OUs.  Since it looks like that's what you need to do, I'll do that in my code. 

Now, since I don't know what your domain is called, I'm going to use the RootDSE object to get hold of the defaultNamingContext, which is the name of the domain that the computer is in, in distinguishedName format.  You can remove this bit and hard-code it, if you like.

Then i'm going to use that to build the DirectoryEntry for your searchRoot. You'll see that I haven't specified the computer name, partly because mine isn't called that but mainly because you don't need to - AD will sort it out for you.  If you have a reason to, you can add it in exactly the same way you did in your ASP search string.

Then I'm going to build the search object and return a collection of objects for processing.  I've used a shorter filter than yours but you can put anything here.  At the end of your searchFilter, I'm guessing, is the list of attributed to return.  You don't need this in .NET, as by default all non-constructed attributes are returned.  However, you can specify it using PropertiesToLoad(), so I have.  By default, AD will only return the first 1000 objects but if you specify a PageSize (up to 1000) AD will return > 1000 objects in 'pages' of whatever size you specify.

Once I have a SearchResultCollection, I'm going to iterate through it and write some values to the screen.  I'll test to make sure they exist before I attempt to write them to avoid NullReferenceExceptions.  The Properites property on the SearchResult is a Name-Value type of collection, so you use the property name as an index to retrieve the property value.  E.g. "displayName" might be an index.  The type of the property value is ResultPropertyValueCollection, even for attributes which can only ever have one value a collection is returned.  This means you need to index the first value, for single-valued attributes, hence the (0) in sr.Properties("displayName")(0).  It makes my brain ache, too.  As an aid, I've also show how to interate over the results of a multi-valued attribute like 'otherTelephone' which can have > 1 value.

You can use SearchResult.GetDirectoryEntry() but this will slow down your return by quite a bit.  The syntax is slightly easier but it's not worth if it, if you want a responsive app and you're only doing reads.

I don't go in for Hungarian naming or any of the similar conventions, since Visual Studio will always tell you what an object is, so you'll have to put up with my naming.

The Using statements avoid me having to remember to call the Close() or Dispose() methods to tidy up the objects - I recommend using them (pardon the pun).

So, you probably want something like this as the core of your GetPhoneList code:

        Dim defaultNamingContext As String
        Using rootDSE As DirectoryEntry = New DirectoryEntry("LDAP://RootDSE")
            defaultNamingContext = rootDSE.Properties("defaultNamingContext").Value.ToString()
        End Using
        Response.Write("defaultNamingContext = " + defaultNamingContext)

        Using searchRoot As DirectoryEntry = New DirectoryEntry("LDAP://OU=Users,OU=CYC," + defaultNamingContext)
            Using ds As DirectorySearcher = New DirectorySearcher()
                ds.SearchRoot = searchRoot
                ds.SearchScope = SearchScope.Subtree
                ds.Filter = "(&(objectCategory=person)(objectClass=user))"
                ds.PropertiesToLoad.AddRange(New String() {"sn", "givenname", "telephoneNumber", "mail", "department", "title", "displayname", "company", "otherTelephone"})
                ds.PageSize = 1000

                Using src As SearchResultCollection = ds.FindAll()
                    For Each sr As SearchResult In src
                        If sr.Properties("displayName").Count > 0 Then
                            Response.Write("<BR />DisplayName = " + sr.Properties("displayName")(0).ToString())
                        End If
                        If sr.Properties("telephoneNumber").Count > 0 Then
                            Response.Write("<BR />&nbsp;&nbsp;telephoneNumber = " + sr.Properties("telephoneNumber")(0).ToString())
                        End If
                        If sr.Properties("otherTelephone").Count > 0 Then
                            For Each otherTel As Object In sr.Properties("otherTelephone")
                                Response.Write("<BR />&nbsp;&nbsp;&nbsp;&nbsp;otherTelephone = " + otherTel.ToString())
                        End If
                End Using
            End Using
        End Using

Good luck!  Let us know how you get on.


8/30/2008 2:43:29 PM

 Exception Details: System.DirectoryServices.DirectoryServicesCOMException: The specified domain either does not exist or could not be contacted.


defaultNamingContext = rootDSE.Properties("defaultNamingContext").Value.ToString()


fixed that when I realised what you ment about the rootDSE!

Oh, the joys of learning it all again!


Anyhow, many thanks, it now gives me back the list of names I was expecting

9/1/2008 9:44:05 AM

 Oh, a heads-up for anyone else who's just tried to add the

ds.sort.propertyname = "xxx"

ds.sort.direction = sortdirection.ascending


LDAP is as badly behaved as ever for giving you useless error messages. 

If you try and sort a field that you have not already added for the scope of the query, it forces an error further down that makes exactly no sense!

9/1/2008 1:38:32 PM
Your domain admins would probably prefer that you did the sort locally, anyway - they're not usually happy about tying up DC resources like that.
9/1/2008 1:45:23 PM

Similar Artilces:

------_=_NextPart_001_01C6429F.D89AA417 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello, Net::LDAP Net::LDAPS Is there a possible to LDAP bind with an encrypted (SHA, SSHA, CRYPT, ....) password? I don't like to write the secret password to the perl file. Best regards Barbara Wilbert ------_=_NextPart_001_01C6429F.D89AA417-- Wilbert Barbara (CI/OSI) * wrote: > Hello, > > Net::LDAP > Net::LDAPS > > Is there a possible to LDAP bind with an encrypted (SHA, SSHA, CRYPT, > ......

Is it possible to convert .do net 2 back to .net 1?
I have this application that runs fine on my pc, in which I run VS.Net 2005. When installed on a server with .Net Beta 2 a run time error referring to the line <configuration xmlns="">in the web config file comes up. The server does not recognise that line of code, it seems to be still using .NET 1.Any ideas on how to fix that problem without installing VS.NET 2005 on the server?ThanksRaquel Install the .NET 2 beta 2 runtime on the server (if you can), then go into IIS  Manager and you should have a  ASP.NET  tab, w...

Differences between .net 1, .net 1.1, .net 2.0 and .net 3.0 #2
Hi, This seems to be a common question, but i havent got an answer yet:(Can, any one please explain me the differences between these versions.If you keep your feet firmly on the ground, you'll have trouble putting on your pants! There are too many differences for one email - - from 1.0 to 1.1 (not a whole lot of real change, other than fixes, at least compared to 1.1 to 2.0) With 2.0, there were many new declarative controls, with many new ideas added in With 3.0, it's a superset of 2.0 - instead of replacing the installation completely, it just 'added on' new functionality - I would...

How to convert C#.Net code to VB.Net code ???...
HI, i was searching something new, then i suddenly find some tips to convert C#.Net code to VB.Net but i did not do well. i am puttint its url here plz tell me how to convert C#.Net code to VB.Net. Jasim...Please remember to click “Mark as Answer” on the post that helps youJasim AkhtarNew Delhi ( INDIA ) It would be better if you write the problem you having, while converting from C# to VB.NET. You cannot completely rely on online converters. ThanksMark post(s) as "Answer" that helped youElectronic ScrewWebsite||Bl...

LDAP Authentication .Net 1.0 code to .Net 2.0
A few years ago with help of Dunry (I think he wrote most of the LDAP part) we came up with the below C# that works in our environment. We now need to migrate this to .Net 2.0.Does anyone have any examples of something simliar that works in .Net 2.0? Thanks in advance.private void btnSubmit_Click(object sender, System.EventArgs e)  {   if(Page.IsValid)   {    SearchDirectoryUsername(txtUsername.Text);   }  }  private void SearchDirectoryUsername(string username)  {   using ...

used a to converter and am now getting a syntax error.
ok I used a cool utility at to convert some to and it spit out a bunch of code which almost works but I am getting a syntax error on this line Imports (StreamReader sr = Shadows Function)() As StreamReader(objResponse.GetResponseStream()) I tried it that way and also like Imports (StreamReader sr = Shadows Function)() As StreamReader(objResponse.GetResponseStream()) but either way gave the same error Compiler Error Message: BC30035: Syntax error. Source Error: Line 26: Line ...

converting to from offered me some sample code when I signed up with them the only problem is the sample code is in but my page that they type all of their credit card into is <code><%@ Import Namespace="System.Net" %> <%@ Import Namespace="System.IO" %> <script language="C#" runat="server"> void Page_Load(Object Src, EventArgs E) { myPage.Text = readHtmlPage(""); } private String readHtmlPage(string url) { ...

Differences between .net 1, .net 1.1, .net 2.0 and .net 3.0
Hi, This seems to be a common question, but i havent got an answer yet:(Can, any one please explain me the differences between these versions.If you keep your feet firmly on the ground, you'll have trouble putting on your pants! Have a look into this links Rajawww.iGold.inDon't forget to click "Mark as Answer" on the post that helped you. This credits that m...

.net 3.5 convert to .net 2?
 how can i convert in Web Developer 2008 .net framework 3.5   to .net 2 ? KAHREDEN HAREKET ENGELLENNEMEZ  Hi,If you have not used any .NET 3.5 controls, you simply need to remove all references to .NET 3.5 within the web.config. I hope this helps, if it answers your question, don't forget to mark it as such for those who come afterwards.Regards,Gareth ChidgeyManaging DirectorPushInternet Ltd  can i create new web site in web developer 2008 at .net framework 2  .    KAHREDEN HAREKET ENGELLENNEMEZ  try this http://we...

Net::LDAP and Net:LDAP::LDIF read & add problems #2
I'm trying to read in a simple LDIF file to add an entry to my LDAP server. Here is the basic routine (extraneous details omitted for brevity and security): $ldif = Net::LDAP::LDIF->new($tmp,"r",onerror => 'warn'); $entry = $ldif->ready_entry(); $ldap = Net::LDAP->new($LDAPSERVER); $result=$ldap->bind("$binddn",password=>"$bindpass",version=>"3"); $result=$ldap->add($entry); Now, everything seems to work until I get to the $ldap->add method. From that I get various versions of the following: obj...

Fw: Re: make Net::LDAP::LDIF more similar to Net::LDAP #2
Hi, Am 09.06.2004 um 01:44 Uhr haben Sie geschrieben: > Extending Net::LDAP::Entry to update against LDIF and LDAP objects > could allow the changetype modifications to be to produced. > > This would be really useful to produce changetypes for entry objects by > updating against an LDIF object to produce the changetype LDIF required > up to synchronise entry objects. as Graham posted you can to that already now. Simply create your Net::LDAP::Entry object with the changes option set to TRUE. Having created the ::LDIF object that way you autom...

use VB.NET and C#.NET code in the same C#.NET project
All-- Here is a sample that is "off the beaten path", (at least for me). Is it possible, in an ASP.NET application, using the code-behind page building technique, to have both pages written in VB.NET and pages written C#.NET?At there is a sample that shows that, (contrary to popular belief), it IS possible to mix ASP.NET pages built with C#.NET with ASP.NET pages built with VB.NET in the same VS.NET 2003 project. Note that this is just a "fun" sample to see if it can be done and I do not recommend this practice as a "standard" way of develo...

Net::LDAPS and Net::SSLeay
------_=_NextPart_001_01C3EF1A.51A96530 Content-Type: text/plain Hello all: I am trying to use Net::LDAPS within a perl program in order to establish a secure socket connection with my ldap server. My program works fine if i use the bind function from Net::LDAP module. However, when I changed my source code to use the bind function from Net::LDAPS, my program failed because it complained about the need for IO::Socket::SSL module. Then, when i started to run make for IO::Socket::SSL, it complained about the need for Net::SSLeay. The compilation for Net::SSLeay versio...

Net::LDAP, Active Directory and Disabled Users #2
I've been trying to write a simple perl script that will query the active directory via LDAP and give me a list of email addresses for disabled users (eg, addresses we don't want to accept email for anymore). I found a website or two that suggested I use the following as my filter: (&(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=2)) I was begining to think these websites were wrong as whenever I tried this filter, I'd go no results. With other filters, I'd get the results I'd expect to get. I then tried that filter in a couple other appli...

Web resources about - Converting classic to .NET 2 code, and .NET gets an error back from ADS? -

PastBook’s Integration Eases Process Of Converting Facebook Content To Books
PastBook , one of several companies that allow Facebook users to publish their content on the social network in actual books , announced the ...

Facebook No Longer Converting Groups Into Pages
Back when Facebook first launched Facebook Pages, many businesses and brands who had built up substantial audiences in their Facebook Groups ...

Zwartz Laminating-Converting B.V. on the App Store on iTunes
Get Zwartz Laminating-Converting B.V. on the App Store. See screenshots and ratings, and read customer reviews.

"Occupier" Thanked Former Soviet Citizen for "Converting" Him to Capitalism, Pro-Israel, Pro-USA - YouTube ...
May Day Demonstration on Union Square in New York City Zionism & Birth of Modern Israel in 1948: Former Soviet Citizen Pays Tribute to Ben-Gurion ...

Click go fears of converting print files
Is there a way to convert a print queue item to a .RTF or .PDF file? I like to save or email them. - The Sydney Morning Herald

Sudanese woman ordered to hang under sharia law for converting to Christianity gives birth
Khartoum, Sudan: A Christian Sudanese woman sentenced to hang for apostasy has given birth in jail, a Western diplomat said on Tuesday.

Imams warn against radicalism to Aboriginal inmates converting to Islam
The prison system has enlisted the help of ASIO to crack down on radicalisation behind bars amid revelations that Aboriginals are converting ...

Converting the world's companies one by one - The Science Show - ABC Radio National (Australian Broadcasting ...
Image: Trucks carrying logs make their way up a road in Jambi, Indonesia. A vast area of the Sumatran forest, and orangutan habitat, is being ...

Converting Churches Into Homes Is The Latest Hollywood Trend
You don't have to be a believer to be moved by the beauty of a church.

Resources last updated: 12/3/2015 7:52:53 PM