Exporting Plone 2.5 Member Password Hashes from GRUF

Those with no idea what the subject line means can safely ignore this post. For the merely curious, this relates to my responsibility to manage a Plone-based web site for the body of churches to which I belong. For other webmasters and Plone folk, this is a tidbit I had to search quite a bit to find, which will allow me to export my user records from Plone 2.5’s GRUF (Group User Folder) system for import into another system, without losing their ability to log in with current passwords. I plan to import my users into Plone 3+.

The recipes available at plone.org were little help, as the getPassword() and _getPassword() methods seem to have been rendered inert by Plone 2.5, probably in an attempt to tighten security. But I finally managed to find this blog post about exporting member hashes from Plone 3, and was able to confirm that the essentials also work in Plone 2.5. (By the way, you can’t export the original passwords, because they are not stored on the system. Only the cryptographic hash is stored, which can be compared at login time to a hash generated from the password provided by the user.)

If you find that you want to extract your users’ password hashes, then this is what you need to do within an External Method.

acl_users = getToolByName(self, 'acl_users')
passwords = acl_users.source_users._user_passwords

Then you can use a user id as an index into passwords to find the corresponding hash. If you need help obtaining the user ids…

mtool = getToolByName(self, 'portal_membership')
for member in mtool.listMembers():
    pwhash = (passwords[member.getId()])

The Apology of the Augsburg Confession, Article XV, paragraph 51

OK, OK! I’ll post it now!

While I was at synod convention, I was happily able to maintain my daily readings in the Lutheran Confessions by using the pocket edition of the new Concordia: The Lutheran Confessions. I made a note to myself that I should post this paragraph from the Apology, because of its relevance to our growing synodical discussion about liturgy and “contemporary worship.”

Sitting at my desktop computer at home, I just consulted my lists of things to do, and found that note. Below it, I found a note to check out www.intrepidlutherans.com, though I don’t remember who mentioned it at convention. Always looking for the easier task, I fired up the web browser and typed in the address. What I saw there was part 6 of a series of blog posts excerpted from an essay by one of my more profoundly influential college professors, Daniel Deutschlander. The essay is on “The Western Rite,” which, for the uninitated, is the collection of liturgies customarily used by our churches.

I couldn’t resist. I meant to wait until I could print it out and read it on paper, but I started reading the full PDF version of that paper. What a weak fool I am. But at the bottom of the first page was a quotation from the Lutheran Confessions, which Deutschlander urges upon those who might like to chuck the Western Rite in favor of something of their own devising. Have you guessed it? Yes, it’s the Apology, Article XV, paragraph 51.

So having been amused by that long-winded introduction (that’s me, not necessarily you), I’ll urge you all the more to consider these words carefully. They are a part of what every Lutheran, by virtue of claiming that name, confesses to be true. Here’s the way it’s written in Concordia: The Lutheran Confessions.

Still, we teach that freedom should be so controlled that the inexperienced may not be offended and, because of freedom’s abuse [Romans 14: 13-23], may not become more opposed to the true doctrine of the Gospel. Nothing in customary rites should be changed without a reasonable cause. So to nurture unity, old customs that can be kept without sin or great inconvenience should be kept. 52 In this very assembly we have shown well enough that for love’s sake we do not refuse to keep adiaphora with others, even though they may be burdensome. We have judged that such public unity, which could indeed be produced without offending consciences, should be preferred.

It’s admittedly subjective to judge what is a “great inconvenience.” If you have anything to write on the matter, please do so.

Some Practical Observations in the Apology

This refers to Matthew 19:29:

Christ does not mean that leaving parents, wife, and siblings is a work that must be done because it merits the forgiveness of sins and eternal life. Indeed, such leaving is cursed. Anyone who leaves parents or wife to merit the forgiveness of sins or eternal life by this work dishonors Christ.

There are two kinds of leaving. One happens without a call, without God’s command, which Christ does not approve (Matthew 15:9). The works we choose are useless services. When Christ speaks about leaving wife and children, it becomes clear that He does not approve this kind of leaving. We know that God’s commandment forbids leaving wife and children. God’s command to leave is different, that is, when power or tyranny pushes us either to leave or to deny the Gospel. Here we are commanded to bear injury and should rather allow not only wealth, wife, and children, but life to be taken from us. Christ approves of this kind of leaving, and so He adds for the Gospel’s “sake.” He does so to illustrate that He is speaking not of those who injure wife and children, but who bear injury because of the confession of the Gospel.

(Apology Article XXVII, par. 40–41 — Concordia p. 243-244)

Doesn’t that call to mind the line from the older, TLH translation of A Mighty Fortress?

Also this (especially for Mary’s consideration, given her interest in past comments):

The division, control, and possession of property are civil ordinances, approved by God’s Word in the commandment “You shall not steal” (Exodus 20:15).

(Apology XXVII, par. 46, same page)

Notice the way this translation is worded here to relate these things to the seventh commandment, especially the word “approved.” Previously I’ve written something like “implied by.”