[Tutor] returning to my memberlister script

Kirk Bailey idiot1@netzero.net
Thu, 29 Aug 2002 00:39:52 -0400


Well, I have been busy, but finally got to return to my memberlister script.


It gets this result in the www.errorlog:
SyntaxError: invalid syntax
[Thu Aug 29 00:26:38 2002] [error] [client 63.208.207.252] Premature end of script headers: /www/www.tinylist.org/cgi-bin/TLmemberlister.py
Traceback (innermost last):
  File "/www/www.tinylist.org/cgi-bin/TLmemberlister.py", line 126, in ?
    print 'listname='+mylist+'<P>'
TypeError: __add__ nor __radd__ defined for these operands

Here is the script ( I will omit the text headers):
login as: howlermo
Sent username "howlermo"
howlermo@howlermonkey.net's password:
Last login: Wed Aug 28 00:04:44 2002 from dialup-65.59.82.
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

FreeBSD 3.4-RELEASE (HOWLER) #0: Thu Jun 21 22:13:44 EDT 2001

                        Welcome to the Monkey!
                Please, enjoy your stay... now get to work!

You have new mail.
$ /www/www.howlermonkey.net
/www/www.howlermonkey.net: permission denied
$ ls TL*.*
ls: TL*.*: No such file or directory
$ ls TL*.*
ls: TL*.*: No such file or directory
$ pwd
/usr/home/howlermo
$ cd /www/www.howlermonkey.net
   UW PICO(tm) 3.7             File: testlist3.owner
   UW PICO(tm) 3.7            File: TLmemberlister.py

   UW PICO(tm) 3.7            File: TLmemberlister.py                Modified

print '<!--  A { text-decoration: none; }  A:visited, A:hover, A:active  text-d$
print '</STYLE>'
   UW PICO(tm) 3.7          File: TLmembershiplister.py




   UW PICO(tm) 3.7            File: TLmemberlister.py

        print "Key 'owner' not found!"          #120
if not (form.has_key("password")):
        print "key 'password' not found!"
if not (form.has_key("listname")):
        print "key 'listname' not found!"
mylist = form["listname"]                       # listname,
print 'listname='+mylist+'<P>'
myowner = form["Owner"]                         # owner,
print 'owner='+myowner+'<P>'
mypassword = form["password"]                   # and password.
print 'password='+mypassword+'<P>'              #130
f1=open('/lists/' + listname + '.owner','r')    # read the (listname).owner fil$
trueowner=string.srip(f1.readline())            # read the owner id
trueword=string.strip(f1.readline())            # read THE PASSWORD
f1.close()                                      # Close the file.
if myowner == trueowner :                       # if the owner matches up, test$
        if mypassword==trueword:                        # if the password also $
                f1=open('/lists/'+ mylist,'r') #proceed to access the member ro$
                members=f1.readlines()            # read them in,
                              [ Wrote 151 lines ]

ns# list TLmemberlister.py
Listing of file TLmemberlister.py in directory:/www/www.tinylist.org/cgi-bin

#!/usr/local/bin/python
#
# This is TLmemberviewer V:1.3.0 COPYRIGHT 2002 by Kirk D Bailey
#
# It is part of the TinyList MLM suite, released under the GNU GPL.
# which suite is also COPYRIGHT 2002 by Kirk D Bailey.
# Please referr to enclosed GNU license in a seperate file.
#
# Being modular makes for MORE CHOICES AVAILABLE TO YOU!
#10#############################################################################
###
#           Python can be studied and aquired at http://www.python.org/ !!!
#########1#########2#########3#########4#########5#########6#########7#########8
# that line is 80 char across, try to stay within it if you can.
#
# ADMIN AND LEGAL STUFF:
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#20
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
# You should have received a copy of the GNU General Public License
#30 along with this program; if not, write to:
#
#    Free Software Foundation, Inc.
#    59 Temple Place - Suite 330
#    Boston, MA  02111-1307 USA.
#
# and request one; be cool and include a business sized SASE.
#
# Also, the GNU GPL may be viewed online at
# http://www.gnu.org/licenses/gpl.html
#40############################################################################
#
# "The tyrant's foe, the people's friend, a free press." -Dr Benjamin Franklin.
#
# Think about that last line- this software is your Ezine engine.
###############################################################################
#
#  OWNERSHIP AND PERMISSION ISSUES
#  make sure this script runs as a TRUSTED USER-
#  and NOT as root!!! You set that up in the Sendmail Config file (sendmail.cf).
#50  Make sure that a NON-priviliged user OWNS
#  this script, and that it runs as that identity!
#  Generally, this is accomplished by making sure it is owned by that user.
#  Permission on all scripts must be 755, files as 666, and listdir as 744.
#  The image files must NOT be placed in the cgi-bin, but in the web directory!
###############################################################################
#
#  SPAM
#  Spam SUCKS. It also ROBS everyone it touches, each system it passes through.
#  Fight spam. DO NOT host open lists all the world may post to.
#60  TinyList CANNOT do so as written, PLEASE do not defeat this.
#
###############################################################################
#
#
import os, sys, string, cgi     # MUST be invoked!
#
#           CONFIGURATION SECTION
#           =====================
#number in the next line is a line number to help locate sections of code.
#70
# NOTE that this script is SUPPOSED to be installed in the web cgi-bin!
# and the lists dir is immediately under this dir!
#
# ok, where am I? I just woke up!
fullpathtoscript = os.path.split(os.path.abspath(sys.argv[0]))
#
# ok, now my config file is supposed to be RIGHT HERE with me!
# So let's read the thing!
f1=open("tinylist.cf",'r')
#80
# Tell me little file, who am I?
webdomain=string.strip(f1.readline())
f1.close()
#
# knowing where I am, I know that my lists are ONE FLOOR DOWN!
path=fullpathtoscript[0]
# ALL TinyList scripts MUST live in the web cgi-bin, and
# ALL global and list files are directly off the web cgi-bin dir in '/lists'.
# that dir should be owned by the same owner and group as this script, and
#90 should be chmod 766. DIR 'list' must be 766, with all Scripts 755.
#
#
#
#
#
#
#
#
# data arrives as 'QUERY_STRING'=(listname value) using
#100 the GET method, but cgi module handles this nicely,
# parsing it out into keywords and vlaues in a dictionary!
#
#
#
print "Content-type: text/html\n\n"             # HTML is following
print '<html><head>'
print '<META HTTP-EQUIV="Pragma" CONTENT="no-cache">'
print '<TITLE>TinyList membership listing Utility.</TITLE>'
print '<STYLE TYPE="text/css">'
#110
print '<!--  A { text-decoration: none; }  A:visited, A:hover, A:active  text-de
coration:none; } // -->'
print '</STYLE>'
print "</head>"
print '<body bgcolor="FFFFFF" text="000000" ><blockquote>'
print '<P><br><font color="FF0000"><font  size="5"><font face="Century Gothic Li
ght">&nbsp;&nbsp;TinyList</font></font></font><p>'
print '<hr width=50%><P>'
#
form=cgi.FieldStorage()                         # recover the form's data,
if not (form.has_key("Owner")):
        print "Key 'owner' not found!"          #120
if not (form.has_key("password")):
        print "key 'password' not found!"
if not (form.has_key("listname")):
        print "key 'listname' not found!"
mylist = form["listname"]                       # listname,
print 'listname='+mylist+'<P>'                  #
myowner = form["Owner"]                         # owner,
print 'owner='+myowner+'<P>'                    #
mypassword = form["password"]                   # and password.
print 'password='+mypassword+'<P>'              #130
f1=open('/lists/' + listname + '.owner','r')    # read the (listname).owner file,
trueowner=string.srip(f1.readline())            # read the owner id
trueword=string.strip(f1.readline())            # read THE PASSWORD
f1.close()                                      # Close the file.
if myowner == trueowner :                       # if the owner matches up, test the password;
        if mypassword==trueword:                # if the password also matches,
                f1=open('/lists/'+ mylist,'r') #proceed to access the member roster.
                members=f1.readlines()          # read them in,
                f1.close                        # and close the file.
                for i in members:               #130
                        print i + '<br>'
        else:
                print 'Sorry, wrong password.'
else:
        print 'Sorry, wrong owner id.'
#
print '<P><hr width=50%></body></html>'                 # close the page, and end.
#
#
#140
#

ns#

Note I am using 1.5.2 python, and an upgrade is not practical at this time.

I invite suggestions, advice, evil humor, and dead parrot sketch sequals.

-- 

end

Respectfully,
             Kirk D Bailey


+---------------------"Thou Art Free." -Eris-----------------------+
| http://www.howlermonkey.net  mailto:highprimate@howlermonkey.net |
| KILL spam dead!      http://www.scambusters.org/stopspam/#Pledge |
| http://www.tinylist.org  +--------+   mailto:grumpy@tinylist.org |
+------------------Thinking| NORMAL |Thinking----------------------+
                           +--------+
-------------------------------------------
Introducing NetZero Long Distance
Unlimited Long Distance only $29.95/ month!
Sign Up Today! www.netzerolongdistance.com